git.lucas.co / hou-control
git clone https://git.lucas.co/hou-control.git

commitf3872bf3fe36d05bd4713996ee8e99a54d302565
authorlsgalante <lsgalante12@gmail.com>
date2025-12-09 13:03
first commit

 .DS_Store                                          | Bin 0 -> 10244 bytes
 MainMenuCommon.xml                                 | 120 +++
 OPmenu.xml                                         |   7 +
 PARMmenu.xmlx                                      |  41 +
 ParmGearMenu.xml                                   |   8 +
 config/3DSceneColors.dark                          | 227 ++++++
 config/3DSceneColors.dark.original                 | 189 +++++
 config/NodeGraphDark.inc                           | 330 ++++++++
 config/UIDark.hcs                                  | 889 +++++++++++++++++++++
 config/UIDark_unused.inc                           | 266 ++++++
 config/hc_colors.inc                               |  83 ++
 desktop/Build copy.desk                            |  59 ++
 desktop/hc_desktop.desk                            |  52 ++
 .../nodes/sop/shapeshifter_scalar_analysis-1.0.txt |  44 +
 .../sop/shapeshifter_scalar_concentrate-1.0.txt    |  14 +
 help/nodes/sop/shapeshifter_scalar_map-1.0.txt     |  23 +
 .../sop/shapeshifter_scalar_normalize-1.0.txt      |  16 +
 help/nodes/sop/shapeshifter_vitality-1.0.txt       |  52 ++
 hou-developer guide.txt                            | 367 +++++++++
 hou-developer readme.md                            |   3 +
 hou-gem production_notes.txt                       |  20 +
 hou-gem readme.md                                  |  24 +
 hou-immutable-methods readme.md                    |   4 +
 immutable_methods.json                             |  19 +
 notes/moldtekPartitionViewerState                  |  21 +
 notes/network_editor_setttings_reference           | 148 ++++
 notes/sop_verbs                                    | 345 ++++++++
 ...sop_lsgalante.developer_analysis.1.0_bak1.hdalc | Bin 0 -> 16605 bytes
 ...sop_lsgalante.developer_analysis.1.0_bak2.hdalc | Bin 0 -> 16262 bytes
 ...sop_lsgalante.developer_analysis.1.0_bak3.hdalc | Bin 0 -> 16284 bytes
 ...galante.developer_attribute_clip.1.0_bak1.hdalc | Bin 0 -> 3670 bytes
 ...galante.developer_attribute_clip.1.0_bak2.hdalc | Bin 0 -> 3680 bytes
 ...galante.developer_attribute_clip.1.0_bak3.hdalc | Bin 0 -> 3740 bytes
 ...ante.developer_attribute_combine.1.0_bak1.hdalc | Bin 0 -> 23476 bytes
 ...ante.developer_attribute_combine.1.0_bak2.hdalc | Bin 0 -> 23476 bytes
 ...ante.developer_attribute_combine.1.0_bak3.hdalc | Bin 0 -> 23502 bytes
 ...ante.developer_attribute_combine.1.0_bak4.hdalc | Bin 0 -> 23501 bytes
 ...ante.developer_attribute_combine.1.0_bak5.hdalc | Bin 0 -> 23501 bytes
 ...ante.developer_attribute_combine.1.0_bak6.hdalc | Bin 0 -> 23511 bytes
 ...ante.developer_attribute_combine.1.0_bak7.hdalc | Bin 0 -> 23505 bytes
 ...te.developer_attribute_composite.1.0_bak1.hdalc | Bin 0 -> 17708 bytes
 ...te.developer_attribute_composite.1.0_bak2.hdalc | Bin 0 -> 17718 bytes
 ...te.developer_attribute_composite.1.0_bak3.hdalc | Bin 0 -> 17762 bytes
 ...nte.developer_attribute_constant.1.0_bak1.hdalc | Bin 0 -> 7883 bytes
 ...nte.developer_attribute_constant.1.0_bak2.hdalc | Bin 0 -> 7893 bytes
 ...nte.developer_attribute_constant.1.0_bak3.hdalc | Bin 0 -> 7951 bytes
 ...e.developer_attribute_initialize.1.0_bak1.hdalc | Bin 0 -> 10361 bytes
 ....developer_attribute_initialize.1.0_bak10.hdalc | Bin 0 -> 10441 bytes
 ....developer_attribute_initialize.1.0_bak11.hdalc | Bin 0 -> 10436 bytes
 ....developer_attribute_initialize.1.0_bak12.hdalc | Bin 0 -> 10412 bytes
 ...e.developer_attribute_initialize.1.0_bak2.hdalc | Bin 0 -> 10361 bytes
 ...e.developer_attribute_initialize.1.0_bak3.hdalc | Bin 0 -> 10381 bytes
 ...e.developer_attribute_initialize.1.0_bak4.hdalc | Bin 0 -> 10381 bytes
 ...e.developer_attribute_initialize.1.0_bak5.hdalc | Bin 0 -> 10381 bytes
 ...e.developer_attribute_initialize.1.0_bak6.hdalc | Bin 0 -> 10391 bytes
 ...e.developer_attribute_initialize.1.0_bak7.hdalc | Bin 0 -> 10390 bytes
 ...e.developer_attribute_initialize.1.0_bak8.hdalc | Bin 0 -> 10391 bytes
 ...e.developer_attribute_initialize.1.0_bak9.hdalc | Bin 0 -> 10389 bytes
 ...ante.developer_attribute_promote.1.0_bak1.hdalc | Bin 0 -> 6481 bytes
 ...ante.developer_attribute_promote.1.0_bak2.hdalc | Bin 0 -> 6491 bytes
 ...ante.developer_attribute_promote.1.0_bak3.hdalc | Bin 0 -> 6533 bytes
 ...alante.developer_attribute_remap.1.0_bak1.hdalc | Bin 0 -> 10947 bytes
 ...alante.developer_attribute_remap.1.0_bak2.hdalc | Bin 0 -> 10957 bytes
 ...alante.developer_attribute_remap.1.0_bak3.hdalc | Bin 0 -> 10988 bytes
 .../sop_lsgalante.developer_charge.1.0_bak1.hdalc  | Bin 0 -> 3697 bytes
 .../sop_lsgalante.developer_clip.1.0_bak1.hdalc    | Bin 0 -> 3505 bytes
 .../sop_lsgalante.developer_clip.1.0_bak2.hdalc    | Bin 0 -> 3620 bytes
 .../sop_lsgalante.developer_combine.1.0_bak1.hdalc | Bin 0 -> 23207 bytes
 .../sop_lsgalante.developer_combine.1.0_bak2.hdalc | Bin 0 -> 23425 bytes
 .../sop_lsgalante.developer_combine.1.0_bak3.hdalc | Bin 0 -> 23426 bytes
 ...op_lsgalante.developer_composite.1.0_bak1.hdalc | Bin 0 -> 17466 bytes
 ...op_lsgalante.developer_composite.1.0_bak2.hdalc | Bin 0 -> 17658 bytes
 ..._lsgalante.developer_concentrate.1.0_bak1.hdalc | Bin 0 -> 11161 bytes
 ..._lsgalante.developer_concentrate.1.0_bak2.hdalc | Bin 0 -> 11297 bytes
 ..._lsgalante.developer_concentrate.1.0_bak3.hdalc | Bin 0 -> 11295 bytes
 ...sop_lsgalante.developer_constant.1.0_bak1.hdalc | Bin 0 -> 7568 bytes
 ...sop_lsgalante.developer_constant.1.0_bak2.hdalc | Bin 0 -> 7833 bytes
 .../sop_lsgalante.developer_core.1.0_bak1.hdalc    | Bin 0 -> 3246 bytes
 .../sop_lsgalante.developer_core.1.0_bak2.hdalc    | Bin 0 -> 3246 bytes
 .../sop_lsgalante.developer_core.1.0_bak3.hdalc    | Bin 0 -> 3253 bytes
 .../sop_lsgalante.developer_core.1.0_bak4.hdalc    | Bin 0 -> 3242 bytes
 .../sop_lsgalante.developer_cull.1.0_bak1.hdalc    | Bin 0 -> 6034 bytes
 ...sop_lsgalante.developer_detangle.1.0_bak1.hdalc | Bin 0 -> 5832 bytes
 ...sop_lsgalante.developer_detangle.1.0_bak2.hdalc | Bin 0 -> 5908 bytes
 ...sop_lsgalante.developer_detangle.1.0_bak3.hdalc | Bin 0 -> 5911 bytes
 .../sop_lsgalante.developer_develop.1.0_bak1.hdalc | Bin 0 -> 7239 bytes
 .../sop_lsgalante.developer_develop.1.0_bak2.hdalc | Bin 0 -> 7272 bytes
 .../sop_lsgalante.developer_develop.1.0_bak3.hdalc | Bin 0 -> 7442 bytes
 .../sop_lsgalante.developer_develop.1.0_bak4.hdalc | Bin 0 -> 7459 bytes
 .../sop_lsgalante.developer_develop.1.0_bak5.hdalc | Bin 0 -> 7453 bytes
 .../sop_lsgalante.developer_develop.1.0_bak6.hdalc | Bin 0 -> 7452 bytes
 .../sop_lsgalante.developer_diffuse.1.0_bak1.hdalc | Bin 0 -> 17929 bytes
 .../sop_lsgalante.developer_diffuse.1.1_bak1.hdalc | Bin 0 -> 17929 bytes
 .../sop_lsgalante.developer_diffuse.1.1_bak2.hdalc | Bin 0 -> 17929 bytes
 .../sop_lsgalante.developer_diffuse.1.1_bak3.hdalc | Bin 0 -> 18129 bytes
 .../sop_lsgalante.developer_diffuse.1.1_bak4.hdalc | Bin 0 -> 18729 bytes
 .../sop_lsgalante.developer_direct.1.0_bak1.hdalc  | Bin 0 -> 13018 bytes
 .../sop_lsgalante.developer_direct.1.0_bak10.hdalc | Bin 0 -> 13379 bytes
 .../sop_lsgalante.developer_direct.1.0_bak2.hdalc  | Bin 0 -> 13042 bytes
 .../sop_lsgalante.developer_direct.1.0_bak3.hdalc  | Bin 0 -> 13964 bytes
 .../sop_lsgalante.developer_direct.1.0_bak4.hdalc  | Bin 0 -> 14008 bytes
 .../sop_lsgalante.developer_direct.1.0_bak5.hdalc  | Bin 0 -> 13965 bytes
 .../sop_lsgalante.developer_direct.1.0_bak6.hdalc  | Bin 0 -> 14082 bytes
 .../sop_lsgalante.developer_direct.1.0_bak7.hdalc  | Bin 0 -> 14097 bytes
 .../sop_lsgalante.developer_direct.1.0_bak8.hdalc  | Bin 0 -> 14099 bytes
 .../sop_lsgalante.developer_direct.1.0_bak9.hdalc  | Bin 0 -> 14098 bytes
 .../sop_lsgalante.developer_embryo.1.0_bak1.hdalc  | Bin 0 -> 10943 bytes
 .../sop_lsgalante.developer_embryo.1.0_bak2.hdalc  | Bin 0 -> 11011 bytes
 .../sop_lsgalante.developer_expire.1.0_bak1.hdalc  | Bin 0 -> 3437 bytes
 ..._lsgalante.developer_float_bleed.1.0_bak1.hdalc | Bin 0 -> 3346 bytes
 ..._lsgalante.developer_float_bleed.1.0_bak2.hdalc | Bin 0 -> 3352 bytes
 ..._lsgalante.developer_float_bleed.1.0_bak3.hdalc | Bin 0 -> 3366 bytes
 ..._lsgalante.developer_float_bleed.1.0_bak4.hdalc | Bin 0 -> 3366 bytes
 ..._lsgalante.developer_float_bleed.1.0_bak5.hdalc | Bin 0 -> 3641 bytes
 ..._lsgalante.developer_float_bleed.1.0_bak6.hdalc | Bin 0 -> 3951 bytes
 ..._lsgalante.developer_float_bleed.1.0_bak7.hdalc | Bin 0 -> 3974 bytes
 ..._lsgalante.developer_float_bleed.1.0_bak8.hdalc | Bin 0 -> 3974 bytes
 ...ante.developer_float_concentrate.1.0_bak1.hdalc | Bin 0 -> 11325 bytes
 ...ante.developer_float_concentrate.1.0_bak2.hdalc | Bin 0 -> 11325 bytes
 ...ante.developer_float_concentrate.1.0_bak3.hdalc | Bin 0 -> 11356 bytes
 ...ante.developer_float_concentrate.1.0_bak4.hdalc | Bin 0 -> 11356 bytes
 ...ante.developer_float_concentrate.1.0_bak5.hdalc | Bin 0 -> 11357 bytes
 ...ante.developer_float_concentrate.1.0_bak6.hdalc | Bin 0 -> 11357 bytes
 ...ante.developer_float_concentrate.1.0_bak7.hdalc | Bin 0 -> 11363 bytes
 ...ante.developer_float_concentrate.1.0_bak8.hdalc | Bin 0 -> 11370 bytes
 ...sgalante.developer_float_diffuse.1.1_bak1.hdalc | Bin 0 -> 18759 bytes
 ...sgalante.developer_float_diffuse.1.1_bak2.hdalc | Bin 0 -> 18765 bytes
 ...sgalante.developer_float_diffuse.1.1_bak3.hdalc | Bin 0 -> 18115 bytes
 ...sgalante.developer_float_diffuse.1.1_bak4.hdalc | Bin 0 -> 18116 bytes
 ...lante.developer_float_initialize.1.0_bak1.hdalc | Bin 0 -> 10392 bytes
 ...ante.developer_float_initialize.1.0_bak10.hdalc | Bin 0 -> 10023 bytes
 ...lante.developer_float_initialize.1.0_bak2.hdalc | Bin 0 -> 10392 bytes
 ...lante.developer_float_initialize.1.0_bak3.hdalc | Bin 0 -> 10343 bytes
 ...lante.developer_float_initialize.1.0_bak4.hdalc | Bin 0 -> 10345 bytes
 ...lante.developer_float_initialize.1.0_bak5.hdalc | Bin 0 -> 10345 bytes
 ...lante.developer_float_initialize.1.0_bak6.hdalc | Bin 0 -> 10341 bytes
 ...lante.developer_float_initialize.1.0_bak7.hdalc | Bin 0 -> 10339 bytes
 ...lante.developer_float_initialize.1.0_bak8.hdalc | Bin 0 -> 10338 bytes
 ...lante.developer_float_initialize.1.0_bak9.hdalc | Bin 0 -> 10047 bytes
 ...sgalante.developer_float_migrate.1.1_bak1.hdalc | Bin 0 -> 18576 bytes
 ...galante.developer_float_migrate.1.1_bak10.hdalc | Bin 0 -> 13168 bytes
 ...galante.developer_float_migrate.1.1_bak11.hdalc | Bin 0 -> 13175 bytes
 ...galante.developer_float_migrate.1.1_bak12.hdalc | Bin 0 -> 13126 bytes
 ...galante.developer_float_migrate.1.1_bak13.hdalc | Bin 0 -> 13126 bytes
 ...galante.developer_float_migrate.1.1_bak14.hdalc | Bin 0 -> 13132 bytes
 ...galante.developer_float_migrate.1.1_bak15.hdalc | Bin 0 -> 13133 bytes
 ...sgalante.developer_float_migrate.1.1_bak2.hdalc | Bin 0 -> 18576 bytes
 ...sgalante.developer_float_migrate.1.1_bak3.hdalc | Bin 0 -> 18379 bytes
 ...sgalante.developer_float_migrate.1.1_bak4.hdalc | Bin 0 -> 18378 bytes
 ...sgalante.developer_float_migrate.1.1_bak5.hdalc | Bin 0 -> 18649 bytes
 ...sgalante.developer_float_migrate.1.1_bak6.hdalc | Bin 0 -> 12852 bytes
 ...sgalante.developer_float_migrate.1.1_bak7.hdalc | Bin 0 -> 12898 bytes
 ...sgalante.developer_float_migrate.1.1_bak8.hdalc | Bin 0 -> 13051 bytes
 ...sgalante.developer_float_migrate.1.1_bak9.hdalc | Bin 0 -> 12967 bytes
 .../sop_lsgalante.developer_id.1.0_bak1.hdalc      | Bin 0 -> 5541 bytes
 ...p_lsgalante.developer_initialize.1.0_bak1.hdalc | Bin 0 -> 9977 bytes
 ...p_lsgalante.developer_initialize.1.0_bak2.hdalc | Bin 0 -> 10306 bytes
 ...p_lsgalante.developer_initialize.1.0_bak3.hdalc | Bin 0 -> 10311 bytes
 .../sop_lsgalante.developer_lead.1.0_bak1.hdalc    | Bin 0 -> 6523 bytes
 .../sop_lsgalante.developer_lead.1.0_bak2.hdalc    | Bin 0 -> 6718 bytes
 .../sop_lsgalante.developer_map.1.0_bak1.hdalc     | Bin 0 -> 10935 bytes
 .../sop_lsgalante.developer_map.1.0_bak2.hdalc     | Bin 0 -> 10891 bytes
 .../sop_lsgalante.developer_map.1.0_bak3.hdalc     | Bin 0 -> 10887 bytes
 .../sop_lsgalante.developer_measure.1.0_bak1.hdalc | Bin 0 -> 22263 bytes
 .../sop_lsgalante.developer_measure.1.0_bak2.hdalc | Bin 0 -> 22424 bytes
 .../sop_lsgalante.developer_metamax.1.0_bak1.hdalc | Bin 0 -> 6765 bytes
 .../sop_lsgalante.developer_miasma.1.0_bak1.hdalc  | Bin 0 -> 3947 bytes
 .../sop_lsgalante.developer_migrate.1.1_bak1.hdalc | Bin 0 -> 18181 bytes
 .../sop_lsgalante.developer_migrate.1.1_bak2.hdalc | Bin 0 -> 18546 bytes
 ...op_lsgalante.developer_normalize.1.0_bak1.hdalc | Bin 0 -> 11054 bytes
 ...op_lsgalante.developer_normalize.1.0_bak2.hdalc | Bin 0 -> 10871 bytes
 .../sop_lsgalante.developer_promote.1.0_bak1.hdalc | Bin 0 -> 6431 bytes
 .../sop_lsgalante.developer_remesh.1.0_bak1.hdalc  | Bin 0 -> 46349 bytes
 .../sop_lsgalante.developer_remesh.1.0_bak2.hdalc  | Bin 0 -> 44797 bytes
 .../sop_lsgalante.developer_remesh.1.0_bak3.hdalc  | Bin 0 -> 44800 bytes
 ...op_lsgalante.developer_subdivide.1.0_bak1.hdalc | Bin 0 -> 7641 bytes
 ...sgalante.developer_surface_adapt.1.0_bak1.hdalc | Bin 0 -> 11045 bytes
 ...sgalante.developer_surface_adapt.1.0_bak2.hdalc | Bin 0 -> 11045 bytes
 ...sgalante.developer_surface_adapt.1.0_bak3.hdalc | Bin 0 -> 11053 bytes
 ...sgalante.developer_surface_adapt.1.0_bak4.hdalc | Bin 0 -> 11060 bytes
 ...lante.developer_surface_detangle.1.0_bak1.hdalc | Bin 0 -> 5951 bytes
 ...lante.developer_surface_detangle.1.0_bak2.hdalc | Bin 0 -> 5959 bytes
 ...lante.developer_surface_detangle.1.0_bak3.hdalc | Bin 0 -> 6008 bytes
 ...lsgalante.developer_surface_open.1.0_bak1.hdalc | Bin 0 -> 3243 bytes
 ...lsgalante.developer_surface_open.1.0_bak2.hdalc | Bin 0 -> 3243 bytes
 ...lsgalante.developer_surface_open.1.0_bak3.hdalc | Bin 0 -> 3251 bytes
 ...lsgalante.developer_surface_open.1.0_bak4.hdalc | Bin 0 -> 3328 bytes
 ...galante.developer_surface_remesh.1.0_bak1.hdalc | Bin 0 -> 44840 bytes
 ...galante.developer_surface_remesh.1.0_bak2.hdalc | Bin 0 -> 44848 bytes
 ...galante.developer_surface_remesh.1.0_bak3.hdalc | Bin 0 -> 44862 bytes
 ...galante.developer_surface_remesh.1.1_bak1.hdalc | Bin 0 -> 44857 bytes
 ...galante.developer_surface_remesh.1.1_bak2.hdalc | Bin 0 -> 44857 bytes
 ...ante.developer_surface_subdivide.1.0_bak1.hdalc | Bin 0 -> 7681 bytes
 ...ante.developer_surface_subdivide.1.0_bak2.hdalc | Bin 0 -> 7681 bytes
 ...ante.developer_surface_subdivide.1.0_bak3.hdalc | Bin 0 -> 7743 bytes
 ...ante.developer_surface_subdivide.1.0_bak4.hdalc | Bin 0 -> 7744 bytes
 ...ante.developer_surface_subdivide.1.0_bak5.hdalc | Bin 0 -> 7744 bytes
 ...ante.developer_surface_subdivide.1.0_bak6.hdalc | Bin 0 -> 7752 bytes
 ...ante.developer_surface_subdivide.1.0_bak7.hdalc | Bin 0 -> 7756 bytes
 ...galante.developer_surface_suture.1.0_bak1.hdalc | Bin 0 -> 6495 bytes
 ...galante.developer_surface_suture.1.0_bak2.hdalc | Bin 0 -> 6495 bytes
 ...galante.developer_surface_suture.1.0_bak3.hdalc | Bin 0 -> 6503 bytes
 ...galante.developer_surface_suture.1.0_bak4.hdalc | Bin 0 -> 6519 bytes
 .../sop_lsgalante.developer_time.1.0_bak1.hdalc    | Bin 0 -> 5687 bytes
 .../sop_lsgalante.developer_time.1.0_bak2.hdalc    | Bin 0 -> 5687 bytes
 .../sop_lsgalante.developer_time.1.0_bak3.hdalc    | Bin 0 -> 5692 bytes
 .../sop_lsgalante.developer_time.1.0_bak4.hdalc    | Bin 0 -> 5724 bytes
 ...sgalante.developer_time_analysis.1.0_bak1.hdalc | Bin 0 -> 8831 bytes
 ...sgalante.developer_time_analysis.1.0_bak2.hdalc | Bin 0 -> 8831 bytes
 ...sgalante.developer_time_analysis.1.0_bak3.hdalc | Bin 0 -> 8836 bytes
 ...sgalante.developer_time_analysis.1.0_bak4.hdalc | Bin 0 -> 8870 bytes
 ...op_lsgalante.developer_time_ramp.1.0_bak1.hdalc | Bin 0 -> 5957 bytes
 ...op_lsgalante.developer_time_ramp.1.0_bak2.hdalc | Bin 0 -> 5957 bytes
 ...op_lsgalante.developer_time_ramp.1.0_bak3.hdalc | Bin 0 -> 5962 bytes
 ...op_lsgalante.developer_time_ramp.1.0_bak4.hdalc | Bin 0 -> 5997 bytes
 ..._lsgalante.developer_time_switch.1.0_bak1.hdalc | Bin 0 -> 6819 bytes
 ..._lsgalante.developer_time_switch.1.0_bak2.hdalc | Bin 0 -> 6819 bytes
 ..._lsgalante.developer_time_switch.1.0_bak3.hdalc | Bin 0 -> 6824 bytes
 ..._lsgalante.developer_time_switch.1.0_bak4.hdalc | Bin 0 -> 6847 bytes
 ...nte.developer_vector_concentrate.1.0_bak1.hdalc | Bin 0 -> 11361 bytes
 ...nte.developer_vector_concentrate.1.0_bak2.hdalc | Bin 0 -> 11368 bytes
 ...nte.developer_vector_concentrate.1.0_bak3.hdalc | Bin 0 -> 11372 bytes
 ...nte.developer_vector_concentrate.1.0_bak4.hdalc | Bin 0 -> 11373 bytes
 ...galante.developer_vector_conform.1.0_bak1.hdalc | Bin 0 -> 8195 bytes
 ...galante.developer_vector_conform.1.0_bak2.hdalc | Bin 0 -> 8460 bytes
 ...galante.developer_vector_conform.1.0_bak3.hdalc | Bin 0 -> 8472 bytes
 ...galante.developer_vector_conform.1.0_bak4.hdalc | Bin 0 -> 8671 bytes
 ...galante.developer_vector_conform.1.0_bak5.hdalc | Bin 0 -> 8656 bytes
 ...galante.developer_vector_conform.1.0_bak6.hdalc | Bin 0 -> 8656 bytes
 ...galante.developer_vector_conform.1.0_bak7.hdalc | Bin 0 -> 8663 bytes
 ...galante.developer_vector_conform.1.0_bak8.hdalc | Bin 0 -> 8659 bytes
 ...sgalante.developer_vector_direct.1.0_bak1.hdalc | Bin 0 -> 13414 bytes
 ...sgalante.developer_vector_direct.1.0_bak2.hdalc | Bin 0 -> 13421 bytes
 ...sgalante.developer_vector_direct.1.0_bak3.hdalc | Bin 0 -> 13429 bytes
 ...nte.developer_vector_from_scalar.1.0_bak1.hdalc | Bin 0 -> 11058 bytes
 ...nte.developer_vector_from_scalar.1.0_bak2.hdalc | Bin 0 -> 11210 bytes
 ...nte.developer_vector_from_scalar.1.0_bak3.hdalc | Bin 0 -> 11222 bytes
 ...nte.developer_vector_from_scalar.1.0_bak4.hdalc | Bin 0 -> 11212 bytes
 ...nte.developer_vector_from_scalar.1.0_bak5.hdalc | Bin 0 -> 11212 bytes
 ...nte.developer_vector_from_scalar.1.0_bak6.hdalc | Bin 0 -> 11219 bytes
 ...nte.developer_vector_from_scalar.1.0_bak7.hdalc | Bin 0 -> 10635 bytes
 ...ante.developer_vector_initialize.1.0_bak1.hdalc | Bin 0 -> 10397 bytes
 ...nte.developer_vector_initialize.1.0_bak10.hdalc | Bin 0 -> 9997 bytes
 ...nte.developer_vector_initialize.1.0_bak11.hdalc | Bin 0 -> 9505 bytes
 ...nte.developer_vector_initialize.1.0_bak12.hdalc | Bin 0 -> 9533 bytes
 ...nte.developer_vector_initialize.1.0_bak13.hdalc | Bin 0 -> 9533 bytes
 ...nte.developer_vector_initialize.1.0_bak14.hdalc | Bin 0 -> 9535 bytes
 ...nte.developer_vector_initialize.1.0_bak15.hdalc | Bin 0 -> 10127 bytes
 ...ante.developer_vector_initialize.1.0_bak2.hdalc | Bin 0 -> 10397 bytes
 ...ante.developer_vector_initialize.1.0_bak3.hdalc | Bin 0 -> 10341 bytes
 ...ante.developer_vector_initialize.1.0_bak4.hdalc | Bin 0 -> 10342 bytes
 ...ante.developer_vector_initialize.1.0_bak5.hdalc | Bin 0 -> 10342 bytes
 ...ante.developer_vector_initialize.1.0_bak6.hdalc | Bin 0 -> 10339 bytes
 ...ante.developer_vector_initialize.1.0_bak7.hdalc | Bin 0 -> 10348 bytes
 ...ante.developer_vector_initialize.1.0_bak8.hdalc | Bin 0 -> 10353 bytes
 ...ante.developer_vector_initialize.1.0_bak9.hdalc | Bin 0 -> 10019 bytes
 ...galante.developer_vector_migrate.1.1_bak1.hdalc | Bin 0 -> 18383 bytes
 ...alante.developer_vector_migrate.1.1_bak10.hdalc | Bin 0 -> 19064 bytes
 ...alante.developer_vector_migrate.1.1_bak11.hdalc | Bin 0 -> 13930 bytes
 ...alante.developer_vector_migrate.1.1_bak12.hdalc | Bin 0 -> 13930 bytes
 ...alante.developer_vector_migrate.1.1_bak13.hdalc | Bin 0 -> 13937 bytes
 ...alante.developer_vector_migrate.1.1_bak14.hdalc | Bin 0 -> 13957 bytes
 ...galante.developer_vector_migrate.1.1_bak2.hdalc | Bin 0 -> 18383 bytes
 ...galante.developer_vector_migrate.1.1_bak3.hdalc | Bin 0 -> 18379 bytes
 ...galante.developer_vector_migrate.1.1_bak4.hdalc | Bin 0 -> 18377 bytes
 ...galante.developer_vector_migrate.1.1_bak5.hdalc | Bin 0 -> 18613 bytes
 ...galante.developer_vector_migrate.1.1_bak6.hdalc | Bin 0 -> 19129 bytes
 ...galante.developer_vector_migrate.1.1_bak7.hdalc | Bin 0 -> 19198 bytes
 ...galante.developer_vector_migrate.1.1_bak8.hdalc | Bin 0 -> 19073 bytes
 ...galante.developer_vector_migrate.1.1_bak9.hdalc | Bin 0 -> 19069 bytes
 ...sgalante.developer_vector_rotate.1.0_bak1.hdalc | Bin 0 -> 7807 bytes
 ...galante.developer_vector_rotate.1.0_bak10.hdalc | Bin 0 -> 8074 bytes
 ...galante.developer_vector_rotate.1.0_bak11.hdalc | Bin 0 -> 7389 bytes
 ...galante.developer_vector_rotate.1.0_bak12.hdalc | Bin 0 -> 7394 bytes
 ...galante.developer_vector_rotate.1.0_bak13.hdalc | Bin 0 -> 7357 bytes
 ...galante.developer_vector_rotate.1.0_bak14.hdalc | Bin 0 -> 7357 bytes
 ...galante.developer_vector_rotate.1.0_bak15.hdalc | Bin 0 -> 7364 bytes
 ...galante.developer_vector_rotate.1.0_bak16.hdalc | Bin 0 -> 7365 bytes
 ...sgalante.developer_vector_rotate.1.0_bak2.hdalc | Bin 0 -> 7805 bytes
 ...sgalante.developer_vector_rotate.1.0_bak3.hdalc | Bin 0 -> 7813 bytes
 ...sgalante.developer_vector_rotate.1.0_bak4.hdalc | Bin 0 -> 7858 bytes
 ...sgalante.developer_vector_rotate.1.0_bak5.hdalc | Bin 0 -> 7858 bytes
 ...sgalante.developer_vector_rotate.1.0_bak6.hdalc | Bin 0 -> 7865 bytes
 ...sgalante.developer_vector_rotate.1.0_bak7.hdalc | Bin 0 -> 7871 bytes
 ...sgalante.developer_vector_rotate.1.0_bak8.hdalc | Bin 0 -> 7992 bytes
 ...sgalante.developer_vector_rotate.1.0_bak9.hdalc | Bin 0 -> 8040 bytes
 ...lsgalante.developer_vector_unify.1.0_bak1.hdalc | Bin 0 -> 13287 bytes
 ...sgalante.developer_vector_unify.1.0_bak10.hdalc | Bin 0 -> 13787 bytes
 ...sgalante.developer_vector_unify.1.0_bak11.hdalc | Bin 0 -> 13805 bytes
 ...sgalante.developer_vector_unify.1.0_bak12.hdalc | Bin 0 -> 13796 bytes
 ...sgalante.developer_vector_unify.1.0_bak13.hdalc | Bin 0 -> 13796 bytes
 ...sgalante.developer_vector_unify.1.0_bak14.hdalc | Bin 0 -> 13803 bytes
 ...sgalante.developer_vector_unify.1.0_bak15.hdalc | Bin 0 -> 13807 bytes
 ...lsgalante.developer_vector_unify.1.0_bak2.hdalc | Bin 0 -> 13313 bytes
 ...lsgalante.developer_vector_unify.1.0_bak3.hdalc | Bin 0 -> 13330 bytes
 ...lsgalante.developer_vector_unify.1.0_bak4.hdalc | Bin 0 -> 13769 bytes
 ...lsgalante.developer_vector_unify.1.0_bak5.hdalc | Bin 0 -> 13766 bytes
 ...lsgalante.developer_vector_unify.1.0_bak6.hdalc | Bin 0 -> 13767 bytes
 ...lsgalante.developer_vector_unify.1.0_bak7.hdalc | Bin 0 -> 13771 bytes
 ...lsgalante.developer_vector_unify.1.0_bak8.hdalc | Bin 0 -> 13796 bytes
 ...lsgalante.developer_vector_unify.1.0_bak9.hdalc | Bin 0 -> 13794 bytes
 ...sgalante.developer_volume_miasma.1.0_bak1.hdalc | Bin 0 -> 3982 bytes
 ...sgalante.developer_volume_miasma.1.0_bak2.hdalc | Bin 0 -> 3989 bytes
 ...sgalante.developer_volume_miasma.1.0_bak3.hdalc | Bin 0 -> 4011 bytes
 otls/cop_lsgalante.gem_graph.1.0.hdalc             | Bin 0 -> 44792 bytes
 otls/object_lsgalante.gem_build_area.1.0.hdalc     | Bin 0 -> 30977 bytes
 otls/object_lsgalante.im_cam.1.0.hdalc             | Bin 0 -> 19380 bytes
 ...p_l_s_galante.matcap_shader.1.0.hdalc.hda *.otl | Bin 0 -> 18529 bytes
 otls/sop_lsgalante.developer_analysis.1.0.hdalc    | Bin 0 -> 16280 bytes
 ...op_lsgalante.developer_attribute_clip.1.0.hdalc | Bin 0 -> 3739 bytes
 ...lsgalante.developer_attribute_combine.1.0.hdalc | Bin 0 -> 23507 bytes
 ...galante.developer_attribute_composite.1.0.hdalc | Bin 0 -> 17764 bytes
 ...sgalante.developer_attribute_constant.1.0.hdalc | Bin 0 -> 7951 bytes
 ...alante.developer_attribute_initialize.1.0.hdalc | Bin 0 -> 83 bytes
 ...lsgalante.developer_attribute_promote.1.0.hdalc | Bin 0 -> 6532 bytes
 ...p_lsgalante.developer_attribute_remap.1.0.hdalc | Bin 0 -> 10409 bytes
 otls/sop_lsgalante.developer_charge.1.0.hdalc      | Bin 0 -> 3821 bytes
 otls/sop_lsgalante.developer_clip.1.0.hdalc        | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_combine.1.0.hdalc     | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_composite.1.0.hdalc   | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_concentrate.1.0.hdalc | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_constant.1.0.hdalc    | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_core.1.0.hdalc        | Bin 0 -> 3241 bytes
 otls/sop_lsgalante.developer_cull.1.0.hdalc        | Bin 0 -> 6203 bytes
 otls/sop_lsgalante.developer_detangle.1.0.hdalc    | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_develop.1.0.hdalc     | Bin 0 -> 7588 bytes
 otls/sop_lsgalante.developer_diffuse.1.0.hdalc     | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_diffuse.1.1.hdalc     | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_direct.1.0.hdalc      | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_embryo.1.0.hdalc      | Bin 0 -> 11013 bytes
 otls/sop_lsgalante.developer_expire.1.0.hdalc      | Bin 0 -> 3526 bytes
 otls/sop_lsgalante.developer_float_bleed.1.0.hdalc | Bin 0 -> 6186 bytes
 ...lsgalante.developer_float_concentrate.1.0.hdalc | Bin 0 -> 12080 bytes
 ...sop_lsgalante.developer_float_diffuse.1.1.hdalc | Bin 0 -> 13570 bytes
 ..._lsgalante.developer_float_initialize.1.0.hdalc | Bin 0 -> 9554 bytes
 ...sop_lsgalante.developer_float_migrate.1.1.hdalc | Bin 0 -> 13134 bytes
 otls/sop_lsgalante.developer_id.1.0.hdalc          | Bin 0 -> 5662 bytes
 otls/sop_lsgalante.developer_initialize.1.0.hdalc  | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_lead.1.0.hdalc        | Bin 0 -> 6871 bytes
 otls/sop_lsgalante.developer_map.1.0.hdalc         | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_measure.1.0.hdalc     | Bin 0 -> 22446 bytes
 otls/sop_lsgalante.developer_metamax.1.0.hdalc     | Bin 0 -> 6973 bytes
 otls/sop_lsgalante.developer_miasma.1.0.hdalc      | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_migrate.1.1.hdalc     | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_normalize.1.0.hdalc   | Bin 0 -> 10883 bytes
 otls/sop_lsgalante.developer_panel.1.0.hdalc       | Bin 0 -> 23796 bytes
 otls/sop_lsgalante.developer_promote.1.0.hdalc     | Bin 0 -> 83 bytes
 ...sop_lsgalante.developer_region_center.1.0.hdalc | Bin 0 -> 9201 bytes
 otls/sop_lsgalante.developer_release.1.0.hdalc     | Bin 0 -> 3326 bytes
 otls/sop_lsgalante.developer_remesh.1.0.hdalc      | Bin 0 -> 83 bytes
 otls/sop_lsgalante.developer_select.1.0.hdalc      | Bin 0 -> 18591 bytes
 otls/sop_lsgalante.developer_solver.1.0.hdalc      | Bin 0 -> 7549 bytes
 otls/sop_lsgalante.developer_subdivide.1.0.hdalc   | Bin 0 -> 83 bytes
 ...sop_lsgalante.developer_submute_begin.1.0.hdalc | Bin 0 -> 6097 bytes
 otls/sop_lsgalante.developer_submute_end.1.0.hdalc | Bin 0 -> 5970 bytes
 ...sop_lsgalante.developer_surface_adapt.1.0.hdalc | Bin 0 -> 11063 bytes
 ..._lsgalante.developer_surface_detangle.1.0.hdalc | Bin 0 -> 6007 bytes
 .../sop_lsgalante.developer_surface_open.1.0.hdalc | Bin 0 -> 3328 bytes
 ...op_lsgalante.developer_surface_remesh.1.0.hdalc | Bin 0 -> 44857 bytes
 ...op_lsgalante.developer_surface_remesh.1.1.hdalc | Bin 0 -> 41420 bytes
 ...lsgalante.developer_surface_subdivide.1.0.hdalc | Bin 0 -> 7756 bytes
 ...op_lsgalante.developer_surface_suture.1.0.hdalc | Bin 0 -> 6519 bytes
 otls/sop_lsgalante.developer_time.1.0.hdalc        | Bin 0 -> 5724 bytes
 ...sop_lsgalante.developer_time_analysis.1.0.hdalc | Bin 0 -> 8866 bytes
 otls/sop_lsgalante.developer_time_ramp.1.0.hdalc   | Bin 0 -> 5998 bytes
 otls/sop_lsgalante.developer_time_switch.1.0.hdalc | Bin 0 -> 7362 bytes
 ...sgalante.developer_vector_concentrate.1.0.hdalc | Bin 0 -> 11370 bytes
 ...op_lsgalante.developer_vector_conform.1.0.hdalc | Bin 0 -> 8659 bytes
 ...sop_lsgalante.developer_vector_direct.1.0.hdalc | Bin 0 -> 13437 bytes
 ...sgalante.developer_vector_from_scalar.1.0.hdalc | Bin 0 -> 10636 bytes
 ...lsgalante.developer_vector_initialize.1.0.hdalc | Bin 0 -> 10590 bytes
 ...op_lsgalante.developer_vector_migrate.1.1.hdalc | Bin 0 -> 13957 bytes
 ...sop_lsgalante.developer_vector_rotate.1.0.hdalc | Bin 0 -> 7364 bytes
 .../sop_lsgalante.developer_vector_unify.1.0.hdalc | Bin 0 -> 13806 bytes
 otls/sop_lsgalante.developer_vitality.1.0.hdalc    | Bin 0 -> 6695 bytes
 ...sop_lsgalante.developer_volume_miasma.1.0.hdalc | Bin 0 -> 4011 bytes
 otls/sop_lsgalante.developer_weight.1.0.hdalc      | Bin 0 -> 3658 bytes
 otls/sop_lsgalante.gem_build_area.1.0.hdalc        | Bin 0 -> 8462 bytes
 otls/sop_lsgalante.gem_flange_merge.1.0.hdalc      | Bin 0 -> 21866 bytes
 otls/sop_lsgalante.gem_flange_monoid.1.0.hdalc     | Bin 0 -> 3824624 bytes
 otls/sop_lsgalante.gem_halo_merge.1.0.hdalc        | Bin 0 -> 15116 bytes
 otls/sop_lsgalante.gem_mold_flange.1.0.hdalc       | Bin 0 -> 31944 bytes
 otls/sop_lsgalante.gem_mold_preprocess.1.0.hdalc   | Bin 0 -> 16714 bytes
 otls/sop_lsgalante.gem_mold_root.1.0.hdalc         | Bin 0 -> 16667 bytes
 otls/sop_lsgalante.gem_mold_shell.1.0.hdalc        | Bin 0 -> 15037 bytes
 otls/sop_lsgalante.gem_mold_solver.1.0.hdalc       | Bin 0 -> 17408 bytes
 otls/sop_lsgalante.gem_mold_structure.1.0.hdalc    | Bin 0 -> 8317 bytes
 otls/sop_lsgalante.gem_orient.1.0.hdalc            | Bin 0 -> 8196 bytes
 otls/sop_lsgalante.gem_partition.1.0.hdalc         | Bin 0 -> 40471 bytes
 otls/sop_lsgalante.gem_partition.1.1.hdalc         | Bin 0 -> 37638 bytes
 otls/sop_lsgalante.gem_positioner.1.0.hdalc        | Bin 0 -> 10678 bytes
 otls/sop_lsgalante.gem_prim_painter.1.0.hdalc      | Bin 0 -> 868837 bytes
 otls/sop_lsgalante.gem_prim_painter.1.1.hdalc      | Bin 0 -> 4842126 bytes
 otls/sop_lsgalante.gem_prim_painter.1.2.hdalc      | Bin 0 -> 4842953 bytes
 otls/sop_lsgalante.gem_scale.1.0.hdalc             | Bin 0 -> 5404 bytes
 otls/sop_lsgalante.gem_screw.1.0.hdalc             | Bin 0 -> 7294 bytes
 otls/sop_lsgalante.gem_skeleprep.1.0.hdalc         | Bin 0 -> 52167 bytes
 otls/sop_lsgalante.gem_sprue.1.0.hdalc             | Bin 0 -> 18663 bytes
 otls/sop_lsgalante.gem_sprue_cut.1.0.hdalc         | Bin 0 -> 18752 bytes
 otls/sop_lsgalante.gem_sprue_funnel.1.0.hdalc      | Bin 0 -> 19759 bytes
 otls/sop_lsgalante.gem_sprue_preprocess.1.0.hdalc  | Bin 0 -> 26061 bytes
 otls/sop_lsgalante.gem_sprue_select.1.0.hdalc      | Bin 0 -> 14858 bytes
 otls/sop_lsgalante.gem_sprue_select.1.1.hdalc      | Bin 0 -> 1668803 bytes
 otls/sop_lsgalante.gem_sprue_shell.1.0.hdalc       | Bin 0 -> 6725 bytes
 otls/sop_lsgalante.gem_support.1.0.hdalc           | Bin 0 -> 19548 bytes
 otls/sop_lsgalante.im_arrow.1.0.hdalc              | Bin 0 -> 4246 bytes
 otls/sop_lsgalante.im_attractor.0.9.hdalc          | Bin 0 -> 12345 bytes
 otls/sop_lsgalante.im_attractor.1.0.hdalc          | Bin 0 -> 21269 bytes
 otls/sop_lsgalante.im_attractor.1.1.hdalc          | Bin 0 -> 14191 bytes
 otls/sop_lsgalante.im_bend.1.0.hdalc               | Bin 0 -> 11132 bytes
 otls/sop_lsgalante.im_bevel.1.0.hdalc              | Bin 0 -> 16934 bytes
 otls/sop_lsgalante.im_blaster.1.0.hdalc            | Bin 0 -> 19038 bytes
 otls/sop_lsgalante.im_bounds.1.0.hdalc             | Bin 0 -> 15122 bytes
 otls/sop_lsgalante.im_bounds.1.1.hdalc             | Bin 0 -> 17680 bytes
 otls/sop_lsgalante.im_box.1.0.hdalc                | Bin 0 -> 27530 bytes
 otls/sop_lsgalante.im_cache.1.0.hdalc              | Bin 0 -> 8653 bytes
 otls/sop_lsgalante.im_clip.1.0.hdalc               | Bin 0 -> 11769 bytes
 otls/sop_lsgalante.im_color.1.0.hdalc              | Bin 0 -> 9144 bytes
 otls/sop_lsgalante.im_connectivity.1.0.hdalc       | Bin 0 -> 3890 bytes
 otls/sop_lsgalante.im_constant.1.0.hdalc           | Bin 0 -> 6601 bytes
 otls/sop_lsgalante.im_copy.1.0.hdalc               | Bin 0 -> 6231 bytes
 otls/sop_lsgalante.im_count_primitives.1.0.hdalc   | Bin 0 -> 9657 bytes
 otls/sop_lsgalante.im_cull.1.0.hdalc               | Bin 0 -> 83 bytes
 otls/sop_lsgalante.im_cull_points.1.0.hdalc        | Bin 0 -> 14335 bytes
 otls/sop_lsgalante.im_cull_primitives.1.0.hdalc    | Bin 0 -> 19174 bytes
 otls/sop_lsgalante.im_curl.1.0.hdalc               | Bin 0 -> 10114 bytes
 otls/sop_lsgalante.im_curl.1.1.hdalc               | Bin 0 -> 10019 bytes
 otls/sop_lsgalante.im_curl.1.2.hdalc               | Bin 0 -> 10052 bytes
 otls/sop_lsgalante.im_delete.1.1.hdalc             | Bin 0 -> 8492 bytes
 otls/sop_lsgalante.im_diagnostic.1.0.hdalc         | Bin 0 -> 4891 bytes
 otls/sop_lsgalante.im_direction.1.0.hdalc          | Bin 0 -> 5805 bytes
 otls/sop_lsgalante.im_dissolve.1.0.hdalc           | Bin 0 -> 6542 bytes
 otls/sop_lsgalante.im_dissolve_point.1.0.hdalc     | Bin 0 -> 5789 bytes
 otls/sop_lsgalante.im_distance.1.0.hdalc           | Bin 0 -> 9301 bytes
 otls/sop_lsgalante.im_distrubution.1.0.hdalc       | Bin 0 -> 19464 bytes
 otls/sop_lsgalante.im_dot.1.0.hdalc                | Bin 0 -> 6066 bytes
 otls/sop_lsgalante.im_evaluate_curve.1.0.hdalc     | Bin 0 -> 11076 bytes
 otls/sop_lsgalante.im_extrude.1.0.hdalc            | Bin 0 -> 10767 bytes
 otls/sop_lsgalante.im_fast_clip.1.0.hdalc          | Bin 0 -> 8162 bytes
 otls/sop_lsgalante.im_gate.1.0.hdalc               | Bin 0 -> 14473 bytes
 otls/sop_lsgalante.im_gem.1.0.hdalc                | Bin 0 -> 8247 bytes
 otls/sop_lsgalante.im_grid.1.0.hdalc               | Bin 0 -> 8310 bytes
 otls/sop_lsgalante.im_group.1.0.hdalc              | Bin 0 -> 11575 bytes
 otls/sop_lsgalante.im_group_split.1.0.hdalc        | Bin 0 -> 8596 bytes
 otls/sop_lsgalante.im_guide.1.1.hdalc              | Bin 0 -> 11427 bytes
 otls/sop_lsgalante.im_inline.1.0.hdalc             | Bin 0 -> 7920 bytes
 otls/sop_lsgalante.im_invert_mesh.1.0.hdalc        | Bin 0 -> 8758 bytes
 otls/sop_lsgalante.im_layout.1.0.hdalc             | Bin 0 -> 17447 bytes
 otls/sop_lsgalante.im_line.1.0.hdalc               | Bin 0 -> 17468 bytes
 otls/sop_lsgalante.im_line.1.1.hdalc               | Bin 0 -> 18761 bytes
 otls/sop_lsgalante.im_lop.1.0.hdalc                | Bin 0 -> 13174 bytes
 otls/sop_lsgalante.im_manipulator.1.0.hdalc        | Bin 0 -> 5985 bytes
 otls/sop_lsgalante.im_matcap.1.0.hdalc             | Bin 0 -> 19388 bytes
 otls/sop_lsgalante.im_membership.1.0.hdalc         | Bin 0 -> 3586 bytes
 otls/sop_lsgalante.im_multistain.1.0.hdalc         | Bin 0 -> 26612 bytes
 otls/sop_lsgalante.im_neighbours.1.0.hdalc         | Bin 0 -> 12434 bytes
 otls/sop_lsgalante.im_normal.1.0.hdalc             | Bin 0 -> 25927 bytes
 otls/sop_lsgalante.im_notebook.1.0.hdalc           | Bin 0 -> 3561 bytes
 otls/sop_lsgalante.im_number_generator.1.0.hdalc   | Bin 0 -> 4327 bytes
 otls/sop_lsgalante.im_onion.1.0.hdalc              | Bin 0 -> 25463 bytes
 otls/sop_lsgalante.im_orient.1.0.hdalc             | Bin 0 -> 13916 bytes
 otls/sop_lsgalante.im_orient.1.1.hdalc             | Bin 0 -> 7282 bytes
 otls/sop_lsgalante.im_permutate.1.0.hdalc          | Bin 0 -> 7758 bytes
 otls/sop_lsgalante.im_plane.1.0.hdalc              | Bin 0 -> 9239 bytes
 otls/sop_lsgalante.im_point.1.0.hdalc              | Bin 0 -> 9148 bytes
 otls/sop_lsgalante.im_point_mover.1.0.hdalc        | Bin 0 -> 6432 bytes
 otls/sop_lsgalante.im_point_proximity.1.0.hdalc    | Bin 0 -> 8461 bytes
 otls/sop_lsgalante.im_pose.1.0.hdalc               | Bin 0 -> 11130 bytes
 otls/sop_lsgalante.im_prim_distance.1.0.hdalc      | Bin 0 -> 8891 bytes
 otls/sop_lsgalante.im_prim_proximity.1.0.hdalc     | Bin 0 -> 7414 bytes
 otls/sop_lsgalante.im_promote.1.0.hdalc            | Bin 0 -> 9525 bytes
 otls/sop_lsgalante.im_ramp_color.1.0.hdalc         | Bin 0 -> 16650 bytes
 otls/sop_lsgalante.im_ramp_color.1.1.hdalc         | Bin 0 -> 16034 bytes
 otls/sop_lsgalante.im_ramp_float.1.0.hdalc         | Bin 0 -> 9202 bytes
 otls/sop_lsgalante.im_random_walk.1.0.hdalc        | Bin 0 -> 8177 bytes
 otls/sop_lsgalante.im_reindex.1.0.hdalc            | Bin 0 -> 7677 bytes
 otls/sop_lsgalante.im_relax.1.0.hdalc              | Bin 0 -> 8844 bytes
 otls/sop_lsgalante.im_remap.1.0.hdalc              | Bin 0 -> 18467 bytes
 otls/sop_lsgalante.im_remap.1.1.hdalc              | Bin 0 -> 20342 bytes
 otls/sop_lsgalante.im_remesh.1.0.hdalc             | Bin 0 -> 6959 bytes
 otls/sop_lsgalante.im_ruler.1.0.hdalc              | Bin 0 -> 3201 bytes
 otls/sop_lsgalante.im_sample.1.0.hdalc             | Bin 0 -> 9874 bytes
 otls/sop_lsgalante.im_scatter.1.0.hdalc            | Bin 0 -> 3791 bytes
 otls/sop_lsgalante.im_select.1.0.hdalc             | Bin 0 -> 17593 bytes
 otls/sop_lsgalante.im_shadowbox.1.0.hdalc          | Bin 0 -> 12339 bytes
 otls/sop_lsgalante.im_sharpen.1.0.hdalc            | Bin 0 -> 10234 bytes
 otls/sop_lsgalante.im_shortest_path.1.0.hdalc      | Bin 0 -> 8904 bytes
 otls/sop_lsgalante.im_shrink.1.0.hdalc             | Bin 0 -> 13369 bytes
 otls/sop_lsgalante.im_shrink.1.1.hdalc             | Bin 0 -> 11493 bytes
 otls/sop_lsgalante.im_skeletonize.1.0.hdalc        | Bin 0 -> 56407 bytes
 otls/sop_lsgalante.im_sort.1.0.hdalc               | Bin 0 -> 8062 bytes
 otls/sop_lsgalante.im_sort.1.1.hdalc               | Bin 0 -> 7816 bytes
 otls/sop_lsgalante.im_special_square.1.0.hdalc     | Bin 0 -> 16834 bytes
 otls/sop_lsgalante.im_split.1.0.hdalc              | Bin 0 -> 6238 bytes
 otls/sop_lsgalante.im_square.1.0.hdalc             | Bin 0 -> 8976 bytes
 otls/sop_lsgalante.im_stain.1.0.hdalc              | Bin 0 -> 20070 bytes
 otls/sop_lsgalante.im_star.1.0.hdalc               | Bin 0 -> 8889 bytes
 otls/sop_lsgalante.im_switch.1.0.hdalc             | Bin 0 -> 3206 bytes
 otls/sop_lsgalante.im_transfer.1.0.hdalc           | Bin 0 -> 6760 bytes
 otls/sop_lsgalante.im_transfer.1.1.hdalc           | Bin 0 -> 7830 bytes
 otls/sop_lsgalante.im_transform.1.0.hdalc          | Bin 0 -> 5595 bytes
 otls/sop_lsgalante.im_triangle.1.0.hdalc           | Bin 0 -> 5558 bytes
 otls/sop_lsgalante.im_twist.1.0.hdalc              | Bin 0 -> 10845 bytes
 otls/sop_lsgalante.im_valence.1.0.hdalc            | Bin 0 -> 10629 bytes
 otls/sop_lsgalante.im_vis_manager.1.0.hdalc        | Bin 0 -> 3274 bytes
 presets/color_ramp_presets.json                    | 102 +++
 presets/color_ramp_presets.json.bak                | 471 +++++++++++
 presets/custom_parms/attrib_all_replace            |  16 +
 presets/custom_parms/component_point_prim          |  16 +
 presets/presets_ramp_color.json                    | 471 +++++++++++
 presets/scalar_ramp_presets.json                   |   1 +
 python3.11libs/fuzzyfinder/__init__.py             |  15 +
 python3.11libs/fuzzyfinder/main.py                 |  44 +
 python3.11libs/hclib/__init__.py                   |  14 +
 python3.11libs/hclib/core/__init__.py              |  19 +
 python3.11libs/hclib/core/hccam.py                 | 206 +++++
 python3.11libs/hclib/core/hcdefaultcam.py          |  24 +
 python3.11libs/hclib/core/hcgeo.py                 |  18 +
 python3.11libs/hclib/core/hcglobal.py              | 243 ++++++
 python3.11libs/hclib/core/hcnetworkeditor.py       | 163 ++++
 python3.11libs/hclib/core/hcpane.py                | 119 +++
 python3.11libs/hclib/core/hcpathtab.py             |  41 +
 python3.11libs/hclib/core/hcsceneviewer.py         | 264 ++++++
 python3.11libs/hclib/core/hctab.py                 |  59 ++
 python3.11libs/hclib/core/hcviewport.py            |  15 +
 python3.11libs/hclib/ui/__init__.py                |   0
 python3.11libs/hclib/ui/hcfunctionpanel.py         | 251 ++++++
 python3.11libs/hclib/ui/hcnewtabpanel.py           | 104 +++
 python3.11libs/hclib/ui/hcpanel.py                 | 221 +++++
 python3.11libs/hclib/ui/hcresizepanel.py           |  44 +
 python3.11libs/hclib/ui/hcstatuspanel.py           |  69 ++
 python3.11libs/hclib/ui/hcvisualizerpanel.py       | 131 +++
 python3.11libs/hclib/ui/hcwidgets.py               |  18 +
 python3.11libs/hclib/utils/__init__.py             |   0
 python3.11libs/hclib/utils/hcbindings.py           | 263 ++++++
 python3.11libs/hclib/utils/hclayouts.py            |  85 ++
 python3.11libs/hclib/utils/hclistener.py           | 107 +++
 python3.11libs/hclib/utils/hcmenuutils.py          |  28 +
 python3.11libs/hclib/utils/hcprinter.py            |  24 +
 python3.11libs/hclib/utils/hcradialutils.py        | 183 +++++
 python3.11libs/hclib/utils/hcutils.py              |   0
 python3.11libs/nodegraphhooks.py                   |  53 ++
 python3.11libs/uiready.py                          |  21 +
 scripts/123.py                                     |  29 +
 scripts/beforescenesave.py                         |  23 +
 scripts/diffuse.py                                 |  38 +
 scripts/generate_menu.py                           |  18 +
 scripts/morpho_combine_module.py                   |  12 +
 scripts/morpho_combine_oninputchanged.py           |  39 +
 scripts/morpho_composite_module.py                 |  70 ++
 scripts/morpho_develop_module.py                   |   7 +
 scripts/morpho_panel_module.py                     | 528 ++++++++++++
 scripts/morpho_ramp_module.py                      | 113 +++
 scripts/source_created.py                          |   8 +
 scripts/source_module.py                           | 564 +++++++++++++
 systems_knowledge.txt                              |  18 +
 toolbar/hc_shelf.shelf                             | 116 +++
 vex/include/VAT_utilitiesx.h                       |  77 ++
 vex/include/hctl_utils.h                           | 279 +++++++
 vex/include/myLib.h                                | 205 +++++
 vex/include/sidefxlabs_datax.h                     | 292 +++++++
 vex/include/sidefxlabs_mathx.h                     | 811 +++++++++++++++++++
 vex/include/sphere.h                               |  89 +++
 viewer_states/keycam.py                            | 606 ++++++++++++++
 viewer_states/keycam_lop.py                        |   4 +
 viewer_states/keycam_settings                      |  20 +
 566 files changed, 11260 insertions(+)

diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..277d7b9
Binary files /dev/null and b/.DS_Store differ
diff --git a/MainMenuCommon.xml b/MainMenuCommon.xml
new file mode 100755
index 0000000..6ecfee3
--- /dev/null
+++ b/MainMenuCommon.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Please note, that the files defining the main menu (ie, MainMenuCommon,
+     MainMenuMaster, and MainMenuEscape)
+     can exist in $HOME/houdiniX.Y/ directory and will supplement
+     the original definitions found in $HFS/houdini/ -->
+<mainMenu>
+  <menuBar>
+    <subMenu id="hc_submenu">
+    <label>hc</label>
+
+      <titleItem>
+        <label>Global</label>
+      </titleItem>
+
+      <scriptItem id="h.hcglobal_open_color_editor">
+        <label>Color Editor</label>
+        <scriptCode>
+<![CDATA[from hclib import HCGlobal
+HCGlobal().openColorEditor()]]>
+        </scriptCode>
+      </scriptItem>
+
+      <scriptItem id="h.hcglobal_keycam">
+        <label>Keycam</label>
+        <scriptCode>
+<![CDATA[from hclib import HCGlobal
+HCGlobal().keycam()]]>
+        </scriptCode>
+      </scriptItem>
+
+      <scriptItem id="h.hcglobal_reload_color_schemes">
+        <label>Reload Color Schemes</label>
+        <scriptCode>
+<![CDATA[from hclib import HCGlobal
+HCGlobal().reload_color_schemes()]]>
+        </scriptCode>
+      </scriptItem>
+
+      <scriptItem id="h.hcglobal_reload_hotkeys">
+        <label>Reload Hotkeys</label>
+        <scriptCode>
+<![CDATA[from hclib import HCGlobal
+HCGlobal().reloadHotkeys()]]>
+        </scriptCode>
+    </scriptItem>
+
+      <scriptItem id="h.hcglobal_reload_keycam">
+        <label>Reload Keycam</label>
+        <scriptCode>
+<![CDATA[from hclib import HCGlobal
+HCGlobal().reloadKeycam()]]>
+        </scriptCode>
+      </scriptItem>
+
+      <scriptItem id="h.hcglobal_restart_houdini">
+        <label>Restart Houdini</label>
+        <scriptCode>
+<![CDATA[from hclib import HCGlobal
+HCGlobal().restartHoudini()]]>
+        </scriptCode>
+    </scriptItem>
+
+      <scriptItem id="h.hcglobal_toggle_menus">
+        <label>Toggle Menus</label>
+        <scriptCode>
+<![CDATA[from hclib import HCGlobal
+HCGlobal().toggleMenus()]]>
+        </scriptCode>
+      </scriptItem>
+
+      <scriptItem id="h.hcglobal_toggle_network_controls">
+        <label>Toggle Network Controls</label>
+        <scriptCode>
+<![CDATA[from hclib import HCGlobal
+HCGlobal().toggleNetworkControls()]]>
+        </scriptCode>
+      </scriptItem>
+
+      <scriptItem id="h.hcglobal_toggle_tabs">
+        <label>Toggle Tabs</label>
+        <scriptCode>
+<![CDATA[from hclib import HCGlobal
+HCGlobal().toggleTabs()]]>
+        </scriptCode>
+      </scriptItem>
+
+      <scriptItem id="h.hcglobal_toggle_stowbars">
+        <label>Toggle Stowbars</label>
+        <scriptCode>
+<![CDATA[from hclib import HCGlobal
+HCGlobal().toggleStowbars()]]>
+        </scriptCode>
+      </scriptItem>
+
+      <scriptItem id="h.hcglobal_update_main_menu_bar">
+        <label>Update Main Menu Bar</label>
+        <scriptCode>
+<![CDATA[from hclib import HCGlobal
+HCGlobal().updateMainMenuBar()]]>
+        </scriptCode>
+      </scriptItem>
+
+      <separatorItem />
+
+      <titleItem>
+        <label>Scene Viewer</label>
+      </titleItem>
+
+      <separatorItem />
+
+      <titleItem>
+        <label>Network Editor</label>
+      </titleItem>
+
+      <separatorItem />
+      <separatorItem />
+
+    </subMenu>
+  </menuBar>
+</mainMenu>
diff --git a/OPmenu.xml b/OPmenu.xml
new file mode 100644
index 0000000..2e3ef6b
--- /dev/null
+++ b/OPmenu.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<menuDocument>
+    <menu>
+        <removeItem id="opmenu.outputs_menu"/>
+        <removeItem id="opmenu.help"/>
+    </menu>
+</menuDocument>
diff --git a/PARMmenu.xmlx b/PARMmenu.xmlx
new file mode 100644
index 0000000..7d7fe25
--- /dev/null
+++ b/PARMmenu.xmlx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<menuDocument>
+  <menu>
+    <removeItem id="take_activate"/>
+    <removeItem id="lock_parm"/>
+    <removeItem id="unlock_parm"/>
+    <removeItem id="revert_factory_defs"/>
+    <removeItem id="set_curr_as_def"/>
+    <removeItem id="export_parm_type_props"/>
+
+
+    <scriptItem id="vector_set_x">
+      <label>Set to X</label>
+      <context>
+        <expression><![CDATA[
+from hclib import hcmenuutils as hcmu
+return hcmu.vector3Test(kwargs)
+]]></expression>
+      </context>
+      <scriptCode><![CDATA[
+from hclib import hcmenuutils as hcmu
+hcmu.setVector3(kwargs, 1, 0, 0)
+]]></scriptCode>
+    </scriptItem>
+
+
+    <scriptItem id="vector_lock">
+      <label>Lock Y and Z to X</label>
+      <context>
+        <expression><![CDATA[
+from hclib import hcmenuutils as hcmu
+return hmu.vector3Test(kwargs)
+]]></expression>
+      </context>
+      <scriptCode><![CDATA[
+from hclib import hcmenuutils as hcmu
+hcmu.vector3XMaster(kwargs)
+]]></scriptCode>
+    </scriptItem>
+  </menu>
+</menuDocument>
diff --git a/ParmGearMenu.xml b/ParmGearMenu.xml
new file mode 100644
index 0000000..8cb0a91
--- /dev/null
+++ b/ParmGearMenu.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<menuDocument>
+    <menu>
+        <removeItem id="edit_render_parms"/>
+        <removeItem id="edit_node_parms"/>
+        <removeItem id="edit_delete_script"/>
+    </menu>
+</menuDocument>
diff --git a/config/3DSceneColors.dark b/config/3DSceneColors.dark
new file mode 100644
index 0000000..11d4e8c
--- /dev/null
+++ b/config/3DSceneColors.dark
@@ -0,0 +1,227 @@
+# BackgroundColor:       0.00 0.00 0.00   # bg - top
+BackgroundColor:       0.1175 0.1188 0.1214
+BackgroundBottomColor: @BackgroundColor # bg - bottom
+XaxesColor:            1.00 0.00 0.00   # sticky x axis
+YaxesColor:            0.00 1.00 0.00   # sticky y axis
+ZaxesColor:            0.00 0.00 1.00   # sticky z axis
+
+# Bounding box
+
+BBoxOutlineColor: 0.40 0.40 0.40 # wireframe
+BBoxOutlineAlpha: ALPHA 0.75     # wireframe alpha (*approx)
+BBoxSolidColor:   0.35 0.35 0.35 # wireframe
+BBoxSolidAlpha:   ALPHA 0.75     # shaded alpha (approx*)
+
+# Geometry - Points
+PointColor:              0.40 1.00 1.00 # pt info unselected
+SelectedPointColor:      1.00 1.00 0.00 # pt info selected
+PointLocateColor:        0.60 0.90 1.00 # hover - pt
+PointLocateRemoveColor:  1.00 0.10 0.10 # hover - pt
+PointLocateToggleColor:  0.70 0.30 0.60 # hover - pt
+PointLocateAlpha:        ALPHA 1.00     # hover - pt overlay alpha
+PointTrailColor:         0.00 0.58 0.58 # pt trail - unselected
+SelectedPointTrailColor: 0.80 0.30 0.30 # pt trail - selected
+
+# Geometry - Primitives
+PrimClosureColor:          0.15 0.40 0.25 # unselected prims
+PrimLocateColor:           0.40 0.75 1.00 # hover - prim
+PrimLocateRemoveColor:     0.95 0.30 0.30 # hover - prim
+PrimLocateToggleColor:     0.50 0.15 0.60 # hover - prim
+PrimLocateAlpha:           ALPHA 0.40     # hover - prim overlay alpha
+BackfaceTintColor:         0.04 0.12 0.30 # backfacing poly tint, when enabled
+BackfaceTintAlpha:         ALPHA 0.66     # backfacing poly tint blend
+AuxSelectedPrimColor1:     1.00 1.00 0.00 # 1st template selection prims
+AuxSelectedPrimColor2:     0.00 1.00 1.00 # 2nd template selection prims
+PrimInfoColor:             1.00 0.78 1.00 # prim-vtx, prim-num, prim-normal
+SelectedPrimInfoColor:     1.00 0.78 0.70 # selected prim-vtx, prim-num, prim-normal
+WireframeColor:            0.80 0.80 0.73 # non-selected prims
+SelectedPrimColor:         1.00 0.80 0.30 # selected prims
+UsdSelectedPrimitiveAlpha: ALPHA 0.20     # selected USD prims
+UsdModifiedPrimitiveColor: 0.00 1.00 1.00 # current state modified USD prims
+UsdModifiedPrimitiveAlpha: ALPHA 0.20     # current state modified USD prims
+
+# Geometry - Edges
+EdgeLocateColor:       0.60 0.90 1.00 # hover
+EdgeLocateRemoveColor: 1.00 0.10 0.10 # hover
+EdgeLocateToggleColor: 0.70 0.30 0.60 # hover
+EdgeLocateAlpha:       ALPHA 1.00     # hover alpha
+EdgeTipColor:          0.10 0.90 0.40 # selection direction hint
+
+# Geometry - Vertices
+VertexLocateColor:       0.60 0.90 1.00 # hover
+VertexLocateRemoveColor: 1.00 0.10 0.10 # hover
+VertexLocateToggleColor: 0.70 0.30 0.60 # hover
+VertexLocateAlpha:       ALPHA 1.00     # hover alpha
+
+# Geometry - Breakpoints
+BreakpointLocateColor:       0.60 0.90 1.00 # hover
+BreakpointLocateRemoveColor: 1.00 0.30 0.30 # hover
+BreakpointLocateToggleColor: 0.70 0.30 0.60 # hover
+BreakpointLocateAlpha:       ALPHA 1.00     # hover alpha
+
+# Geometry - Curves
+CurveEndPointColor:       0.65 0.15 0.25 # curve state - end points
+CurveBranchPointColor:    0.40 0.40 1.00 # curve state - branch points
+CurveBranchEndPointColor: 0.55 0.30 0.65 # curve state - branch-end points
+
+# Geo - Objects
+ObjectSelectColor:     1.00 1.00 0.00 # selection highlight
+ObjectSelectHintColor: 0.50 0.80 0.00 # selection hint highlight
+ObjectCurrentColor:    1.00 0.85 0.00 # current highlight
+ObjectGhostColor:      0.30 0.30 0.30 # color blended into object when ghosted
+ObjectGhostAlpha:      ALPHA 0.75     # alpha for color/ghost mixing
+ObjectNameColor:       1.00 0.30 0.30 # name guides
+
+# Geo - other
+AuxGeoColor:                 0.70 0.40 0.40 # spline/quadric hulls
+SelectedAuxGeoColor:         0.90 0.60 0.70 # selected spline/quadric hulls
+BoundaryColor:               0.10 0.20 0.90 # geo boundary decoration
+WireOverColor:               0.20 0.20 0.20 # Wire Shaded mode wires
+GhostFillColor:              0.30 0.30 0.30 # hidden-line ghost fill
+CookSelectColor:             0.90 0.60 0.00 # cook selection points/prims
+FillSelectionAlpha:          ALPHA 0.50     # shading/select blend factor
+FillSelectionWireOverAlpha:  ALPHA 0.25     # shading/select blend factor
+
+
+# Grids
+
+CplaneColor:             0.35 0.40 0.40 # unselected
+ActiveCplaneColor:       0.30 0.45 0.45 # unselected active
+SelectedCplaneColor:     1.00 0.51 0.80 # selected
+CplaneAlpha:             ALPHA 0.10     # amount of shading between grid lines
+CplaneLineAlpha:         ALPHA 0.30     # grid line alpha
+CplaneLineFadedAlpha:    ALPHA 0.10     # faded grid line alpha
+CPlaneHandleXlateColor:  0.45 0.00 0.90 # cplane translate axes
+CPlaneHandleRotateColor: 0.65 0.15 0.25 # cplane rotation
+CPlaneHandleBorderColor: 0.45 0.00 0.90 # cplane scale border
+GridColor:               0.40 0.45 0.50 # grid
+GridLineAlpha:           ALPHA 0.30     # grid line alpha
+GridLineFadedAlpha:      ALPHA 0.20     # faded grid line alpha
+GridXRulerColor:         0.70 0.50 0.50 # x ruler
+GridYRulerColor:         0.50 0.70 0.50 # y ruler
+GridZRulerColor:         0.50 0.50 0.70 # z ruler
+GridRulerAlpha:          ALPHA 0.60     # ruler alpha
+GridRulerFadedAlpha:     ALPHA 0.40     # faded ruler alpha
+OrthoGridColor:       0.40 0.45 0.50 # ortho viewport grid lines
+OrthoGridOriginColor: 0.30 0.30 0.30 # ortho viewport origin lines
+
+# Guides
+
+Guide1Color:        0.40 0.40 1.00 # 1st guide
+Guide2Color:        0.20 0.50 1.00 # 2nd guide
+LopIncludeBoxGuide: 0.40 0.40 1.00 # "include" bbox guide
+LopExcludeBoxGuide: 1.00 0.40 0.40 # "exclude" bbox guide
+LopSubnetGuide1:    0.40 0.40 1.00 # subnet first guide
+LopSubnetGuide2:    1.00 0.40 0.40 # subnet second guide
+LopSubnetGuide3:    0.40 1.00 0.40 # subnet third guide
+
+# Handles
+
+HandlePivotColor:           0.40 0.40 1.00 # pivot
+HandleAxisColor:            1.00 1.00 1.00 # axes
+HandleXAxisColor:           1.00 0.00 0.00 # x axis
+HandleYAxisColor:           0.00 1.00 0.00 # y axis
+HandleZAxisColor:           0.00 0.00 1.00 # z axis
+HandlePlaneAxisColor:       0.60 0.03 0.60 # plane axis
+HandleViewAxisRotateColor:  0.60 0.03 0.60 # outer rotate ring
+HandleTumbleSphereColor:    0.50 0.50 0.50 # tumble sphere
+HandleBendColor:            0.10 0.90 0.10 # bend
+HandleTwistColor:           1.00 1.00 0.20 # twist
+HandleTracerColor:          0.40 0.40 0.40 # drag tracers
+HandleDeltaTextColor:       1.00 0.17 0.00 # text - delta val
+HandleDeltaTextShadowColor: 0.00 0.00 0.00 # text - delta val shadow
+HandleDeltaTextAlpha:       ALPHA 1.00     # text - delta val alpha
+HandleLocateColor:          0.70 0.70 0.50 # hover glow
+HandleLocateAlpha:          ALPHA 0.60     # hover glow alpha
+HandleLocatePassiveColor:   0.30 0.30 0.65 # hover passive glow
+HandleAxisLocateAlpha:      ALPHA 0.50     # hover axis glow
+HandleTumbleSphereAlpha:    ALPHA 0.25     # hover tumble sphere alpha
+HandleColor:                1.00 0.17 0.00 # direct manipulation handle
+InactiveHandleColor:        0.40 0.40 0.40 # dimmed/inactive handle
+PickedHandleColor:          1.00 0.51 0.80 # picked handle widget for direct manipulation
+SelectedHandleColor:        1.00 1.00 0.00 # selected handle
+HandleTracerFillAlpha:      ALPHA 0.70     # filled handle tracer alpha
+
+# Text
+MessageColor:         0.80 0.80 0.80 # normal
+PromptColor:          0.80 0.80 1.00 # tool prompt
+WarningColor:         0.90 0.65 0.00 # warning
+ErrorColor:           1.00 0.20 0.20 # error
+SuccessColor:         0.35 0.65 0.35 # success
+FlashMessageColor:    1.00 1.00 1.00 # flash
+TextColor:            0.60 0.60 0.60 # viewport text
+TextShadowColor:      0.00 0.00 0.00 # viewport text dropshadow
+LabelColor:           0.30 0.30 0.30 # viewer overlay labels
+SelectedLabelColor:   0.60 0.60 0.60 # viewport - selected labels
+OverlayLabelColor:    1.00 0.00 1.00 # label - viewer overlay
+AuxOverlayLabelColor: 0.80 0.80 0.00 # label - viewer overlay auxiliary
+
+# Misc
+GeoWarningColor:      1.00 0.70 0.20 # warning
+LocateColor:          0.80 0.50 0.00 # hover - overlay
+LocateAlpha:          ALPHA 0.20     # hover - overlay alpha
+LocateNearColor:      0.10 0.90 0.10 # hover - nearby
+LocateNearAlpha:      ALPHA 0.30     # hover - nearby alpha
+IKCriticalZoneColor:  0.98 0.35 0.20 # inverse kinematic danger zone cone
+SelectBoxOutline:     0.60 0.60 0.60 # selection box - outer outline
+SelectBoxInnerLine:   0.30 0.30 0.30 # selection box - inner outline
+SelectBoxFill:        0.20 0.20 0.20 # selection box - shaded fill
+SelectBoxAlpha:       ALPHA 0.25     # selection box - fill alpha
+ProfileWireColor:     0.60 0.55 0.50 # profiles
+AxesColor:            1.00 0.00 0.00 # coordinate/cplane axes
+SelectedAxesColor:    1.00 0.00 0.00 # selected coordinate axes
+HeightVectorColor:    1.00 0.50 0.50 # height motion indicator
+PeanutColor:          1.00 0.45 0.07 # peanut color for orientation picking
+SliderKnobMaxColor:   1.00 1.00 0.00 # slider handle max value warning
+ViewPivotFGColor:     1.00 0.20 0.20 # view pivot - indicators
+ViewPivotBGColor:     1.00 0.20 0.20 # view pivot - bg (ignored if same as fg)
+
+# Pill
+PillBGColor:              0.15 0.15 0.15       # bg
+PillBGAlpha:              ALPHA 1.00           # bg alpha
+PillOutlineColor:         @PillBGColor         # outline
+PillTextColor:            0.75 0.75 0.75       # text
+PillCamLockBGColor:       0.30 0.10 0.10       # locked cam bg
+PillCamLockOutlineColor:  @PillCamLockBGColor  # locked cam outline
+PillCamLockTextColor:     0.85 0.85 0.85       # locked cam text
+SelectedPillBGColor:      0.25 0.25 0.25       # selected viewport bg
+SelectedPillBGAlpha:      ALPHA 1.00           # selected viewport bg alpha
+SelectedPillOutlineColor: @SelectedPillBGColor # selected viewport outline
+SelectedPillTextColor:    0.70 0.80 0.80       # selected viewport text
+
+# Regions/overlays
+
+RenderBorderColor:             0.40 0.40 0.40 # border hover
+RenderInactiveBorderColor:     0.05 0.05 0.05 # border
+RenderTextColor:               0.50 0.50 0.50 # heading text
+RenderLocateColor:             0.60 0.30 0.20 # part hover
+RenderBarColor:                0.15 0.15 0.15 # title bar bg
+CameraMaskColor:               0.40 0.40 0.40 # viewport mask
+LockedCameraMaskColor:         0.60 0.20 0.20 # viewport mask - locked
+CameraOverlayColor:            1.00 1.00 1.00 # viewport overlay
+OverlayBackgroundColor:        @BackgroundColor # group list - bg
+OverlayBackgroundAlpha:        ALPHA 0.50       # group list - bg alpha
+OverviewViewRegionColor:       0.70 0.70 0.70   # view region rect
+OverviewWinRegionColor:        1.00 1.00 0.00   # window region rect
+OverviewNominalWinRegionColor: 0.40 0.40 1.00   # nominal window region rect
+SnapshotColor:                 0.60 0.60 0.60   # viewport snapshot
+ViewMaskOverlayColor:          0.40 0.40 0.40   # viewer mask overlay
+
+# UV
+
+UVGridColor:                 0.30 0.30 0.30 # viewport grid lines
+UVGridOriginColor:           0.35 0.35 0.35 # viewport origin lines
+UVGridBoundaryColor:         0.35 0.35 0.35 # viewport boundary lines
+UVBackFaceFillColor:         0.90 0.35 0.90 # backfaces
+UVOverlapFillColor:          1.00 0.00 0.00 # overlapping UV area
+UVOverlapFillAlpha:          ALPHA 0.70     # overlapping UV area alpha
+UVFillAlpha:                 ALPHA 0.40     # front face alpha
+SelectedUVBackFaceFillColor: 0.90 0.50 0.90 # the selected version
+FlattenPinColor:             1.00 0.00 0.00 # flatten state pin color
+FlattenSelectedPinColor:     1.00 1.00 0.00 # flatten state selected pin color
+FlattenInitialPinColor:      0.70 0.00 0.00 # flatten state initial pin color
+
+
+# *approx: uses sample-based opacity. Will be rounded to 1/AA_level, where
+# AA_level is the antialias-level of the framebuffer. Higher values will
+# give more accurate opacity. The default 4x AA gives 0, 0.25, 0.5, 0.75, 1.
diff --git a/config/3DSceneColors.dark.original b/config/3DSceneColors.dark.original
new file mode 100644
index 0000000..ab082da
--- /dev/null
+++ b/config/3DSceneColors.dark.original
@@ -0,0 +1,189 @@
+BackgroundColor:	0.00 0.00 0.00	# background color 
+BackgroundBottomColor:	@BackgroundColor # background color at bottom of view
+WireframeColor:		0.80 0.80 0.73	# non-selected primitives
+WireOverColor:		0.20 0.20 0.20  # color of wires in Wire Shaded modes
+GhostFillColor:		0.30 0.30 0.30	# hidden-line ghost fill
+SelectedPrimColor:  1.00 0.80 0.30  # selected primitives
+AuxSelectedPrimColor1:	1.00 1.00 0.00	# selected primitives in first tmp. sel
+AuxSelectedPrimColor2:	0.00 1.00 1.00	# selected primitives in second tmp. sel
+UsdSelectedPrimitiveAlpha: ALPHA 0.2    # selected USD prims
+UsdModifiedPrimitiveColor: 0.00 1.00 1.00 # current state modified USD prims
+UsdModifiedPrimitiveAlpha: ALPHA 0.2    # current state modified USD prims
+CookSelectColor:	0.90 0.60 0.00  # points/primitives in cook selection
+FillSelectionAlpha:	ALPHA 0.5 	# Blend factor for shading&select color
+FillSelectionWireOverAlpha: ALPHA 0.25 	# Blend factor for shading&select color
+PrimClosureColor:	0.15 0.40 0.25	# primitives when in closure (not sel'd)
+AuxGeoColor:		0.70 0.40 0.40	# spline and quadric hulls
+SelectedAuxGeoColor:	0.90 0.60 0.70	# selected spline and quadric hulls
+ProfileWireColor:	0.6  0.55 0.50  # profiles
+AxesColor:		1.00 0.00 0.00	# coordinate  or c-plane axes
+XaxesColor:		1.00 0.00 0.00	# sticky x axis
+YaxesColor:		0.00 1.00 0.00	# sticky y axis
+ZaxesColor:		0.00 0.00 1.00	# sticky z axis
+SelectedAxesColor:	1.00 0.00 0.00	# selected coordinate axes
+PrimInfoColor:		1.00 0.78 1.0	# prim-vtx, prim-num, prim-normal 
+SelectedPrimInfoColor:	1.00 0.78 0.7	# sel'd prim-vtx, prim-num, prim-normal
+PointColor:		0.40 1.00 1.00	# non-selected points and point info
+SelectedPointColor:	1.00 1.00 0.00	# selected points and point info
+Guide1Color:		0.40 0.40 1.00	# 1st guide geometry
+Guide2Color:		0.20 0.50 1.00	# 2nd guide geometry
+CplaneColor:		0.35 0.4 0.4	# non-selected construction plane
+ActiveCplaneColor:	0.30 0.45 0.45	# non-selected active construction plane
+SelectedCplaneColor:	1.00 0.51 0.80	# selected construction plane
+CplaneAlpha:		ALPHA 0.1 	# amount of shading between grid lines
+CplaneLineAlpha:	ALPHA 0.3	# alpha of cplane grid lines
+CplaneLineFadedAlpha:	ALPHA 0.1	# alpha of faded cplane grid lines
+GridColor:		0.4 0.45 0.50	# reference plane
+GridLineAlpha:		ALPHA .30	# alpha of ref plane grid lines
+GridLineFadedAlpha:	ALPHA 0.2	# alpha of faded ref plane grid lines
+GridXRulerColor:	.7 0.5 0.5	# reference grid x ruler color
+GridYRulerColor:	0.5 .7 0.5	# reference grid y ruler color
+GridZRulerColor:	0.5 0.5 .7 	# reference grid z ruler color
+GridRulerAlpha:		ALPHA 0.6	# alpha of ref plane ruler
+GridRulerFadedAlpha:	ALPHA 0.4	# alpha of faded ref plane ruler
+HeightVectorColor:	1.00 0.50 0.50	# height motion indicator
+HandleColor:		1.00 0.17 0.00	# handle for direct manip.
+InactiveHandleColor:	0.40 0.40 0.40	# dimmed handle when not active
+PickedHandleColor:	1.00 0.51 0.80	# picked handle widget for direct manip.
+SelectedHandleColor:	1.00 1.00 0.00	# selected handle
+PeanutColor:		1.00 0.45 0.07	# peanut color for orientation picking
+LabelColor:		0.00 0.80 0.80	# overlay labels in view
+SelectedLabelColor:	0.80 0.80 0.00	# labels in the selected viewport
+PillTextColor:		0.75 0.75 0.75  # menu pill text color
+PillOutlineColor:	0.55 0.55 0.55  # menu pill outline
+PillBGColor:		0.15 0.15 0.15  # menu pill background
+PillBGAlpha:		ALPHA 0.5	# menu pill background alpha
+PillCamLockTextColor:   0.85 0.85 0.85  # menu pill text color when cam is locked
+PillCamLockBGColor:     0.45 0.15 0.15  # menu pill bg when camera is locked
+PillCamLockOutlineColor: 0.7 0.55 0.55  # menu pill outline when camera is locked
+SelectedPillTextColor:	0.80 0.80 0.65  # menu pill text color (selected vp)
+SelectedPillOutlineColor: 0.55 0.55 0.55 # menu pill outline (selected viewport)
+SelectedPillBGColor:	0.15 0.15 0.15  # menu pill background (selected vp)
+SelectedPillBGAlpha:	ALPHA 0.75	# menu pill background alpha (selected)
+SnapshotColor:		0.6  0.6  0.6   # viewport snapshot color		
+OverlayLabelColor:	1.00 0.00 1.00	# overlay labels in view
+AuxOverlayLabelColor:	0.80 0.80 0.00	# auxiliary overlay labels in view
+HandlePivotColor:	0.40 0.40 1.00	# the pivot of handles
+HandleAxisColor:	1.00 1.00 1.00	# axis lines for the handle
+HandleXAxisColor:	1.00 0.00 0.00	# x axis lines for the handle
+HandleYAxisColor:	0.00 1.00 0.00	# y axis lines for the handle
+HandleZAxisColor:	0.00 0.00 1.00	# z axis lines for the handle
+HandlePlaneAxisColor:	0.60 0.03 0.60	# axis lines for the handle
+HandleViewAxisRotateColor:	0.60 0.03 0.60	# outer rotate ring for handle
+HandleTumbleSphereColor:	0.50 0.50 0.50	# tumble sphere color for handle
+HandleBendColor:        0.10 0.90 0.10  # bend handle color
+HandleTwistColor:	1.00 1.00 0.20	# twist handle color
+HandleTracerColor:	0.40 0.40 0.40	# tracers drawn by dragged handle
+HandleDeltaTextColor:	1.00 0.17 0.00	# text delta values
+HandleDeltaTextShadowColor:	0.00 0.00 0.00	# text shadow for delta values
+HandleDeltaTextAlpha:	ALPHA     1.0	# opacity of delta text values
+CPlaneHandleXlateColor: 0.45 0.00 0.90  # translate axes of c-plane handle
+CPlaneHandleRotateColor: 0.65 0.15 0.25 # rotate portion on c-plane handle
+CPlaneHandleBorderColor: 0.45 0.00 0.90 # scale border on c-plane handle
+OrthoGridColor:		0.4 0.45 0.50	# ortho viewport grid lines
+OrthoGridOriginColor:	0.30 0.30 0.30	# ortho viewport origin lines
+UVGridColor:		0.30 0.30 0.30	# uv viewport grid lines
+UVGridOriginColor:	0.35 0.35 0.35	# uv viewport origin lines
+UVGridBoundaryColor:	0.35 0.35 0.35	# uv viewport boundary lines
+ObjectSelectColor:	1.00 1.00 0.00	# object selection highlight color
+ObjectCurrentColor:	1.00 0.85 0.00	# current object highlight color
+ObjectSelectHintColor:	0.50 0.80 0.00	# object selection hint highlight color
+ObjectGhostColor:	0.30 0.30 0.30  # color blended into object when ghosted
+ObjectGhostAlpha:	ALPHA 0.75	# alpha for color/ghost mixing
+UVBackFaceFillColor:	0.90 0.35 0.90  # fill color for back facing polys
+UVOverlapFillColor:	1.00 0.00 0.00	# fill color for overlapping UV areas
+UVOverlapFillAlpha:	ALPHA 0.70	# alpha for overlapping UV areas
+UVFillAlpha:		ALPHA 0.40	# fill alpha for front facing polys
+SelectedUVBackFaceFillColor:	0.90 0.50 0.90  # the selected version
+IKCriticalZoneColor:	0.98 0.35 0.20	# inv. kin. danger zone cone
+ViewMaskOverlayColor:	0.40 0.40 0.40	# view mask overlay
+CameraMaskColor:	0.40 0.40 0.40	# camera mask
+LockedCameraMaskColor:  0.60 0.20 0.20  # camera mask when locked
+CameraOverlayColor:	1.00 1.00 1.00	# camera overlay
+TextColor:		0.6  0.6  0.6   # viewport text 
+TextShadowColor:	0.0  0.0  0.0   # viewport text dropshadow
+GeoWarningColor:	1.0  0.7  0.2   # indicates a potential problem
+LocateColor:		0.8  0.5  0.0	# mouse locate overlay color 
+LocateAlpha:		ALPHA 	  0.2   # mouse locate overlay alpha
+LocateNearColor:	0.1  0.9  0.1	# mouse locate nearby color 
+LocateNearAlpha:	ALPHA 	  0.3   # mouse locate nearby alpha
+PrimLocateColor:    0.4 0.75 1.0    # mouse locate prim color 
+PrimLocateRemoveColor:  0.95 0.30 0.30  # mouse locate prim color 
+PrimLocateToggleColor:  0.5 0.15 0.6    # mouse locate prim color 
+PrimLocateAlpha:    ALPHA     0.4   # mouse locate prim overlay alpha
+PointLocateColor:   0.6 0.9 1.0 # mouse locate point color 
+PointLocateRemoveColor: 1.0 0.10 0.10   # mouse locate point color 
+PointLocateToggleColor: 0.7 0.3 0.6 # mouse locate point color 
+PointLocateAlpha:   ALPHA     1     # mouse locate point overlay alpha
+EdgeLocateColor:    0.6 0.9 1.0 # mouse locate edge color 
+EdgeLocateRemoveColor:  1.0 0.10 0.10   # mouse locate edge color 
+EdgeLocateToggleColor:  0.7 0.3 0.6 # mouse locate edge color 
+EdgeLocateAlpha:    ALPHA     1     # mouse locate edge overlay alpha
+VertexLocateColor:  0.6 0.9 1.0 # mouse locate vertex color 
+VertexLocateRemoveColor: 1.0 0.10 0.10  # mouse locate vertex color 
+VertexLocateToggleColor: 0.7 0.3 0.6    # mouse locate vertex color 
+VertexLocateAlpha:  ALPHA     1     # mouse locate vertex overlay alpha
+BreakpointLocateColor:  0.6 0.9 1.0 # mouse locate breakpoint color 
+BreakpointLocateRemoveColor: 1.0 0.30 0.30 # mouse locate breakpoint color 
+BreakpointLocateToggleColor: 0.7 0.3 0.6 # mouse locate breakpoint color 
+BreakpointLocateAlpha:  ALPHA     1     # mouse locate breakpoint overlay alpha
+HandleLocateColor:	0.7  0.7  0.5   # glow around mouse located handle part
+HandleLocatePassiveColor: 0.3  0.3  0.65# passive glow around mouse located handle part
+HandleLocateAlpha:	ALPHA     0.6 	# opacity of handle locate glow
+HandleAxisLocateAlpha:	ALPHA     0.5 	# opacity of handle axis locate glow
+HandleTumbleSphereAlpha:	ALPHA     0.25 # opacity of handle tumble sphere
+HandleTracerFillAlpha:	ALPHA     0.7	# opacity of filled handle tracers
+SelectBoxOutline: 	0.6 0.6 0.6	# selection box outer outline
+SelectBoxInnerLine: 	0.3 0.3 0.3	# selection box inner outline
+SelectBoxFill:		0.2 0.2 0.2	# selection box shaded fill
+SelectBoxAlpha:		ALPHA	  0.25  # selection box fill alpha
+SliderKnobMaxColor:	1.0 1.0 0.0	# slider handle max value warning 
+ObjectNameColor:	1.0 0.3 0.3	# color for object name guides
+PointTrailColor:		0.00 0.58 0.58	# non-selected point trails
+SelectedPointTrailColor: 0.80 0.30 0.30	# selected point trails
+RenderBorderColor:	0.40 0.40 0.40  # Render Region border (located)
+RenderInactiveBorderColor: 0.05 0.05 0.05 # Render Region border (not located)
+RenderTextColor:	0.50 0.50 0.50  # Render Region heading text
+RenderLocateColor:	0.6 0.3 0.2	# Render Region part locate color
+RenderBarColor:		0.15 0.15 0.15	# Render Region title bar bg color
+FlattenPinColor:	1.0 0.0 0.0	# UV Flatten state pin color
+FlattenSelectedPinColor: 1.0 1.0 0.0	# UV Flatten state selected pin color
+FlattenInitialPinColor:	0.7 0.0 0.0	# UV Flatten state initial pin color
+BoundaryColor:		0.1 0.2 0.9	# Geometry boundary decoration
+EdgeTipColor:		0.1 0.9 0.4	# Edge selection direction indicator
+ViewPivotFGColor:	1.0 0.2 0.2	# View pivot indicator colors, with 
+ViewPivotBGColor:	1.0 0.2 0.2	# BG ignored if same as FG.
+BBoxOutlineColor:	0.4 0.4 0.4 	# Bounding box wireframe color
+BBoxOutlineAlpha:	ALPHA 0.75	# Bounding box wireframe alpha (*approx)
+BBoxSolidColor:		0.35 0.35 0.35 	# Bounding box wireframe color
+BBoxSolidAlpha:		ALPHA 0.75	# Bounding box shaded alpha (approx*)
+BackfaceTintColor:	0.04 0.12 0.3   # Tint for backfacing polys, when on
+BackfaceTintAlpha:	ALPHA 0.66	# Tint Blend for backfacing polys
+
+MessageColor:		0.8 0.8 0.8     # color of normal-priority messages
+PromptColor:		0.8 0.8 1.0	# color of tool prompts
+WarningColor:		0.9 0.65 0.0	# color of warning messages
+ErrorColor:		1.0 0.2 0.2	# color of error messages
+SuccessColor:		0.35 0.65 0.35	# color of success indication
+FlashMessageColor:	1.0 1.0 1.0	# color of flash messages
+
+OverlayBackgroundColor:	@BackgroundColor	# Background of group list
+OverlayBackgroundAlpha:	ALPHA 0.5	# Alpha for background of group list
+
+OverviewViewRegionColor:	0.7 0.7 0.7	# View region rectangle
+OverviewWinRegionColor:		1.0 1.0 0.0	# Window region rectangle
+OverviewNominalWinRegionColor:	0.4 0.4 1.0	# Nom. window region rectangle
+
+LopIncludeBoxGuide:		0.40 0.40 1.00	# LOP guide for "include" bbox
+LopExcludeBoxGuide:		1.00 0.40 0.40	# LOP guide for "exclude" bbox
+LopSubnetGuide1:		0.40 0.40 1.00	# LOP subnet first guide
+LopSubnetGuide2:		1.00 0.40 0.40	# LOP subnet second guide
+LopSubnetGuide3:		0.40 1.00 0.40	# LOP subnet third guide
+
+CurveEndPointColor:             0.65 0.15 0.25  # Curve state end points
+CurveBranchPointColor:          0.40 0.40 1.00	# Curve state branch points
+CurveBranchEndPointColor:	0.55 0.30 0.65	# Curve state branch-end points
+
+# *approx: uses sample-based opacity. Will be rounded to 1/AA_level, where
+# AA_level is the antialias-level of the framebuffer. Higher values will 
+# give more accurate opacity. The default 4x AA gives 0, 0.25, 0.5, 0.75, 1.
diff --git a/config/NodeGraphDark.inc b/config/NodeGraphDark.inc
new file mode 100644
index 0000000..bbcc3dc
--- /dev/null
+++ b/config/NodeGraphDark.inc
@@ -0,0 +1,330 @@
+#include "NodeGraphCommon.inc"

+#include "hc_colors.inc"

+

+//

+// Background

+//

+

+GraphBackground: bg_low

+GraphOverviewBackground: GREY(0.10)

+GraphOverviewViewRegion: 0.5 0.3 0.5

+GraphOverviewBorder: BLACK

+GraphPromptText: GREY(0.8)

+GraphGridLines: GREY(0.25)

+GraphGridPoints: GREY(0.6)

+

+//

+// Badges

+//

+

+GraphErrorBadgeDot: 1.0 0.0 0.0

+GraphChildErrorBadgeDot: 1.0 0.0 0.0

+GraphWarningBadgeDot: 0.77 0.6 0.04

+GraphMessageBadgeDot: 0.05 0.45 1.0

+GraphCommentBadgeDot: 0.15 0.67 0.64

+GraphNodeLockedBadgeDot: 1.0 0.35 0.43

+GraphNodeUnloadBadgeDot: 0.6 0.65 0.73

+GraphNodeHasDataBadgeDot: 0.45 0.75 0.45

+GraphNeedsCookBadgeDot: 0.97 0.91 0.11

+GraphHdaLockedBadgeDot: 0.43 0.47 0.48

+GraphHdaUnlockedBadgeDot: 0.98 0.49 0.55

+GraphHdaDelaySyncBadgeDot: 0.7 0.7 0.7

+GraphTimeDependentBadgeDot: 0.72 0.91 0.53

+GraphTagsBadgeDot: 0.15 0.67 0.64

+GraphVexCachedBadgeDot: #FF5AD2

+GraphVexCachableBadgeDot: #AA3E8C

+GraphNotCompilableBadgeDot: #E5B985

+GraphConstraintsBadgeDot: #97C473

+GraphKinematicsBadgeDot: #FF9370

+GraphHasTakeDataBadgeDot: #979797

+GraphNodeUnloadBadgeDot: #D19F9F

+GraphNodeHasDataBadgeDot: #9FABD1

+Graph64bitBadgeDot: #AC68CC

+GraphPdgDynamicBadgeDot: #E5C8FF

+GraphUnloadedPayloadsBadgeDot: #EDC486

+GraphPopulationMaskBadgeDot: #A06B9A

+GraphDiveableBadgeDot: #73d216

+GraphLoadFromDiskBadgeDot: #dceefaff

+GraphPdgMQServerAuthBadgeDot: #448519

+GraphPdgMQClientsAuthBadgeDot: #448519

+

+//

+// Context: cop2

+//

+

+GraphCop2PreviewBackground: GREY(0.1)

+GraphCop2BottomButtonEnabled: GREY(0.1)

+

+//

+// Context: dop

+//

+

+GraphDopObjectData: 0.65 0.65 0.65

+GraphDopData: 0.50 0.80 0.50

+GraphDopRelData: 0.20 0.60 0.20

+GraphDopSolverData: 0.7 0.5 0.9

+GraphDopAnyData: 0.9 0.9 0.9

+

+//

+// Context: lop

+//

+

+GraphLopLayerOutline: GREY(0.6)

+GraphLopLayerColor1: 0.3 0.7 0.2

+GraphLopLayerColor2: 0.6 0.4 0.2

+GraphLopLayerColor3: 0.9 0.1 0.2

+GraphLopLayerColor4: 0.3 0.2 0.3

+GraphLopLayerColor5: 0.6 0.2 0.6

+GraphLopLayerColor6: 0.9 0.2 0.9

+GraphLopLayerColor7: 0.2 0.7 0.3

+GraphLopLayerColor8: 0.2 0.4 0.6

+GraphLopLayerColor9: 0.2 0.1 0.9

+

+//

+// Context: shop

+//

+

+GraphShopConnectorBackground: GREY(0.1)

+

+//

+// Context: sop

+//

+

+GraphSopHeightfield: #25aa8e

+GraphSopConstraints: #D879D8

+GraphSopDomain: #6bcae2

+GraphSopRestGeometry: 0.584 0.776 1.0

+GraphSopCapturePose: 0.6 0.6 0.6

+GraphSopAnimatedPose: 1.0 0.725 0.0

+GraphSopCharacterStream: 0.559 0.159 1.0

+

+//

+// Context: top

+//

+

+GraphPdgProgressOutline: WHITE

+GraphPdgProgressPrecook: #324D59

+GraphPdgProgressCooking: #B8E986

+GraphPdgProgressCooked: #4D623F

+GraphPdgProgressWarning: #EBF802

+GraphPdgProgressError: #FF3300

+GraphPdgProgressIncomplete: #75876A

+

+GraphPdgProgressErrorCircle: #D0021B

+GraphPdgProgressErrorFill: #730000

+GraphPdgProgressNormalFill: #232323

+

+GraphPdgSummaryBackground: GREY(0.18)

+GraphPdgSummaryFilterOn: #FFD42A

+GraphPdgSummaryWorkItemCooked: #73945D

+GraphPdgSummaryWorkItemCooking: #B8E986

+GraphPdgSummaryWorkItemWaiting: #879889

+GraphPdgSummaryWorkItemUncooked: GREY(0.5)

+GraphPdgSummaryWorkItemFailed: #EE5A6C

+GraphPdgSummaryWorkItemCancelled: #EBB502

+

+GraphTaskGraphBackground: GREY(0.1)

+GraphTaskGraphBorder: GREY(0.7)

+GraphTaskGraphSeeMore: GREY(0.9)

+GraphTaskGraphWorkItemCooked: #529232

+GraphTaskGraphWorkItemCached: #529232

+GraphTaskGraphWorkItemCooking: #ADFF49

+GraphTaskGraphWorkItemWaiting: #354B60

+GraphTaskGraphWorkItemUncooked: GREY(0.5)

+GraphTaskGraphWorkItemFailed: #FF3300

+GraphTaskGraphWorkItemCancelled: #69511B

+GraphTaskGraphWorkItemSelected: #FFD42A

+GraphTaskGraphWorkItemHovered: #33EEFF

+GraphTaskGraphWorkItemAncestor: #99FF79

+GraphTaskGraphWorkItemDescendant: #2AFFCB

+GraphTaskGraphNormalWire: GREY(0.9)

+GraphTaskGraphMappedWire: #80FFA2

+GraphTaskGraphIndirectWire: #D9DD70

+

+GraphTaskGraphWorkItemPerfFast: #009166

+GraphTaskGraphWorkItemPerfMed: #f6ff00

+GraphTaskGraphWorkItemPerfSlow: #ff9000

+GraphTaskGraphWorkItemPerfNA: GREY(0.35)

+

+GraphTaskGraphStatusBarFailed: #FF9C9C

+GraphTaskGraphStatusBarCancelled: #F7DF1B

+GraphTaskGraphStatusBarCooked: #529232

+GraphTaskGraphStatusBarCooking: #B7DF86

+GraphTaskGraphStatusBarWaiting: GREY(0.6)

+GraphTaskGraphStatusBarEmpty: GREY(0.2)

+

+GraphTaskGraphLogError: #D04548

+GraphTaskGraphLogWarning: #B8B834

+

+GraphTaskPageRect: #D8D8D8

+

+GraphTopBottomButtonEnabled: GREY(0.1)

+GraphTopBottomButtonDisabled: GREY(0.6)

+

+//

+// Context: vop

+//

+

+GraphVopConnectorGroupName: WHITE

+GraphVopConnectorBackground: GREY(0.25)

+GraphVopBottomButtonEnabled: GREY(0.1)

+GraphVopBottomButtonDisabled: GREY(0.6)

+

+//

+// Flags

+//

+

+GraphTemplateFlag: #DD7DD7

+GraphSelectableTemplateFlag: #B151BB

+GraphBypassFlag: #E7CD2F

+GraphRenderFlag: #A779FF

+GraphDisplayFlag: #308DFF

+GraphOutputFlag: 0.75 0.4 0.0

+GraphSelectableFlag: #ABEA21

+GraphExportFlag: #FFA600

+GraphHiddenFlag: #90BECD

+GraphAudioFlag: 0.0 0.5 0.5

+GraphThumbnailFlag: 0.35 0.6 0.2

+GraphLockFlag: #FF3300

+GraphSoftLockFlag: #C4E361

+GraphDebugFlag: #6CC6B2

+GraphMaterialFlag: 0.75 0.4 0.0

+GraphDisplayAndRenderFlag: 0.00 0.68 0.94

+GraphDisplayAndOutputFlag: 0.75 0.45 0.36

+GraphFilterFlag: #55FFC1

+

+//

+// Flyout (??)

+//

+

+GraphFlyoutBackgroundFlagOn: BLACK

+GraphFlyoutBackgroundFlagOff: BLACK

+GraphFlyoutEdgeFlagOff: GREY(0.3)

+GraphFlyoutInfo: GREY(0.1)

+GraphFlyoutWarning: 0.2 0.2 0.0

+GraphFlyoutError: 0.2 0.0 0.0

+

+//

+// Objects

+//

+

+GraphItemBorder: BLACK

+GraphMinimizeButton: GREY(0.8)

+

+//

+// Object: highlights

+//

+

+GraphDisplayHighlight: #44679A

+GraphExportHighlight: #734670

+GraphRenderHighlight: #9273CB

+GraphOutputHighlight: #6B5634

+GraphTemplateHighlight: #734670

+GraphFilterHighlight: #298966

+

+//

+// Object: images

+//

+

+BackgroundImageLocate: WHITE

+BackgroundImageBorder: YELLOW

+BackgroundImageBrightness: YELLOW

+BackgroundImageLink: GREY(0.8)

+

+//

+// Object: pin

+//

+

+GraphDotPinAccent: GREY(0.3)

+

+//

+// Object: selection

+//

+

+GraphPickFill: 0.9 0.9 0.9

+GraphPreSelection: 0.75 0.86 1.0

+GraphItemCurrent: #FFD400

+GraphItemCurrentNonSelected: #C89C9C

+GraphItemSelection: #EEF81C

+GraphItemSelectionContrast: BLACK

+GraphItemContentsSelection: #6E780C

+GraphSnapLine: #5C704D

+

+//

+// Object: subnet

+//

+

+GraphSubnetShadow1: BLACK

+GraphSubnetShadowBlend1: 0.6

+GraphSubnetShadow2: WHITE

+GraphSubnetShadowBlend2: 0.3

+

+//

+// Overlays

+//

+

+GraphOverlayLeftText: 0.2 0.9 0.9

+GraphOverlayCenterText: 0.7 0.7 0.7

+GraphOverlayRightText: WHITE

+

+//

+// Palettes

+//

+

+PaletteBackground: GREY(0.15)

+PaletteSelected: YELLOW

+ShapePaletteShape: GREY(0.8)

+

+//

+// Text

+//

+

+GraphNameText: #e0e0e0

+GraphNodeTypeText: GREY(0.4)

+GraphCommentText: #6DB4BD

+GraphDescriptiveNameText: #76A8E1

+GraphContextOptionDepsText: #6DB4BD

+GraphLopLastModifiedPrimText: #6DB4BD

+GraphLopLayerCountText: #6DB4BD

+GraphOutputForViewText: #6DB4BD

+GraphDetailIdText: #6DB4BD

+GraphNetworkBoxText: WHITE

+GraphNetworkBoxTextDark: BLACK

+GraphNetworkBoxNameText: #76A8E1

+GraphIndirectText: WHITE

+GraphIndirectTextDark: BLACK

+GraphTagsText: #6DB4BD

+

+//

+// Wires

+//

+

+GraphConnector: 0.7 0.7 0.7

+GraphConnectorLabel: GREY(0.70)

+GraphConnectorError: #CE5E5E

+GraphCop2MaskInput: 0.50 0.80 0.50

+GraphWire: #5F91CC

+GraphWireUnused: 0.4 0.4 0.4

+GraphWireError: RED

+GraphWireLoopBack: 0.3 0.3 1.0

+GraphWireSelection: YELLOW

+GraphWireNodeSelection: YELLOW

+GraphWireLongFaded: 0.5 0.5 0.5

+GraphWireLongerFaded: 0.5 0.5 0.5

+GraphWireStub: GREY(0.70)

+GraphWireStubSelection: YELLOW

+GraphWireCut: RED

+GraphWireCutPath: 0.95 0.3 0.0

+GraphWireStitchStart: #B8E986

+GraphWireStitchEnd: #B8E986

+GraphSpareWire: #8967D9

+GraphParmOverrideWire: #FFA500

+

+//

+// Wire: dependencies

+//

+

+GraphDependency: #9A6955

+GraphDependencyEndAffector: #668E4A

+GraphDependencyExternalIn: GREY(0.8)

+GraphDependencyExternalOut: GREY(0.8)

diff --git a/config/UIDark.hcs b/config/UIDark.hcs
new file mode 100644
index 0000000..d5ca16d
--- /dev/null
+++ b/config/UIDark.hcs
@@ -0,0 +1,889 @@
+//
+// Scheme name
+//
+
+Scheme: hc-dark
+
+//
+// Imports
+//
+
+#include "basic_colors.inc"
+#include "NodeGraphDark.inc"
+#include "hc_colors.inc"
+#include "UIDark_unused.inc"
+
+//
+// Icons
+//
+
+IconBrightness: 0.7
+IconContrast: 1
+IconGamma: 1
+IconSaturation: 0.6
+
+//
+// Base colors
+//
+
+BackColor: bg_high // auto contrast code linked to BorderDark
+BorderLight: bg_high // line left of node graph pane & some menus
+BorderDark: bg_low // annoying status bar border
+TextColor: text
+HiliteTextColor: TEXT_HIGHLIGHT
+HiliteTextBG: #454B50
+SecondaryText: GREY(0.5)
+LinkText: #64ACFF
+DropIndicator 0.0 0.0 1.0
+ForegroundColor: GREY(0.02) // line in parameter pane (auto contrast code)
+BackgroundColor: UNK
+PaperColor: bg_low // also: line below pane tabs, other lines
+TextHighlightColor: TEXT_HIGHLIGHT
+
+//
+// Channel editor
+//
+
+ChannelEditorBackground: 0.00 0.00 0.00 // graph bg
+ChannelEditorBGOutsideGlobal: GREY(0.1) // graph bg outside global time range
+ChannelEditorBGOutsidePlayback: 0.093 0.086 0.051 // graph bg outside playback range
+ChannelEditorTimebar: 1.00 1.00 1.00 // timebar to be xored on top
+ChannelEditorGridLine: 0.20 0.20 0.20 // graph grid line
+ChannelEditorGridDashedLine: 0.20 0.20 0.20 // graph grid dashed line
+ChannelEditorHandleDefault: 0.50 0.50 0.50 // handles
+ChannelEditorHandleSelected: 1.00 1.00 0.00 // selected handle
+ChannelEditorHandleLocated: 0.80 0.80 0.80 // handle on cursor hover
+ChannelEditorHandleSelectedLocated: 1.00 1.00 0.80 // selected handle on cursor hover
+ChannelEditorStatsText: 1.00 1.00 1.00 // color of the stats text
+ChannelEditorTimeText: EDIT_BG // color of the bottom time text
+ChannelEditorViewLock: GREY(0.5)
+ChannelListCircleOutline: black
+
+//
+// Channel colors
+//
+
+NormalColor: 0.0 0.0 0.0 // not used
+LockedColor: HSV 200 0.3 0.3 // locked parameter
+PendingColor: HSV 60 0.5 0.5 // pending change
+IsKeyColor: HSV 120 0.5 0.55 // keyframe
+IsSoftKeyColor: #0D3D28 // constant() or raw() usually
+IsNotKeyColor: HSV 180 0.5 0.5 // channel, not at a key (expression)
+DisabledColor: HSV 207 0.27 0.75 // channel is disabled (muted) from dopesheet
+ChannelLockedColor: HSV 0 0 0.2 // has "lock()" expression
+OverrideColor: HSV 45 1 0.65 // parameter overridden by chop
+OtherLanguageColor: #653D66 // expr lang differs from node lang
+AutoTakeExcluded: HSV 42 0.17 0.31 // exluded from take and auto-take is on
+
+NonDefAccentColor: UNK // accent for non-default parms
+ChanRefAccentColor: UNK // accent for !!ch()!! parms
+DisabledAccentColor: UNK // accents are this color when disabled
+
+ScopedBlend: 0.9 0.25 0.97
+ScopedBaseColor: EDIT_BG
+ScopedColor: HSV 40 0.825 0.525
+ScopedBaseSelectedColor: EDIT_BG
+ScopedSelectedColor: white
+#AutoScopedColor: HSV 40 0.125 0.375 // low sat. orange grey, matches orange selection hue
+AutoScopedColor: HSV 210 0.125 0.375 // low sat. blue grey, matches blue slider hue
+ScopedAlpha: 1.0 1.0 1.0
+
+// Parm borders indicating the parm has an associated handle
+InvisibleHandleColor: 0.70 0.00 0.00 // handle invisible, probably XCF. See rows/columns in Torus SOP
+VisibleHandleColor: 0.00 0.50 0.50 // handle visible e.g. xform handle
+ActiveHandleColor: SELECTION_BASE // handle active
+
+//
+// Channels
+//
+
+// Red: ch. names ending x/r
+// Green: ch. names ending y/g
+// Blue: ch. names ending z/b
+// Other: ch. names ending other
+// ch. names ending r/g/b use first entry of each of their respective group
+// Each color group contains an arbitrary number of similar colors, uniquely
+// determined by their numeric suffix.  When determining the color of a
+// ch., its node and ch. name is used ex. point1/tx and point1/vx will reds of
+// different hues, which will differ from point2/tx and point2/vx
+
+ChannelColorRed1: 0.8 0.15 0.15 // red
+ChannelColorRed2: hsv 320.0 1.0 0.75 // before red
+ChannelColorRed3: hsv 340.0 1.0 0.75
+ChannelColorRed4: hsv 20.0 1.0 0.75  // after red
+ChannelColorRed5: hsv 40.0 1.0 0.75
+ChannelColorGreen1: 0.15 0.8 0.15 // green
+ChannelColorGreen2: hsv 80.0 1.0 0.75 // before green
+ChannelColorGreen3: hsv 100.0 1.0 0.75
+ChannelColorGreen4: hsv 140.0 1.0 0.75 // after green
+ChannelColorGreen5: hsv 160.0 1.0 0.75
+ChannelColorBlue1: 0.15 0.15 0.8 // blue
+ChannelColorBlue2: hsv 200.0 1.0 0.75 // before blue
+ChannelColorBlue3: hsv 220.0 1.0 0.75
+ChannelColorBlue4: hsv 260.0 1.0 0.75 // after blue
+ChannelColorBlue5: hsv 280.0 1.0 0.75
+ChannelColorOther1: hsv 60.0 1.0 0.75  // yellow
+ChannelColorOther2: hsv 180.0 1.0 0.75 // aqua
+ChannelColorOther3: hsv 300.0 1.0 0.75 // purple
+ChannelColorOther4: hsv 60.0 1.0 0.5 // dark yellow
+ChannelColorOther5: hsv 180.0 1.0 0.5 // dark aqua
+ChannelColorOther6: hsv 300.0 1.0 0.5 // dark purple
+
+//
+// CHOP editor
+//
+
+ChopEditorTimeBar: 0.00 0.00 0.00
+
+//
+// File dependency dialog
+//
+
+FileDepAcceptColor: 0.0 1.0 0.0
+FileDepRejectColor: 1.0 0.0 0.0
+
+//
+// Geometry groups
+//
+
+// These two colors specify opposing corners of a quadrilateral in HSV space.
+// Colors for geometry groups are sampled from within this quad.
+
+GeoGroupColor1: hsv 90.0 0.3 1.0
+GeoGroupColor2: hsv 330.0 0.6 1.0
+
+//
+// Hotkey editor keyboard
+//
+
+KeyCapUnavailableFill: #323232
+KeyCapUnavailableHover: #424242
+KeyCapAssignedFill: #515151
+KeyCapAssignedHover: #616161
+KeyCapDefaultFill: #858585
+KeyCapDefaultHover: #959595
+ModifierKeyOffFill: #292929
+ModifierKeyOffHover: #393939
+KeyCapSelectionBorder: white
+KeyCapSelectionText: white
+ShiftKeyBorder: #7F5050
+ShiftKeyFill: #AF7070
+ShiftKeyHilite: #CF9090
+CtrlKeyBorder: #436892
+CtrlKeyFill: #5883B4
+CtrlKeyHilite: #78A3D4
+AltKeyBorder: #658245
+AltKeyFill: #8EA37D
+AltKeyHilite: #AEC39D
+CmdKeyBorder: #9A7B49
+CmdKeyFill: #BBAB28
+CmdKeyHilite: #DBCB48
+HotkeyMgrUnboundActionFG: SHADOW3 // may be unused
+
+//
+// Info button indicator (??)
+//
+
+ErrorFlag: 0.9 0.1 0.1
+WarningFlag: 1 1 0
+MessageFlag: 0.8 0.8 0.8
+FilteredFlag: 0.6 0.6 0.6
+NoSaveFlag: 0.0 0.4 0.1 // used in the resource managers for .nosave files
+
+//
+// Linker tree views
+//
+
+LinkerPartialLinkColor: GREY(0.8)
+
+//
+// Lists / spreadsheets
+//
+
+ListShadow: bg_low
+ListHighlight: bg_low
+ListBorder: bg_low
+ListBG: BASE_ALT // bg in download color scheme window
+ListEntry1: LISTB
+ListEntry2: LISTA
+ListEntrySelected: selection
+ListTitleShadow: GREY(0.1) // ??
+ListTitleHighlight: bg_low // ss row number border
+ListTitleGradHi: bg_low // ss row number bg
+ListTitleGradLow: bg_low // ss row number bg
+ListTitleHighlightGradHi: HSV 36 1 0.8 // ??
+ListTitleHighlightGradLow: HSV 36 1 0.8 // ??
+ListTitleFilteredText: SELECTION_BASE
+ListText: text // text in download color scheme window
+ListAltText: HSV 40 0.85 1.0
+ListHoverHighlight: GREY(0.28)
+
+SSBorder: selection // divider line between spreadsheet columns
+SSOutline: DropIndicator // drag And Drop Outline in spreadsheet
+SSHeader: GREY(0.29) // ??
+SSTableBackgroundColor: 0.9 0.9 0.9 // ??
+SSTableSelectedColor: 0.125 0.125 1.0 // ??
+SSTableBackgroundColor: 0.9 0.9 0.9
+SSTableSelectedColor: 0.125 0.125 1.0
+
+// highlight Color Alpha in the channel lister
+// R: displayed ch alpha
+// G: graph selected ch alpha
+SSHighlightAlpha: 0.25 0.55 0.0
+
+//
+// MPlay
+//
+
+MplayInspectBox: GREY(0.8)
+MplayInspectBorder: GREY(0.3)
+MplayInspectText: black
+MplayColorCorrectWarn: 1 1 0.75
+
+//
+// Old UI colors
+//
+
+ListTitleColor: EDIT_BG
+ListEntryColor: GREY(0.62)
+ListEntrySelectedColor: 0.93 0.86 0.51
+
+MenuBarColor: GREY(0.75)
+MenuColor: GREY(0.70)
+BlueSelectedMenuColor: 0.125 0.125 1
+
+IconBackgroundColor: black // ?
+IconOutlineColor: GREY(0.8) // ?
+IconShadowColor: black // ?
+IconLocatedColor: UNK // ?
+
+DisabledTextColor: ARROW
+DisabledTextDropShadowColor: GREY(0.8)
+PopupHelpBackgroundColor: SELECTION_HIGHLIGHT2
+
+//
+// Operator properties
+//
+
+// These colors are used to highlight the names of operators that have a given
+// property (e.g. modified parameters).
+// Houdini's list mode tries to be smart and changes the value based on some
+// arbitrary thing (network BG color?). Anyway, leaving the value at one seems
+// to force it into a happy state.
+
+OpNameNoneColor: text
+OpNameCommentsColor: HSV 240 0.6 1
+OpNameAnimatedColor: UNK
+OpNameModifiedColor: UNK
+OpNameChoppedColor: UNK
+OpNameSyncedColor: HSV 200 0.6 1
+OpNameUnsyncedColor: HSV 0 0.6 1
+OpNameSubnetColor: HSV 240 0.3 1
+
+// This color is used for the text in the parameter title bar that indicates how
+// many nodes are selected.
+ParmTitleBarNumSelectedColor: 1.0 1.0 0.0
+
+// This color is for the text in the take label to indicate that auto take mode
+// is enabled.
+AutoTakeModeColor:            0.40 0.70 0.40
+
+//
+// Pane tabs
+//
+
+PaneTabActiveHi: bg_high
+PaneTabActiveLow: bg_high
+PaneTabInactiveHi: bg_low
+PaneTabInactiveLow: bg_low
+PaneTabEdges: bg_low
+PaneEmptyBG: bg_low
+PaneBorder: bg_low
+PaneHeaderGradHi: bg_high // path gadget bg
+PaneHeaderGradLow: bg_high // path gadget bg
+PaneTabShadow: bg_low
+PaneTabMarker: selection
+
+ObjectColor: HSV 210 0.20 1.75
+SopColor: HSV 100 0.20 2
+DopColor: HSV 0 0.20 2
+PopNetColor: HSV 170 0.20 1.75
+PopColor: HSV 170 0.20 1.75
+ShopColor: HSV 340 0.20 1.75
+VopNetColor:  HSV 260 0.20 1.75
+VopColor: HSV 260 0.20 1.75
+ChopNetColor: HSV 60 0.20 1.75
+ChopColor: HSV 60 0.20 1.75
+CopNet2Color: HSV 40 0.20 2
+CopColor: HSV 40 0.20 2
+Cop2Color: HSV 40 0.20 2
+OutputColor: HSV 20 0.20 2
+RootColor: HSV 0 0 1
+
+//
+// Pane - Network editor list mode
+//
+
+OpListHeaderBGColor: GREY(0.7)
+OpListSplitterColor: black
+OpListSelectionBGColor: SELECTION_BASE
+OpListSelectionFGColor: white
+
+//
+// Pane - Parameters
+//
+
+GroupBorder: GREY(0.11)
+GroupLight: GREY(0.29)
+GroupHeader0: GREY(0.20)
+GroupHeaderTop0: GREY(0.20)
+GroupHeaderHi0: GREY(0.32)
+GroupHeaderHiTop0: GREY(0.32)
+GroupHeaderOpen0: bg_high
+GroupHeaderOpenTop0: bg_high
+GroupHeaderDisabled0: GREY(0.20)
+GroupHeaderDisabledTop0: GREY(0.20)
+GroupBody0: bg_low
+GroupHeader1: GREY(0.20)
+GroupHeaderTop1: GREY(0.20)
+GroupHeaderHi1: GREY(0.31)
+GroupHeaderHiTop1: GREY(0.31)
+GroupHeaderOpen1: GREY(0.30)
+GroupHeaderOpenTop1: GREY(0.30)
+GroupHeaderDisabled1: GREY(0.20)
+GroupHeaderDisabledTop1: GREY(0.20)
+GroupBody1: GREY(0.21)
+GroupHeader2: GREY(0.18)
+GroupHeaderTop2: GREY(0.18)
+GroupHeaderHi2: GREY(0.30)
+GroupHeaderHiTop2: GREY(0.30)
+GroupHeaderOpen2: GREY(0.29)
+GroupHeaderOpenTop2: GREY(0.29)
+GroupHeaderDisabled2: GREY(0.18)
+GroupHeaderDisabledTop2: GREY(0.18)
+GroupBody2: GREY(0.19)
+GroupHeader3: GREY(0.16)
+GroupHeaderTop3: GREY(0.16)
+GroupHeaderHi3: GREY(0.29)
+GroupHeaderHiTop3: GREY(0.29)
+GroupHeaderOpen3: GREY(0.28)
+GroupHeaderOpenTop3: GREY(0.28)
+GroupHeaderDisabled3: GREY(0.16)
+GroupHeaderDisabledTop3: GREY(0.16)
+GroupBody3: GREY(0.17)
+
+//
+// Pane - Parameter spreadsheets
+//
+
+ParmSheetEmptyColor: 0.65 0.65 0.65
+ParmSheetHeaderColor: 0.60 0.60 0.60
+
+//
+// Parameter - Button/menu
+//
+
+ButtonGradHi: button
+ButtonGradLow: button
+ButtonNonActiveGradLow: bg_low // low end of gradient on non-selected tabs
+
+ButtonShadowLight: bg_high // also: line above spreadsheet pane, lines above and left of playbar, scene viewer menu buttons, network editor menu
+ButtonShadowMed: separator // lines between playbar buttons, stowbar arrows, line around some parameter folders
+ButtonShadowMedDark: selection // selected sceneviewer toolbar item
+ButtonShadowDark: bg_high // borders on ui buttons & menus
+ButtonShadow: separator // borders on some ui buttons
+
+ButtonText: text
+ButtonHoverHighlight: white
+ButtonPressedText: white
+
+ButtonPressedText2: GREY(0.1) // scene viewer toolbar buttons
+ButtonPressedGradHi: selection // scene viewer toolbar buttons
+ButtonPressedGradLow: selection // scene viewer toolbar buttons
+
+ButtonMenuArrowHi: bg_high
+ButtonMenuArrowLow: bg_high
+ButtonMenuArrow: selection
+ButtonArrow: selection
+ButtonArrowDisabled: bg_low
+ButtonArrowPressed: bg_low
+ButtonArrowModified: SHADOW1
+
+MenuBG: bg_high // network editor menu bar
+MenuText: text
+MenuTextDisabled: SHADOW2
+MenuTextHotkey: SHADOW2
+MenuHighlight: GREY(0.1)
+MenuShadow: GREY(0.1)
+MenuTextSelected: white
+MenuSelectedBG: selection
+MenuTitleBG: bg_low
+InvertedMenuBackground: GREY(0.8)
+
+HyperTextLinkColor: 1.0 0.0 1.0 // buttons that simulate a hypertext link (may be not used)
+
+//
+// Parameter - Check
+//
+
+CheckBG: button
+CheckLocated: selection
+CheckColor: text
+
+//
+// Parameter - Ladder
+//
+
+LadderBG: button
+LadderText: text
+LadderHighlight: selection
+LadderOutline: border
+LadderShadow: red
+
+//
+// Parameter - Lever slider
+//
+
+LeverSliderBG: GREY(0.12)
+LeverSliderTopBevel: GREY(0.16)
+LeverSliderBottomBevel: GREY(0.32)
+LeverSliderLeftBevel: GREY(0.17)
+LeverSliderRightBevel: GREY(0.25)
+LeverSliderFilledBevelTop: #3d4a60
+LeverSliderFilled: #4b5f7d
+LeverSliderFilledBevelBottom: #272a30
+LeverSliderTick: GREY(0.17)
+LeverSliderValueText: GREY(0.75)
+LeverSliderThumbText: GREY(0.77)
+LeverSliderThumbTopBevel: GREY(0.36)
+LeverSliderThumbBottomBevel: GREY(0.09)
+LeverSliderThumbTopBorder: GREY(0.2)
+LeverSliderThumbBottomBorder: black
+LeverSliderThumbGradBottom: GREY(0.22)
+LeverSliderThumbGradTop: GREY(0.36)
+LeverSliderThumbRangeArrow: black
+LeverSliderThumbPressedGradBottom: selection
+LeverSliderThumbPressedGradTop: selection
+
+//
+// Parameter - Radio
+//
+
+RadioBG: button
+RadioBorder: border
+RadioDot: text
+RadioDotHighlight: selection
+
+//
+// Parameter - Ramp
+//
+
+RampBG: #170702
+RampFG: #382100
+RampBGDisabled: GREY(0.3)
+RampFGDisabled: GREY(0.45)
+RampGrid: GREY(0.3)
+RampCurve: #804C00
+RampCurveDisabled: SHADOW2
+RampKeyBG: #750046
+RampKeyFG: BUTTON_PRESS
+RampKeyDisabled: SHADOW2
+RampKeyHoverBG: SELECTION_HILIGHT2
+RampKeyHoverFG: SELECTION_BASE
+RampHandleBG: #004A98
+RampHandleFG: #FF9600
+RampHandleHoverBG: #004a98
+RampHandleHoverFG: white
+RampHandleLines: #004a98
+RampHandleLinesHover: white
+RampBoxSelect: GREY(0.3)
+RampMarkerHover: BUTTON_SEL
+RampConstraintGuide: BUTTON_SEL
+RampOutOfRangeBG: black
+RampOneLine: GREY(0.8)
+RampPushingLine: YELLOW
+RampRetractingLine: GREEN
+RampGrayscaleCurve: 0.0 0.7 1
+
+//
+// Parameter - Range slider
+//
+
+RangeSliderBackground: EDIT_BG
+RangeSliderRect: GREY(0.45)
+RangeSliderRectLocated: GREY(0.65)
+RangeSliderRectSelected: GREY(1.00)
+RangeSliderArrow: GREY(0.65)
+RangeSliderArrowLocated: GREY(0.85)
+RangeSliderArrowSelected: GREY(1.00)
+
+//
+// Parameter - Separator
+//
+
+Separator: bg_low // also: line above network editor menu, line below some pane tabs, line in scene viewer menus
+
+//
+// Parameter - Slider
+//
+
+SliderTopBorder: bg_low
+SliderBottomBorder: bg_low
+SliderAdvancedBevel: selection
+SliderAdvancedGroove: selection
+SliderRemainingBevel: bg_low
+SliderRemainingGroove: bg_low
+SliderTick: selection
+SliderTickLabel: selection
+SliderRangeBrackets: selection
+
+SliderThumbGradHi: selection
+SliderThumbGradLow: selection
+SliderThumbPressedGradHi: PRESSED_HIGH
+SliderThumbPressedGradLow: PRESSED_LOW
+SliderThumbTopBorder: separator
+SliderThumbTopBevel: selection
+SliderThumbBottomBevel: selection
+SliderThumbBottomBorder: separator
+SliderThumbRangeArrow: black
+
+//
+// Parameter - Textbox
+//
+
+TextboxBG: bg_low // also: python shell shadow
+TextboxInvalidBG: 0.95 0.56 0.56
+TextboxBorderPrimary: bg_high
+TextboxBorderHighlight: bg_high
+TextboxBorderStippled: selection
+TextboxBorderKeyFocus: selection
+TextboxError: error
+TextboxGutter: bg_high
+TextboxDropMarker: HSV 238 0.40 0.88
+TextboxFeedbackFG: GREY(0.5)
+TextboxFeedbackBG: UNK
+SelectedTextFG: GREY(0.5)
+SelectedTextBG: #ffff00 // selection, cursor
+SelectedTextDisabledBG: GREY(0.3)
+
+//
+// Path gadget
+//
+
+PathGadgetArrow1: selection
+PathGadgetArrow2: selection
+PathGadgetArrow3: selection
+PathGadgetArrow1Selected: selection
+PathGadgetArrow2Selected: selection
+PathGadgetArrow3Selected: selection
+PathGadgetPrimaryBorder: bg_high
+PathGadgetSecondaryBorder: bg_high
+PathGadgetPrimaryBorderSelected: selection
+PathGadgetSecondaryBorderSelected: selection
+PathGadgetBevel: bg_high
+PathGadgetBevelSelected: selection
+PathGadgetText: GREY(0.9)
+PathGadgetGradHi: bg_high
+PathGadgetGradLow: bg_high
+PathGadgetGradHiSelected: selection
+PathGadgetGradLowSelected: selection
+PathGadgetHistoryButtonBevel: bg_high
+PathGadgetHistoryButtonBevelSelected: selection
+
+//
+// Performance
+//
+
+PerformanceGood: 0.45 0.82 0.08
+PerformanceBad: 0.8 0 0
+PerformanceWarn: #F87431
+
+RecordBtnFlash: #E61717
+
+NetworkPerformanceGood: #95A084
+NetworkPerformanceBad: #D4AA9E
+NetworkPerformanceWarn: #B0A957
+
+//
+// Playbar/dope sheet
+//
+
+PlayBarOnColor: 0.05 0.8 0.05
+PlayBarOffColor: 0.25 0.25 0.25
+PlayBarDisabledColor: 0.4 0.4 0.4
+PlayBarResetColor: 1 1 0.0
+PlayBarNoPending: 0 0.8 0
+PlayBarNoPending2: 0 1 0
+PlayBarPending: 0.75 0.75 0.5
+PlayBarPending2: 1 1 0.5
+PlayBarAudioWaveColor: 0.643 0.643 0.643
+PlayBarStartEndFieldBG: EDIT_BG
+PlayBarGStartEndFieldBG: GREY(0.125)
+
+Bookmark1: 0.11 0.62 0.47
+Bookmark2: 0.85 0.37 0.10
+Bookmark3: 0.46 0.44 0.70
+Bookmark4: 0.91 0.16 0.54
+Bookmark5: 0.40 0.65 0.12
+Bookmark6: 0.90 0.67 0.10
+Bookmark7: 0.65 0.46 0.11
+
+KeyframeButtonSelectedGradHi: selection
+KeyframeButtonSelectedGradLow: selection
+KeyframeButtonLocatedGradHi: GREY(0.405)
+KeyframeButtonLocatedGradLow: GREY(0.274)
+KeyframeButtonGradHi: GREY(0.337)
+KeyframeButtonGradLow: GREY(0.228)
+KeyframeButtonCircleKey: #7ED321
+KeyframeButtonCircleSomeKey: #356600
+KeyframeButtonCircleNoKey: HSV 180  0.5  0.5
+KeyframeButtonCirclePending: HSV 39 1 0.9
+KeyframeButtonBorder: black
+KeyframeButtonCircleFillOpacity: GREY(0.2)
+
+DopeSheetCurrentFrameFG: white
+DopeSheetCurrentFrameBG: black
+DopeSheetHoverFrameFG: white
+DopeSheetHoverFrameBG: DRKBASE
+DopeSheetHoverLine: GREY(0.5)
+DopeSheetSimulationPlaying: 0.59 0.48 0.7
+DopeSheetTimeline: GREY(0.7)
+DopeSheetIndicatorLine: black
+DopeSheetIndicatorClickLine: white
+DopeSheetIndicatorOverLine: GREY(0.5)
+DopeSheetKnob: black
+DopeSheetKnobClick: white
+DopeSheetKnobOver: GREY(0.5)
+DopeSheetKnobPendingKey: SELECTION_BASE
+DopeSheetKnobOutlier: 1 1 0
+DopeSheetKeyActive: HSV 88 0.96 0.46
+DopeSheetKeyPartial2: HSV 88 1.0 0.3
+DopeSheetKeyPartial: HSV 88 0.96 0.7
+DopeSheetKeyPending: SELECTION_BASE
+DopeSheetKeyMuted: GREY(0.2)
+DopeSheetKeyOverlay: 1 0 0
+DopeSheetKeyDisabled: 0.5 0 1
+DopeSheetKeySelected: SELECTION_HIGHLIGHT2
+DopeSheetKeySelectedBorder: black
+DopeSheetKeySelecting: 1 0.45 0.25
+DopeSheetKeySelectingBorder: red
+DopeSheetOutsideRangeBG: GREY(0.3)
+DopeSheetSimulation: 0 0.5 1
+DopeSheetSimulationReset: 1 0.5 0
+DopeSheetTimelineAudio: GREY(0.5)
+DopeSheetTickLarge: GREY(0.6)
+DopeSheetTickSmall: GREY(0.45)
+DopeSheetTickSmallAudio: GREY(0.35)
+DopeSheetTickNumber: GREY(0.5)
+DopeSheetRangeNumber: GREY(0.3)
+DopeSheetRowDisabled: black
+DopeSheetRowLight: LISTA
+DopeSheetRowDark: LISTB
+DopeSheetColLine: black
+DopeSheetRowLine: black
+DopeSheetViewLock: GREY(0.5)
+DopeSheetSelection: HSV 60 1.0 0.5
+DopeSheetSelectionHover: HSV 60 0.5 0.9
+DopeSheetSelectionActive: HSV 60 0.5 0.9
+DopeSheetSelectionInactive: HSV 60 0.9 0.7
+DopeSheetSelectionInactiveLock: 1 0 1
+DopeSheetSelectionText: black
+DopeSheetSelectionRemove: 1 0 0
+DopeSheetOverwriteHover: 1 0 0
+DopeSheetOverwriteActive: 0.7 0 0
+DopeSheetOverwriteInactive: 0.9 0 0
+DopeSheetSpreadSheetText: black
+DopeSheetSpreadSheetDisabled: 0.07 0 0
+DopeSheetRippleTool: 1 1 0
+
+//
+// Popups
+//
+
+CreateAssetVersion: #ffcccc // pink
+CreateAssetScope: #ccccff // blue
+CreateAssetAuthor: #ccffff // cyan
+CreateAssetBranch: #ccffcc // green
+CreateAssetBasename: #ffffcc // yellow
+
+InfoBG: black
+InfoText: text
+
+PopupHelpBG: black
+PopupHelpFG: text
+PopupHelpHotkeyFG: SHADOW2
+PopupExtraHelpFG: text
+PopupExtraHelpBG: HSV 220 0.425 0.4
+
+DialogBlendBG: DRKBASE // messages, etc
+
+GalleryBackground: GREY(0.15)
+SnapshotGalleryBackground: black
+
+SwitchButtonSelected: GREY(0.5)
+SwitchButtonLocated: GREY(0.2)
+
+AssetBannerBackground: GREY(0.12)
+AssetUpdateStatusBackground: 0.19 0.28 0.38
+AssetUpdateStatusText: white
+OrboltSplashscreenProgressbar: 0.19 0.28 0.38
+
+PopupWindowTextColor: white
+BlueTextLinkColor: #FF00FF
+
+//
+// Popup - Operator type manager
+//
+
+OTLUnusedColor: 0.70 0.10 0.10
+OTLOutOfDateColor: 0.70 0.70 0.10
+OTLPreferredColor: 0.20 0.70 0.20
+
+//
+// Popup - Progress meter
+//
+
+ProgressMeterPercentLabelLeft: black
+ProgressMeterPercentLabelRight: white
+ProgressMeterTopBorder: bg_high
+ProgressMeterBottomBorder: bg_high
+ProgressMeterWellGradHi: WELL
+ProgressMeterWellGradLo: WELL
+ProgressMeterBevelTop: white
+ProgressMeterBevelBottom: SELECTION_SHADOW
+ProgressMeterGradHi: SELECTION_HIGHLIGHT2
+ProgressMeterGradLo: SELECTION_BASE
+ProgressMeterText: text
+
+//
+// Scrollbar
+//
+
+ScrollbarUpperBorder: bg_low
+ScrollbarBottomBorder: separator
+ScrollbarWell: bg_low
+ScrollbarWellShadow1: bg_low
+ScrollbarWellShadow2: bg_low
+ScrollbarWellShadow3: bg_low
+ScrollbarWellShadowBlend12: bg_low
+ScrollbarWellShadowBlend13: bg_low
+ScrollbarWellShadowBlend22: bg_low
+ScrollbarWellShadowBlend23: bg_low
+ScrollbarWellShadowBlend32: bg_low
+ScrollbarWellShadowBlend33: bg_low
+ScrollbarThumbTopBorder: separator
+ScrollbarThumbBottomBorder: separator
+ScrollbarThumbBevel: separator
+ScrollbarThumbGrippyBase: selection
+ScrollbarThumbGrippyEdge: selection
+ScrollbarButtonTopBorder: separator
+ScrollbarButtonBottomBorder: separator
+ScrollbarButtonBetweenBorder: DRKBASE
+ScrollbarButtonBevel: separator
+ScrollbarButtonArrow: selection
+ScrollArrow: bg_low
+ScrollArrowSelected: BUTTON_SEL
+ScrollArrowDisabled: DRKGRADLOW
+
+//
+// Shaded pick box (??)
+//
+
+ShadedPickOutline: 0.6 0.6 0.6
+ShadedPickInnerLine: 0.3 0.3 0.3
+ShadedPickFill: 0.2 0.2 0.2
+
+//
+// Simulation tree view
+//
+
+SIMAltRepColor: 0.20 0.70 0.20
+SIMObjectColor: 0.00 0.00 0.00
+SIMDataColor: 0.00 0.00 0.00
+SIMRelDataColor: 0.00 0.00 0.00
+SIMRecordColor: 0.00 0.00 0.00
+SIMAffectorsColor: 0.00 0.00 0.00
+SIMGroupsColor: 0.00 0.00 0.00
+SIMEngineColor: 0.00 0.00 0.00
+SIMEngineInterpColor: 0.70 0.70 0.10
+SIMAffectorColor: 0.10 0.10 0.60
+SIMMutualColor: 0.20 0.70 0.20
+SIMAlmostMutualColor: 0.70 0.70 0.10
+
+//
+// Split bar
+//
+
+SplitBarBackground: separator
+SplitBarEdgeColor: selection // grabber
+SplitBarLightColor: bg_low // also: minimized stowbar line
+SplitBarDarkColor: separator //
+SplitBarPaneOutline: bg_low // ?
+SplitBarGrippyColor: selection // grabber
+SplitBarHighlight: selection
+// SplitBarBackground + SplitBarHighlight*0.2
+SplitBarHighlight2: 0.432 0.392 0.313
+
+//
+// Status bar
+//
+
+StatusBarMessageFG: text
+StatusBarMessageBG: bg_high
+StatusBarPromptFG: text
+StatusBarPromptBG: HSV 40 0.6 0.6
+StatusBarWarningFG: text
+StatusBarWarningBG: HSV 0 0.6 0.5
+StatusBarErrorFG: text
+StatusBarErrorBG: HSV 0 1 1
+
+//
+// Toolbars
+//
+
+ToolbarBevelLight: bg_high // stowbar toggle borders, line above playbar, line above geo spreadsheet
+ToolbarBevelDark: GREY(0.2)
+ToolbarFlatGradHi: bg_high // top/left end of gradient
+ToolbarFlatGradLo: bg_high // bottom/right end of gradient
+
+//
+// Tool shelf
+//
+
+ShelfGradHi: bg_high
+ShelfGradMidHi: bg_high
+ShelfGradMidLow: bg_high
+ShelfGradLow: bg_high
+ShelfBG: bg_high // Does not seem to be used
+ShelfEmptyBG: bg_high
+ShelfTabActiveHi: bg_high
+ShelfTabActiveLow: bg_high
+ShelfTabInactiveHi: bg_low
+ShelfTabInactiveLow: bg_low
+
+//
+// Tree
+//
+
+TreeNodeBG: LISTA
+TreeNodeAlternateBG: LISTB
+TreeNodeSelectedBG: SELECTION_BASE
+TreeNodeSelectedFG: white
+TreeNodeReservedParmFG: SHADOW3
+TreeNodeInvisibleParmFG: text
+TreeNodeInvisibleReservedParmFG: SHADOW3
+#TreeNodeInvisibleParmFG: 0.70 0.80 0.95
+#TreeNodeInvisibleReservedParmFG: 0.45 0.50 0.58
+TreeLine: ARROW
+
+//
+// Viewport
+//
+
+ViewportBorder: DRKBASE
+ViewportDividers: bg_high
+ViewportInspectBox: GREY(0.8)
+ViewportInspectBorder: GREY(0.3)
+ViewportInspectText: black
+ImageViewportBorder: GREY(0.2)
+ImageViewportBorderCurrent: 0.0 0.6 0.0
diff --git a/config/UIDark_unused.inc b/config/UIDark_unused.inc
new file mode 100644
index 0000000..6fc73fe
--- /dev/null
+++ b/config/UIDark_unused.inc
@@ -0,0 +1,266 @@
+//
+// Imports
+//
+
+#include "basic_colors.inc"
+#include "hc_colors.inc"
+
+//
+// Syntax
+//
+// Syntax highlighting in editors and input boxes
+
+ParmSyntaxPlainColor: #bcbec3
+ParmSyntaxStringColor: #79a978
+ParmSyntaxVarColor: #c892ca
+ParmSyntaxFuncColor: #8888c1
+ParmSyntaxKeywordColor: #6799c0
+ParmSyntaxQuoteColor: #c59172
+ParmSyntaxNumberColor: #ebb845
+ParmSyntaxRefColor: #d2cf9c
+ParmSyntaxCommentColor: #7b7e84
+ParmSyntaxErrorColor: #e14640
+ParmSyntaxTypeColor: #93d4eb
+ParmSyntaxExtraColor: #8b588a
+
+ParmParenMatchColor: #FFB41F // Gold
+ParmQuoteMatchColor: #FFB41F // Gold
+ParmMisMatchColor: #E14640 // Red
+
+PreEditUnderlineColor: SELECTION_BASE
+TextboxLineNumberFG: text
+TextboxLineNumberBG: DRKBASE
+TextboxLineNumberHighlight: DRKGRADHIGH
+
+//
+// Parameters
+//
+
+ButtonColor: DRKGRADHIGH
+ButtonStripColor: UNK
+SliderColor: GREY(0.65)
+SliderThumbColor: GREY(0.68)
+InputColor: GREY(0.70)
+RadioColor: GREY(0.60)
+
+//
+// Scene graph panes
+//
+
+UsdLocationHasArcs: #3E9E2E
+UsdLocationIsInstance: #87CEFA
+UsdLocationInPrototype: #7688D9
+UsdLocationUnloaded: #5E2E15
+UsdLocationLoaded: #DE9E2E
+UsdLayerMuted: #9090E0
+UsdLayerHasOpinion: #E07000
+UsdLayerChildHasOpinion: #A04000
+UsdLayerModifiedByCurrentLop: #40A000
+
+UsdAttrResolveFallback: #DE9E2E
+UsdAttrResolveDefault: #87CEFA
+UsdAttrResolveValueClips: #E696E6
+UsdAttrResolveTimeSamples: #B1CF99
+UsdAttrResolveNone: grey50
+UsdRelationship: #E68484
+UsdComputed: #8484E6
+
+UsdPrimSelected: SELECTION_BASE
+UsdPrimSelectedAlpha: 0.4
+UsdChildPrimSelected: 0.44 0.22 0.11
+UsdChildPrimSelectedAlpha: 0.4
+UsdPrimModified: 0.30 0.80 0.80
+UsdPrimModifiedAlpha: 0.4
+UsdChildPrimModified: 0.15 0.40 0.40
+UsdChildPrimModifiedAlpha: 0.4
+
+//
+// Network editor: node flags
+//
+
+SelectOnColor: 0.75 0.75 0
+SelectOffColor: 0.56 0.56 0
+DisplayOnColor: 0.3 0.5 1
+DisplayOffColor: 0.2 0.3 0.6
+TemplateOnColor: 1 0.5 1
+TemplateOffColor: 0.75 0.37 0.75
+BypassOnColor: 1 0.5 0
+BypassOffColor: 0.5 0.25 0
+SelectableOnColor: 0.6 0.35 0.2
+SelectableOffColor: 0.4 0.2  0.15
+ExposeOnColor: 1 0 0
+ExposeOffColor: 0.6 0 0
+CurrentColor: 0.25 0.85 0.25
+
+//
+// Statusbar
+//
+
+MessageColor: 0.0 0.0 0.0
+PromptColor: 0.3 0.4 0.9
+WarningColor: 0.85 0.25 0.0
+ErrorColor: error
+
+//
+// Network editor
+//
+
+NodeConnectionDefaultBG: GREY(0.5)
+NodeConnectionTextBG: 0.415 0.395 0.44
+NodeConnectionGlow: HSV 40 0.5 1
+NodeConnectionArrowLight: black
+NodeConnectionArrowDark: black
+NodeConnectionBevel: GREY(0.6)
+NodeConnectionTopBorder: GREY(0.2)
+NodeConnectionBottomBorder: GREY(0.2)
+
+NodeButtonGrad: GREY(0.5)
+NodeButtonSelectedGrad: UNK // NodeButtonSelectedGrad does not seem to be used anymore
+NodeButtonBevel: GREY(0.55)
+NodeButtonBevelSelected: UNK
+NodeSeparator: GREY(0.2)
+NodeSeparatorEnabled: GREY(0.33)
+NodeError: error
+NodeWarningBG: black
+NodeWarningFG: 1.0 0.87 0
+NodeDefaultBG: DRKBASE
+NodeHighlight: 0 0.68 0.94
+NodeDebugFG: 0.741 0.988 1
+
+NodeTemplateFlag: #FF66FF
+NodeSelectableTemplateFlag: #CC33CC
+NodeBypassFlag: 1.0 1.0 0
+NodeRenderFlag: 0.666 0.5 1.0
+NodeDisplayFlag: 0 0.4 0.8
+NodeDisplayAndRenderFlag: 0 0.68 0.94
+NodeOutputFlag: 0.75 0.4 0.0
+NodeSelectableFlag: 0.4 0.8 0
+NodeExportFlag: 0.75 0.4 0.0
+NodeHiddenFlag: 0.58 0.55 0.43
+NodeAudioFlag: 0.0 0.5 0.5
+NodeThumbnailFlag: 0.35 0.6 0.2
+NodeLockFlag: #FF3300
+NodeSoftLockFlag: #C4E361
+NodeLoadedWithUnloadFlagOn: 1.0 0.0 1.0
+NodeDebugFlag: 0.741 0.988 1
+
+NetworkSelection: HSV 65 1 0.95
+NetworkCurrent: HSV 45 1 0.95
+NetworkCurrentNonSelected: GREY(1.0)
+NetworkBackground: DRKBASE
+NetworkDisplayHighlight: 0.257 0.396 0.521
+NetworkRenderHighlight: 0.375 0.310 0.498
+NetworkOutputHighlight: 0.75 0.4 0.0
+NetworkTemplateHighlight: #FF66FF
+NetworkLegacyHighlight: #FF3333
+NetworkOverviewDragger: white
+NetworkTimeDependent: 0.0 1.0 0.0
+
+NetworkGrid: GREY(0.29)
+
+NetworkWireNormal: GREY(.55)
+NetworkWireActive: HSV 45 0.6 0.55
+NetworkWireActiveLight: HSV 45 0.65 0.8
+NetworkWireHighlight: 1.0 1.0 0.0
+NetworkWireShadow: black
+NetworkWireExtraNormal: HSV 160 0.6 0.55
+NetworkWireExtraActive: HSV 0 0.6 0.55
+NetworkWireExtraActiveLight: HSV 0 0.65 0.8
+NetworkWireIKNormal: HSV 240 0.6 0.55
+NetworkWireIKActive: HSV 240 0.6 0.55
+NetworkWireIKActiveLight: HSV 240 0.65 0.8
+NetworkWireOutputOverrideNormal: 1.0 1.0 1.0
+NetworkWireOutputOverrideHighlight: 1.0 0.784 0.0
+NetworkWireTimeDepNormal: 0.0 1.0 0.0
+NetworkWireLoopBack: HSV 180 1.0 1.0 1.0
+NetworkWirePassThrough: HSV 180 1.0 1.0 1.0
+
+//
+// SHOP viewer
+//
+
+ShopViewTitleColor 1.0 1.0 0.0
+
+//
+// VOP input/output labels
+//
+
+VopInOutVectorColor: #60C279
+VopInOutVectorArrayColor: #448C69
+VopInOutVector2Color: #27FF00
+VopInOutVector2ArrayColor: #178902
+VopInOutVector4Color: #C6FF00
+VopInOutVector4ArrayColor: #6F8F00
+VopInOutNormalColor: #A4A4FF
+VopInOutColorColor: #FF24FF
+VopInOutFloatColor: #55D2C5
+VopInOutFloatArrayColor: #218278
+VopInOutIntColor: #45B5FF
+VopInOutIntArrayColor: #21668A
+VopInOutStringColor: #CCB299
+VopInOutStringArrayColor: #A97442
+VopInOutMatrix2Color: #D367FF
+VopInOutMatrix2ArrayColor: #783A91
+VopInOutMatrix3Color: #B367FF
+VopInOutMatrix3ArrayColor: #6A488C
+VopInOutMatrix4Color: #7F68FE
+VopInOutMatrix4ArrayColor: #5B5195
+VopInOutPointColor: #EF99D5
+VopInOutBsdfColor: #F8E71C
+VopInOutStructColor: #DE796E
+VopInOutStructArrayColor: #A45858
+VopInOutMethodColor: #FF9900
+VopInOutMultiColor: #E5E5E5
+VopErrorColor: error
+VopInOutDictColor: #D29628
+VopInOutDictArrayColor: #B5700A
+
+//
+// COP input/output labels
+//
+
+CopInOutIntColor: #99DDFF
+CopInOutFloatColor: #77AADD
+CopInOutVector2Color: #EE8866
+CopInOutVectorColor: #44BB99
+CopInOutVector4Color: #BBCC33
+CopInOutGeometryColor: #FFAABB
+CopInOutMetadataColor: #DDDDDD
+CopInOutUndefColor: #FFFFFF
+
+//
+// SHOP input/output labels
+//
+
+ShopInOutSurfaceColor: #e5b299
+ShopInOutShadowColor: #33334c
+ShopInOutDisplaceColor: #99b2e5
+ShopInOutGeometryColor: #b2e5b2
+ShopInOutLightColor: #e5e599
+ShopInOutFogColor: #b2b2b2
+ShopInOutPropertiesColor: #7fcce5
+ShopInOutShaderColor: #e5e5e5
+ShopInOutImage3dColor: #66e5b2
+ShopInOutImage3dArrayColor: #4cb299
+
+//
+// DOP input/output labels
+//
+
+DopInOutObjectColor: #a5a5a5
+DopInOutDataColor: #7fcc7f
+DopInOutRelDataColor: #339933
+DopInOutSolverColor: #b27fe5
+DopInOutAnyColor: #e5e5e5
+
+//
+// TOP graph nodes
+//
+
+TopInOutColor_file: #919191
+TopInOutColor_file/image: #55D2C5
+TopInOutColor_file/geo: #008FEE
+TopInOutColor_file/csv: #FF6600
+TopInOutColor_file/movie: #5AAA00
+TopInOutColor_file/archive: #BEC43F
+TopInOutColor_nonfile: #D05ADD
diff --git a/config/hc_colors.inc b/config/hc_colors.inc
new file mode 100644
index 0000000..960c034
--- /dev/null
+++ b/config/hc_colors.inc
@@ -0,0 +1,83 @@
+//

+// Basics

+//

+

+#define GREY(g)  g g g

+#define black    GREY(0.0)

+#define white    GREY(1)

+

+#define RED      1 0 0

+#define red      #FF0000

+#define GREEN    0 1 0

+#define BLUE     0 0 1

+#define CYAN     0 1 1

+#define YELLOW   1 1 0

+#define MAGENTA  1 0 1

+

+#define PINK     1 0.8 0.8

+#define MINT     0.8 1 0.8

+#define LTBLUE   0.5 0.5 1

+#define LTYELLOW 1 1 0.5

+#define ORANGE   1 0.5 0

+#define BROWN	 #8C6238

+

+//

+// New variables

+//

+

+#define selection  GREY(0.5)

+#define border selection

+

+#define bg_high    #303132

+#define bg_medium  #363738

+#define bg_low     #1E1E1F

+

+#define button     #404040

+

+#define bevel_high GREY(0.52)

+#define bevel_low  black

+

+#define separator  #363738

+#define error      1 0 0

+

+#define text       #ACDAD5

+

+//

+// Old variables

+//

+

+#define DRKBASE              GREY(0.179)

+#define DRKGRADHIGH          GREY(0.1)

+#define DRKGRADLOW           #1F1F1F

+#define WELL                 GREY(0.15)

+#define LISTA                DRKBASE

+#define LISTB                DRKGRADLOW

+#define TOOLBAR              #1A0F00

+

+#define UNK                  1 0 1

+

+#define DARK                 GREY(0.2)

+#define ARROW                GREY(0.516) // some disabled text

+

+#define SHADOW1_5            GREY(0.699)

+#define SHADOW2              GREY(0.63)

+#define SHADOW3              GREY(0.58)

+

+#define PRESSED_HIGH         #4A5E73

+#define PRESSED_LOW          #768EA7

+

+#define SELECTION_BASE       #FF9600

+#define SELECTION_HIGHLIGHT2 1 0.9 0.5

+#define SELECTION_SHADOW     1 0.4 0

+

+#define BUTTON_SEL           SELECTION_BASE

+#define BUTTON_PRESS         SELECTION_BASE

+#define BASE_ALT             GREY(0.151) // effect in spreadsheet

+

+#define EMPTY                DRKBASE

+

+#define TEXT_HIGHLIGHT       GREY(0.9)

+

+#define EDIT_BG              GREY(0.075) // Textbox bg

+#define EDIT_BG_HIGHLIGHT    GREY(0.18)  // Textbox border

+#define EDIT_BG_OUTLINE      GREY(0.14)  // Textbox border

diff --git a/desktop/Build copy.desk b/desktop/Build copy.desk
new file mode 100755
index 0000000..bf5fe6d
--- /dev/null
+++ b/desktop/Build copy.desk	
@@ -0,0 +1,59 @@
+fullscreen   -1
+playbarshown 1
+playbar      -1
+shelf        -1
+menubar      -1
+statusbar    -1
+radial menu set main
+root {
+    split 0.5 H {
+        split 0.299034 V {
+            tabs 0 1 {
+                pane panetab4 -a 1 -l 10 -H /obj/ -T OBJ -m sceneview
+                pane copy_of_panetab6_1 -a 1 -l 10 -H /img/ -T IMG -m imageview
+            }
+            tabs 0 1 {
+                pane panetab2 -a 1 -l 10 -H /obj/ -T OBJ -m details
+            }
+        }
+        split 0.658706 V {
+            tabs 0 1 {
+                pane panetab3 -a 1 -l 10 -H /obj/ -T OBJ -m parmeditor
+                pane panetab5 -a 0 -l 0 -H /obj/ -T OBJ -m python
+            }
+            tabs 0 1 {
+                pane panetab1 -a 0 -l 0 -H /obj/ -T OBJ -m neteditor
+            }
+        }
+    }
+}
+shelfdock -o 0 -l small_icon -G 0.50 add my_shelf_set
+viewerstow -x stow -b stow -l stow -m hide -c hide -d open ${DESKNAME}.panetab4.world
+vieweroption -a 0 ${DESKNAME}.panetab4.world
+viewlayout -s 2 ${DESKNAME}.panetab4.world
+viewtype -t ortho_right ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",4)`
+viewtype -t ortho_front ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",3)`
+viewtype -t ortho_top ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",1)`
+viewtype -t perspective ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",2)`
+geospreadsheet -c 0 -l horizontal -s 0.5 -m none -f 0 panetab2
+scenegraphtree -S 0.25 -m 2 -p "/collections /lights" -c  -i  -o  -x 1 -s 1 -M 0 -C primtype,childcount,kind,populated,loaded,activation,visibility,solo,selectability  panetab2
+parmeditor -T 0.25 -w 0 panetab3
+networkeditor -p '{\n	"backgroundimagebrightness":"1.0",\n	"gridmode":"2",\n	"showcopsmenu":"1",\n	"taskgraphcollapsemode":"Off",\n	"showtasksmenu":"1",\n	"useworkitemcolorattribute":"1",\n	"typesidebarsplit":"0.25",\n	"showmenu":"1",\n	"gridxstep":"8.0",\n	"treesplit":"0.25",\n	"showparmdialogmax":"1",\n	"perfstatname":"Time",\n	"palettemode":"0",\n	"taskgraphsortdirection":"0",\n	"showchilddep":"1",\n	"backgroundimageediting":"0",\n	"showtaskgraphperf":"0",\n	"showgrouplist":"0",\n	"showperfstats":"1",\n	"showparmdialog":"0",\n	"overviewmode":"2",\n	"showdep":"0",\n	"palettecolors":"",\n	"showspareinputdep":"1",\n	"workitemcolorattribute":"",\n	"palettesize":"300 300",\n	"showtypesidebar":"0",\n	"showtree":"0",\n	"overviewbounds":"0.000000 0.000000 440.700000 285.900000",\n	"taskgraphperfstatname":"Cook Time",\n	"gridystep":"6.0",\n	"taskgraphsortcriteria":"Automatic",\n	"workitemattrtocollapseby":"",\n	"grouplistsplit":"0.75"\n}\n' panetab1
+netcolumns -c display,xray,select,origin,capture,bone -n OBJ panetab1
+netcolumns -c display,render,template,selectabletemplate,highlight,unload,bypass,lock -n SOP panetab1
+netcolumns -c delscript,comment -n CHOPNET panetab1
+netcolumns -c display,export,audio,bypass,lock -n CHOP panetab1
+netcolumns -c startrender,bypass,lock -n ROP panetab1
+netcolumns -c delscript,comment -n SHOP panetab1
+netcolumns -c display,render,template,bypass -n COP2 panetab1
+netcolumns -c delscript,comment -n IMG panetab1
+netcolumns -c delscript,comment,input -n VOP panetab1
+netcolumns -c delscript,comment -n VOPNET panetab1
+netcolumns -c delscript,comment -n DOP panetab1
+netcolumns -c delscript,comment -n TOP panetab1
+netcolumns -c delscript,comment -n TOPNET panetab1
+netcolumns -c display,bypass,delscript,comment,input -n LOP panetab1
+netcolumns -c display,export,template,selectabletemplate,bypass -n COP panetab1
+netcolumns -c delscript,comment -n MGR panetab1
+netcolumns -c delscript,comment -n DIR panetab1
+netcolumns -c delscript,comment -n DATA panetab1
diff --git a/desktop/hc_desktop.desk b/desktop/hc_desktop.desk
new file mode 100644
index 0000000..76bbf76
--- /dev/null
+++ b/desktop/hc_desktop.desk
@@ -0,0 +1,52 @@
+fullscreen   -1
+playbarshown 1
+playbar      -1
+shelf        0
+menubar      -1
+statusbar    -1
+radial menu set hc_radial_sceneviewer
+root {
+    split 0.5 H {
+        tabs 0 1 {
+            pane panetab4 -a 1 -l 10 -H /obj/ -T OBJ -m sceneview
+            pane copy_of_panetab6_1 -a 1 -l 10 -H /img/ -T IMG -m imageview
+        }
+        split 0.658706 V {
+            tabs 1 1 {
+                pane panetab3 -a 1 -l 10 -H /obj/ -T OBJ -m parmeditor
+                pane panetab5 -a 0 -l 0 -H /obj/ -T OBJ -m python
+            }
+            tabs 0 1 {
+                pane panetab1 -a 0 -l 0 -H /obj/ -T OBJ -m neteditor
+            }
+        }
+    }
+}
+shelfdock -o 0 -l text -G 0.50 add my_shelf_set
+viewerstow -x stow -b stow -l stow -m hide -c hide -d stow ${DESKNAME}.panetab4.world
+vieweroption -a 2 ${DESKNAME}.panetab4.world
+viewlayout -T h ${DESKNAME}.panetab4.world
+viewtype -t ortho_right ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",4)`
+viewtype -t ortho_front ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",3)`
+viewtype -t ortho_right ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",1)`
+viewtype -t perspective ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",2)`
+parmeditor -T 0.25 -w 0 panetab3
+networkeditor -p '{\n	"backgroundimagebrightness":"1.0",\n	"gridmode":"2",\n	"showcopsmenu":"1",\n	"taskgraphcollapsemode":"Off",\n	"showtasksmenu":"1",\n	"useworkitemcolorattribute":"1",\n	"typesidebarsplit":"0.25",\n	"showmenu":"0",\n	"gridxstep":"8.0",\n	"treesplit":"0.25",\n	"showparmdialogmax":"1",\n	"perfstatname":"Time",\n	"palettemode":"0",\n	"taskgraphsortdirection":"0",\n	"showchilddep":"1",\n	"backgroundimageediting":"0",\n	"showtaskgraphperf":"0",\n	"showgrouplist":"0",\n	"showperfstats":"1",\n	"showparmdialog":"0",\n	"overviewmode":"2",\n	"showdep":"0",\n	"palettecolors":"",\n	"showspareinputdep":"1",\n	"workitemcolorattribute":"",\n	"palettesize":"300 300",\n	"showtypesidebar":"0",\n	"showtree":"0",\n	"overviewbounds":"0.000000 0.000000 439.500000 303.000000",\n	"taskgraphperfstatname":"Cook Time",\n	"gridystep":"6.0",\n	"taskgraphsortcriteria":"Automatic",\n	"workitemattrtocollapseby":"",\n	"grouplistsplit":"0.75"\n}\n' panetab1
+netcolumns -c display,xray,select,origin,capture,bone -n OBJ panetab1
+netcolumns -c display,render,template,selectabletemplate,highlight,unload,bypass,lock -n SOP panetab1
+netcolumns -c delscript,comment -n CHOPNET panetab1
+netcolumns -c display,export,audio,bypass,lock -n CHOP panetab1
+netcolumns -c startrender,bypass,lock -n ROP panetab1
+netcolumns -c delscript,comment -n SHOP panetab1
+netcolumns -c display,render,template,bypass -n COP2 panetab1
+netcolumns -c delscript,comment -n IMG panetab1
+netcolumns -c delscript,comment,input -n VOP panetab1
+netcolumns -c delscript,comment -n VOPNET panetab1
+netcolumns -c delscript,comment -n DOP panetab1
+netcolumns -c delscript,comment -n TOP panetab1
+netcolumns -c delscript,comment -n TOPNET panetab1
+netcolumns -c display,bypass,delscript,comment,input -n LOP panetab1
+netcolumns -c display,export,template,selectabletemplate,bypass -n COP panetab1
+netcolumns -c delscript,comment -n MGR panetab1
+netcolumns -c delscript,comment -n DIR panetab1
+netcolumns -c delscript,comment -n DATA panetab1
diff --git a/help/nodes/sop/shapeshifter_scalar_analysis-1.0.txt b/help/nodes/sop/shapeshifter_scalar_analysis-1.0.txt
new file mode 100755
index 0000000..3fb27c0
--- /dev/null
+++ b/help/nodes/sop/shapeshifter_scalar_analysis-1.0.txt
@@ -0,0 +1,44 @@
+Shapeshifter Scalar Analysis 1.0
+
+Summary
+
+  This node analyzes certain properties of scalar attributes.
+
+Inputs
+
+  1
+    - Contemporary data
+
+  2
+    - Frame input data
+
+Parameters
+
+  Attribute - The scalar attribute to analyze properties of.
+
+  Global Folder
+
+    Min
+      - Reports the lowest value of the specified attribute.
+
+    Max
+      - Returns the highest value of the specified attribute.
+
+    Sum
+      - Returns the attribute's summation.
+
+    Average
+      - Returns the average value of the attribute.
+
+    Ratio
+      - Reports the summation of the attribute divided by the number of data points.
+
+    Spread
+      - Reports the difference between the highest and lowest values.
+
+	Point Folder
+
+	  Direction
+        - An integer attribute indicating whether the value per
+	  point has increased, decreased or not changed since the previous
+	  frame.
diff --git a/help/nodes/sop/shapeshifter_scalar_concentrate-1.0.txt b/help/nodes/sop/shapeshifter_scalar_concentrate-1.0.txt
new file mode 100755
index 0000000..590a015
--- /dev/null
+++ b/help/nodes/sop/shapeshifter_scalar_concentrate-1.0.txt
@@ -0,0 +1,14 @@
+Shapeshifter Scalar Concentrate 1.0
+
+  ---
+
+Summary
+
+  Works similarly to "Scalar Diffuse", but in reverse.
+
+  ---
+
+Parameters
+
+Attribute - The scalar attribute to concentrate.
+Input - Determines how the input range
diff --git a/help/nodes/sop/shapeshifter_scalar_map-1.0.txt b/help/nodes/sop/shapeshifter_scalar_map-1.0.txt
new file mode 100755
index 0000000..ae43916
--- /dev/null
+++ b/help/nodes/sop/shapeshifter_scalar_map-1.0.txt
@@ -0,0 +1,23 @@
+Shapeshifter Scalar Map 1.0
+
+  ---
+
+  Summary
+
+This node maps the domain of an attribute to another.
+
+  ---
+
+  Parameters
+
+Attribute         - The scalar attribute to alter the domain of.
+
+Domain In Method  - How the input domain is determined.
+Domain In         - The input domain, when the domain in method is "fixed".
+
+Domain Out Method - How the output domain is determined.
+Domain Out        - The output domain, when the domain out method is "fixed".
+
+  ---
+
+
diff --git a/help/nodes/sop/shapeshifter_scalar_normalize-1.0.txt b/help/nodes/sop/shapeshifter_scalar_normalize-1.0.txt
new file mode 100755
index 0000000..f794ec5
--- /dev/null
+++ b/help/nodes/sop/shapeshifter_scalar_normalize-1.0.txt
@@ -0,0 +1,16 @@
+Shapeshifter Scalar Normalize 1.0
+
+  ---
+
+Summary
+
+This node receives a scalar attribute, "Normalizes" it and outputs the result.
+In this context, normalizing is the process of uniformly adjusting the summation of an attribute.
+
+
+  ---
+
+Parameters
+
+Attribute - The scalar attribute to normalize.
+Input - Determines how the input range
diff --git a/help/nodes/sop/shapeshifter_vitality-1.0.txt b/help/nodes/sop/shapeshifter_vitality-1.0.txt
new file mode 100755
index 0000000..ebbf9a7
--- /dev/null
+++ b/help/nodes/sop/shapeshifter_vitality-1.0.txt
@@ -0,0 +1,52 @@
+Shapeshifter Vitality 1.0
+
+  ---
+
+  Summary
+
+This node tracks the age of attributes using various metrics.
+
+  ---
+
+  Inputs
+
+Input 1
+	- Normal Data
+
+Input 2
+	- Data from the beginning of the frame
+
+  ---
+
+  Parameters
+
+Attribute
+  - The attribute to track the age of.
+
+Increment Trigger
+  - Every Frame
+  - Outside of Domain
+  - Inside of Domain
+  - Never
+
+Increment Method
+  - Constant
+  - Attribute Value
+
+Multiply Increment by Sign
+  - Yes/No
+
+Reset on Sign Change
+  - Yes/No
+
+Upper Domain Type
+  - Constant
+  - Point Attribute
+  - Detail Attribute
+  - None
+
+Lower Domain Type
+  - Constant
+  - Point Attribute
+  - Detail Attribute
+  - None
diff --git a/hou-developer guide.txt b/hou-developer guide.txt
new file mode 100755
index 0000000..6ac88af
--- /dev/null
+++ b/hou-developer guide.txt	
@@ -0,0 +1,367 @@
+> Plugin Guide <
+> Shapeshifter <
+> Version 0.1 <
+> Document Updated: 2024 <
+> Lucas Galante <
+
+
+> Outline <
+
+Shapeshifter operators are chained together inside of a SOP Solver node or other simulation environment. There are many operators that can be combined to create interesting results. There is a lot of flexibility for how operators can be used but a general structure should be followed.
+
+
+> Looking Ahead <
+
+
+    >> Attributes Or Groups? <<
+    
+    This question easily leads into the larger topic of how data is stored for dynamical operations. There are two main types of data in Shapeshifter:
+    1. Live data
+        This type of data is fluid and runs like a stream through the simulation.
+
+    2. Derivative data
+        This type of data is calculated anew on a per-step basis. It is derived from live data.
+
+    
+    >> Regions <<
+    
+    After spending a lot of time on the GEM mold design suite, I am a little bit more experienced with treating one conceptually whole model as an amalgam of distinct parts with unique and overlapping attributes. It has also helped me greatly with visualizing how a developed form with distinct surface regions could look like, and how those regions might evolve during the model's life. The idea of regions in models reminds me of organs which are fit together in form and function to create a living thing.
+
+    It is also interesting to consider how regions in a model are like the programmatic elements of architecture or ecology. These are both systems where multiple functions are built into a single categorical space. Disease might spread through a limb. It may leave a trail of evidence behind, or eviscerate its host. Living models are host to a variety of mechanisms which influence their status. Viral forms might travel through their host in a determined route and change the host's nature depending on where they travel. Morphogen gradients are interesting because they are a clear example of how the distribution of matter can influence tangible form. One of the most interesting aspects of a living model's body is how definitively its physical boundaries are defined. Before they are really there, the boundary of a living model is predictable. It requires an environment which supplies the real elements of itself, but the information on exactly where those elements will go is present ahead of time.
+
+
+> Operator Types <
+
+
+    >> Pre-simulation Operators <<
+
+    The embryo or seed is created, initial selections and value assignments are made, attributes that will be used are introduced and generally initial conditions are set. Pre-simulation operators define the characteristics and landscape of a simulation before it runs. Attribute templates and starting geometry are supplied to be fed into the simulation network.
+
+
+    >> Simulation Attribute Operators <<
+
+    Value operators operate on simulation attributes which are present for the entire simulation.Simulation attributes are persistent from the end of one frame to the beginning of another.
+
+
+    >> Development Attribute Operators <<
+
+    During this stage of the simulation network, simulation attributes are composited into development attributes. Development attributes are cleared at the end of each frame and need to be constructed from the same corresponding simulation attributes for every frame. Development attributes tell the surface development operators how the surface will change.
+
+
+    >> Surface Development Operators <<
+
+    Surface Development Operators read development attributes and use that information to transform the mesh or volume. Aside from position and normal, attributes are untouched. At this point, Value assignments remain the same until the next frame.
+
+
+    >> Meshing Operators <<
+
+    Once the geometry has been deformed, meshing operators are the final step in the simulation process.Meshing operators adjust the topology of geometry. This ensures that the number of data points in a mesh is always proportional to ts surface area. The surface is remeshed to keep make primitives and points conform to some regular formation.
+
+
+> Attributes <
+
+
+Most attributes are assigned to the geometry instance in the preparation phase.
+Attributes belong to categories based on their function.
+
+
+    >> Age <<
+
+    Values have ages which are affected by a few different criteria.
+    
+    Increment
+      - 1
+      - The value of the attribute
+      - Some factor of a scale / normalized value	
+
+      Reset 
+		- 
+
+
+> Larger Ideas <
+
+
+    >> Development <<
+
+    To effectively develop this package, categories need to be created which
+
+
+    >> Topological Considerations <<
+
+    At this point in time, the Shapeshifter operator package is primarily concerned with the surface of digital models. Unlike many other approaches to similar design queries its operators involve direct analysis and development of closed forms, not an underlying network or structure to which is later assigned volume. 
+    
+
+> Operator Categorization <
+
+Nodes are distributed into categories based on their function. Nodes which operate on or output scalar or vector attributes are separated. The reason for this is simplifying the development of nodes. Nodes with more complex options are more difficult to modify, and because a holistic vision for the inerface hasn't materialized, it's easier to keep them separated, at least for now.
+
+
+> Geometry Classes <
+
+
+    >> Vertices <<
+
+    As of yet there aren't any well-defined use cases for vertex attributes.
+    
+
+    >> Points <<
+
+    The majority of nodes operate on point attributes. The keystone of shapeshifter is the develop and remesh node pair. The develop node requires point attributes to modify the topology of surfaces over time, so it makes sense to focuse primarily on point attributes.
+
+
+    >> Primitives <<
+
+    If a clear use-case for primitive attributes becomes clear.  
+
+
+    >> Detail <<
+
+    Global attributes are useful for storing statistics and analyses.
+
+
+> Operator Categories <
+
+
+    >> Scalar <<
+
+    Scalar nodes which edit the values of scalar attributes.
+
+
+    >> Vector <<
+
+    Vector sodes which edit the values of vector attributes.
+
+
+    >> Surface <<
+
+    Surface nodes utilize input attributes to alter the topology of the geometry.
+
+
+    >> Volume <<
+
+    Volume nodes modify volumes that exist in tandem with mesh geometry. Volume nodes are not fleshed out and need very basic development.
+
+    Looking ahead idea #1: Volumes can be reservoirs of value when a vector directs value to flow either inside of (Shapeshifter Core.) the geometry or away from the surface of the geometry (Shapeshifter Miasma.)
+
+
+> Operators <
+
+
+    >> Scalar <<
+
+
+        >>> Scalar Analysis <<<
+
+
+        Analyze poperties of scalar attributes.
+
+        Analysis attributes provide specific information about scalar attributes.
+
+        Analyses can be toggled on and off in the operator's parameter interface.
+
+        Some analyses are per-point, and others are operations involving sets of points.
+    
+
+        >>> Scalar Composite <<<
+
+        Combine attributes in different configurations.
+
+        Will likely be combined with "Scalar Combine".
+
+
+        >>> Scalar Combine <<<
+
+        Combines attributes using different methods.
+
+
+            >>>> Looking Ahead <<<<
+
+            A standard Attribute Combine operator is shipped with Houdini. It has several interesting options, so it is not clear if the Shapeshifter version should be kept in the package.
+
+
+        >>> Scalar Concentrate <<<
+
+        Similar in function to "Scalar Diffuse", only in reverse.    
+
+            >>>> Looking Ahead <<<<
+
+            It's possible that this operator can be replaced by setting "Scalar Diffuse" to a negative number.
+
+
+        >>> Scalar Diffuse <<<
+
+        Diffuses attribute values over a surface.
+
+
+        >>> Scalar Initialize <<<
+
+        Pre-sim: Initializes attributes that will be used during simulation.
+
+
+        >>> Scalar Map <<<
+
+
+        >>> Scalar Migrate <<<
+
+
+        >>> Scalar Normalize <<<
+
+    
+        >>> Scalar Ramp <<<
+
+
+        >>> Scalar Weight <<<
+
+
+        >>> Submute Begin <<<
+
+
+        >>> Submute End <<<
+
+
+        >>> Lead <<<
+
+
+    >> Vector <<
+
+
+        >>> Vector Analysis <<<
+
+
+        >>> Vector Composite <<<
+
+
+        >>> Vector Conform <<<
+
+
+        >>> Vector Diffuse <<<
+
+
+        >>> Vector Direct <<<
+
+
+        >>> Vector From Scalar <<<
+
+
+        >>> Vector Migrate <<<
+
+
+        >>> Vector Normalize <<<
+
+
+        >>> Vector Rotate <<<
+
+
+        >>> Vector Unify <<<
+
+
+        >>> Vector Weight <<<
+
+
+    >> Surface <<
+
+
+        >>> Surface Adapt <<<
+
+
+        >>> Surface Open <<<
+
+
+        >>> Surface Suture <<<
+
+
+        >>> Subdivide <<<
+
+
+        >>> Remesh <<<
+
+
+        >>> Detangle <<<
+
+      
+        >>> Develop <<<
+
+
+    >> Time <<
+
+
+        >>> Time <<<
+
+
+        >>> Time Ramp <<<
+
+
+        >>> Time Switch <<<
+
+
+        >>> Solver <<<
+
+
+    >> Region (Tentative) <<
+
+
+        >>> Analyze (Tentative) <<<
+
+
+        >>> Vitality <<<
+
+
+        >>> Edge Analysis <<<
+
+
+        >>> Analyze Change <<<
+
+
+    >> Volume (Tentative) <<
+
+
+        >>> Miasma <<<
+
+
+        >>> Core <<<
+
+
+        >>> Uncategorized Nodes <<<
+
+
+        >>> Select <<<
+
+
+        >>> Region Center <<<
+
+
+        >>> Promote <<<
+
+
+        >>> Panel <<<
+
+
+        >>> ID <<<
+
+
+        >>> Expire <<<
+
+
+        >>> Energize <<<
+
+
+	    >>> Embryo <<<
+
+
+        >>> Cull <<<
+
+
+        >>> Combine <<<
+
+
+        >>> Constant <<<
+
+
+	    >>> Embryo (Surface?) <<<
+
+
+        >>> Measure <<<
+
+      
+	    >>> Metamax (Irrelevant?) <<<
+
diff --git a/hou-developer readme.md b/hou-developer readme.md
new file mode 100755
index 0000000..72385ea
--- /dev/null
+++ b/hou-developer readme.md	
@@ -0,0 +1,3 @@
+DOL - Digital Organ Library
+
+Creating lifelike elements in digital containers
diff --git a/hou-gem production_notes.txt b/hou-gem production_notes.txt
new file mode 100644
index 0000000..eec8d4f
--- /dev/null
+++ b/hou-gem production_notes.txt	
@@ -0,0 +1,20 @@
+> Notes about the second working cast, June 2024
+
+    > Regarding Scale
+
+        I've tried to use a 1 millimeter:1 unit equivalancy. This scale is so much broader than any scale I've worked with before and the numbers become arbitrarily large. I think that I should use 1 centimeter:1 unit scale in the future.
+
+    > Regarding GEM Mold Shell
+
+        One of the most important parameters is the thickness range of the GEM Mold Shell operator. It is necessary to choose a thickness that is thick enough to print properly and have maintain adequate rigidity while also being thin enough to remove post-resing cure post-hydrocal cure.
+
+        According to the original cast which had very good parameters for the GEM Mold Shell, the parameters were set to the following choices:
+
+            Maximum Thickness..... 0.75 (mm/units)
+            Minumum Thickness..... 0.6  (mm/units)
+            Remesh Division Size.. 0.9
+            Ramp.................. Linear
+
+    > Regarding UV Curing
+
+        Using my Peopoly Phenom curing box, I have basically been using the default settings from 3-6 minutes. I think it would be a good idea to do like 5 minutes of interval curing, if I can figure out how.
diff --git a/hou-gem readme.md b/hou-gem readme.md
new file mode 100644
index 0000000..f51a223
--- /dev/null
+++ b/hou-gem readme.md	
@@ -0,0 +1,24 @@
+GEM - General Export Methods.
+Tools for getting things out of the computer.
+
+Operators:
+
+GEM Build Area
+
+GEM Flange Monoid
+
+GEM Halo Merge
+
+GEM Mold Flange
+
+GEM Mold Preprocess
+
+GEM Mold Shell
+
+GEM Mold Solver
+
+GEM Mold Structure
+
+GEM Orient
+
+GEM Partition
diff --git a/hou-immutable-methods readme.md b/hou-immutable-methods readme.md
new file mode 100755
index 0000000..7547a92
--- /dev/null
+++ b/hou-immutable-methods readme.md	
@@ -0,0 +1,4 @@
+IMMM - Immutable Methods

+

+-Flexible library for programmatic geometry manipulation

+-Modular elements create stable & predictable results regardless of the target's non-formal properties. Hence, methods which are "immutable."

diff --git a/immutable_methods.json b/immutable_methods.json
new file mode 100755
index 0000000..358c68a
--- /dev/null
+++ b/immutable_methods.json
@@ -0,0 +1,19 @@
+{

+	"env" :

+    [

+        {

+            "HOUDINI_PATH" :

+                [

+                    { "houdini_os == 'linux'" : "~/Dropbox/repos/immutable_methods" },

+                    { "houdini_os == 'macos'" : "~/Dropbox/repos/immutable_methods" }

+                ]

+        },

+        {

+            "PYTHONPATH": 

+                [

+                    { "houdini_os == 'linux'" : "~/Dropbox/repos/immutable_methods/scripts" },

+                    { "housini_os == 'macos'" : "~/Dropbox/repos/immutable_methods/scripts" }

+                ]

+        }

+    ]

+}

diff --git a/notes/moldtekPartitionViewerState b/notes/moldtekPartitionViewerState
new file mode 100755
index 0000000..8720dfe
--- /dev/null
+++ b/notes/moldtekPartitionViewerState
@@ -0,0 +1,21 @@
+rows:
+	modes:
+		add/remove
+		edit
+
+
+-add new partition
+-add first prim to partition
+-add additional prims to partition
+-remove prim from partition
+-remove final prim from partition
+-remove partition
+
+-change draft angle for partition globally
+-change draft angle for partition locally
+-change reach of partition globally
+-change reach of partition locallt
+
+-transfer prim to different partition
+-merge partitions
+-split partition
\ No newline at end of file
diff --git a/notes/network_editor_setttings_reference b/notes/network_editor_setttings_reference
new file mode 100755
index 0000000..9368617
--- /dev/null
+++ b/notes/network_editor_setttings_reference
@@ -0,0 +1,148 @@
+{'TopInOutColorTag_0': '',
+'TopInOutColorTag_1': '',
+'TopInOutColorTag_10': '',
+'TopInOutColorTag_11': '',
+'TopInOutColorTag_12': '',
+'TopInOutColorTag_13': '',
+'TopInOutColorTag_14': '',
+'TopInOutColorTag_15': '',
+'TopInOutColorTag_16': '',
+'TopInOutColorTag_17': '',
+'TopInOutColorTag_18': '',
+'TopInOutColorTag_19': '',
+'TopInOutColorTag_2': '',
+'TopInOutColorTag_3': '',
+'TopInOutColorTag_4': '',
+'TopInOutColorTag_5': '',
+'TopInOutColorTag_6': '',
+'TopInOutColorTag_7': '',
+'TopInOutColorTag_8': '',
+'TopInOutColorTag_9': '',
+'TopInOutColor_0': '',
+'TopInOutColor_1': '',
+'TopInOutColor_10': '',
+'TopInOutColor_11': '',
+'TopInOutColor_12': '',
+'TopInOutColor_13': '',
+'TopInOutColor_14': '',
+'TopInOutColor_15': '',
+'TopInOutColor_16': '',
+'TopInOutColor_17': '',
+'TopInOutColor_18': '',
+'TopInOutColor_19': '',
+'TopInOutColor_2': '',
+'TopInOutColor_3': '',
+'TopInOutColor_4': '',
+'TopInOutColor_5': '',
+'TopInOutColor_6': '',
+'TopInOutColor_7': '',
+'TopInOutColor_8': '',
+'TopInOutColor_9': '',
+'allowdiveintohdas': '1',
+'allowdroponwire': '1',
+'autoscroll': '1',
+'backgroundimagebrightness': '1.0',
+'backgroundimageediting': '0',
+'badge64bit': 'normal',
+'badgeLoadFromDisk': 'large',
+'badgeNodeDiveable': 'normal',
+'badgechilderror': 'large',
+'badgecomment': 'normal',
+'badgeconstraints': 'normal',
+'badgedynamictop': 'normal',
+'badgeerror': 'large',
+'badgehastakedata': 'hide',
+'badgehdadelaysync': 'normal',
+'badgehdalocked': 'normal',
+'badgehdaunlocked': 'normal',
+'badgekinematics': 'hide',
+'badgelopdebug': 'normal',
+'badgeloppopulationmask': 'normal',
+'badgelopunloadedpayloads': 'normal',
+'badgemessage': 'normal',
+'badgemqclientsauth': 'normal',
+'badgemqserverauth': 'normal',
+'badgeneedscook': 'hide',
+'badgenodehasdata': 'hide',
+'badgenodelocked': 'normal',
+'badgenodeunload': 'normal',
+'badgenotcompilable': 'normal',
+'badgetimedep': 'normal',
+'badgevexcache': 'normal',
+'badgewarning': 'normal',
+'connectorsnapradius': '0.700000',
+'copypathstoclipboard': '1',
+'dimunusednodes': '0',
+'distancefordrag': '0.050000',
+'doautomovenodes': '0',
+'dosnapping': '1',
+'flagsallowpreselect': '1',
+'gridmode': '2',
+'gridsnapping': '1',
+'gridxstep': '2.0',
+'gridystep': '1.0',
+'grouplistsplit': '0.75',
+'listmode': '0',
+'maxflyoutscale': '10000.000000',
+'maxnameheight': '0.000000',
+'maxnamewidth': '10000.000000',
+'maxtaskgraphdepth': '0',
+'maxtaskgraphrows': '20',
+'maxworkitemsperrow': '10',
+'minnameheight': '0.000000',
+'overviewbounds': '0.000000 0.000000 91.361262 205.933953',
+'overviewmode': '2',
+'palettecolors': '',
+'palettemode': '0',
+'palettesize': '225 225',
+'perfstatname': 'Time',
+'shakesensitivity': '1.000000',
+'showanimations': '1',
+'showcancelledworkitems': '1',
+'showchilddep': '1',
+'showcookedworkitems': '1',
+'showcookingworkitems': '1',
+'showdep': '0',
+'showdirtyworkitems': '1',
+'showfailedworkitems': '1',
+'showgrouplist': '0',
+'showloplayercolor': '1',
+'showmenu': '0',
+'shownodeshapes': '1',
+'shownodetypes': '1',
+'showparmdialog': '0',
+'showparmdialogmax': '1',
+'showpartitionworkitems': '1',
+'showperfstats': '1',
+'showpreviews': '1',
+'showprompttext': '1',
+'showsimpleshape': '0',
+'showspareinputdep': '1',
+'showstackedlook': '1',
+'showstaticworkitems': '1',
+ 'showtaskgraph': '1',
+'showtaskgraphperf': '0',
+'showtasksmenu': '1',
+'showtree': '0',
+'showtypesidebar': '0',
+'showvopinoutlabels': '0',
+'snapradius': '0.100000',
+'solohighlightedworkitems': '0',
+'taskgraphcollapsemode': 'Off',
+'taskgraphperfstatname': 'Cook Time',
+'taskgraphsortcriteria': 'Automatic',
+'taskgraphsortdirection': '0',
+'textbadgecomment': 'truncated',
+'textbadgecontextoptiondeps': 'selected_full',
+'textbadgedescriptiveparm': 'truncated',
+'textbadgedetailid': 'hide',
+'textbadgelayercount': 'truncated',
+'textbadgeloplastmodifiedprim': 'truncated',
+'textbadgeoutputforview': 'truncated',
+'transientinfo': '1',
+'treesplit': '0.25',
+'typesidebarsplit': '0.25',
+'useworkitemcolorattribute': '0',
+'wirefadefactor': '1.000000',
+'workitemattrtocollapseby': '',
+'workitemcolorattribute': ''}
diff --git a/notes/sop_verbs b/notes/sop_verbs
new file mode 100755
index 0000000..c33fdc8
--- /dev/null
+++ b/notes/sop_verbs
@@ -0,0 +1,345 @@
+'add':                               <hou.SopVerb add>,
+'attribcreate::2.0':                 <hou.SopVerb attribcreate::2.0>,
+'line':                              <hou.SopVerb line>,
+'opencl':                            <hou.SopVerb opencl>,
+'pointgenerate':                     <hou.SopVerb pointgenerate>,
+
+{
+'agentlayer::2.0':                   <hou.SopVerb agentlayer::2.0>,
+'agentunpack':                       <hou.SopVerb agentunpack>,
+'apex::invokegraph':                 <hou.SopVerb apex::invokegraph>,
+'attribcast':                        <hou.SopVerb attribcast>,
+'attribcombine':                     <hou.SopVerb attribcombine>,
+'attribcomposite':                   <hou.SopVerb attribcomposite>,
+'attribcopy':                        <hou.SopVerb attribcopy>,
+'attribfill':                        <hou.SopVerb attribfill>,
+'attribfromparm':                    <hou.SopVerb attribfromparm>,
+'attribfromvolume':                  <hou.SopVerb attribfromvolume>,
+'attribinterpolate':                 <hou.SopVerb attribinterpolate>,
+'attribmirror':                      <hou.SopVerb attribmirror>,
+'attribpromote':                     <hou.SopVerb attribpromote>,
+'attribreorient':                    <hou.SopVerb attribreorient>,
+'attribstringedit':                  <hou.SopVerb attribstringedit>,
+'attribswap':                        <hou.SopVerb attribswap>,
+'attribtransfer':                    <hou.SopVerb attribtransfer>,
+'attribute':                         <hou.SopVerb attribute>,
+'attribvop':                         <hou.SopVerb attribvop>,
+'basis':                             <hou.SopVerb basis>,
+'blast':                             <hou.SopVerb blast>,
+'blendshapes':                       <hou.SopVerb blendshapes>,
+'blendshapes::2.0':                  <hou.SopVerb blendshapes::2.0>,
+'bonecapturebiharmonic':             <hou.SopVerb bonecapturebiharmonic>,
+'bonedeform':                        <hou.SopVerb bonedeform>,
+'boolean::2.0':                      <hou.SopVerb boolean::2.0>,
+'bound':                             <hou.SopVerb bound>,
+'box':                               <hou.SopVerb box>,
+'cache':                             <hou.SopVerb cache>,
+'cacheif':                           <hou.SopVerb cacheif>,
+'cap':                               <hou.SopVerb cap>,
+'captureattribpack':                 <hou.SopVerb captureattribpack>,
+'captureattribunpack':               <hou.SopVerb captureattribunpack>,
+'capturepaintcore':                  <hou.SopVerb capturepaintcore>,
+'carve':                             <hou.SopVerb carve>,
+'circle':                            <hou.SopVerb circle>,
+'circlefromedges':                   <hou.SopVerb circlefromedges>,
+'clip':                              <hou.SopVerb clip>,
+'clip::2.0':                         <hou.SopVerb clip::2.0>,
+'cluster':                           <hou.SopVerb cluster>,
+'clustermesh':                       <hou.SopVerb clustermesh>,
+'connectivity':                      <hou.SopVerb connectivity>,
+'control':                           <hou.SopVerb control>,
+'convert':                           <hou.SopVerb convert>,
+'convertvdb':                        <hou.SopVerb convertvdb>,
+'convertvdbpoints':                  <hou.SopVerb convertvdbpoints>,
+'convertvolume':                     <hou.SopVerb convertvolume>,
+'convexdecomposition':               <hou.SopVerb convexdecomposition>,
+'cop2net':                           <hou.SopVerb cop2net>,
+'copytopoints':                      <hou.SopVerb copytopoints>,
+'copytopoints::2.0':                 <hou.SopVerb copytopoints::2.0>,
+'copyxform':                         <hou.SopVerb copyxform>,
+'crease':                            <hou.SopVerb crease>,
+'crowdmotionpathavoidcore':          <hou.SopVerb crowdmotionpathavoidcore>,
+'crowdmotionpatheditcore':           <hou.SopVerb crowdmotionpatheditcore>,
+'crowdmotionpathevaluatecore':       <hou.SopVerb crowdmotionpathevaluatecore>,
+'curve':                             <hou.SopVerb curve>,
+'curvesect':                         <hou.SopVerb curvesect>,
+'delete':                            <hou.SopVerb delete>,
+'deltamush':                         <hou.SopVerb deltamush>,
+'detangle':                          <hou.SopVerb detangle>,
+'dissolve::2.0':                     <hou.SopVerb dissolve::2.0>,
+'divide':                            <hou.SopVerb divide>,
+'dopimport::2.0':                    <hou.SopVerb dopimport::2.0>,
+'edgecollapse':                      <hou.SopVerb edgecollapse>,
+'edgecusp':                          <hou.SopVerb edgecusp>,
+'edgedivide':                        <hou.SopVerbedgedivide>,
+'edgeequalize':                      <hou.SopVerb edgeequalize>,
+'edgeflip':                          <hou.SopVerb edgeflip>,
+'edgestraighten':                    <hou.SopVerb edgestraighten>,
+'edgetransport':                     <hou.SopVerb edgetransport>,
+'ends':                              <hou.SopVerb ends>,
+'enumerate':                         <hou.SopVerb enumerate>,
+ 'error':                            <hou.SopVerb error>,
+'extractcentroid':                   <hou.SopVerb extractcentroid>,
+'extracttransform':                  <hou.SopVerb extracttransform>,
+'facet':                             <hou.SopVerb facet>,
+'featherattribinterpolate':          <hou.SopVerb featherattribinterpolate>,
+'featherbarbtangents':               <hou.SopVerb featherbarbtangents>,
+'featherray':                        <hou.SopVerb featherray>,
+'feathertemplateinterpolatecore':    <hou.SopVerb feathertemplateinterpolatecore>,
+'file':                              <hou.SopVerb file>,
+'fit':                               <hou.SopVerb fit>,
+'font':                              <hou.SopVerb font>,
+'fractal':                           <hou.SopVerb fractal>,
+'fuse':                              <hou.SopVerb fuse>,
+'fuse::2.0':                         <hou.SopVerb fuse::2.0>,
+'grid':                              <hou.SopVerb grid>,
+'groupcombine':                      <hou.SopVerb groupcombine>,
+'groupcopy':                         <hou.SopVerb groupcopy>,
+'groupcreate':                       <hou.SopVerb groupcreate>,
+'groupdelete':                       <hou.SopVerb groupdelete>,
+'groupexpand':                       <hou.SopVerb groupexpand>,
+'groupfindpath':                     <hou.SopVerb groupfindpath>,
+'groupinvert':                       <hou.SopVerb groupinvert>,
+'grouppromote':                      <hou.SopVerb grouppromote>,
+'grouprange':                        <hou.SopVerb grouprange>,
+'grouprename':                       <hou.SopVerb grouprename>,
+'groupsfromname':                    <hou.SopVerb groupsfromname>,
+'grouptransfer':                     <hou.SopVerb grouptransfer>,
+'guidegroomcore':                    <hou.SopVerb guidegroomcore>,
+'guidemask':                         <hou.SopVerb guidemask>,
+'guideprocesscore':                  <hou.SopVerb guideprocesscore>,
+'hairclump':                         <hou.SopVerb hairclump>,
+'hairgencore':                       <hou.SopVerb hairgencore>,
+'heatgeodesic':                      <hou.SopVerb heatgeodesic>,
+'hole':                              <hou.SopVerb hole>,
+'inflate':                           <hou.SopVerb inflate>,
+'intersectionanalysis':              <hou.SopVerb intersectionanalysis>,
+'intersectionstitch':                <hou.SopVerb intersectionstitch>,
+'invoke':                            <hou.SopVerb invoke>,
+'invokegraph':                       <hou.SopVerb invokegraph>,
+'isooffset':                         <hou.SopVerb isooffset>,
+'join':                              <hou.SopVerb join>,
+'kinefx::agentfromrigcore':          <hou.SopVerb kinefx::agentfromrigcore>,
+'kinefx::attribtransformcompute':    <hou.SopVerb kinefx::attribtransformcompute>,
+'kinefx::attribtransformextract':    <hou.SopVerb kinefx::attribtransformextract>,
+'kinefx::characterblendshapesadd':   <hou.SopVerb kinefx::characterblendshapesadd>,
+'kinefx::characterblendshapescore':  <hou.SopVerb kinefx::characterblendshapescore>,
+'kinefx::computemotionclipcreate':   <hou.SopVerb kinefx::computemotionclipcreate>,
+'kinefx::computemotionclipretime':   <hou.SopVerb kinefx::computemotionclipretime>,
+'kinefx::computerigpose':            <hou.SopVerb kinefx::computerigpose>,
+'kinefx::computetransform':          <hou.SopVerb kinefx::computetransform>,
+'kinefx::configurerigvis::2.0':      <hou.SopVerb kinefx::configurerigvis::2.0>,
+'kinefx::extractrotationalmomentum': <hou.SopVerb kinefx::extractrotationalmomentum>,
+'kinefx::ikchains::2.0':             <hou.SopVerb kinefx::ikchains::2.0>,
+'kinefx::motionclipextractkeyposes': <hou.SopVerb kinefx::motionclipextractkeyposes>,
+'kinefx::motionclipmerge':           <hou.SopVerb kinefx::motionclipmerge>,
+'kinefx::motionclipposedelete::2.0': <hou.SopVerb kinefx::motionclipposedelete::2.0>,
+'kinefx::motionclipunpack':          <hou.SopVerb kinefx::motionclipunpack>,
+'kinefx::motionclipupdate':          <hou.SopVerb kinefx::motionclipupdate>,
+'kinefx::motionmixer':               <hou.SopVerb kinefx::motionmixer>,
+'kinefx::pendulummotioncore':        <hou.SopVerb kinefx::pendulummotioncore>,
+'kinefx::poseweightinterp':          <hou.SopVerb kinefx::poseweightinterp>,
+'kinefx::projectilemotioncore':      <hou.SopVerb kinefx::projectilemotioncore>,
+'kinefx::resamplesplinetransforms':  <hou.SopVerb kinefx::resamplesplinetransforms>,
+'kinefx::rigattribvop':              <hou.SopVerb kinefx::rigattribvop>,
+'kinefx::rotatebymomentum':          <hou.SopVerb kinefx::rotatebymomentum>,
+'kinefx::skeletonblend::2.0':        <hou.SopVerb kinefx::skeletonblend::2.0>,
+'kinefx::skeletonblend::3.0':        <hou.SopVerb kinefx::skeletonblend::3.0>,
+'kinefx::smoothmotioncore':          <hou.SopVerb kinefx::smoothmotioncore>,
+'kinefx::usdanimimport':             <hou.SopVerb kinefx::usdanimimport>,
+'kinefx::usdskinimport':             <hou.SopVerb kinefx::usdskinimport>,
+'knife':                             <hou.SopVerb knife>,
+'lidarimport':                       <hou.SopVerb lidarimport>,
+'linearsolver':                      <hou.SopVerb linearsolver>,
+'lopimport::2.0':                    <hou.SopVerb lopimport::2.0>,
+'matchtopology':                     <hou.SopVerb matchtopology>,
+'material':                          <hou.SopVerb material>,
+'measure':                           <hou.SopVerb measure>,
+'measure::2.0':                      <hou.SopVerb measure::2.0>,
+'merge':                             <hou.SopVerb merge>,
+'mergepacked':                       <hou.SopVerb mergepacked>,
+'mirror':                            <hou.SopVerb mirror>,
+'mlexamplecreatecore':               <hou.SopVerb mlexamplecreatecore>,
+'mlexampledecomposecore':            <hou.SopVerb mlexampledecomposecore>,
+'mlexampledeserializepacked':        <hou.SopVerb mlexampledeserializepacked>,
+'mlexampledeserializepoint':         <hou.SopVerb mlexampledeserializepoint>,
+'mlexampleserializepacked':          <hou.SopVerb mlexampleserializepacked>,
+'mlexampleserializepoint':           <hou.SopVerb mlexampleserializepoint>,
+'mlregressioninferencecore':         <hou.SopVerb mlregressioninferencecore>,
+'mlregressionproximitycore':         <hou.SopVerb mlregressionproximitycore>,
+'name':                              <hou.SopVerb name>,
+'neighborsearchcl':                  <hou.SopVerb neighborsearchcl>,
+'normal':                            <hou.SopVerb normal>,
+'null':                              <hou.SopVerb null>,
+'onnx':                              <hou.SopVerb onnx>,
+'orientalongcurve':                  <hou.SopVerb orientalongcurve>,
+'output':                            <hou.SopVerb output>,
+'pack':                              <hou.SopVerbpack>,
+'packededit':                        <hou.SopVerb packededit>,
+'packfolder':                        <hou.SopVerb packfolder>,
+'packinject':                        <hou.SopVerb packinject>,
+'packpoints':                        <hou.SopVerb packpoints>,
+'pca':                               <hou.SopVerb pca>,
+'peak':                              <hou.SopVerb peak>,
+'pointcapturecore':                  <hou.SopVerb pointcapturecore>,
+'pointcloudnormal':                  <hou.SopVerb pointcloudnormal>,
+'pointcloudreduce':                  <hou.SopVerb pointcloudreduce>,
+'pointcloudsurface':                 <hou.SopVerb pointcloudsurface>,
+'polybevel::3.0':                    <hou.SopVerb polybevel::3.0>,
+'polycut':                           <hou.SopVerb polycut>,
+'polydoctor':                        <hou.SopVerb polydoctor>,
+'polyexpand2d':                      <hou.SopVerb polyexpand2d>,
+'polyextrude::2.0':                  <hou.SopVerb polyextrude::2.0>,
+'polyfill':                          <hou.SopVerb polyfill>,
+'polyframe':                         <hou.SopVerb polyframe>,
+'polypatch':                         <hou.SopVerb polypatch>,
+'polyreduce::2.0':                   <hou.SopVerb polyreduce::2.0>,
+'polysoup':                          <hou.SopVerb polysoup>,
+'polysplit::2.0':                    <hou.SopVerbpolysplit::2.0>,
+'polywire':                          <hou.SopVerb polywire>,
+'primitive':                         <hou.SopVerb primitive>,
+'primitivesplit':                    <hou.SopVerb primitivesplit>,
+'quadremesh':                        <hou.SopVerb quadremesh>,
+'rawimport':                         <hou.SopVerb rawimport>,
+'ray':                               <hou.SopVerb ray>,
+'refine':                            <hou.SopVerb refine>,
+'relax':                             <hou.SopVerb relax>,
+'remesh':                            <hou.SopVerb remesh>,
+'remesh::2.0':                       <hou.SopVerb remesh::2.0>,
+'repack':                            <hou.SopVerb repack>,
+'resample':                          <hou.SopVerb resample>,
+'rest':                              <hou.SopVerb rest>,
+'reverse':                           <hou.SopVerb reverse>,
+'revolve':                           <hou.SopVerb revolve>,
+'rewire':                            <hou.SopVerb rewire>,
+'sblend':                            <hou.SopVerb sblend>,
+'sblend::2.0':                       <hou.SopVerb sblend::2.0>,
+'scatter::2.0':                      <hou.SopVerb scatter::2.0>,
+'shapediff':                         <hou.SopVerb shapediff>,
+'shrinkwrap::2.0':                   <hou.SopVerb shrinkwrap::2.0>,
+'simplexrefine':                     <hou.SopVerb simplexrefine>,
+'skin':                              <hou.SopVerb skin>,
+'smooth::2.0':                       <hou.SopVerb smooth::2.0>,
+'softpeak':                          <hou.SopVerb softpeak>,
+'softxform':                         <hou.SopVerb softxform>,
+'solidify':                          <hou.SopVerb solidify>,
+'sort':                              <hou.SopVerb sort>,
+'sphere':                            <hou.SopVerb sphere>,
+'splitpoints':                       <hou.SopVerb splitpoints>,
+'stash':                             <hou.SopVerb stash>,
+'subdivide':                         <hou.SopVerb subdivide>,
+'surfacesplat':                      <hou.SopVerb surfacesplat>,
+'sweep::2.0':                        <hou.SopVerb sweep::2.0>,
+'switch':                            <hou.SopVerb switch>,
+'switchif':                          <hou.SopVerb switchif>,
+'tangentfield':                      <hou.SopVerb tangentfield>,
+'tetcraft':                          <hou.SopVerb tetcraft>,
+'tetlayer':                          <hou.SopVerb tetlayer>,
+'tetpartition':                      <hou.SopVerb tetpartition>,
+'tetrahedralize':                    <hou.SopVerb tetrahedralize>,
+'tetrasurface':                      <hou.SopVerb tetrasurface>,
+'texture':                           <hou.SopVerb texture>,
+'texturefeature':                    <hou.SopVerb texturefeature>,
+'textureopticalflow':                <hou.SopVerb textureopticalflow>,
+'topnetsop':                         <hou.SopVerb topnetsop>,
+'topotransfer':                      <hou.SopVerb topotransfer>,
+'torus':                             <hou.SopVerb torus>,
+'trace':                             <hou.SopVerb trace>,
+'triangulate2d::2.0':                <hou.SopVerb triangulate2d::2.0>,
+'triangulate2d::3.0':                <hou.SopVerb triangulate2d::3.0>,
+'tribez':                            <hou.SopVerb tribez>,
+'tridivide':                         <hou.SopVerb tridivide>,
+'tristrip':                          <hou.SopVerb tristrip>,
+'tube':                              <hou.SopVerbtube>,
+'unpack':                            <hou.SopVerb unpack>,
+'unpackfolder':                      <hou.SopVerb unpackfolder>,
+'unpackpoints':                      <hou.SopVerb unpackpoints>,
+'unpackusd::2.0':                    <hou.SopVerb unpackusd::2.0>,
+'uvautoseam':                        <hou.SopVerb uvautoseam>,
+'uvflatten::2.0':                    <hou.SopVerb uvflatten::2.0>,
+'uvflatten::3.0':                    <hou.SopVerb uvflatten::3.0>,
+'uvlayout::2.0':                     <hou.SopVerb uvlayout::2.0>,
+'uvlayout::3.0':                     <hou.SopVerb uvlayout::3.0>,
+'uvproject':                         <hou.SopVerb uvproject>,
+'uvrelax':                           <hou.SopVerb uvrelax>,
+'uvtransform::2.0':                  <hou.SopVerb uvtransform::2.0>,
+'uvunwrap':                          <hou.SopVerb uvunwrap>,
+'vdb':                               <hou.SopVerb vdb>,
+ 'vdbactivate':                      <hou.SopVerb vdbactivate>,
+'vdbactivatesdf':                    <hou.SopVerb vdbactivatesdf>,
+'vdbadvectpoints':                   <hou.SopVerb vdbadvectpoints>,
+'vdbadvectsdf':                      <hou.SopVerb vdbadvectsdf>,
+'vdbanalysis':                       <hou.SopVerb vdbanalysis>,
+'vdbclip':                           <hou.SopVerb vdbclip>,
+'vdbcombine':                        <hou.SopVerb vdbcombine>,
+'vdbconvexclipsdf':                  <hou.SopVerb vdbconvexclipsdf>,
+'vdbcreatecl':                       <hou.SopVerb vdbcreatecl>,
+'vdbdiagnostics':                    <hou.SopVerb vdbdiagnostics>,
+'vdbextrapolate':                    <hou.SopVerb vdbextrapolate>,
+'vdbfracture':                       <hou.SopVerb vdbfracture>,
+'vdbfromparticles':                  <hou.SopVerb vdbfromparticles>,
+'vdbfrompolygons':                   <hou.SopVerb vdbfrompolygons>,
+'vdblod':                            <hou.SopVerb vdblod>,
+'vdbmerge':                          <hou.SopVerb vdbmerge>,
+'vdbmorphsdf':                       <hou.SopVerb vdbmorphsdf>,
+'vdbocclusionmask':                  <hou.SopVerb vdbocclusionmask>,
+'vdbpointsdelete':                   <hou.SopVerb vdbpointsdelete>,
+'vdbpointsgroup':                    <hou.SopVerb vdbpointsgroup>,
+'vdbpotentialflow':                  <hou.SopVerb vdbpotentialflow>,
+'vdbprojectnondivergent':            <hou.SopVerb vdbprojectnondivergent>,
+'vdbrenormalizesdf':                 <hou.SopVerb vdbrenormalizesdf>,
+'vdbresample':                       <hou.SopVerb vdbresample>,
+'vdbreshapesdf':                     <hou.SopVerb vdbreshapesdf>,
+'vdbsegmentbyconnectivity':          <hou.SopVerb vdbsegmentbyconnectivity>,
+'vdbsmooth':                         <hou.SopVerb vdbsmooth>,
+'vdbsmoothsdf':                      <hou.SopVerb vdbsmoothsdf>,
+'vdbtopologytosdf':                  <hou.SopVerb vdbtopologytosdf>,
+'vdbtospheres':                      <hou.SopVerb vdbtospheres>,
+'vdbvectormerge':                    <hou.SopVerb vdbvectormerge>,
+'vdbvectorsplit':                    <hou.SopVerb vdbvectorsplit>,
+'vdbvisualizetree':                  <hou.SopVerb vdbvisualizetree>,
+'vertexsplit':                       <hou.SopVerb vertexsplit>,
+'visibility':                        <hou.SopVerb visibility>,
+'volume':                            <hou.SopVerb volume>,
+'volumeambientocclusion':            <hou.SopVerb volumeambientocclusion>,
+'volumeanalysis':                    <hou.SopVerb volumeanalysis>,
+'volumearrivaltime':                 <hou.SopVerb volumearrivaltime>,
+'volumebin':                         <hou.SopVerb volumebin>,
+'volumeblur':                        <hou.SopVerb volumeblur>,
+'volumebound':                       <hou.SopVerb volumebound>,
+'volumebreak':                       <hou.SopVerb volumebreak>,
+'volumecombine':                     <hou.SopVerb volumecombine>,
+'volumecompress':                    <hou.SopVerb volumecompress>,
+'volumeconvolve3':                   <hou.SopVerb volumeconvolve3>,
+'volumefeather':                     <hou.SopVerb volumefeather>,
+'volumefft':                         <hou.SopVerb volumefft>,
+'volumefromattrib':                  <hou.SopVerb volumefromattrib>,
+ 'volumemerge':                      <hou.SopVerb volumemerge>,
+'volumemix':                         <hou.SopVerb volumemix>,
+'volumenormalize':                   <hou.SopVerb volumenormalize>,
+'volumeopticalflow':                 <hou.SopVerb volumeopticalflow>,
+'volumepatch':                       <hou.SopVerb volumepatch>,
+'volumerasterizelattice':            <hou.SopVerb volumerasterizelattice>,
+'volumerasterizeparticles':          <hou.SopVerb volumerasterizeparticles>,
+'volumereduce':                      <hou.SopVerb volumereduce>,
+'volumeresample':                    <hou.SopVerb volumeresample>,
+'volumeresize':                      <hou.SopVerb volumeresize>,
+'volumesdf':                         <hou.SopVerb volumesdf>,
+'volumeslice':                       <hou.SopVerb volumeslice>,
+'volumesplice':                      <hou.SopVerb volumesplice>,
+'volumetrail':                       <hou.SopVerb volumetrail>,
+'volumevectorjoin':                  <hou.SopVerb volumevectorjoin>,
+'volumevectorsplit':                 <hou.SopVerb volumevectorsplit>,
+'volumevisualization':               <hou.SopVerb volumevisualization>,
+'volumevop':                         <hou.SopVerb volumevop>,
+'voronoisplit':                      <hou.SopVerb voronoisplit>,
+'watershed':                         <hou.SopVerb watershed>,
+'weightarraybiharmonic':             <hou.SopVerb weightarraybiharmonic>,
+'weightarrayinterpolate':            <hou.SopVerb weightarrayinterpolate>,
+'windingnumber':                     <hou.SopVerb windingnumber>,
+'wire':                              <hou.SopVerb wire>,
+'wireblend':                         <hou.SopVerb wireblend>,
+'xform':                             <hou.SopVerb xform>,
+'xformaxis':                         <hou.SopVerb xformaxis>,
+'xformbyattrib':                     <hou.SopVerb xformbyattrib>
+}
diff --git a/otls/backup/sop_lsgalante.developer_analysis.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_analysis.1.0_bak1.hdalc
new file mode 100644
index 0000000..49dd8b8
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_analysis.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_analysis.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_analysis.1.0_bak2.hdalc
new file mode 100644
index 0000000..671bd11
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_analysis.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_analysis.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_analysis.1.0_bak3.hdalc
new file mode 100644
index 0000000..69f3cee
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_analysis.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_clip.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_attribute_clip.1.0_bak1.hdalc
new file mode 100644
index 0000000..9f97c66
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_clip.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_clip.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_attribute_clip.1.0_bak2.hdalc
new file mode 100644
index 0000000..ed7cc6d
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_clip.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_clip.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_attribute_clip.1.0_bak3.hdalc
new file mode 100644
index 0000000..c97cee8
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_clip.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak1.hdalc
new file mode 100644
index 0000000..2223172
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak2.hdalc
new file mode 100644
index 0000000..d775daa
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak3.hdalc
new file mode 100644
index 0000000..6c09840
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak4.hdalc
new file mode 100644
index 0000000..a255e00
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak5.hdalc
new file mode 100644
index 0000000..1d9af25
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak6.hdalc
new file mode 100644
index 0000000..2037fce
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak7.hdalc
new file mode 100644
index 0000000..57cf2d7
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_combine.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_composite.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_attribute_composite.1.0_bak1.hdalc
new file mode 100644
index 0000000..2ff8a62
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_composite.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_composite.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_attribute_composite.1.0_bak2.hdalc
new file mode 100644
index 0000000..412ef47
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_composite.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_composite.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_attribute_composite.1.0_bak3.hdalc
new file mode 100644
index 0000000..2ea6619
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_composite.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_constant.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_attribute_constant.1.0_bak1.hdalc
new file mode 100644
index 0000000..0fe4957
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_constant.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_constant.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_attribute_constant.1.0_bak2.hdalc
new file mode 100644
index 0000000..fee5667
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_constant.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_constant.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_attribute_constant.1.0_bak3.hdalc
new file mode 100644
index 0000000..859a5b3
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_constant.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak1.hdalc
new file mode 100644
index 0000000..4cdf82c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak10.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak10.hdalc
new file mode 100644
index 0000000..6737928
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak10.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak11.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak11.hdalc
new file mode 100644
index 0000000..16eb736
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak11.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak12.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak12.hdalc
new file mode 100644
index 0000000..7edf67e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak12.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak2.hdalc
new file mode 100644
index 0000000..9f524b0
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak3.hdalc
new file mode 100644
index 0000000..955e58f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak4.hdalc
new file mode 100644
index 0000000..0ae6902
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak5.hdalc
new file mode 100644
index 0000000..9d261bd
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak6.hdalc
new file mode 100644
index 0000000..9673eca
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak7.hdalc
new file mode 100644
index 0000000..ecf3d5e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak8.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak8.hdalc
new file mode 100644
index 0000000..73d8f8f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak8.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak9.hdalc b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak9.hdalc
new file mode 100644
index 0000000..57acd65
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_initialize.1.0_bak9.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_promote.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_attribute_promote.1.0_bak1.hdalc
new file mode 100644
index 0000000..d798c97
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_promote.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_promote.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_attribute_promote.1.0_bak2.hdalc
new file mode 100644
index 0000000..cc05d04
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_promote.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_promote.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_attribute_promote.1.0_bak3.hdalc
new file mode 100644
index 0000000..b729347
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_promote.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_remap.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_attribute_remap.1.0_bak1.hdalc
new file mode 100644
index 0000000..3668404
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_remap.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_remap.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_attribute_remap.1.0_bak2.hdalc
new file mode 100644
index 0000000..5cd07d3
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_remap.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_attribute_remap.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_attribute_remap.1.0_bak3.hdalc
new file mode 100644
index 0000000..fe16333
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_attribute_remap.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_charge.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_charge.1.0_bak1.hdalc
new file mode 100644
index 0000000..1bfd0e9
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_charge.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_clip.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_clip.1.0_bak1.hdalc
new file mode 100644
index 0000000..dbd8848
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_clip.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_clip.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_clip.1.0_bak2.hdalc
new file mode 100644
index 0000000..520d9c3
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_clip.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_combine.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_combine.1.0_bak1.hdalc
new file mode 100644
index 0000000..5c53fdd
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_combine.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_combine.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_combine.1.0_bak2.hdalc
new file mode 100644
index 0000000..fd9af59
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_combine.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_combine.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_combine.1.0_bak3.hdalc
new file mode 100644
index 0000000..c89a6fc
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_combine.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_composite.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_composite.1.0_bak1.hdalc
new file mode 100644
index 0000000..f5d5072
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_composite.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_composite.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_composite.1.0_bak2.hdalc
new file mode 100644
index 0000000..4ddc702
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_composite.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_concentrate.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_concentrate.1.0_bak1.hdalc
new file mode 100644
index 0000000..c008f87
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_concentrate.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_concentrate.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_concentrate.1.0_bak2.hdalc
new file mode 100644
index 0000000..74099f7
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_concentrate.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_concentrate.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_concentrate.1.0_bak3.hdalc
new file mode 100644
index 0000000..137d17b
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_concentrate.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_constant.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_constant.1.0_bak1.hdalc
new file mode 100644
index 0000000..f7e5291
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_constant.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_constant.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_constant.1.0_bak2.hdalc
new file mode 100644
index 0000000..dcbff8c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_constant.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_core.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_core.1.0_bak1.hdalc
new file mode 100644
index 0000000..1f85bdf
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_core.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_core.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_core.1.0_bak2.hdalc
new file mode 100644
index 0000000..a8339a7
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_core.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_core.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_core.1.0_bak3.hdalc
new file mode 100644
index 0000000..9142b43
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_core.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_core.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_core.1.0_bak4.hdalc
new file mode 100644
index 0000000..5a26a44
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_core.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_cull.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_cull.1.0_bak1.hdalc
new file mode 100644
index 0000000..00fc52c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_cull.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_detangle.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_detangle.1.0_bak1.hdalc
new file mode 100644
index 0000000..ae67085
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_detangle.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_detangle.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_detangle.1.0_bak2.hdalc
new file mode 100644
index 0000000..05bd13e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_detangle.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_detangle.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_detangle.1.0_bak3.hdalc
new file mode 100644
index 0000000..c563945
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_detangle.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_develop.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_develop.1.0_bak1.hdalc
new file mode 100644
index 0000000..96cd46b
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_develop.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_develop.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_develop.1.0_bak2.hdalc
new file mode 100644
index 0000000..cb4a7c4
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_develop.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_develop.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_develop.1.0_bak3.hdalc
new file mode 100644
index 0000000..ec070f2
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_develop.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_develop.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_develop.1.0_bak4.hdalc
new file mode 100644
index 0000000..abb2adb
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_develop.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_develop.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_develop.1.0_bak5.hdalc
new file mode 100644
index 0000000..a9291a9
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_develop.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_develop.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_develop.1.0_bak6.hdalc
new file mode 100644
index 0000000..c1eeecd
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_develop.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_diffuse.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_diffuse.1.0_bak1.hdalc
new file mode 100644
index 0000000..77e9db5
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_diffuse.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak1.hdalc b/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak1.hdalc
new file mode 100644
index 0000000..2cfd888
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak2.hdalc b/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak2.hdalc
new file mode 100644
index 0000000..4281554
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak3.hdalc b/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak3.hdalc
new file mode 100644
index 0000000..6a7b6cc
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak4.hdalc b/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak4.hdalc
new file mode 100644
index 0000000..e1f8511
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_diffuse.1.1_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_direct.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_direct.1.0_bak1.hdalc
new file mode 100644
index 0000000..e4d4bda
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_direct.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_direct.1.0_bak10.hdalc b/otls/backup/sop_lsgalante.developer_direct.1.0_bak10.hdalc
new file mode 100644
index 0000000..7e35654
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_direct.1.0_bak10.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_direct.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_direct.1.0_bak2.hdalc
new file mode 100644
index 0000000..75b82a3
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_direct.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_direct.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_direct.1.0_bak3.hdalc
new file mode 100644
index 0000000..98df7de
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_direct.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_direct.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_direct.1.0_bak4.hdalc
new file mode 100644
index 0000000..855fc39
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_direct.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_direct.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_direct.1.0_bak5.hdalc
new file mode 100644
index 0000000..ae69f91
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_direct.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_direct.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_direct.1.0_bak6.hdalc
new file mode 100644
index 0000000..c1ba2a5
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_direct.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_direct.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_direct.1.0_bak7.hdalc
new file mode 100644
index 0000000..147ee0f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_direct.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_direct.1.0_bak8.hdalc b/otls/backup/sop_lsgalante.developer_direct.1.0_bak8.hdalc
new file mode 100644
index 0000000..b810a6a
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_direct.1.0_bak8.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_direct.1.0_bak9.hdalc b/otls/backup/sop_lsgalante.developer_direct.1.0_bak9.hdalc
new file mode 100644
index 0000000..80b208f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_direct.1.0_bak9.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_embryo.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_embryo.1.0_bak1.hdalc
new file mode 100644
index 0000000..2d04176
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_embryo.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_embryo.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_embryo.1.0_bak2.hdalc
new file mode 100644
index 0000000..c79e54b
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_embryo.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_expire.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_expire.1.0_bak1.hdalc
new file mode 100644
index 0000000..332c2f4
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_expire.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak1.hdalc
new file mode 100644
index 0000000..cce2cec
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak2.hdalc
new file mode 100644
index 0000000..b4d3e19
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak3.hdalc
new file mode 100644
index 0000000..82e8d5e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak4.hdalc
new file mode 100644
index 0000000..0428ca4
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak5.hdalc
new file mode 100644
index 0000000..8b21eba
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak6.hdalc
new file mode 100644
index 0000000..012cce4
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak7.hdalc
new file mode 100644
index 0000000..ca3359d
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak8.hdalc b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak8.hdalc
new file mode 100644
index 0000000..7c6f667
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_bleed.1.0_bak8.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak1.hdalc
new file mode 100644
index 0000000..134300b
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak2.hdalc
new file mode 100644
index 0000000..3b6150c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak3.hdalc
new file mode 100644
index 0000000..3b2877c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak4.hdalc
new file mode 100644
index 0000000..a8a6415
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak5.hdalc
new file mode 100644
index 0000000..10f4600
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak6.hdalc
new file mode 100644
index 0000000..d3b63a6
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak7.hdalc
new file mode 100644
index 0000000..f40788e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak8.hdalc b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak8.hdalc
new file mode 100644
index 0000000..727e5aa
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_concentrate.1.0_bak8.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak1.hdalc b/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak1.hdalc
new file mode 100644
index 0000000..28fd373
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak2.hdalc b/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak2.hdalc
new file mode 100644
index 0000000..1111b70
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak3.hdalc b/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak3.hdalc
new file mode 100644
index 0000000..704e1cf
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak4.hdalc b/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak4.hdalc
new file mode 100644
index 0000000..4e1032e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_diffuse.1.1_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak1.hdalc
new file mode 100644
index 0000000..d391b4f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak10.hdalc b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak10.hdalc
new file mode 100644
index 0000000..b0465db
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak10.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak2.hdalc
new file mode 100644
index 0000000..45c3651
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak3.hdalc
new file mode 100644
index 0000000..90afa05
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak4.hdalc
new file mode 100644
index 0000000..0c69286
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak5.hdalc
new file mode 100644
index 0000000..0e60907
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak6.hdalc
new file mode 100644
index 0000000..abb5867
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak7.hdalc
new file mode 100644
index 0000000..accea1a
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak8.hdalc b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak8.hdalc
new file mode 100644
index 0000000..bbcc94e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak8.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak9.hdalc b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak9.hdalc
new file mode 100644
index 0000000..563ec68
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_initialize.1.0_bak9.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak1.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak1.hdalc
new file mode 100644
index 0000000..12f398d
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak10.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak10.hdalc
new file mode 100644
index 0000000..b161cda
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak10.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak11.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak11.hdalc
new file mode 100644
index 0000000..381a03e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak11.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak12.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak12.hdalc
new file mode 100644
index 0000000..781f616
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak12.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak13.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak13.hdalc
new file mode 100644
index 0000000..4ff50b8
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak13.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak14.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak14.hdalc
new file mode 100644
index 0000000..6a25665
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak14.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak15.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak15.hdalc
new file mode 100644
index 0000000..a379fcf
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak15.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak2.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak2.hdalc
new file mode 100644
index 0000000..ec8fb51
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak3.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak3.hdalc
new file mode 100644
index 0000000..5d40062
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak4.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak4.hdalc
new file mode 100644
index 0000000..1758b04
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak5.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak5.hdalc
new file mode 100644
index 0000000..e08db8d
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak6.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak6.hdalc
new file mode 100644
index 0000000..e8b19b6
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak7.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak7.hdalc
new file mode 100644
index 0000000..8b024af
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak8.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak8.hdalc
new file mode 100644
index 0000000..f290021
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak8.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak9.hdalc b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak9.hdalc
new file mode 100644
index 0000000..62663c4
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_float_migrate.1.1_bak9.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_id.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_id.1.0_bak1.hdalc
new file mode 100644
index 0000000..f83ce76
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_id.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_initialize.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_initialize.1.0_bak1.hdalc
new file mode 100644
index 0000000..511a146
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_initialize.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_initialize.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_initialize.1.0_bak2.hdalc
new file mode 100644
index 0000000..67c19a3
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_initialize.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_initialize.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_initialize.1.0_bak3.hdalc
new file mode 100644
index 0000000..45422d2
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_initialize.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_lead.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_lead.1.0_bak1.hdalc
new file mode 100644
index 0000000..422900b
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_lead.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_lead.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_lead.1.0_bak2.hdalc
new file mode 100644
index 0000000..32f8c6f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_lead.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_map.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_map.1.0_bak1.hdalc
new file mode 100644
index 0000000..dced9ad
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_map.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_map.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_map.1.0_bak2.hdalc
new file mode 100644
index 0000000..d1e3c1c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_map.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_map.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_map.1.0_bak3.hdalc
new file mode 100644
index 0000000..06a5bcf
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_map.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_measure.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_measure.1.0_bak1.hdalc
new file mode 100644
index 0000000..4f38268
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_measure.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_measure.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_measure.1.0_bak2.hdalc
new file mode 100644
index 0000000..d376614
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_measure.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_metamax.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_metamax.1.0_bak1.hdalc
new file mode 100644
index 0000000..56acb0a
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_metamax.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_miasma.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_miasma.1.0_bak1.hdalc
new file mode 100644
index 0000000..57ab053
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_miasma.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_migrate.1.1_bak1.hdalc b/otls/backup/sop_lsgalante.developer_migrate.1.1_bak1.hdalc
new file mode 100644
index 0000000..b9135eb
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_migrate.1.1_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_migrate.1.1_bak2.hdalc b/otls/backup/sop_lsgalante.developer_migrate.1.1_bak2.hdalc
new file mode 100644
index 0000000..88cb304
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_migrate.1.1_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_normalize.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_normalize.1.0_bak1.hdalc
new file mode 100644
index 0000000..031421d
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_normalize.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_normalize.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_normalize.1.0_bak2.hdalc
new file mode 100644
index 0000000..ba75b35
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_normalize.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_promote.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_promote.1.0_bak1.hdalc
new file mode 100644
index 0000000..6ce2ddc
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_promote.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_remesh.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_remesh.1.0_bak1.hdalc
new file mode 100644
index 0000000..1823709
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_remesh.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_remesh.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_remesh.1.0_bak2.hdalc
new file mode 100644
index 0000000..294701c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_remesh.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_remesh.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_remesh.1.0_bak3.hdalc
new file mode 100644
index 0000000..399d65c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_remesh.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_subdivide.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_subdivide.1.0_bak1.hdalc
new file mode 100644
index 0000000..104eaed
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_subdivide.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak1.hdalc
new file mode 100644
index 0000000..dfeea7c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak2.hdalc
new file mode 100644
index 0000000..87bf674
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak3.hdalc
new file mode 100644
index 0000000..9690937
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak4.hdalc
new file mode 100644
index 0000000..32dcfaf
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_adapt.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_detangle.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_surface_detangle.1.0_bak1.hdalc
new file mode 100644
index 0000000..f744ca8
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_detangle.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_detangle.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_surface_detangle.1.0_bak2.hdalc
new file mode 100644
index 0000000..7396588
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_detangle.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_detangle.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_surface_detangle.1.0_bak3.hdalc
new file mode 100644
index 0000000..fa8283f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_detangle.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak1.hdalc
new file mode 100644
index 0000000..6123f8b
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak2.hdalc
new file mode 100644
index 0000000..e0263aa
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak3.hdalc
new file mode 100644
index 0000000..2d4a9dc
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak4.hdalc
new file mode 100644
index 0000000..44f3f79
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_open.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_remesh.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_surface_remesh.1.0_bak1.hdalc
new file mode 100644
index 0000000..74df76c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_remesh.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_remesh.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_surface_remesh.1.0_bak2.hdalc
new file mode 100644
index 0000000..aeaa677
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_remesh.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_remesh.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_surface_remesh.1.0_bak3.hdalc
new file mode 100644
index 0000000..f6e729a
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_remesh.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_remesh.1.1_bak1.hdalc b/otls/backup/sop_lsgalante.developer_surface_remesh.1.1_bak1.hdalc
new file mode 100644
index 0000000..4674244
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_remesh.1.1_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_remesh.1.1_bak2.hdalc b/otls/backup/sop_lsgalante.developer_surface_remesh.1.1_bak2.hdalc
new file mode 100644
index 0000000..2b2e117
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_remesh.1.1_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak1.hdalc
new file mode 100644
index 0000000..c0c7e7f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak2.hdalc
new file mode 100644
index 0000000..1f93bf7
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak3.hdalc
new file mode 100644
index 0000000..dbed101
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak4.hdalc
new file mode 100644
index 0000000..d4b1031
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak5.hdalc
new file mode 100644
index 0000000..76354bd
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak6.hdalc
new file mode 100644
index 0000000..e1d27f6
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak7.hdalc
new file mode 100644
index 0000000..7abcc81
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_subdivide.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak1.hdalc
new file mode 100644
index 0000000..843e939
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak2.hdalc
new file mode 100644
index 0000000..62d417d
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak3.hdalc
new file mode 100644
index 0000000..a82a953
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak4.hdalc
new file mode 100644
index 0000000..0913c90
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_surface_suture.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_time.1.0_bak1.hdalc
new file mode 100644
index 0000000..264a9ab
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_time.1.0_bak2.hdalc
new file mode 100644
index 0000000..62a233d
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_time.1.0_bak3.hdalc
new file mode 100644
index 0000000..0eae911
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_time.1.0_bak4.hdalc
new file mode 100644
index 0000000..b94cd8d
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak1.hdalc
new file mode 100644
index 0000000..6c8e46b
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak2.hdalc
new file mode 100644
index 0000000..3c3f000
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak3.hdalc
new file mode 100644
index 0000000..c7a753e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak4.hdalc
new file mode 100644
index 0000000..1e884c6
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_analysis.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak1.hdalc
new file mode 100644
index 0000000..b523e80
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak2.hdalc
new file mode 100644
index 0000000..07d5332
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak3.hdalc
new file mode 100644
index 0000000..a5df4aa
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak4.hdalc
new file mode 100644
index 0000000..58db459
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_ramp.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak1.hdalc
new file mode 100644
index 0000000..a9971e0
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak2.hdalc
new file mode 100644
index 0000000..d1fddb4
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak3.hdalc
new file mode 100644
index 0000000..0dcd075
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak4.hdalc
new file mode 100644
index 0000000..7d1bd40
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_time_switch.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak1.hdalc
new file mode 100644
index 0000000..f01d550
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak2.hdalc
new file mode 100644
index 0000000..8704bce
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak3.hdalc
new file mode 100644
index 0000000..8aa11f9
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak4.hdalc
new file mode 100644
index 0000000..7de7cfb
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_concentrate.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak1.hdalc
new file mode 100644
index 0000000..063694a
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak2.hdalc
new file mode 100644
index 0000000..c43e235
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak3.hdalc
new file mode 100644
index 0000000..a735b01
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak4.hdalc
new file mode 100644
index 0000000..253fbe1
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak5.hdalc
new file mode 100644
index 0000000..f5837e1
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak6.hdalc
new file mode 100644
index 0000000..64a1379
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak7.hdalc
new file mode 100644
index 0000000..abbb2b8
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak8.hdalc b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak8.hdalc
new file mode 100644
index 0000000..7add8c7
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_conform.1.0_bak8.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_direct.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_vector_direct.1.0_bak1.hdalc
new file mode 100644
index 0000000..e3bc78e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_direct.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_direct.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_vector_direct.1.0_bak2.hdalc
new file mode 100644
index 0000000..a7ba9cb
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_direct.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_direct.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_vector_direct.1.0_bak3.hdalc
new file mode 100644
index 0000000..37ccacd
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_direct.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak1.hdalc
new file mode 100644
index 0000000..416ee89
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak2.hdalc
new file mode 100644
index 0000000..17fa916
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak3.hdalc
new file mode 100644
index 0000000..db89773
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak4.hdalc
new file mode 100644
index 0000000..f64d92b
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak5.hdalc
new file mode 100644
index 0000000..2ae8b13
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak6.hdalc
new file mode 100644
index 0000000..99de3f2
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak7.hdalc
new file mode 100644
index 0000000..989e576
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_from_scalar.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak1.hdalc
new file mode 100644
index 0000000..e4f7871
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak10.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak10.hdalc
new file mode 100644
index 0000000..97a016f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak10.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak11.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak11.hdalc
new file mode 100644
index 0000000..c6d96d0
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak11.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak12.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak12.hdalc
new file mode 100644
index 0000000..3493942
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak12.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak13.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak13.hdalc
new file mode 100644
index 0000000..c5ce15a
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak13.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak14.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak14.hdalc
new file mode 100644
index 0000000..b0add29
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak14.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak15.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak15.hdalc
new file mode 100644
index 0000000..71d629f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak15.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak2.hdalc
new file mode 100644
index 0000000..65fd0b1
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak3.hdalc
new file mode 100644
index 0000000..236fc18
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak4.hdalc
new file mode 100644
index 0000000..708a447
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak5.hdalc
new file mode 100644
index 0000000..13404da
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak6.hdalc
new file mode 100644
index 0000000..602dd8e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak7.hdalc
new file mode 100644
index 0000000..8eac62e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak8.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak8.hdalc
new file mode 100644
index 0000000..13f449b
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak8.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak9.hdalc b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak9.hdalc
new file mode 100644
index 0000000..e1a0170
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_initialize.1.0_bak9.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak1.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak1.hdalc
new file mode 100644
index 0000000..3eae0a2
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak10.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak10.hdalc
new file mode 100644
index 0000000..725431f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak10.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak11.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak11.hdalc
new file mode 100644
index 0000000..4409be1
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak11.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak12.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak12.hdalc
new file mode 100644
index 0000000..067af5f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak12.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak13.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak13.hdalc
new file mode 100644
index 0000000..87e4126
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak13.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak14.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak14.hdalc
new file mode 100644
index 0000000..57af7f9
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak14.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak2.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak2.hdalc
new file mode 100644
index 0000000..156c665
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak3.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak3.hdalc
new file mode 100644
index 0000000..3c8c505
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak4.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak4.hdalc
new file mode 100644
index 0000000..3a5b3ec
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak5.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak5.hdalc
new file mode 100644
index 0000000..7aeea12
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak6.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak6.hdalc
new file mode 100644
index 0000000..28eace0
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak7.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak7.hdalc
new file mode 100644
index 0000000..5765282
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak8.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak8.hdalc
new file mode 100644
index 0000000..58ca2f0
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak8.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak9.hdalc b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak9.hdalc
new file mode 100644
index 0000000..2a204d8
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_migrate.1.1_bak9.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak1.hdalc
new file mode 100644
index 0000000..4ac1463
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak10.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak10.hdalc
new file mode 100644
index 0000000..b68d128
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak10.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak11.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak11.hdalc
new file mode 100644
index 0000000..01fd094
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak11.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak12.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak12.hdalc
new file mode 100644
index 0000000..0ea2305
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak12.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak13.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak13.hdalc
new file mode 100644
index 0000000..384b2d8
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak13.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak14.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak14.hdalc
new file mode 100644
index 0000000..ce6945e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak14.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak15.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak15.hdalc
new file mode 100644
index 0000000..59c4752
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak15.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak16.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak16.hdalc
new file mode 100644
index 0000000..8e36401
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak16.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak2.hdalc
new file mode 100644
index 0000000..015d75c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak3.hdalc
new file mode 100644
index 0000000..d5eb5e1
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak4.hdalc
new file mode 100644
index 0000000..03576ea
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak5.hdalc
new file mode 100644
index 0000000..049ab82
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak6.hdalc
new file mode 100644
index 0000000..bce23a2
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak7.hdalc
new file mode 100644
index 0000000..e9b20cd
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak8.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak8.hdalc
new file mode 100644
index 0000000..92e0286
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak8.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak9.hdalc b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak9.hdalc
new file mode 100644
index 0000000..a95bf0e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_rotate.1.0_bak9.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak1.hdalc
new file mode 100644
index 0000000..301601c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak10.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak10.hdalc
new file mode 100644
index 0000000..d2d9cc2
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak10.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak11.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak11.hdalc
new file mode 100644
index 0000000..000e634
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak11.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak12.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak12.hdalc
new file mode 100644
index 0000000..5a824bc
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak12.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak13.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak13.hdalc
new file mode 100644
index 0000000..ad64a8b
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak13.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak14.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak14.hdalc
new file mode 100644
index 0000000..69a144a
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak14.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak15.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak15.hdalc
new file mode 100644
index 0000000..75f0a6e
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak15.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak2.hdalc
new file mode 100644
index 0000000..34b8ac7
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak3.hdalc
new file mode 100644
index 0000000..a155206
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak3.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak4.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak4.hdalc
new file mode 100644
index 0000000..3564230
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak4.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak5.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak5.hdalc
new file mode 100644
index 0000000..fbbe40f
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak5.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak6.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak6.hdalc
new file mode 100644
index 0000000..fa1d554
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak6.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak7.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak7.hdalc
new file mode 100644
index 0000000..be40b94
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak7.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak8.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak8.hdalc
new file mode 100644
index 0000000..87802ac
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak8.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak9.hdalc b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak9.hdalc
new file mode 100644
index 0000000..ea7063c
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_vector_unify.1.0_bak9.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_volume_miasma.1.0_bak1.hdalc b/otls/backup/sop_lsgalante.developer_volume_miasma.1.0_bak1.hdalc
new file mode 100644
index 0000000..e0061d6
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_volume_miasma.1.0_bak1.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_volume_miasma.1.0_bak2.hdalc b/otls/backup/sop_lsgalante.developer_volume_miasma.1.0_bak2.hdalc
new file mode 100644
index 0000000..a363ae0
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_volume_miasma.1.0_bak2.hdalc differ
diff --git a/otls/backup/sop_lsgalante.developer_volume_miasma.1.0_bak3.hdalc b/otls/backup/sop_lsgalante.developer_volume_miasma.1.0_bak3.hdalc
new file mode 100644
index 0000000..d565ae3
Binary files /dev/null and b/otls/backup/sop_lsgalante.developer_volume_miasma.1.0_bak3.hdalc differ
diff --git a/otls/cop_lsgalante.gem_graph.1.0.hdalc b/otls/cop_lsgalante.gem_graph.1.0.hdalc
new file mode 100644
index 0000000..4efe897
Binary files /dev/null and b/otls/cop_lsgalante.gem_graph.1.0.hdalc differ
diff --git a/otls/object_lsgalante.gem_build_area.1.0.hdalc b/otls/object_lsgalante.gem_build_area.1.0.hdalc
new file mode 100644
index 0000000..8741bce
Binary files /dev/null and b/otls/object_lsgalante.gem_build_area.1.0.hdalc differ
diff --git a/otls/object_lsgalante.im_cam.1.0.hdalc b/otls/object_lsgalante.im_cam.1.0.hdalc
new file mode 100644
index 0000000..9c0da64
Binary files /dev/null and b/otls/object_lsgalante.im_cam.1.0.hdalc differ
diff --git a/otls/sop_l_s_galante.matcap_shader.1.0.hdalc.hda *.otl b/otls/sop_l_s_galante.matcap_shader.1.0.hdalc.hda *.otl
new file mode 100644
index 0000000..0b2083b
Binary files /dev/null and b/otls/sop_l_s_galante.matcap_shader.1.0.hdalc.hda *.otl differ
diff --git a/otls/sop_lsgalante.developer_analysis.1.0.hdalc b/otls/sop_lsgalante.developer_analysis.1.0.hdalc
new file mode 100755
index 0000000..b10420a
Binary files /dev/null and b/otls/sop_lsgalante.developer_analysis.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_attribute_clip.1.0.hdalc b/otls/sop_lsgalante.developer_attribute_clip.1.0.hdalc
new file mode 100644
index 0000000..bf2f5da
Binary files /dev/null and b/otls/sop_lsgalante.developer_attribute_clip.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_attribute_combine.1.0.hdalc b/otls/sop_lsgalante.developer_attribute_combine.1.0.hdalc
new file mode 100644
index 0000000..3333a10
Binary files /dev/null and b/otls/sop_lsgalante.developer_attribute_combine.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_attribute_composite.1.0.hdalc b/otls/sop_lsgalante.developer_attribute_composite.1.0.hdalc
new file mode 100644
index 0000000..86e9746
Binary files /dev/null and b/otls/sop_lsgalante.developer_attribute_composite.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_attribute_constant.1.0.hdalc b/otls/sop_lsgalante.developer_attribute_constant.1.0.hdalc
new file mode 100644
index 0000000..4442a38
Binary files /dev/null and b/otls/sop_lsgalante.developer_attribute_constant.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_attribute_initialize.1.0.hdalc b/otls/sop_lsgalante.developer_attribute_initialize.1.0.hdalc
new file mode 100644
index 0000000..fc56e63
Binary files /dev/null and b/otls/sop_lsgalante.developer_attribute_initialize.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_attribute_promote.1.0.hdalc b/otls/sop_lsgalante.developer_attribute_promote.1.0.hdalc
new file mode 100644
index 0000000..7f5b505
Binary files /dev/null and b/otls/sop_lsgalante.developer_attribute_promote.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_attribute_remap.1.0.hdalc b/otls/sop_lsgalante.developer_attribute_remap.1.0.hdalc
new file mode 100644
index 0000000..0f07544
Binary files /dev/null and b/otls/sop_lsgalante.developer_attribute_remap.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_charge.1.0.hdalc b/otls/sop_lsgalante.developer_charge.1.0.hdalc
new file mode 100755
index 0000000..f77b6c3
Binary files /dev/null and b/otls/sop_lsgalante.developer_charge.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_clip.1.0.hdalc b/otls/sop_lsgalante.developer_clip.1.0.hdalc
new file mode 100755
index 0000000..27bae8a
Binary files /dev/null and b/otls/sop_lsgalante.developer_clip.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_combine.1.0.hdalc b/otls/sop_lsgalante.developer_combine.1.0.hdalc
new file mode 100755
index 0000000..8589cf3
Binary files /dev/null and b/otls/sop_lsgalante.developer_combine.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_composite.1.0.hdalc b/otls/sop_lsgalante.developer_composite.1.0.hdalc
new file mode 100755
index 0000000..3e765a1
Binary files /dev/null and b/otls/sop_lsgalante.developer_composite.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_concentrate.1.0.hdalc b/otls/sop_lsgalante.developer_concentrate.1.0.hdalc
new file mode 100755
index 0000000..b0dcfa4
Binary files /dev/null and b/otls/sop_lsgalante.developer_concentrate.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_constant.1.0.hdalc b/otls/sop_lsgalante.developer_constant.1.0.hdalc
new file mode 100755
index 0000000..346b1d8
Binary files /dev/null and b/otls/sop_lsgalante.developer_constant.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_core.1.0.hdalc b/otls/sop_lsgalante.developer_core.1.0.hdalc
new file mode 100755
index 0000000..fdb3880
Binary files /dev/null and b/otls/sop_lsgalante.developer_core.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_cull.1.0.hdalc b/otls/sop_lsgalante.developer_cull.1.0.hdalc
new file mode 100755
index 0000000..1e08c83
Binary files /dev/null and b/otls/sop_lsgalante.developer_cull.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_detangle.1.0.hdalc b/otls/sop_lsgalante.developer_detangle.1.0.hdalc
new file mode 100755
index 0000000..1bfe60c
Binary files /dev/null and b/otls/sop_lsgalante.developer_detangle.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_develop.1.0.hdalc b/otls/sop_lsgalante.developer_develop.1.0.hdalc
new file mode 100755
index 0000000..78459c2
Binary files /dev/null and b/otls/sop_lsgalante.developer_develop.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_diffuse.1.0.hdalc b/otls/sop_lsgalante.developer_diffuse.1.0.hdalc
new file mode 100755
index 0000000..0db6230
Binary files /dev/null and b/otls/sop_lsgalante.developer_diffuse.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_diffuse.1.1.hdalc b/otls/sop_lsgalante.developer_diffuse.1.1.hdalc
new file mode 100644
index 0000000..cbaf665
Binary files /dev/null and b/otls/sop_lsgalante.developer_diffuse.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.developer_direct.1.0.hdalc b/otls/sop_lsgalante.developer_direct.1.0.hdalc
new file mode 100755
index 0000000..623db62
Binary files /dev/null and b/otls/sop_lsgalante.developer_direct.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_embryo.1.0.hdalc b/otls/sop_lsgalante.developer_embryo.1.0.hdalc
new file mode 100755
index 0000000..5f2a1b6
Binary files /dev/null and b/otls/sop_lsgalante.developer_embryo.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_expire.1.0.hdalc b/otls/sop_lsgalante.developer_expire.1.0.hdalc
new file mode 100755
index 0000000..28e76a2
Binary files /dev/null and b/otls/sop_lsgalante.developer_expire.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_float_bleed.1.0.hdalc b/otls/sop_lsgalante.developer_float_bleed.1.0.hdalc
new file mode 100644
index 0000000..520eeb0
Binary files /dev/null and b/otls/sop_lsgalante.developer_float_bleed.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_float_concentrate.1.0.hdalc b/otls/sop_lsgalante.developer_float_concentrate.1.0.hdalc
new file mode 100644
index 0000000..bb58a0b
Binary files /dev/null and b/otls/sop_lsgalante.developer_float_concentrate.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_float_diffuse.1.1.hdalc b/otls/sop_lsgalante.developer_float_diffuse.1.1.hdalc
new file mode 100644
index 0000000..8e242e0
Binary files /dev/null and b/otls/sop_lsgalante.developer_float_diffuse.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.developer_float_initialize.1.0.hdalc b/otls/sop_lsgalante.developer_float_initialize.1.0.hdalc
new file mode 100644
index 0000000..3cdecb3
Binary files /dev/null and b/otls/sop_lsgalante.developer_float_initialize.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_float_migrate.1.1.hdalc b/otls/sop_lsgalante.developer_float_migrate.1.1.hdalc
new file mode 100644
index 0000000..82d00b9
Binary files /dev/null and b/otls/sop_lsgalante.developer_float_migrate.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.developer_id.1.0.hdalc b/otls/sop_lsgalante.developer_id.1.0.hdalc
new file mode 100755
index 0000000..d7d467a
Binary files /dev/null and b/otls/sop_lsgalante.developer_id.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_initialize.1.0.hdalc b/otls/sop_lsgalante.developer_initialize.1.0.hdalc
new file mode 100755
index 0000000..39e4f5f
Binary files /dev/null and b/otls/sop_lsgalante.developer_initialize.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_lead.1.0.hdalc b/otls/sop_lsgalante.developer_lead.1.0.hdalc
new file mode 100755
index 0000000..ddb8047
Binary files /dev/null and b/otls/sop_lsgalante.developer_lead.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_map.1.0.hdalc b/otls/sop_lsgalante.developer_map.1.0.hdalc
new file mode 100755
index 0000000..a78ddb3
Binary files /dev/null and b/otls/sop_lsgalante.developer_map.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_measure.1.0.hdalc b/otls/sop_lsgalante.developer_measure.1.0.hdalc
new file mode 100755
index 0000000..7be2591
Binary files /dev/null and b/otls/sop_lsgalante.developer_measure.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_metamax.1.0.hdalc b/otls/sop_lsgalante.developer_metamax.1.0.hdalc
new file mode 100755
index 0000000..c299632
Binary files /dev/null and b/otls/sop_lsgalante.developer_metamax.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_miasma.1.0.hdalc b/otls/sop_lsgalante.developer_miasma.1.0.hdalc
new file mode 100755
index 0000000..f6fb049
Binary files /dev/null and b/otls/sop_lsgalante.developer_miasma.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_migrate.1.1.hdalc b/otls/sop_lsgalante.developer_migrate.1.1.hdalc
new file mode 100755
index 0000000..1efc6cc
Binary files /dev/null and b/otls/sop_lsgalante.developer_migrate.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.developer_normalize.1.0.hdalc b/otls/sop_lsgalante.developer_normalize.1.0.hdalc
new file mode 100755
index 0000000..9cc90ab
Binary files /dev/null and b/otls/sop_lsgalante.developer_normalize.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_panel.1.0.hdalc b/otls/sop_lsgalante.developer_panel.1.0.hdalc
new file mode 100755
index 0000000..cfa37ab
Binary files /dev/null and b/otls/sop_lsgalante.developer_panel.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_promote.1.0.hdalc b/otls/sop_lsgalante.developer_promote.1.0.hdalc
new file mode 100755
index 0000000..1e64640
Binary files /dev/null and b/otls/sop_lsgalante.developer_promote.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_region_center.1.0.hdalc b/otls/sop_lsgalante.developer_region_center.1.0.hdalc
new file mode 100755
index 0000000..ef8be4b
Binary files /dev/null and b/otls/sop_lsgalante.developer_region_center.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_release.1.0.hdalc b/otls/sop_lsgalante.developer_release.1.0.hdalc
new file mode 100755
index 0000000..5fea836
Binary files /dev/null and b/otls/sop_lsgalante.developer_release.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_remesh.1.0.hdalc b/otls/sop_lsgalante.developer_remesh.1.0.hdalc
new file mode 100755
index 0000000..9ec831e
Binary files /dev/null and b/otls/sop_lsgalante.developer_remesh.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_select.1.0.hdalc b/otls/sop_lsgalante.developer_select.1.0.hdalc
new file mode 100755
index 0000000..dab3621
Binary files /dev/null and b/otls/sop_lsgalante.developer_select.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_solver.1.0.hdalc b/otls/sop_lsgalante.developer_solver.1.0.hdalc
new file mode 100755
index 0000000..ebb84c4
Binary files /dev/null and b/otls/sop_lsgalante.developer_solver.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_subdivide.1.0.hdalc b/otls/sop_lsgalante.developer_subdivide.1.0.hdalc
new file mode 100755
index 0000000..1439f0d
Binary files /dev/null and b/otls/sop_lsgalante.developer_subdivide.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_submute_begin.1.0.hdalc b/otls/sop_lsgalante.developer_submute_begin.1.0.hdalc
new file mode 100755
index 0000000..ccc6fd9
Binary files /dev/null and b/otls/sop_lsgalante.developer_submute_begin.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_submute_end.1.0.hdalc b/otls/sop_lsgalante.developer_submute_end.1.0.hdalc
new file mode 100755
index 0000000..e4ee9e5
Binary files /dev/null and b/otls/sop_lsgalante.developer_submute_end.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_surface_adapt.1.0.hdalc b/otls/sop_lsgalante.developer_surface_adapt.1.0.hdalc
new file mode 100755
index 0000000..efaa080
Binary files /dev/null and b/otls/sop_lsgalante.developer_surface_adapt.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_surface_detangle.1.0.hdalc b/otls/sop_lsgalante.developer_surface_detangle.1.0.hdalc
new file mode 100644
index 0000000..136a917
Binary files /dev/null and b/otls/sop_lsgalante.developer_surface_detangle.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_surface_open.1.0.hdalc b/otls/sop_lsgalante.developer_surface_open.1.0.hdalc
new file mode 100755
index 0000000..fee6f24
Binary files /dev/null and b/otls/sop_lsgalante.developer_surface_open.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_surface_remesh.1.0.hdalc b/otls/sop_lsgalante.developer_surface_remesh.1.0.hdalc
new file mode 100644
index 0000000..5ba74d8
Binary files /dev/null and b/otls/sop_lsgalante.developer_surface_remesh.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_surface_remesh.1.1.hdalc b/otls/sop_lsgalante.developer_surface_remesh.1.1.hdalc
new file mode 100644
index 0000000..57efad9
Binary files /dev/null and b/otls/sop_lsgalante.developer_surface_remesh.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.developer_surface_subdivide.1.0.hdalc b/otls/sop_lsgalante.developer_surface_subdivide.1.0.hdalc
new file mode 100644
index 0000000..d00b3d3
Binary files /dev/null and b/otls/sop_lsgalante.developer_surface_subdivide.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_surface_suture.1.0.hdalc b/otls/sop_lsgalante.developer_surface_suture.1.0.hdalc
new file mode 100755
index 0000000..4e19b10
Binary files /dev/null and b/otls/sop_lsgalante.developer_surface_suture.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_time.1.0.hdalc b/otls/sop_lsgalante.developer_time.1.0.hdalc
new file mode 100755
index 0000000..dd1d869
Binary files /dev/null and b/otls/sop_lsgalante.developer_time.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_time_analysis.1.0.hdalc b/otls/sop_lsgalante.developer_time_analysis.1.0.hdalc
new file mode 100755
index 0000000..102c046
Binary files /dev/null and b/otls/sop_lsgalante.developer_time_analysis.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_time_ramp.1.0.hdalc b/otls/sop_lsgalante.developer_time_ramp.1.0.hdalc
new file mode 100755
index 0000000..fd90de8
Binary files /dev/null and b/otls/sop_lsgalante.developer_time_ramp.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_time_switch.1.0.hdalc b/otls/sop_lsgalante.developer_time_switch.1.0.hdalc
new file mode 100755
index 0000000..b085d6f
Binary files /dev/null and b/otls/sop_lsgalante.developer_time_switch.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_vector_concentrate.1.0.hdalc b/otls/sop_lsgalante.developer_vector_concentrate.1.0.hdalc
new file mode 100644
index 0000000..67de801
Binary files /dev/null and b/otls/sop_lsgalante.developer_vector_concentrate.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_vector_conform.1.0.hdalc b/otls/sop_lsgalante.developer_vector_conform.1.0.hdalc
new file mode 100755
index 0000000..bf93b52
Binary files /dev/null and b/otls/sop_lsgalante.developer_vector_conform.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_vector_direct.1.0.hdalc b/otls/sop_lsgalante.developer_vector_direct.1.0.hdalc
new file mode 100644
index 0000000..ac5fcd6
Binary files /dev/null and b/otls/sop_lsgalante.developer_vector_direct.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_vector_from_scalar.1.0.hdalc b/otls/sop_lsgalante.developer_vector_from_scalar.1.0.hdalc
new file mode 100755
index 0000000..75fe59c
Binary files /dev/null and b/otls/sop_lsgalante.developer_vector_from_scalar.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_vector_initialize.1.0.hdalc b/otls/sop_lsgalante.developer_vector_initialize.1.0.hdalc
new file mode 100644
index 0000000..da181b1
Binary files /dev/null and b/otls/sop_lsgalante.developer_vector_initialize.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_vector_migrate.1.1.hdalc b/otls/sop_lsgalante.developer_vector_migrate.1.1.hdalc
new file mode 100644
index 0000000..2247f42
Binary files /dev/null and b/otls/sop_lsgalante.developer_vector_migrate.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.developer_vector_rotate.1.0.hdalc b/otls/sop_lsgalante.developer_vector_rotate.1.0.hdalc
new file mode 100755
index 0000000..59c735e
Binary files /dev/null and b/otls/sop_lsgalante.developer_vector_rotate.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_vector_unify.1.0.hdalc b/otls/sop_lsgalante.developer_vector_unify.1.0.hdalc
new file mode 100755
index 0000000..ee2012e
Binary files /dev/null and b/otls/sop_lsgalante.developer_vector_unify.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_vitality.1.0.hdalc b/otls/sop_lsgalante.developer_vitality.1.0.hdalc
new file mode 100755
index 0000000..8ae8023
Binary files /dev/null and b/otls/sop_lsgalante.developer_vitality.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_volume_miasma.1.0.hdalc b/otls/sop_lsgalante.developer_volume_miasma.1.0.hdalc
new file mode 100644
index 0000000..74e8871
Binary files /dev/null and b/otls/sop_lsgalante.developer_volume_miasma.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.developer_weight.1.0.hdalc b/otls/sop_lsgalante.developer_weight.1.0.hdalc
new file mode 100755
index 0000000..886bfaa
Binary files /dev/null and b/otls/sop_lsgalante.developer_weight.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_build_area.1.0.hdalc b/otls/sop_lsgalante.gem_build_area.1.0.hdalc
new file mode 100644
index 0000000..d1b8c71
Binary files /dev/null and b/otls/sop_lsgalante.gem_build_area.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_flange_merge.1.0.hdalc b/otls/sop_lsgalante.gem_flange_merge.1.0.hdalc
new file mode 100644
index 0000000..214a77e
Binary files /dev/null and b/otls/sop_lsgalante.gem_flange_merge.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_flange_monoid.1.0.hdalc b/otls/sop_lsgalante.gem_flange_monoid.1.0.hdalc
new file mode 100644
index 0000000..63ffd97
Binary files /dev/null and b/otls/sop_lsgalante.gem_flange_monoid.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_halo_merge.1.0.hdalc b/otls/sop_lsgalante.gem_halo_merge.1.0.hdalc
new file mode 100644
index 0000000..8c5b6e0
Binary files /dev/null and b/otls/sop_lsgalante.gem_halo_merge.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_mold_flange.1.0.hdalc b/otls/sop_lsgalante.gem_mold_flange.1.0.hdalc
new file mode 100644
index 0000000..9c5e0f7
Binary files /dev/null and b/otls/sop_lsgalante.gem_mold_flange.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_mold_preprocess.1.0.hdalc b/otls/sop_lsgalante.gem_mold_preprocess.1.0.hdalc
new file mode 100644
index 0000000..4325cd7
Binary files /dev/null and b/otls/sop_lsgalante.gem_mold_preprocess.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_mold_root.1.0.hdalc b/otls/sop_lsgalante.gem_mold_root.1.0.hdalc
new file mode 100644
index 0000000..c0aabbb
Binary files /dev/null and b/otls/sop_lsgalante.gem_mold_root.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_mold_shell.1.0.hdalc b/otls/sop_lsgalante.gem_mold_shell.1.0.hdalc
new file mode 100644
index 0000000..fbfd816
Binary files /dev/null and b/otls/sop_lsgalante.gem_mold_shell.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_mold_solver.1.0.hdalc b/otls/sop_lsgalante.gem_mold_solver.1.0.hdalc
new file mode 100644
index 0000000..a1e0f2c
Binary files /dev/null and b/otls/sop_lsgalante.gem_mold_solver.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_mold_structure.1.0.hdalc b/otls/sop_lsgalante.gem_mold_structure.1.0.hdalc
new file mode 100644
index 0000000..03277e1
Binary files /dev/null and b/otls/sop_lsgalante.gem_mold_structure.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_orient.1.0.hdalc b/otls/sop_lsgalante.gem_orient.1.0.hdalc
new file mode 100644
index 0000000..174f571
Binary files /dev/null and b/otls/sop_lsgalante.gem_orient.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_partition.1.0.hdalc b/otls/sop_lsgalante.gem_partition.1.0.hdalc
new file mode 100644
index 0000000..25648ee
Binary files /dev/null and b/otls/sop_lsgalante.gem_partition.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_partition.1.1.hdalc b/otls/sop_lsgalante.gem_partition.1.1.hdalc
new file mode 100644
index 0000000..3dbb9c8
Binary files /dev/null and b/otls/sop_lsgalante.gem_partition.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.gem_positioner.1.0.hdalc b/otls/sop_lsgalante.gem_positioner.1.0.hdalc
new file mode 100644
index 0000000..c67a3ea
Binary files /dev/null and b/otls/sop_lsgalante.gem_positioner.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_prim_painter.1.0.hdalc b/otls/sop_lsgalante.gem_prim_painter.1.0.hdalc
new file mode 100644
index 0000000..77647b6
Binary files /dev/null and b/otls/sop_lsgalante.gem_prim_painter.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_prim_painter.1.1.hdalc b/otls/sop_lsgalante.gem_prim_painter.1.1.hdalc
new file mode 100644
index 0000000..ecac849
Binary files /dev/null and b/otls/sop_lsgalante.gem_prim_painter.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.gem_prim_painter.1.2.hdalc b/otls/sop_lsgalante.gem_prim_painter.1.2.hdalc
new file mode 100644
index 0000000..0663ca4
Binary files /dev/null and b/otls/sop_lsgalante.gem_prim_painter.1.2.hdalc differ
diff --git a/otls/sop_lsgalante.gem_scale.1.0.hdalc b/otls/sop_lsgalante.gem_scale.1.0.hdalc
new file mode 100644
index 0000000..e1ee994
Binary files /dev/null and b/otls/sop_lsgalante.gem_scale.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_screw.1.0.hdalc b/otls/sop_lsgalante.gem_screw.1.0.hdalc
new file mode 100644
index 0000000..18c59ff
Binary files /dev/null and b/otls/sop_lsgalante.gem_screw.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_skeleprep.1.0.hdalc b/otls/sop_lsgalante.gem_skeleprep.1.0.hdalc
new file mode 100644
index 0000000..0ae82ef
Binary files /dev/null and b/otls/sop_lsgalante.gem_skeleprep.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_sprue.1.0.hdalc b/otls/sop_lsgalante.gem_sprue.1.0.hdalc
new file mode 100644
index 0000000..9d5331b
Binary files /dev/null and b/otls/sop_lsgalante.gem_sprue.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_sprue_cut.1.0.hdalc b/otls/sop_lsgalante.gem_sprue_cut.1.0.hdalc
new file mode 100644
index 0000000..a63de57
Binary files /dev/null and b/otls/sop_lsgalante.gem_sprue_cut.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_sprue_funnel.1.0.hdalc b/otls/sop_lsgalante.gem_sprue_funnel.1.0.hdalc
new file mode 100644
index 0000000..6f0b425
Binary files /dev/null and b/otls/sop_lsgalante.gem_sprue_funnel.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_sprue_preprocess.1.0.hdalc b/otls/sop_lsgalante.gem_sprue_preprocess.1.0.hdalc
new file mode 100644
index 0000000..1c0e901
Binary files /dev/null and b/otls/sop_lsgalante.gem_sprue_preprocess.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_sprue_select.1.0.hdalc b/otls/sop_lsgalante.gem_sprue_select.1.0.hdalc
new file mode 100644
index 0000000..0f013ec
Binary files /dev/null and b/otls/sop_lsgalante.gem_sprue_select.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_sprue_select.1.1.hdalc b/otls/sop_lsgalante.gem_sprue_select.1.1.hdalc
new file mode 100644
index 0000000..0070e29
Binary files /dev/null and b/otls/sop_lsgalante.gem_sprue_select.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.gem_sprue_shell.1.0.hdalc b/otls/sop_lsgalante.gem_sprue_shell.1.0.hdalc
new file mode 100644
index 0000000..2eac8a6
Binary files /dev/null and b/otls/sop_lsgalante.gem_sprue_shell.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.gem_support.1.0.hdalc b/otls/sop_lsgalante.gem_support.1.0.hdalc
new file mode 100644
index 0000000..240d754
Binary files /dev/null and b/otls/sop_lsgalante.gem_support.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_arrow.1.0.hdalc b/otls/sop_lsgalante.im_arrow.1.0.hdalc
new file mode 100644
index 0000000..c0a8bb5
Binary files /dev/null and b/otls/sop_lsgalante.im_arrow.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_attractor.0.9.hdalc b/otls/sop_lsgalante.im_attractor.0.9.hdalc
new file mode 100644
index 0000000..2015c71
Binary files /dev/null and b/otls/sop_lsgalante.im_attractor.0.9.hdalc differ
diff --git a/otls/sop_lsgalante.im_attractor.1.0.hdalc b/otls/sop_lsgalante.im_attractor.1.0.hdalc
new file mode 100644
index 0000000..5acb486
Binary files /dev/null and b/otls/sop_lsgalante.im_attractor.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_attractor.1.1.hdalc b/otls/sop_lsgalante.im_attractor.1.1.hdalc
new file mode 100644
index 0000000..ecb3be7
Binary files /dev/null and b/otls/sop_lsgalante.im_attractor.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_bend.1.0.hdalc b/otls/sop_lsgalante.im_bend.1.0.hdalc
new file mode 100644
index 0000000..135a267
Binary files /dev/null and b/otls/sop_lsgalante.im_bend.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_bevel.1.0.hdalc b/otls/sop_lsgalante.im_bevel.1.0.hdalc
new file mode 100644
index 0000000..5220934
Binary files /dev/null and b/otls/sop_lsgalante.im_bevel.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_blaster.1.0.hdalc b/otls/sop_lsgalante.im_blaster.1.0.hdalc
new file mode 100644
index 0000000..f4707f1
Binary files /dev/null and b/otls/sop_lsgalante.im_blaster.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_bounds.1.0.hdalc b/otls/sop_lsgalante.im_bounds.1.0.hdalc
new file mode 100644
index 0000000..5f4db84
Binary files /dev/null and b/otls/sop_lsgalante.im_bounds.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_bounds.1.1.hdalc b/otls/sop_lsgalante.im_bounds.1.1.hdalc
new file mode 100644
index 0000000..521a5b2
Binary files /dev/null and b/otls/sop_lsgalante.im_bounds.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_box.1.0.hdalc b/otls/sop_lsgalante.im_box.1.0.hdalc
new file mode 100644
index 0000000..8d87b67
Binary files /dev/null and b/otls/sop_lsgalante.im_box.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_cache.1.0.hdalc b/otls/sop_lsgalante.im_cache.1.0.hdalc
new file mode 100644
index 0000000..0acf95c
Binary files /dev/null and b/otls/sop_lsgalante.im_cache.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_clip.1.0.hdalc b/otls/sop_lsgalante.im_clip.1.0.hdalc
new file mode 100644
index 0000000..951c987
Binary files /dev/null and b/otls/sop_lsgalante.im_clip.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_color.1.0.hdalc b/otls/sop_lsgalante.im_color.1.0.hdalc
new file mode 100644
index 0000000..f536bfb
Binary files /dev/null and b/otls/sop_lsgalante.im_color.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_connectivity.1.0.hdalc b/otls/sop_lsgalante.im_connectivity.1.0.hdalc
new file mode 100644
index 0000000..984d004
Binary files /dev/null and b/otls/sop_lsgalante.im_connectivity.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_constant.1.0.hdalc b/otls/sop_lsgalante.im_constant.1.0.hdalc
new file mode 100644
index 0000000..61c39e0
Binary files /dev/null and b/otls/sop_lsgalante.im_constant.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_copy.1.0.hdalc b/otls/sop_lsgalante.im_copy.1.0.hdalc
new file mode 100644
index 0000000..0c537a9
Binary files /dev/null and b/otls/sop_lsgalante.im_copy.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_count_primitives.1.0.hdalc b/otls/sop_lsgalante.im_count_primitives.1.0.hdalc
new file mode 100644
index 0000000..db37a2d
Binary files /dev/null and b/otls/sop_lsgalante.im_count_primitives.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_cull.1.0.hdalc b/otls/sop_lsgalante.im_cull.1.0.hdalc
new file mode 100644
index 0000000..6b5d705
Binary files /dev/null and b/otls/sop_lsgalante.im_cull.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_cull_points.1.0.hdalc b/otls/sop_lsgalante.im_cull_points.1.0.hdalc
new file mode 100644
index 0000000..6096a68
Binary files /dev/null and b/otls/sop_lsgalante.im_cull_points.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_cull_primitives.1.0.hdalc b/otls/sop_lsgalante.im_cull_primitives.1.0.hdalc
new file mode 100644
index 0000000..d5dc950
Binary files /dev/null and b/otls/sop_lsgalante.im_cull_primitives.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_curl.1.0.hdalc b/otls/sop_lsgalante.im_curl.1.0.hdalc
new file mode 100644
index 0000000..c3d0f03
Binary files /dev/null and b/otls/sop_lsgalante.im_curl.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_curl.1.1.hdalc b/otls/sop_lsgalante.im_curl.1.1.hdalc
new file mode 100644
index 0000000..dcb7f0c
Binary files /dev/null and b/otls/sop_lsgalante.im_curl.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_curl.1.2.hdalc b/otls/sop_lsgalante.im_curl.1.2.hdalc
new file mode 100644
index 0000000..8f369fd
Binary files /dev/null and b/otls/sop_lsgalante.im_curl.1.2.hdalc differ
diff --git a/otls/sop_lsgalante.im_delete.1.1.hdalc b/otls/sop_lsgalante.im_delete.1.1.hdalc
new file mode 100644
index 0000000..8615094
Binary files /dev/null and b/otls/sop_lsgalante.im_delete.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_diagnostic.1.0.hdalc b/otls/sop_lsgalante.im_diagnostic.1.0.hdalc
new file mode 100644
index 0000000..584a831
Binary files /dev/null and b/otls/sop_lsgalante.im_diagnostic.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_direction.1.0.hdalc b/otls/sop_lsgalante.im_direction.1.0.hdalc
new file mode 100644
index 0000000..95d31de
Binary files /dev/null and b/otls/sop_lsgalante.im_direction.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_dissolve.1.0.hdalc b/otls/sop_lsgalante.im_dissolve.1.0.hdalc
new file mode 100644
index 0000000..a6d0b4e
Binary files /dev/null and b/otls/sop_lsgalante.im_dissolve.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_dissolve_point.1.0.hdalc b/otls/sop_lsgalante.im_dissolve_point.1.0.hdalc
new file mode 100644
index 0000000..1c94c60
Binary files /dev/null and b/otls/sop_lsgalante.im_dissolve_point.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_distance.1.0.hdalc b/otls/sop_lsgalante.im_distance.1.0.hdalc
new file mode 100644
index 0000000..14245c5
Binary files /dev/null and b/otls/sop_lsgalante.im_distance.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_distrubution.1.0.hdalc b/otls/sop_lsgalante.im_distrubution.1.0.hdalc
new file mode 100644
index 0000000..5675f79
Binary files /dev/null and b/otls/sop_lsgalante.im_distrubution.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_dot.1.0.hdalc b/otls/sop_lsgalante.im_dot.1.0.hdalc
new file mode 100644
index 0000000..a86ff32
Binary files /dev/null and b/otls/sop_lsgalante.im_dot.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_evaluate_curve.1.0.hdalc b/otls/sop_lsgalante.im_evaluate_curve.1.0.hdalc
new file mode 100644
index 0000000..f4cac6e
Binary files /dev/null and b/otls/sop_lsgalante.im_evaluate_curve.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_extrude.1.0.hdalc b/otls/sop_lsgalante.im_extrude.1.0.hdalc
new file mode 100644
index 0000000..910e70e
Binary files /dev/null and b/otls/sop_lsgalante.im_extrude.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_fast_clip.1.0.hdalc b/otls/sop_lsgalante.im_fast_clip.1.0.hdalc
new file mode 100644
index 0000000..f95cbc9
Binary files /dev/null and b/otls/sop_lsgalante.im_fast_clip.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_gate.1.0.hdalc b/otls/sop_lsgalante.im_gate.1.0.hdalc
new file mode 100644
index 0000000..873c11f
Binary files /dev/null and b/otls/sop_lsgalante.im_gate.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_gem.1.0.hdalc b/otls/sop_lsgalante.im_gem.1.0.hdalc
new file mode 100644
index 0000000..73cdb8e
Binary files /dev/null and b/otls/sop_lsgalante.im_gem.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_grid.1.0.hdalc b/otls/sop_lsgalante.im_grid.1.0.hdalc
new file mode 100644
index 0000000..df04fb2
Binary files /dev/null and b/otls/sop_lsgalante.im_grid.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_group.1.0.hdalc b/otls/sop_lsgalante.im_group.1.0.hdalc
new file mode 100644
index 0000000..3ed6091
Binary files /dev/null and b/otls/sop_lsgalante.im_group.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_group_split.1.0.hdalc b/otls/sop_lsgalante.im_group_split.1.0.hdalc
new file mode 100644
index 0000000..7c74602
Binary files /dev/null and b/otls/sop_lsgalante.im_group_split.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_guide.1.1.hdalc b/otls/sop_lsgalante.im_guide.1.1.hdalc
new file mode 100644
index 0000000..e504640
Binary files /dev/null and b/otls/sop_lsgalante.im_guide.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_inline.1.0.hdalc b/otls/sop_lsgalante.im_inline.1.0.hdalc
new file mode 100644
index 0000000..7d538b2
Binary files /dev/null and b/otls/sop_lsgalante.im_inline.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_invert_mesh.1.0.hdalc b/otls/sop_lsgalante.im_invert_mesh.1.0.hdalc
new file mode 100644
index 0000000..5a8e450
Binary files /dev/null and b/otls/sop_lsgalante.im_invert_mesh.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_layout.1.0.hdalc b/otls/sop_lsgalante.im_layout.1.0.hdalc
new file mode 100644
index 0000000..8428fa1
Binary files /dev/null and b/otls/sop_lsgalante.im_layout.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_line.1.0.hdalc b/otls/sop_lsgalante.im_line.1.0.hdalc
new file mode 100644
index 0000000..dddd04d
Binary files /dev/null and b/otls/sop_lsgalante.im_line.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_line.1.1.hdalc b/otls/sop_lsgalante.im_line.1.1.hdalc
new file mode 100644
index 0000000..34eb15d
Binary files /dev/null and b/otls/sop_lsgalante.im_line.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_lop.1.0.hdalc b/otls/sop_lsgalante.im_lop.1.0.hdalc
new file mode 100644
index 0000000..47dc2c8
Binary files /dev/null and b/otls/sop_lsgalante.im_lop.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_manipulator.1.0.hdalc b/otls/sop_lsgalante.im_manipulator.1.0.hdalc
new file mode 100644
index 0000000..401c484
Binary files /dev/null and b/otls/sop_lsgalante.im_manipulator.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_matcap.1.0.hdalc b/otls/sop_lsgalante.im_matcap.1.0.hdalc
new file mode 100644
index 0000000..684382c
Binary files /dev/null and b/otls/sop_lsgalante.im_matcap.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_membership.1.0.hdalc b/otls/sop_lsgalante.im_membership.1.0.hdalc
new file mode 100644
index 0000000..136f5eb
Binary files /dev/null and b/otls/sop_lsgalante.im_membership.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_multistain.1.0.hdalc b/otls/sop_lsgalante.im_multistain.1.0.hdalc
new file mode 100644
index 0000000..f51edf6
Binary files /dev/null and b/otls/sop_lsgalante.im_multistain.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_neighbours.1.0.hdalc b/otls/sop_lsgalante.im_neighbours.1.0.hdalc
new file mode 100644
index 0000000..04d955f
Binary files /dev/null and b/otls/sop_lsgalante.im_neighbours.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_normal.1.0.hdalc b/otls/sop_lsgalante.im_normal.1.0.hdalc
new file mode 100644
index 0000000..98fadcf
Binary files /dev/null and b/otls/sop_lsgalante.im_normal.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_notebook.1.0.hdalc b/otls/sop_lsgalante.im_notebook.1.0.hdalc
new file mode 100644
index 0000000..26218a0
Binary files /dev/null and b/otls/sop_lsgalante.im_notebook.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_number_generator.1.0.hdalc b/otls/sop_lsgalante.im_number_generator.1.0.hdalc
new file mode 100644
index 0000000..19124f0
Binary files /dev/null and b/otls/sop_lsgalante.im_number_generator.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_onion.1.0.hdalc b/otls/sop_lsgalante.im_onion.1.0.hdalc
new file mode 100644
index 0000000..debe0db
Binary files /dev/null and b/otls/sop_lsgalante.im_onion.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_orient.1.0.hdalc b/otls/sop_lsgalante.im_orient.1.0.hdalc
new file mode 100644
index 0000000..a3c7671
Binary files /dev/null and b/otls/sop_lsgalante.im_orient.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_orient.1.1.hdalc b/otls/sop_lsgalante.im_orient.1.1.hdalc
new file mode 100644
index 0000000..1ec769f
Binary files /dev/null and b/otls/sop_lsgalante.im_orient.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_permutate.1.0.hdalc b/otls/sop_lsgalante.im_permutate.1.0.hdalc
new file mode 100644
index 0000000..b0879e5
Binary files /dev/null and b/otls/sop_lsgalante.im_permutate.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_plane.1.0.hdalc b/otls/sop_lsgalante.im_plane.1.0.hdalc
new file mode 100644
index 0000000..8864837
Binary files /dev/null and b/otls/sop_lsgalante.im_plane.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_point.1.0.hdalc b/otls/sop_lsgalante.im_point.1.0.hdalc
new file mode 100644
index 0000000..91d5512
Binary files /dev/null and b/otls/sop_lsgalante.im_point.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_point_mover.1.0.hdalc b/otls/sop_lsgalante.im_point_mover.1.0.hdalc
new file mode 100644
index 0000000..5b0fe6c
Binary files /dev/null and b/otls/sop_lsgalante.im_point_mover.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_point_proximity.1.0.hdalc b/otls/sop_lsgalante.im_point_proximity.1.0.hdalc
new file mode 100644
index 0000000..5be601c
Binary files /dev/null and b/otls/sop_lsgalante.im_point_proximity.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_pose.1.0.hdalc b/otls/sop_lsgalante.im_pose.1.0.hdalc
new file mode 100644
index 0000000..94fd07f
Binary files /dev/null and b/otls/sop_lsgalante.im_pose.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_prim_distance.1.0.hdalc b/otls/sop_lsgalante.im_prim_distance.1.0.hdalc
new file mode 100644
index 0000000..40d753c
Binary files /dev/null and b/otls/sop_lsgalante.im_prim_distance.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_prim_proximity.1.0.hdalc b/otls/sop_lsgalante.im_prim_proximity.1.0.hdalc
new file mode 100644
index 0000000..3a3a333
Binary files /dev/null and b/otls/sop_lsgalante.im_prim_proximity.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_promote.1.0.hdalc b/otls/sop_lsgalante.im_promote.1.0.hdalc
new file mode 100644
index 0000000..3220c72
Binary files /dev/null and b/otls/sop_lsgalante.im_promote.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_ramp_color.1.0.hdalc b/otls/sop_lsgalante.im_ramp_color.1.0.hdalc
new file mode 100644
index 0000000..4e29140
Binary files /dev/null and b/otls/sop_lsgalante.im_ramp_color.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_ramp_color.1.1.hdalc b/otls/sop_lsgalante.im_ramp_color.1.1.hdalc
new file mode 100644
index 0000000..0dd3968
Binary files /dev/null and b/otls/sop_lsgalante.im_ramp_color.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_ramp_float.1.0.hdalc b/otls/sop_lsgalante.im_ramp_float.1.0.hdalc
new file mode 100644
index 0000000..249560b
Binary files /dev/null and b/otls/sop_lsgalante.im_ramp_float.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_random_walk.1.0.hdalc b/otls/sop_lsgalante.im_random_walk.1.0.hdalc
new file mode 100644
index 0000000..6880326
Binary files /dev/null and b/otls/sop_lsgalante.im_random_walk.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_reindex.1.0.hdalc b/otls/sop_lsgalante.im_reindex.1.0.hdalc
new file mode 100644
index 0000000..c488c32
Binary files /dev/null and b/otls/sop_lsgalante.im_reindex.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_relax.1.0.hdalc b/otls/sop_lsgalante.im_relax.1.0.hdalc
new file mode 100644
index 0000000..c1af549
Binary files /dev/null and b/otls/sop_lsgalante.im_relax.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_remap.1.0.hdalc b/otls/sop_lsgalante.im_remap.1.0.hdalc
new file mode 100644
index 0000000..684ba54
Binary files /dev/null and b/otls/sop_lsgalante.im_remap.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_remap.1.1.hdalc b/otls/sop_lsgalante.im_remap.1.1.hdalc
new file mode 100644
index 0000000..d8f41b9
Binary files /dev/null and b/otls/sop_lsgalante.im_remap.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_remesh.1.0.hdalc b/otls/sop_lsgalante.im_remesh.1.0.hdalc
new file mode 100644
index 0000000..492b84b
Binary files /dev/null and b/otls/sop_lsgalante.im_remesh.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_ruler.1.0.hdalc b/otls/sop_lsgalante.im_ruler.1.0.hdalc
new file mode 100644
index 0000000..519f608
Binary files /dev/null and b/otls/sop_lsgalante.im_ruler.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_sample.1.0.hdalc b/otls/sop_lsgalante.im_sample.1.0.hdalc
new file mode 100644
index 0000000..48f1367
Binary files /dev/null and b/otls/sop_lsgalante.im_sample.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_scatter.1.0.hdalc b/otls/sop_lsgalante.im_scatter.1.0.hdalc
new file mode 100644
index 0000000..7ef9eef
Binary files /dev/null and b/otls/sop_lsgalante.im_scatter.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_select.1.0.hdalc b/otls/sop_lsgalante.im_select.1.0.hdalc
new file mode 100644
index 0000000..a913b45
Binary files /dev/null and b/otls/sop_lsgalante.im_select.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_shadowbox.1.0.hdalc b/otls/sop_lsgalante.im_shadowbox.1.0.hdalc
new file mode 100644
index 0000000..34c838e
Binary files /dev/null and b/otls/sop_lsgalante.im_shadowbox.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_sharpen.1.0.hdalc b/otls/sop_lsgalante.im_sharpen.1.0.hdalc
new file mode 100644
index 0000000..df8e629
Binary files /dev/null and b/otls/sop_lsgalante.im_sharpen.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_shortest_path.1.0.hdalc b/otls/sop_lsgalante.im_shortest_path.1.0.hdalc
new file mode 100644
index 0000000..32c9189
Binary files /dev/null and b/otls/sop_lsgalante.im_shortest_path.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_shrink.1.0.hdalc b/otls/sop_lsgalante.im_shrink.1.0.hdalc
new file mode 100644
index 0000000..9cb8ae7
Binary files /dev/null and b/otls/sop_lsgalante.im_shrink.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_shrink.1.1.hdalc b/otls/sop_lsgalante.im_shrink.1.1.hdalc
new file mode 100644
index 0000000..97c1126
Binary files /dev/null and b/otls/sop_lsgalante.im_shrink.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_skeletonize.1.0.hdalc b/otls/sop_lsgalante.im_skeletonize.1.0.hdalc
new file mode 100644
index 0000000..a6f59d5
Binary files /dev/null and b/otls/sop_lsgalante.im_skeletonize.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_sort.1.0.hdalc b/otls/sop_lsgalante.im_sort.1.0.hdalc
new file mode 100644
index 0000000..509321d
Binary files /dev/null and b/otls/sop_lsgalante.im_sort.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_sort.1.1.hdalc b/otls/sop_lsgalante.im_sort.1.1.hdalc
new file mode 100644
index 0000000..ffb1bbd
Binary files /dev/null and b/otls/sop_lsgalante.im_sort.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_special_square.1.0.hdalc b/otls/sop_lsgalante.im_special_square.1.0.hdalc
new file mode 100644
index 0000000..76485eb
Binary files /dev/null and b/otls/sop_lsgalante.im_special_square.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_split.1.0.hdalc b/otls/sop_lsgalante.im_split.1.0.hdalc
new file mode 100644
index 0000000..ca92246
Binary files /dev/null and b/otls/sop_lsgalante.im_split.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_square.1.0.hdalc b/otls/sop_lsgalante.im_square.1.0.hdalc
new file mode 100644
index 0000000..749e204
Binary files /dev/null and b/otls/sop_lsgalante.im_square.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_stain.1.0.hdalc b/otls/sop_lsgalante.im_stain.1.0.hdalc
new file mode 100644
index 0000000..52c7a30
Binary files /dev/null and b/otls/sop_lsgalante.im_stain.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_star.1.0.hdalc b/otls/sop_lsgalante.im_star.1.0.hdalc
new file mode 100644
index 0000000..bc6fd61
Binary files /dev/null and b/otls/sop_lsgalante.im_star.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_switch.1.0.hdalc b/otls/sop_lsgalante.im_switch.1.0.hdalc
new file mode 100644
index 0000000..67a2d15
Binary files /dev/null and b/otls/sop_lsgalante.im_switch.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_transfer.1.0.hdalc b/otls/sop_lsgalante.im_transfer.1.0.hdalc
new file mode 100644
index 0000000..b7b178b
Binary files /dev/null and b/otls/sop_lsgalante.im_transfer.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_transfer.1.1.hdalc b/otls/sop_lsgalante.im_transfer.1.1.hdalc
new file mode 100644
index 0000000..7747697
Binary files /dev/null and b/otls/sop_lsgalante.im_transfer.1.1.hdalc differ
diff --git a/otls/sop_lsgalante.im_transform.1.0.hdalc b/otls/sop_lsgalante.im_transform.1.0.hdalc
new file mode 100644
index 0000000..0ec9cf0
Binary files /dev/null and b/otls/sop_lsgalante.im_transform.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_triangle.1.0.hdalc b/otls/sop_lsgalante.im_triangle.1.0.hdalc
new file mode 100644
index 0000000..e9ce47a
Binary files /dev/null and b/otls/sop_lsgalante.im_triangle.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_twist.1.0.hdalc b/otls/sop_lsgalante.im_twist.1.0.hdalc
new file mode 100644
index 0000000..2e5787b
Binary files /dev/null and b/otls/sop_lsgalante.im_twist.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_valence.1.0.hdalc b/otls/sop_lsgalante.im_valence.1.0.hdalc
new file mode 100644
index 0000000..5571d9a
Binary files /dev/null and b/otls/sop_lsgalante.im_valence.1.0.hdalc differ
diff --git a/otls/sop_lsgalante.im_vis_manager.1.0.hdalc b/otls/sop_lsgalante.im_vis_manager.1.0.hdalc
new file mode 100644
index 0000000..c3f9d54
Binary files /dev/null and b/otls/sop_lsgalante.im_vis_manager.1.0.hdalc differ
diff --git a/presets/color_ramp_presets.json b/presets/color_ramp_presets.json
new file mode 100755
index 0000000..b013852
--- /dev/null
+++ b/presets/color_ramp_presets.json
@@ -0,0 +1,102 @@
+{
+    "presets": {
+        "xxx": [
+            ["hou.rampBasis.Linear", "hou.rampBasis.Linear"],
+            [0.0, 1.0],
+            [
+                [0.0, 0.0, 0.0],
+                [1.0, 1.0, 1.0]
+            ]
+        ],
+        "pe": [
+            [
+                "hou.rampBasis.Linear",
+                "hou.rampBasis.Linear",
+                "hou.rampBasis.Linear"
+            ],
+            [0.0, 0.6316425204277039, 1.0],
+            [
+                [0.0, 0.0, 0.0],
+                [0.31784355640411377, 0.31784334778785706, 0.317843496799469],
+                [1.0, 1.0, 1.0]
+            ]
+        ],
+        "stinky": [
+            [
+                "hou.rampBasis.Linear",
+                "hou.rampBasis.Linear",
+                "hou.rampBasis.Linear"
+            ],
+            [0.0, 0.5446860194206238, 1.0],
+            [
+                [0.0, 0.0, 0.0],
+                [0.7239999771118164, 0.31784334778785706, 0.317843496799469],
+                [1.0, 1.0, 1.0]
+            ]
+        ],
+        "test": [
+            [
+                "hou.rampBasis.Bezier",
+                "hou.rampBasis.Bezier",
+                "hou.rampBasis.Bezier",
+                "hou.rampBasis.Bezier",
+                "hou.rampBasis.Bezier"
+            ],
+            [
+                0.0, 0.33212560415267944, 0.5446860194206238,
+                0.7644927501678467, 1.0
+            ],
+            [
+                [0.0, 0.0, 0.777999997138977],
+                [0.5920000076293945, 0.09300000220537186, 0.47699999809265137],
+                [0.7239999771118164, 0.31784334778785706, 0.317843496799469],
+                [0.32100000977516174, 0.5379999876022339, 0.8799999952316284],
+                [1.0, 1.0, 1.0]
+            ]
+        ],
+        "white_to_red": [
+            ["hou.rampBasis.Linear", "hou.rampBasis.Linear"],
+            [0.0, 1.0],
+            [
+                [1.0, 1.0, 1.0],
+                [1.0, 0.0, 0.0]
+            ]
+        ],
+        "white_to_blue": [
+            ["hou.rampBasis.Hermite", "hou.rampBasis.Hermite"],
+            [0.0, 1.0],
+            [
+                [1.0, 1.0, 1.0],
+                [-0.16733331978321075, -0.14933334290981293, 0.8296666741371155]
+            ]
+        ],
+        "white_to_black": [
+            ["hou.rampBasis.Linear", "hou.rampBasis.Linear"],
+            [0.0, 1.0],
+            [
+                [1.0, 1.0, 1.0],
+                [0.0, 0.0, 0.0]
+            ]
+        ],
+        "nicecolors": [
+            [
+                "hou.rampBasis.Bezier",
+                "hou.rampBasis.Bezier",
+                "hou.rampBasis.Bezier",
+                "hou.rampBasis.Bezier",
+                "hou.rampBasis.Bezier"
+            ],
+            [
+                0.0, 0.33212560415267944, 0.5446860194206238,
+                0.7644927501678467, 1.0
+            ],
+            [
+                [0.0, 0.0, 0.777999997138977],
+                [0.5920000076293945, 0.09300000220537186, 0.47699999809265137],
+                [0.7239999771118164, 0.31784334778785706, 0.317843496799469],
+                [0.32100000977516174, 0.5379999876022339, 0.8799999952316284],
+                [1.0, 1.0, 1.0]
+            ]
+        ]
+    }
+}
diff --git a/presets/color_ramp_presets.json.bak b/presets/color_ramp_presets.json.bak
new file mode 100755
index 0000000..c132983
--- /dev/null
+++ b/presets/color_ramp_presets.json.bak
@@ -0,0 +1,471 @@
+{
+  "presets": {
+    "x": {
+      "basis": [
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear"
+      ],
+      "keys": [
+        0.0,
+        0.24347825348377228,
+        0.624454140663147,
+        1.0
+      ],
+      "values": [
+        [
+          1.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.9776278138160706,
+          0.9776278138160706,
+          0.9776278138160706
+        ],
+        [
+          0.8697906732559204,
+          0.86979079246521,
+          0.8697907328605652
+        ],
+        [
+          0.0,
+          0.0,
+          0.0
+        ]
+      ]
+    },
+    "rrr": {
+      "basis": [
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear"
+      ],
+      "keys": [
+        0.0,
+        0.24347825348377228,
+        0.624454140663147,
+        1.0
+      ],
+      "values": [
+        [
+          0.0,
+          0.0,
+          0.0
+        ],
+        [
+          0.022372178733348846,
+          0.022372175008058548,
+          0.022372178733348846
+        ],
+        [
+          0.1302092969417572,
+          0.13020922243595123,
+          0.13020926713943481
+        ],
+        [
+          1.0,
+          1.0,
+          1.0
+        ]
+      ]
+    },
+    "17": {
+      "basis": [
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear"
+      ],
+      "keys": [
+        0.0,
+        0.0625,
+        0.125,
+        0.1875,
+        0.25,
+        0.3125,
+        0.375,
+        0.4375,
+        0.5,
+        0.5625,
+        0.625,
+        0.6875,
+        0.75,
+        0.8125,
+        0.875,
+        0.9375,
+        1.0
+      ],
+      "values": [
+        [
+          0.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.0625,
+          1.0,
+          0.9375
+        ],
+        [
+          0.125,
+          1.0,
+          0.875
+        ],
+        [
+          0.1875,
+          1.0,
+          0.8125
+        ],
+        [
+          0.25,
+          1.0,
+          0.75
+        ],
+        [
+          0.3125,
+          1.0,
+          0.6875
+        ],
+        [
+          0.375,
+          1.0,
+          0.625
+        ],
+        [
+          0.4375,
+          1.0,
+          0.5625
+        ],
+        [
+          0.5,
+          1.0,
+          0.5
+        ],
+        [
+          0.5625,
+          1.0,
+          0.4375
+        ],
+        [
+          0.625,
+          1.0,
+          0.375
+        ],
+        [
+          0.6875,
+          1.0,
+          0.3125
+        ],
+        [
+          0.75,
+          1.0,
+          0.25
+        ],
+        [
+          0.8125,
+          1.0,
+          0.1875
+        ],
+        [
+          0.875,
+          1.0,
+          0.125
+        ],
+        [
+          0.9375,
+          1.0,
+          0.0625
+        ],
+        [
+          1.0,
+          1.0,
+          0.0
+        ]
+      ]
+    },
+    "mix": {
+      "basis": [
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear"
+      ],
+      "keys": [
+        0.0,
+        0.0625,
+        0.125,
+        0.1875,
+        0.25,
+        0.3125,
+        0.375,
+        0.4375,
+        0.4930362105369568,
+        0.5,
+        0.5625,
+        0.625,
+        0.6875,
+        0.75,
+        0.8125,
+        0.875,
+        0.9375,
+        1.0
+      ],
+      "values": [
+        [
+          0.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.0,
+          0.0,
+          1.0
+        ],
+        [
+          0.5,
+          0.0,
+          0.5
+        ],
+        [
+          1.0,
+          1.0,
+          0.0
+        ],
+        [
+          0.07500000298023224,
+          0.07500000298023224,
+          0.30000001192092896
+        ],
+        [
+          0.3125,
+          1.0,
+          0.6875
+        ],
+        [
+          0.0,
+          0.0,
+          0.0
+        ],
+        [
+          1.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.05000000074505806,
+          0.05000000074505806,
+          0.05000000074505806
+        ],
+        [
+          0.5,
+          1.0,
+          0.5
+        ],
+        [
+          0.5,
+          0.25,
+          0.0
+        ],
+        [
+          0.0,
+          0.25,
+          0.5
+        ],
+        [
+          0.30000001192092896,
+          0.07500000298023224,
+          0.1875
+        ],
+        [
+          0.012500000186264515,
+          0.012500000186264515,
+          0.012500000186264515
+        ],
+        [
+          1.0,
+          1.0,
+          0.0
+        ],
+        [
+          0.5,
+          0.0,
+          1.0
+        ],
+        [
+          0.75,
+          0.75,
+          0.75
+        ],
+        [
+          0.0,
+          0.5,
+          1.0
+        ]
+      ]
+    },
+    "test": {
+      "basis": [
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear"
+      ],
+      "keys": [
+        0.0,
+        0.0625,
+        0.125,
+        0.1875,
+        0.25,
+        0.3125,
+        0.375,
+        0.4375,
+        0.4930362105369568,
+        0.5,
+        0.5625,
+        0.625,
+        0.6875,
+        0.75,
+        0.8125,
+        0.875,
+        0.9375,
+        1.0
+      ],
+      "values": [
+        [
+          0.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.0,
+          0.0,
+          1.0
+        ],
+        [
+          0.5,
+          0.0,
+          0.5
+        ],
+        [
+          1.0,
+          1.0,
+          0.0
+        ],
+        [
+          0.07500000298023224,
+          0.07500000298023224,
+          0.30000001192092896
+        ],
+        [
+          0.3125,
+          1.0,
+          0.6875
+        ],
+        [
+          0.0,
+          0.0,
+          0.0
+        ],
+        [
+          1.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.05000000074505806,
+          0.05000000074505806,
+          0.05000000074505806
+        ],
+        [
+          0.5,
+          1.0,
+          0.5
+        ],
+        [
+          0.5,
+          0.25,
+          0.0
+        ],
+        [
+          0.0,
+          0.25,
+          0.5
+        ],
+        [
+          0.30000001192092896,
+          0.07500000298023224,
+          0.1875
+        ],
+        [
+          0.012500000186264515,
+          0.012500000186264515,
+          0.012500000186264515
+        ],
+        [
+          1.0,
+          1.0,
+          0.0
+        ],
+        [
+          0.5,
+          0.0,
+          1.0
+        ],
+        [
+          0.75,
+          0.75,
+          0.75
+        ],
+        [
+          0.0,
+          0.5,
+          1.0
+        ]
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/presets/custom_parms/attrib_all_replace b/presets/custom_parms/attrib_all_replace
new file mode 100755
index 0000000..08bce9d
--- /dev/null
+++ b/presets/custom_parms/attrib_all_replace
@@ -0,0 +1,16 @@
+{
+    name	selectedparms
+
+    parm {
+        name    "attrib"
+        label   "Attribute"
+        type    string
+        default { "" }
+        menureplace {
+            [ "kwargs['node'].generateInputAttribMenu(0)" ]
+            language python
+        }
+        parmtag { "script_callback_language" "python" }
+    }
+
+}
\ No newline at end of file
diff --git a/presets/custom_parms/component_point_prim b/presets/custom_parms/component_point_prim
new file mode 100755
index 0000000..3e55769
--- /dev/null
+++ b/presets/custom_parms/component_point_prim
@@ -0,0 +1,16 @@
+{
+    name	selectedparms
+
+    parm {
+        name    "component"
+        label   "Component"
+        type    ordinal
+        default { "0" }
+        menu {
+            "point" "Point"
+            "prim"  "Primitive"
+        }
+        parmtag { "script_callback_language" "python" }
+    }
+
+}
\ No newline at end of file
diff --git a/presets/presets_ramp_color.json b/presets/presets_ramp_color.json
new file mode 100755
index 0000000..c132983
--- /dev/null
+++ b/presets/presets_ramp_color.json
@@ -0,0 +1,471 @@
+{
+  "presets": {
+    "x": {
+      "basis": [
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear"
+      ],
+      "keys": [
+        0.0,
+        0.24347825348377228,
+        0.624454140663147,
+        1.0
+      ],
+      "values": [
+        [
+          1.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.9776278138160706,
+          0.9776278138160706,
+          0.9776278138160706
+        ],
+        [
+          0.8697906732559204,
+          0.86979079246521,
+          0.8697907328605652
+        ],
+        [
+          0.0,
+          0.0,
+          0.0
+        ]
+      ]
+    },
+    "rrr": {
+      "basis": [
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear"
+      ],
+      "keys": [
+        0.0,
+        0.24347825348377228,
+        0.624454140663147,
+        1.0
+      ],
+      "values": [
+        [
+          0.0,
+          0.0,
+          0.0
+        ],
+        [
+          0.022372178733348846,
+          0.022372175008058548,
+          0.022372178733348846
+        ],
+        [
+          0.1302092969417572,
+          0.13020922243595123,
+          0.13020926713943481
+        ],
+        [
+          1.0,
+          1.0,
+          1.0
+        ]
+      ]
+    },
+    "17": {
+      "basis": [
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear"
+      ],
+      "keys": [
+        0.0,
+        0.0625,
+        0.125,
+        0.1875,
+        0.25,
+        0.3125,
+        0.375,
+        0.4375,
+        0.5,
+        0.5625,
+        0.625,
+        0.6875,
+        0.75,
+        0.8125,
+        0.875,
+        0.9375,
+        1.0
+      ],
+      "values": [
+        [
+          0.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.0625,
+          1.0,
+          0.9375
+        ],
+        [
+          0.125,
+          1.0,
+          0.875
+        ],
+        [
+          0.1875,
+          1.0,
+          0.8125
+        ],
+        [
+          0.25,
+          1.0,
+          0.75
+        ],
+        [
+          0.3125,
+          1.0,
+          0.6875
+        ],
+        [
+          0.375,
+          1.0,
+          0.625
+        ],
+        [
+          0.4375,
+          1.0,
+          0.5625
+        ],
+        [
+          0.5,
+          1.0,
+          0.5
+        ],
+        [
+          0.5625,
+          1.0,
+          0.4375
+        ],
+        [
+          0.625,
+          1.0,
+          0.375
+        ],
+        [
+          0.6875,
+          1.0,
+          0.3125
+        ],
+        [
+          0.75,
+          1.0,
+          0.25
+        ],
+        [
+          0.8125,
+          1.0,
+          0.1875
+        ],
+        [
+          0.875,
+          1.0,
+          0.125
+        ],
+        [
+          0.9375,
+          1.0,
+          0.0625
+        ],
+        [
+          1.0,
+          1.0,
+          0.0
+        ]
+      ]
+    },
+    "mix": {
+      "basis": [
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear"
+      ],
+      "keys": [
+        0.0,
+        0.0625,
+        0.125,
+        0.1875,
+        0.25,
+        0.3125,
+        0.375,
+        0.4375,
+        0.4930362105369568,
+        0.5,
+        0.5625,
+        0.625,
+        0.6875,
+        0.75,
+        0.8125,
+        0.875,
+        0.9375,
+        1.0
+      ],
+      "values": [
+        [
+          0.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.0,
+          0.0,
+          1.0
+        ],
+        [
+          0.5,
+          0.0,
+          0.5
+        ],
+        [
+          1.0,
+          1.0,
+          0.0
+        ],
+        [
+          0.07500000298023224,
+          0.07500000298023224,
+          0.30000001192092896
+        ],
+        [
+          0.3125,
+          1.0,
+          0.6875
+        ],
+        [
+          0.0,
+          0.0,
+          0.0
+        ],
+        [
+          1.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.05000000074505806,
+          0.05000000074505806,
+          0.05000000074505806
+        ],
+        [
+          0.5,
+          1.0,
+          0.5
+        ],
+        [
+          0.5,
+          0.25,
+          0.0
+        ],
+        [
+          0.0,
+          0.25,
+          0.5
+        ],
+        [
+          0.30000001192092896,
+          0.07500000298023224,
+          0.1875
+        ],
+        [
+          0.012500000186264515,
+          0.012500000186264515,
+          0.012500000186264515
+        ],
+        [
+          1.0,
+          1.0,
+          0.0
+        ],
+        [
+          0.5,
+          0.0,
+          1.0
+        ],
+        [
+          0.75,
+          0.75,
+          0.75
+        ],
+        [
+          0.0,
+          0.5,
+          1.0
+        ]
+      ]
+    },
+    "test": {
+      "basis": [
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear",
+        "hou.rampBasis.Linear"
+      ],
+      "keys": [
+        0.0,
+        0.0625,
+        0.125,
+        0.1875,
+        0.25,
+        0.3125,
+        0.375,
+        0.4375,
+        0.4930362105369568,
+        0.5,
+        0.5625,
+        0.625,
+        0.6875,
+        0.75,
+        0.8125,
+        0.875,
+        0.9375,
+        1.0
+      ],
+      "values": [
+        [
+          0.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.0,
+          0.0,
+          1.0
+        ],
+        [
+          0.5,
+          0.0,
+          0.5
+        ],
+        [
+          1.0,
+          1.0,
+          0.0
+        ],
+        [
+          0.07500000298023224,
+          0.07500000298023224,
+          0.30000001192092896
+        ],
+        [
+          0.3125,
+          1.0,
+          0.6875
+        ],
+        [
+          0.0,
+          0.0,
+          0.0
+        ],
+        [
+          1.0,
+          1.0,
+          1.0
+        ],
+        [
+          0.05000000074505806,
+          0.05000000074505806,
+          0.05000000074505806
+        ],
+        [
+          0.5,
+          1.0,
+          0.5
+        ],
+        [
+          0.5,
+          0.25,
+          0.0
+        ],
+        [
+          0.0,
+          0.25,
+          0.5
+        ],
+        [
+          0.30000001192092896,
+          0.07500000298023224,
+          0.1875
+        ],
+        [
+          0.012500000186264515,
+          0.012500000186264515,
+          0.012500000186264515
+        ],
+        [
+          1.0,
+          1.0,
+          0.0
+        ],
+        [
+          0.5,
+          0.0,
+          1.0
+        ],
+        [
+          0.75,
+          0.75,
+          0.75
+        ],
+        [
+          0.0,
+          0.5,
+          1.0
+        ]
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/presets/scalar_ramp_presets.json b/presets/scalar_ramp_presets.json
new file mode 100755
index 0000000..822e22a
--- /dev/null
+++ b/presets/scalar_ramp_presets.json
@@ -0,0 +1 @@
+{"uuuuu": "(['hou.rampBasis.Linear', 'hou.rampBasis.Linear', 'hou.rampBasis.Linear'], (0.0, 0.49166667461395264, 0.8145833611488342), (0.0, 0.6438356041908264, 0.34246575832366943))", "jkjkjk": "(['hou.rampBasis.Linear', 'hou.rampBasis.Linear', 'hou.rampBasis.Linear', 'hou.rampBasis.Linear'], (0.0, 0.13333334028720856, 0.49166667461395264, 0.8145833611488342), (0.0, 1.0, 0.6438356041908264, 0.34246575832366943))"}
\ No newline at end of file
diff --git a/python3.11libs/fuzzyfinder/__init__.py b/python3.11libs/fuzzyfinder/__init__.py
new file mode 100755
index 0000000..2b8d28e
--- /dev/null
+++ b/python3.11libs/fuzzyfinder/__init__.py
@@ -0,0 +1,15 @@
+# ruff: noqa
+
+__version__ = "2.2.0"
+
+__all__ = []
+
+
+def export(defn):
+    """Decorator to explicitly mark functions that are exposed in a lib."""
+    globals()[defn.__name__] = defn
+    __all__.append(defn.__name__)
+    return defn
+
+
+from . import main
diff --git a/python3.11libs/fuzzyfinder/main.py b/python3.11libs/fuzzyfinder/main.py
new file mode 100755
index 0000000..93840be
--- /dev/null
+++ b/python3.11libs/fuzzyfinder/main.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+import re
+from . import export
+
+
+@export
+def fuzzyfinder(input, collection, accessor=lambda x: x, sort_results=True, ignore_case=True):
+    """
+    Args:
+        input (str): A partial string which is typically entered by a user.
+        collection (iterable): A collection of strings which will be filtered
+                               based on the `input`.
+        accessor (function): If the `collection` is not an iterable of strings,
+                             then use the accessor to fetch the string that
+                             will be used for fuzzy matching.
+        sort_results (bool): The suggestions are sorted by considering the
+                             smallest contiguous match, followed by where the
+                             match is found in the full string. If two suggestions
+                             have the same rank, they are then sorted
+                             alpha-numerically. This parameter controls the
+                             *last tie-breaker-alpha-numeric sorting*. The sorting
+                             based on match length and position will be intact.
+        ignore_case (bool): If this parameter is set to False, the filtering
+                            is case-sensitive.
+
+    Returns:
+        suggestions (generator): A generator object that produces a list of
+            suggestions narrowed down from `collection` using the `input`.
+    """
+    suggestions = []
+    input = str(input) if not isinstance(input, str) else input
+    pat = ".*?".join(map(re.escape, input))
+    pat = "(?=({0}))".format(pat)  # lookahead regex to manage overlapping matches
+    regex = re.compile(pat, re.IGNORECASE if ignore_case else 0)
+    for item in collection:
+        r = list(regex.finditer(accessor(item)))
+        if r:
+            best = min(r, key=lambda x: len(x.group(1)))  # find shortest match
+            suggestions.append((len(best.group(1)), best.start(), accessor(item), item))
+
+    if sort_results:
+        return (z[-1] for z in sorted(suggestions))
+    else:
+        return (z[-1] for z in sorted(suggestions, key=lambda x: x[:2]))
diff --git a/python3.11libs/hclib/__init__.py b/python3.11libs/hclib/__init__.py
new file mode 100644
index 0000000..fd164ae
--- /dev/null
+++ b/python3.11libs/hclib/__init__.py
@@ -0,0 +1,14 @@
+from .core import HCCam, HCGeo, HCGlobal, HCNetworkEditor, HCPane, HCSceneViewer, HCTab
+from .utils import hcbindings, hcradialutils
+
+__all__ = [
+    "HCCam",
+    "HCGeo",
+    "HCGlobal",
+    "HCNetworkEditor",
+    "HCPane",
+    "HCUtils",
+    "HCSceneViewer",
+    "hcbindings",
+    "hcradialutils"
+]
diff --git a/python3.11libs/hclib/core/__init__.py b/python3.11libs/hclib/core/__init__.py
new file mode 100644
index 0000000..d8e8f2a
--- /dev/null
+++ b/python3.11libs/hclib/core/__init__.py
@@ -0,0 +1,19 @@
+from .hccam import HCCam
+from .hcgeo import HCGeo
+from .hcglobal import HCGlobal
+from .hcnetworkeditor import HCNetworkEditor
+from .hcpane import HCPane
+from .hcsceneviewer import HCSceneViewer
+from .hctab import HCTab
+# from .hcviewport import HCViewport
+
+__all__ = [
+    'HCCam',
+    'HCGeo',
+    'HCGlobal',
+    'HCNetworkEditor',
+    'HCPane',
+    'HCSceneViewer',
+    'HCTab',
+    # 'HCViewport'
+]
diff --git a/python3.11libs/hclib/core/hccam.py b/python3.11libs/hclib/core/hccam.py
new file mode 100644
index 0000000..cf48cbc
--- /dev/null
+++ b/python3.11libs/hclib/core/hccam.py
@@ -0,0 +1,206 @@
+import hou
+from .hcgeo import HCGeo
+from .hcsceneviewer import HCSceneViewer
+
+
+class HCCam:
+    def __init__(self, cam, viewer):
+        self.cam = cam
+        self.viewer = viewer
+        self.hcviewer = HCSceneViewer(viewer)
+        self.parms = Parms(cam)
+        self.fitAspectRatio()
+        self.lock()
+        self.reset()
+
+    def center(self):
+        centroid = self.hcviewer.hcgeo().centroid()
+        self.parms.t = hou.Vector3(centroid)
+        self.parms.p = hou.Vector3(centroid)
+
+    def fitAspectRatio(self):
+        self.cam.parm('resx').set(1000)
+        self.cam.parm('resy').set(1000)
+        ratio = self.viewport().size()[2] / self.viewport().size()[3]
+        self.cam.parm('aspect').set(ratio)
+
+    def frame(self):
+        centroid = self.hcviewer.hcgeo().centroid()
+        self.parms.t = hou.Vector3(centroid)
+        self.parms.p = hou.Vector3(centroid)
+        # self.parms.ow = 10
+        self.setZoom(10)
+
+    def home(self):
+        centroid = self.hcviewer.hcgeo().centroid()
+        self.parms.t = centroid
+        self.parms.p = centroid
+        # self.parms.ow = 10
+        # self.setZoom(6)
+
+    def lock(self):
+        viewport = self.viewport()
+        viewport.setCamera(self.cam)
+        viewport.lockCameraToView(1)
+
+    def movePivot(self):
+        # If origin
+        if self.parms.target == 0:
+            self.parms.t = [0, 0, self.parms.zoom]
+            self.parms.r = [45, 45, 0]
+            self.parms.p = [0, 0, self.parms.zoom * -1]
+            self.parms.ow = 10
+
+    def reset(self):
+        self.parms.t = hou.Vector3(0, 0, 2)
+        self.parms.r = hou.Vector3(0, 0, 0)
+        self.parms.p = hou.Vector3(0, 0, 0)
+        self.parms.zoom = 10
+        self.parms.ow = 10
+        self.parms.localx = hou.Vector3(1, 0, 0)
+        self.parms.localy = hou.Vector3(0, 1, 0)
+        self.parms.localz = hou.Vector3(0, 0, 1)
+        self.parms.globalx = hou.Vector3(1, 0, 0)
+        self.parms.globaly = hou.Vector3(0, 1, 0)
+        self.parms.globalz = hou.Vector3(0, 0, 1)
+        self.parms.deltat = 1
+        self.parms.deltar = 15
+        self.parms.deltazoom = 1
+
+    def rotate(self, dir):
+        axismap = {
+            'up': self.parms.localx,
+            'down': self.parms.localx,
+            'left': self.parms.globaly,
+            'right': self.parms.globaly,
+        }
+        dirmap = {'up': 1, 'down': -1, 'left': -1, 'right': 1}
+        deltamap = {
+            'up': hou.Vector3(self.parms.deltar, 0, 0),
+            'down': hou.Vector3(self.parms.deltar, 0, 0),
+            'left': hou.Vector3(0, self.parms.deltar, 0),
+            'right': hou.Vector3(0, self.parms.deltar, 0),
+        }
+        self.parms.r += deltamap[dir] * dirmap[dir]
+        m = hou.hmath.buildRotateAboutAxis(axismap[dir], self.parms.deltar * dirmap[dir])
+        self.parms.t -= self.parms.p
+        self.parms.t *= m
+        self.parms.t += self.parms.p
+        self.parms.localx *= m
+        self.parms.localy *= m
+        self.parms.localz *= m
+
+    def setView(self):
+        viewmap = {
+            'top': hou.Vector3(270, 0, 0),
+            'bottom': hou.Vector3(90, 0, 0),
+            'front': hou.Vector3(0, 180, 0),
+            'back': hou.Vector3(0, 0, 0),
+            'right': hou.Vector3(0, 90, 0),
+            'left': hou.Vector3(0, 270, 0)
+        }
+        self.hccam.r = viewmap[self.parms.view]
+
+    def setZoom(self, amt):
+        move = self.parms.localz * amt
+        self.parms.t += move
+
+    def translate(self, dir):
+        axismap = {
+            'up': self.parms.localy,
+            'down': -self.parms.localy,
+            'left': -self.parms.localx,
+            'right': self.parms.localx,
+        }
+        move = axismap[dir] * self.parms.deltat
+        self.parms.t += move
+        self.parms.p += move
+
+    def toggleProjection(self):
+        projectionmap = {
+            'perspective': 'ortho',
+            'ortho': 'perspective'
+        }
+        parm = self.cam.parm('projection')
+        parm.set(projectionmap[parm.evalAsString()])
+
+    def unlock(self):
+        self.viewport().lockCameraToView(0)
+
+    def viewport(self):
+        return self.hcviewer.viewports()[3]
+
+    def zoom(self, dir):
+        dirmap = {'out': 1, 'in': -1}
+        move = self.parms.localz * self.parms.deltazoom * dirmap[dir]
+        self.parms.t += move
+
+    def zoomOrtho(self, dir):
+        dirmap = {'out': 1, 'in': -1}
+        self.parms.ow += self.parms.deltazoom * dirmap[dir]
+
+
+class Parms:
+    def __init__(self, cam):
+        self.cam = cam
+        self._t = hou.Vector3(0, 0, 0)
+        self._r = hou.Vector3(0, 0, 0)
+        self._p = hou.Vector3(0, 0, 0)
+        self._ow = 10
+        self._projection = 'perspective'
+        self.localx = hou.Vector3(1, 0, 0)
+        self.localy = hou.Vector3(0, 1, 0)
+        self.localz = hou.Vector3(0, 0, 1)
+        self.globalx = hou.Vector3(1, 0, 0)
+        self.globaly = hou.Vector3(0, 1, 0)
+        self.globalz = hou.Vector3(0, 0, 1)
+        self.zoom = 10
+        self.deltat = 1
+        self.deltar = 15
+        self.deltazoom = 1
+        self.target = None
+
+    @property
+    def t(self):
+        return self._t
+
+    @t.setter
+    def t(self, val):
+        self._t = val
+        self.cam.parmTuple('t').set(val)
+
+    @property
+    def r(self):
+        return self._r
+
+    @r.setter
+    def r(self, val):
+        self._r = val
+        self.cam.parmTuple('r').set(val)
+
+    @property
+    def p(self):
+        return self._p
+
+    @p.setter
+    def p(self, val):
+        self._p = val
+        self.cam.parmTuple('p').set(val)
+
+    @property
+    def ow(self):
+        return self._ow
+
+    @ow.setter
+    def ow(self, val):
+        self._ow = val
+        self.cam.parm('orthowidth').set(val)
+
+    @property
+    def projection(self):
+        return self._projection
+
+    @projection.setter
+    def projection(self, val):
+        self._projection = val
+        self.cam.parm('projection').set(val)
diff --git a/python3.11libs/hclib/core/hcdefaultcam.py b/python3.11libs/hclib/core/hcdefaultcam.py
new file mode 100644
index 0000000..36dc445
--- /dev/null
+++ b/python3.11libs/hclib/core/hcdefaultcam.py
@@ -0,0 +1,24 @@
+import hou
+
+class HCDefaultCam:
+    def __init__(self, defaultcam):
+        self.cam = defaultcam
+
+    def frame(self):
+        for viewport in self.viewports():
+            cam = viewport.camera()
+            # Is cam default or node.
+            if not cam:
+                viewport.frameAll()
+
+    def nextView(self):
+        return
+
+    def rotate(self, key):
+        return
+
+    def translate(self, key):
+        return
+
+    def zoom(self):
+        return
diff --git a/python3.11libs/hclib/core/hcgeo.py b/python3.11libs/hclib/core/hcgeo.py
new file mode 100644
index 0000000..14da33b
--- /dev/null
+++ b/python3.11libs/hclib/core/hcgeo.py
@@ -0,0 +1,18 @@
+import hou
+
+class HCGeo:
+    def __init__(self, geo):
+        self.geo = geo
+
+    def bbox(self):
+        return geo.boundingBox()
+
+    def centroid(self):
+        geo_out = hou.Geometry()
+        extract_centroid = hou.sopNodeTypeCategory().nodeVerb('extractcentroid')
+        extract_centroid.setParms(
+            {'partitiontype': 2}
+        )
+        extract_centroid.execute(geo_out, [self.geo])
+        pt = geo_out.point(0)
+        return pt.position()
diff --git a/python3.11libs/hclib/core/hcglobal.py b/python3.11libs/hclib/core/hcglobal.py
new file mode 100644
index 0000000..59fcb8a
--- /dev/null
+++ b/python3.11libs/hclib/core/hcglobal.py
@@ -0,0 +1,243 @@
+import hou
+
+
+class HCGlobal:
+    def __init__(self):
+        return
+
+    """
+    Context
+    """
+
+    def node(self):
+        return self.tab().currentNode()
+
+    """
+    Layout
+    """
+
+    def clearLayout(self):
+        tabs = self.tabs()
+        for tab in tabs:
+            if tab != tabs[0]:
+                tab.close()
+
+    def desktop(self):
+        return hou.ui.curDesktop()
+
+    def hcPane(self):
+        from .hcpane import HCPane
+
+        return HCPane(self.pane())
+
+    def hcTab(self):
+        from .hctab import HCTab
+
+        return HCTab(self.pane())
+
+    def layout(self):
+        lefts = []
+        tops = []
+        for pane in self.panes():
+            geo = pane.qtScreenGeometry()
+            lefts.append(geo.left())
+            tops.append(geo.top())
+        print(lefts)
+        print(tops)
+
+    def networkEditors(self):
+        editors = []
+        for tab in self.tabs():
+            if tab.type() == hou.paneTabType.NetworkEditor:
+                editors.append(tab)
+        return editors
+
+    def pane(self):
+        return hou.ui.paneUnderCursor()
+
+    def panes(self):
+        return self.desktop().panes()
+
+    def sceneViewers(self):
+        viewers = []
+        for tab in self.tabs():
+            if tab.type() == hou.paneTabType.SceneViewer:
+                viewers.append(tab)
+        return viewers
+
+    ## tab and tabs functions intentionally do not use the hou.ui.paneTabUnderCursor method
+    def tab(self):
+        return self.pane().currentTab()
+
+    def tabs(self):
+        return self.pane().tabs()
+
+    def viewports(self):
+        viewports = []
+        viewers = self.sceneViewers
+        for viewer in viewers:
+            for viewport in viewer.viewports():
+                viewports.append(viewport)
+        return viewports
+
+    """
+    Menus
+    """
+
+    def colorEditor(self):
+        hou.ui.selectColor()
+
+    def floatingParameterEditor(self):
+        tab = self.tab()
+        if tab.type() == hou.paneTabType.NetworkEditor:
+            hou.ui.showFloatingParameterEditor(self.node())
+        else:
+            hou.ui.setStatusMessage("Not a network editor", hou.severityType.Error)
+
+    def openFile(self):
+        hou.ui.selectFile()
+
+    """
+    Utils
+    """
+
+    def autosave(self):
+        return hou.getPreference('autoSave')
+
+    def keycam(self):
+        msgmap = {
+            "Object": "Entered keycam in an obj/object context",
+            "Sop": "Entered keycam in a sop/geometry context",
+            "Lop": "Entered keycam in a lop context"
+        }
+        viewer = self.sceneViewers()[0]
+        category = viewer.pwd().childTypeCategory().name()
+        if category in msgmap:
+            viewer.setCurrentState('keycam')
+            hou.ui.setStatusMessage(msgmap[category])
+        else:
+            hou.ui.setStatusMessage("Keycam is only available in obj, sop and lop contexts",
+                hou.severityType.Error)
+
+    def projectPath(self):
+        return hou.hipFile.path()
+
+    def reloadColorSchemes(self):
+        hou.ui.reloadColorScheme()
+        hou.ui.reloadViewportColorSchemes()
+
+    def reloadHotkeys(self):
+        from ..utils.hcbindings import load
+
+        load()
+
+    def reloadKeycam(self):
+        hou.ui.reloadViewerState('keycam')
+
+    def removeEventLoopCallbacks(self):
+        callbacks = hou.ui.eventLoopCallbacks()
+        for callback in callbacks:
+            hou.ui.removeEventLoopCallback(callback)
+
+    # def restartHoudini(self):
+        # import os
+        # import subprocess
+        # executable = sys.argv[0]
+        # executable = os.environ.get("HFS") + "/bin/houdini"
+        # subprocess.Popen([executable])
+        # hou.exit()
+        # return
+
+    def setUpdateModeAuto(self):
+        hou.setUpdateMode(hou.updateMode.AutoUpdate)
+
+    def setUpdateModeManual(self):
+        hou.setUpdateMode(hou.updateMode.Manual)
+
+    def triggerUpdate(self):
+        hou.ui.triggerUpdate()
+
+    def toggleAutoSave(self):
+        map = {'0': '1', '1': '0'}
+        hou.setPreference('autoSave', map[hou.getPreference('autoSave')])
+
+    def updateMainMenuBar(self):
+        hou.ui.updateMainMenuBar()
+
+    """
+    Visibility
+    """
+
+    def hideShelf(self):
+        self.desktop().shelfDock().show(0)
+
+    def showShelf(self):
+        self.shelfDock().show(1)
+
+    def toggleMainMenuBar(self):
+        map = {'1': '0', '0': '1'}
+        hou.setPreference('showmenu.val', map[hou.getPreference('showmenu.val')])
+
+    def toggleMenus(self):
+        visible = 0
+        panes = self.panes()
+        tabs = self.tabs()
+        editors = self.networkEditors()
+        viewers = self.sceneViewers()
+        ## Main menu
+        if hou.getPreference('showmenu.val') == '1':
+            visible = 1
+        ## Network editor menu
+        elif any(editor.getPref('showmenu') == '1' for editor in editors):
+            visible = 1
+        ## Network controls
+        elif any(tab.isShowingNetworkControls() for tab in tabs):
+            visible = 1
+        ## Scene viewer toolbars (top, right, left)
+        elif any(viewer.isShowingOperationBar() for viewer in viewers):
+            visible = 1
+        elif any(viewer.isShowingDisplayOptionsBar() for viewer in viewers):
+            visible = 1
+        elif any(viewer.isShowingSelectionBar() for viewer in viewers):
+            visible = 1
+        ## Tabs
+        elif any(pane.isShowingPaneTabs() for pane in panes):
+            visible = 1
+
+        ## Set state
+        hou.setPreference('showmenu.val', str(not visible))
+        for editor in editors:
+            editor.setPref('showmenu', str(not visible))
+        for tab in tabs:
+            tab.showNetworkControls(not visible)
+        for pane in panes:
+            pane.showPaneTabs(not visible)
+        for viewer in viewers:
+            viewer.showOperationBar(not visible)
+            viewer.showDisplayOptionsBar(not visible)
+            viewer.showSelectionBar(not visible)
+        ## Needs to be called twice for some reason
+        hou.ui.setHideAllMinimizedStowbars(visible)
+        hou.ui.setHideAllMinimizedStowbars(visible)
+
+    def toggleNetworkControls(self):
+        visible = 0
+        tabs = self.tabs()
+        for tab in tabs:
+            if tab.isShowingNetworkControls():
+                visible = 1
+        for tab in tabs:
+            tab.showNetworkControls(not visible)
+
+    def toggleStowbars(self):
+        hidden = hou.ui.hideAllMinimizedStowbars()
+        hou.ui.setHideAllMinimizedStowbars(not hidden)
+
+    def toggleTabs(self):
+        visible = 0
+        panes = self.panes()
+        for pane in panes:
+            if pane.isShowingPaneTabs():
+                visible = 1
+        for pane in panes:
+            pane.showPaneTabs(not visible)
diff --git a/python3.11libs/hclib/core/hcnetworkeditor.py b/python3.11libs/hclib/core/hcnetworkeditor.py
new file mode 100644
index 0000000..b3352a1
--- /dev/null
+++ b/python3.11libs/hclib/core/hcnetworkeditor.py
@@ -0,0 +1,163 @@
+import hou, math, types
+from .hcpathtab import HCPathTab
+
+
+class HCNetworkEditor(HCPathTab):
+    def __init__(self, tab):
+        self.tab = tab
+        self.editor = tab
+        self.deltat = 2
+
+    def showPathMessage(self):
+        self.editor.flashMessage(image=None, message=self.path(), duration=1)
+
+    """
+    Nodes
+    """
+
+    def arrangeNodes(self):
+        # self.context().layoutChildren(horizontal_spacing=5, vertical_spacing=
+        return
+
+    def quantizeNodes(self):
+        return
+
+    def translateNodes(self, direction):
+        idxmap = {
+            'up': 1,
+            'down': 1,
+            'left': 0,
+            'right': 0
+        }
+        rectifiermap = {
+            'up': hou.Vector2(0, 0.85),
+            'down': hou.Vector2(0, -0.85),
+            'left': hou.Vector2(0.-0.85, 0),
+            'right': hou.Vector2(0.85, 0)
+        }
+        for node in self.selectedNodes():
+            idx = idxmap[direction]
+            p = node.position() + rectifiermap[direction]
+            val = p[idx]
+            if val%1 <= 0.5:
+                val = math.floor(val)
+            else:
+                val = math.ceil(val)
+            p[idx] = val
+            node.setPosition(p)
+
+    def renameNode(self):
+        node = self.currentNode()
+        name = hou.ui.readInput("Rename_node", buttons=("Yes", "No"))
+        if name[0] == 0:
+            node.setName(name[1])
+
+    """
+    Objects
+    """
+
+    def addNetworkBox(self):
+        networkbox = self.context().createNetworkBox()
+        networkbox.setPosition(self.currentNode().position())
+
+    def addStickyNote(self):
+        stickynote = self.context().createStickyNote()
+        p = self.cursorPos()
+        stickynote.setPosition(p)
+        stickynote.setColor(hou.Color(0.71, 0.78, 1.0))
+
+    def placeDot(self):
+        if len(self.selectedNodes()) == 1:
+            dot = self.context().createNetworkDot()
+            dot.setInput(node)
+            dot.setPosition(self.cursorPos())
+
+    """
+    Selection
+    """
+
+    def deselectAll(self):
+        self.selectedNodes().setSelected(False)
+
+    """
+    Settings
+    """
+
+    def toggleDimUnusedNodes(self):
+        map = {
+            '0': '1',
+            '1': '0'
+        }
+        mode = self.editor.getPref('dimunusednodes')
+        self.editor.setPref('dimunusednodes', map[mode])
+
+    def toggleGridMode(self):
+        map = {
+            '0': '1',
+            '1': '2',
+            '2': '0'
+        }
+        mode = self.editor.getPref('gridmode')
+        self.editor.setPref('gridmode', map[mode])
+
+    def toggleMenu(self):
+        map = {
+            '0': '1',
+            '1': '0'
+        }
+        mode = self.editor.getPref('showmenu')
+        self.editor.setPref('showmenu', map[mode])
+
+    def toggleUpdateMode(self):
+        map = {
+            'updateMode.Manual': hou.updateMode.AutoUpdate,
+            'updateMode.AutoUpdate': hou.updateMode.Manual
+        }
+        mode = str(hou.updateModeSetting())
+        hou.setUpdateMode(map[mode])
+
+    """
+    Viewport
+    """
+
+    def cursorPos(self):
+        return self.editor.cursorPosition()
+
+    def bounds(self):
+        return self.editor.visibleBounds()
+
+    def frameAll(self):
+        self.editor.requestZoomReset()
+
+    def screenSize(self):
+        return self.editor.screenBounds().size()
+
+    def setBounds(self, bounds):
+        self.editor.setVisibleBounds(bounds)
+
+    def size(self):
+        return self.bounds().size()
+
+    def translateView(self, direction):
+        xformmap = {
+            'up': hou.Vector2(0, self.deltat * self.zoomLevel()),
+            'down': hou.Vector2(0, self.deltat * self.zoomLevel() * -1),
+            'left': hou.Vector2(self.deltat * self.zoomLevel() * -1, 0),
+            'right': hou.Vector2(self.deltat * self.zoomLevel(), 0)
+        }
+        bounds = self.bounds()
+        bounds.translate(xformmap[direction])
+        self.setBounds(bounds)
+
+    def zoom(self, direction):
+        scalemap = {
+            'in': (0.75, 0.75),
+            'out': (1.25, 1.25)
+        }
+        bounds = self.bounds()
+        bounds.scale(scalemap[direction])
+        self.setBounds(bounds)
+
+    def zoomLevel(self):
+        zoomlevel = self.size()[0] / self.size()[0]
+        return zoomlevel
diff --git a/python3.11libs/hclib/core/hcpane.py b/python3.11libs/hclib/core/hcpane.py
new file mode 100644
index 0000000..2c0a93a
--- /dev/null
+++ b/python3.11libs/hclib/core/hcpane.py
@@ -0,0 +1,119 @@
+import hou
+from .hcglobal import HCGlobal
+
+
+class HCPane:
+
+    def __init__(self, pane):
+        self.hcglobal = HCGlobal()
+        self.pane = pane
+
+    """
+    Pane
+    """
+
+    def close(self):
+        for tab in self.tabs():
+            tab.close()
+
+    def isMaximized(self):
+        return self.pane.isMaximized()
+
+    def only(self):
+        tabs = self.hcglobal.tabs()
+        tabs.remove(self.tab())
+        for tab in tabs:
+            tab.close()
+
+    def qtScreenGeometry(self):
+        return self.pane.qtScreenGeometry()
+
+    def setIsMaximized(self, bool):
+        self.pane.setIsMaximized(bool)
+
+    def toggleMaximize(self):
+        self.setIsMaximized(not self.isMaximized())
+
+    """
+    Split
+    """
+
+    def contract(self):
+        fraction = round(self.splitFraction(), 3) + 0.1
+        self.setSplitFraction(fraction)
+        hou.ui.setStatusMessage("Pane fraction: " + str(fraction))
+
+    def expand(self):
+        fraction = round(self.splitFraction(), 3) - 0.1
+        self.setSplitFraction(fraction)
+        hou.ui.setStatusMessage("Pane fraction: " + str(fraction))
+
+    def isSplitMaximized(self):
+        return self.pane.isSplitMaximized()
+
+    # def resize(self):
+    # import hctl.ui.resizedialog
+    # panel = hctl.ui.resizedialog.resizeWidget(self)
+    # panel.show()
+
+    def setIsSplitMaximized(self, bool):
+        self.pane.setIsSplitMaximized(bool)
+
+    def setRatioHalf(self):
+        self.setSplitFraction(0.5)
+
+    def setRatioQuarter(self):
+        self.setSplitFraction(0.25)
+
+    def setRatioThird(self):
+        self.setSplitFraction(0.333)
+
+    def setSplitFraction(self, fraction):
+        self.pane.setSplitFraction(fraction)
+
+    def splitFraction(self):
+        return self.pane.getSplitFraction()
+
+    def splitHorizontal(self):
+        self.pane.splitHorizontally()
+
+    def splitRotate(self):
+        self.pane.splitRotate()
+
+    def splitSwap(self):
+        self.pane.splitSwap()
+
+    def splitVertical(self):
+        self.pane.splitVertically()
+
+    def toggleSplitMaximized(self):
+        self.setIsSplitMaximized(not self.isSplitMaximized())
+
+    """
+    Tabs
+    """
+
+    def hcTab(self):
+        from .hctab import HCTab
+
+        return HCTab(self.tab())
+
+    def isShowingTabs(self):
+        return self.pane.isShowingPaneTabs()
+
+    # def newTab(self):
+    #     reload(hcnewpanetabmenu)
+    #     newPaneTabMenu = hcnewpanetabmenu.newPaneTabMenu()
+    #     newPaneTabMenu.show()
+
+    def showTabs(self, bool):
+        self.pane.showPaneTabs(bool)
+
+    def tab(self):
+        return self.pane.currentTab()
+
+    def tabs(self):
+        return self.pane.tabs()
+
+    def toggleTabs(self):
+        self.showTabs(not self.isShowingTabs())
diff --git a/python3.11libs/hclib/core/hcpathtab.py b/python3.11libs/hclib/core/hcpathtab.py
new file mode 100644
index 0000000..a1c10e8
--- /dev/null
+++ b/python3.11libs/hclib/core/hcpathtab.py
@@ -0,0 +1,41 @@
+import hou
+from .hcgeo import HCGeo
+from .hctab import HCTab
+
+class HCPathTab(HCTab):
+    def __init__(self, tab):
+        self.tab = tab
+
+    def context(self):
+        return self.tab.pwd()
+
+    def contextType(self):
+        return self.tab.pwd().type().name()
+
+    def currentNode(self):
+        return self.tab.currentNode()
+
+    def geo(self):
+        map = {
+            'dop': self.tab.currentNode,
+            'lop': None,
+            'obj': self.tab.pwd().children()[0].displayNode,
+            'geo': self.tab.currentNode
+        }
+        node = map[self.contextType()]()
+        return node.geometry()
+
+    def hcgeo(self):
+        return HCGeo(self.geo())
+
+    def nodeType(self):
+        return self.tab.currentNode().type().name()
+
+    def path(self):
+        return self.tab.pwd().path()
+
+    def pwd(self):
+        return self.tab.pwd()
+
+    def selectedNodes(self):
+        return self.tab.pwd().selectedChildren()
diff --git a/python3.11libs/hclib/core/hcsceneviewer.py b/python3.11libs/hclib/core/hcsceneviewer.py
new file mode 100644
index 0000000..b70c38d
--- /dev/null
+++ b/python3.11libs/hclib/core/hcsceneviewer.py
@@ -0,0 +1,264 @@
+import hou, types
+from .hcpathtab import HCPathTab
+# Layout/viewport IDs
+#
+# DoubleSide:        2 3
+#
+# DoubleStack:       3
+#                    0
+#
+# Quad:              2 3
+#                    1 0
+#
+# QuadBottomSplit:     3
+#                    2 1 0
+#
+# QuadLeftSplit:     2
+#                    1 3
+#                    0
+#
+# TripleBottomSplit:   3
+#                    1   0
+#
+# TripleLeftSplit:   2
+#                    0 3
+#                    1
+#
+# Single:
+# setViewportLayout(layout, single=-1)
+# -1: current viewport (viewportmouse is/was over)
+# 0: top-left quad viewport (default: Top)
+# 1: top-right quad viewport (default: Perspective)
+# 2: bottom-left quad viewport (default: Front)
+# 3: bottom-right quad viewport (default: Right)
+
+class HCSceneViewer(HCPathTab):
+    def __init__(self, tab):
+        self.tab = tab
+        self.viewer = tab
+
+    """
+    Geometry
+    """
+
+    def displaySets(self):
+        displaySets = []
+        for viewport in self.viewports():
+            settings = viewport.settings()
+            displaySet = settings.displaySet(hou.displaySetType.DisplayModel)
+            displaySets.append(displaySet)
+        return(displaySets)
+
+    def toggleLightGeo(self):
+        self.setShowLights(not self.showLights())
+
+    def toggleBackface(self):
+        visible = 0
+        displaySets = self.displaySets()
+        for displaySet in displaySets:
+            if displaySet.isShowingPrimBackfaces():
+                visible = 1
+        for displaySet in displaySets:
+            displaySet.showPrimBackfaces(not visible)
+
+    def togglePointMarkers(self):
+        visible = 0
+        displaySets = self.displaySets()
+        for displaySet in displaySets:
+            if displaySet.isShowingPointMarkers():
+                visible = 1
+        for displaySet in displaySets:
+            displaySet.showPointMarkers(not visible)
+
+    def togglePointNormals(self):
+        visible = 0
+        displaySets = self.displaySets()
+        for displaySet in displaySets:
+            if displaySet.isShowingPointNormals():
+                visible = 1
+        for displaySet in displaySets:
+            displaySet.showPointNormals(not visible)
+
+    def togglePointNumbers(self):
+        visible = 0
+        displaySets = self.displaySets()
+        for displaySet in displaySets:
+            if displaySet.isShowingPointNumbers():
+                visible = 1
+        for displaySet in displaySets:
+            displaySet.showPointNumbers(not visible)
+
+    def togglePrimNormals(self):
+        visible = 0
+        displaySets = self.displaySets()
+        for displaySet in displaySets:
+            if displaySet.isShowingPrimNormals():
+                visible = 1
+            for displaySet in displaySets:
+                displaySet.showPrimNormals(not visible)
+
+    def togglePrimNumbers(self):
+        visible = 0
+        displaySets = self.displaySets()
+        for displaySet in displaySets:
+            if displaySet.isShowingPrimNumbers():
+                visible = 1
+        for displaySet in displaySets:
+            displaySet.showPrimNumbers(not visible)
+
+    def toggleVectors(self):
+        for viewport in self.viewports():
+            viewportSettings = viewport.settings()
+            vector_scale = viewportSettings.vectorScale()
+            if vector_scale == 1:
+                viewportSettings.setVectorScale(0)
+            elif vector_scale == 0:
+                viewportSettings.setVectorScale(1)
+            else:
+                viewportSettings.setVectorScale(1)
+
+    """
+    Grids
+    """
+
+    def toggleGrid(self):
+        refplane = self.referencePlane()
+        refplane.setIsVisible(not refplane.isVisible())
+
+    """
+    Layout
+    """
+
+    def layout(self):
+        return self.viewer.viewportLayout()
+
+    def layouts(self):
+        return (
+            hou.geometryViewportLayout.DoubleSide,
+            hou.geometryViewportLayout.DoubleStack,
+            hou.geometryViewportLayout.Quad,
+            hou.geometryViewportLayout.QuadBottomSplit,
+            hou.geometryViewportLayout.QuadLeftSplit,
+            hou.geometryViewportLayout.TripleBottomSplit,
+            hou.geometryViewportLayout.TripleLeftSplit,
+            hou.geometryViewportLayout.Single,
+        )
+
+    def layoutIndices(self):
+        return (
+            (2, 3),
+            (3, 0),
+            (2, 3, 1, 0),
+            (3, 2, 1, 0),
+            (2, 1, 0, 3),
+            (3, 1, 0),
+            (2, 3, 1),
+            (3),
+        )
+
+    def nextLayout(self):
+        index = self.layouts().index(self.layout())
+        new_index = (index + 1) % len(self.layouts())
+        self.setLayout(self.layouts()[new_index])
+        return
+
+    def setLayout(self, layout):
+        layoutmap = {
+            'DoubleSide': hou.geometryViewportLayout.DoubleSide,
+            'DoubleStack': hou.geometryViewportLayout.DoubleStack,
+            'Quad': hou.geometryViewportLayout.Quad,
+            'QuadBottomSplit': hou.geometryViewportLayout.QuadBottomSplit,
+            'QuadLeftSplit': hou.geometryViewportLayout.QuadLeftSplit,
+            'Single': hou.geometryViewportLayout.Single,
+            'TripleBottomSplit': hou.geometryViewportLayout.TripleBottomSplit,
+            'TripleLeftSplit': hou.geometryViewportLayout.TripleLeftSplit
+        }
+        self.viewer.setViewportLayout(layoutmap[layout])
+
+    """
+    UI
+    """
+
+    def toggleDisplayOptionsToolbar(self):
+        self.viewer.showDisplayOptionsBar(not self.viewer.isShowingDisplayOptionsBar())
+
+    def toggleGroupList(self):
+        self.viewer.setGroupListVisible(not self.viewer.isGroupListVisible())
+
+    def toggleOperationBar(self):
+        self.viewer.showOperationBar(not self.viewer.isShowingOperationBar())
+
+    def toggleSelectionBar(self):
+        self.viewer.showSelectionBar(not self.viewer.isShowingSelectionBar())
+
+    def toggleToolbars(self):
+        state1 = self.viewer.isShowingOperationBar()
+        state2 = self.viewer.isShowingDisplayOptionsBar()
+        state3 = self.viewer.isShowingSelectionBar()
+        if state1 + state2 + state3 > 0:
+            self.viewer.showOperationBar(0)
+            self.viewer.showDisplayOptionsBar(0)
+            self.viewer.showSelectionBar(0)
+        else:
+            self.viewer.showOperationBar(1)
+            self.viewer.showDisplayOptionsBar(1)
+            self.viewer.showSelectionBar(1)
+
+    """
+    Utils
+    """
+
+    def keycam(self):
+        # Contexts:
+        # Chop
+        # ChopNet
+        # Cop
+        # Cop2
+        # CopNet
+        # Data
+        # Director
+        # Dop
+        # Driver
+        # Lop
+        # Manager
+        # Object
+        # Shop
+        # Sop
+        # Top
+        # TopNet
+        # Vop
+        # VopNet
+        contextmap = {
+            "Object": "Entered keycam in an obj context",
+            "Sop": "Entered keycam in a sop context",
+            "Lop": "Entered keycam in a lop context",
+        }
+        context = self.pwd().childTypeCategory().name()
+        if context in contextmap:
+            self.viewer.setCurrentState('keycam')
+            hou.ui.setStatusMessage(contextmap[context])
+        else:
+            hou.ui.setStatusMessage("No obj, sop or lop context", hou.severityType.Error)
+
+    """
+    Viewports
+    """
+
+    def homeAllViewports(self):
+        for viewport in self.viewports():
+            viewport.home()
+
+    def viewport(self):
+        return self.viewer.curViewport()
+
+    def viewports(self):
+        return self.viewer.viewports()
+
+    def frame(self):
+        for viewport in self.viewports():
+            cam = viewport.camera()
+            # Is camera node or default.
+            if not cam:
+                viewport.frameAll()
+            else:
+                viewport.frameAll()
diff --git a/python3.11libs/hclib/core/hctab.py b/python3.11libs/hclib/core/hctab.py
new file mode 100644
index 0000000..16f9879
--- /dev/null
+++ b/python3.11libs/hclib/core/hctab.py
@@ -0,0 +1,59 @@
+import hou
+import types
+
+
+class HCTab():
+    def __init__(self, tab):
+        self.tab = tab
+
+    """
+    Controls
+    """
+
+    def toggleNetworkControls(self):
+        if self.tab.hasNetworkControls():
+            self.tab.showNetworkControls(not self.tab.isShowingNetworkControls())
+
+    def togglePin(self):
+        self.tab.setPin(not self.tab.isPin())
+
+    """
+    Tab
+    """
+
+    def close(self):
+        self.tab.close()
+
+    def closeOtherTabs(self):
+        for tab in self.pane().tabs():
+            if tab != self.tab:
+                tab.close()
+
+    def hcPane(self):
+        from .hcpane import HCPane
+        return HCPane(self.pane())
+
+    def setTypeDetailsView(self):
+        self.setType(hou.paneTabType.DetailsView)
+
+    def setTypeNetworkEditor(self):
+        self.setType(hou.paneTabType.NetworkEditor)
+
+    def setTypeParm(self):
+        self.setType(hou.paneTabType.Parm)
+
+    def setTypePythonShell(self):
+        self.setType(hou.paneTabType.PythonShell)
+
+    def setTypeSceneViewer(self):
+        self.setType(hou.paneTabType.SceneViewer)
+
+    def setType(self, type):
+        tab = self.tab.setType(type)
+        return tab
+
+    def pane(self):
+        return self.tab.pane()
+
+    def type(self):
+        return self.tab.type()
diff --git a/python3.11libs/hclib/core/hcviewport.py b/python3.11libs/hclib/core/hcviewport.py
new file mode 100644
index 0000000..5e79bfd
--- /dev/null
+++ b/python3.11libs/hclib/core/hcviewport.py
@@ -0,0 +1,15 @@
+import hou
+
+
+class HCViewport():
+    def __init__(self, viewport):
+        self.viewport = viewport
+        return
+
+    def visualizers(self):
+        category = hou.viewportVisualizerCategory.Scene
+        vis_arr = hou.viewportVisualizers.visualizers(category)
+        return vis_arr
+
+    def setType(self, type):
+        self.viewport.changeType(type)
diff --git a/python3.11libs/hclib/ui/__init__.py b/python3.11libs/hclib/ui/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/python3.11libs/hclib/ui/hcfunctionpanel.py b/python3.11libs/hclib/ui/hcfunctionpanel.py
new file mode 100644
index 0000000..4992493
--- /dev/null
+++ b/python3.11libs/hclib/ui/hcfunctionpanel.py
@@ -0,0 +1,251 @@
+import hou, inspect, platform
+from PySide6 import QtCore, QtGui, QtWidgets
+from PySide6.QtCore import Qt
+from fuzzyfinder import fuzzyfinder
+from .core.hcglobal import HCGlobal
+from .core.hcpane import HCPane
+from .core.tab import HCTab
+from importlib import reload
+
+
+class HCFunctionPanel(QtWidgets.QDialog):
+    def __init__(self):
+        super(HCFunctionPanel, self).__init__(hou.qt.mainWindow())
+
+        ## WINDOW PARAMETERS
+        self.resize(900, 400)
+        self.setWindowTitle("hcfunctionpanel")
+        self.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint)
+        # Focus the input line AFTER setting window flags
+        self.functionPanel.inputLine.setFocus()
+
+        ## OBJECTS
+        self.hc_global = HCGlobal()
+        self.hc_pane = self.hc_global.hcPane()
+        self.hc_tab = self.hc_global.hcTab()
+        # self.hc_viewport = self.hc_tab.viewport()
+
+        ## PATHS
+        self.project_path = self.hc_global.projectPath()
+        ct = self.project_path.count('/')
+        self.project_path = self.project_path.split('/', ct - 2)[-1]
+        self.network_path = self.hc_tab.pwd()
+
+        ## LAYOUT
+        self.main_layout = QtWidgets.QHBoxLayout()
+        self.function_panel = FunctionPanel(self)
+        self.main_layout.addWidget(self.function_panel)
+        self.setLayout(self.main_layout)
+
+    def closeEvent(self, event):
+        self.setParent(None)
+
+    def lists(self):
+        # Define various arrays for navigating tabs
+        self.tab_names = [tab.name() for tab in self.hc_global.tabs()]
+        self.tab_types = (
+            hou.paneTabType.ApexEditor,
+            hou.paneTabType.CompositorViewer,
+            hou.paneTabType.DetailsView,
+            hou.paneTabType.NetworkEditor,
+            hou.paneTabType.Parm,
+            hou.paneTabType.PythonPanel,
+            hou.paneTabType.PythonShell,
+            hou.paneTabType.SceneViewer,
+            hou.paneTabType.Textport
+        )
+        self.tab_type_names = (
+            "ApexEditor",
+            "CompositorViewer",
+            "DetailsView",
+            "NetworkEditor",
+            "Parm",
+            "PythonPanel",
+            "PythonShell",
+            "SceneViewer",
+            "Textport"
+        )
+        self.tab_labels = []
+        for tab in self.hc_global.tabs():
+            index = self.tab_types.index(tab.type())
+            label = self.tab_type_names[index]
+            self.tab_labels.append(label)
+
+    def nodes(self):
+        self.node = self.hc_tab.currentNode()
+
+
+class FunctionPanel(QtWidgets.QFrame):
+    def __init__(self, owner):
+        super().__init__()
+        self.owner = owner
+        self.function_list = self.FunctionList(owner)
+        self.input_line = self.InputLine(owner)
+        self.input_line.function_list = self.function_list
+        layout = QtWidgets.QVBoxLayout()
+        layout.addWidget(self.input_line)
+        layout.addWidget(self.function_list)
+        self.setFrameShape(QtWidgets.QFrame.Panel)
+        self.setLineWidth(1)
+        self.setLayout(layout)
+        self.setFixedWidth(300)
+
+
+    class InputLine(QtWidgets.QLineEdit):
+        def __init__(self, owner, parent=None):
+            super().__init__(parent)
+            self.owner = owner
+            # self.returnPressed.connect(self.function_list.exec)
+            self.key_ctl_n = QtCore.Signal()
+            self.key_ctl_p = QtCore.Signal()
+            self.key_down = QtCore.Signal()
+            self.key_up = QtCore.Signal()
+            # Enable fuzzy search
+            self.textEdited.connect(self.filter)
+
+        def event(self, event):
+            if event.type() == QtCore.QEvent.Type.KeyPress:
+                key = event.key()
+                mods = event.modifiers()
+                # Choose modifiers based on platform
+                sys = platform.system()
+                modifier = None
+
+                # Macos or linux
+                if sys == 'Darwin':
+                    modifier = Qt.MetaModifier
+                elif sys == 'linux':
+                    modifier = Qt.ControlModifier
+
+                # Highlight next item
+                if mods == modifier and key == Qt.Key_N:
+                    self.next()
+                    return True
+                elif key == Qt.Key_Down:
+                    self.next()
+                    return True
+
+                # Highlight previous item
+                elif mods == modifier and key == Qt.Key_P:
+                    self.prev()
+                    return True
+                elif key == Qt.Key_Up:
+                    self.prev()
+                    return True
+
+                # Upon nothing
+                return QtWidgets.QLineEdit.event(self, event)
+            else:
+                return QtWidgets.QLineEdit.event(self, event)
+
+        def filter(self):
+            query = self.text()
+            items = self.function_list.items()
+            item_names = [item.text() for item in items]
+            matches = list(fuzzyfinder(query, item_names))
+            for item in items:
+                if item.text() in matches:
+                    item.setHidden(0)
+                else:
+                    item.setHidden(1)
+            self.function_list.setIndex(0)
+
+        def visibleItems(self):
+            item_count = self.function_list.count()
+            items = []
+            for i in range(item_count):
+                item = self.function_list.item(i)
+                if not item.isHidden():
+                    items.append(item)
+            return(items)
+
+        def next(self):
+            items = self.visibleItems()
+            current_item = self.function_list.selectedItems()[0]
+            index = items.index(current_item)
+            index = (index + 1) % len(items)
+            self.function_list.setIndex(index)
+
+        def prev(self):
+            items = self.visibleItems()
+            current_item = self.function_list.selectedItems()[0]
+            index = items.index(current_item)
+            index = (index - 1) % len(items)
+            self.function_list.setIndex(index)
+
+
+    class FunctionList(QtWidgets.QListWidget):
+        def __init__(self, owner, parent=None):
+            super().__init__(parent)
+            self.owner = owner
+            self.populate()
+            self.itemClicked.connect(self.execute)
+            self.setSelectionMode(QtWidgets.QListWidget.SingleSelection)
+            self.setIndex(0)
+
+        def execute(self):
+            items = self.items()
+            current_item = self.selectedItems()[0]
+            index = items.index(current_item)
+            item = items[index]
+            label = item.text()
+            obj_name, method_name = label.split('.')
+            # Populate functions based on context
+            if obj_name == 'HCNetworkEditor':
+                method = getattr(self.owner.hcNetworkEditor, method_name)
+                method()
+            elif obj_name == 'HCPane':
+                method = getattr(self.owner.hcPane, method_name)
+                method()
+            elif obj_name == 'HCTab':
+                method = getattr(self.owner.hcTab, method_name)
+                method()
+            elif obj_name == 'HCSceneViewer':
+                method = getattr(self.owner.hcSceneViewer, method_name)
+                method()
+            elif obj_name == 'HCGlobal':
+                method = getattr(self.owner.hcGlobal, method_name)
+                method()
+            # Close window on function execution
+            # self.accept()
+
+        def items(self):
+            item_count = self.count()
+            items = [self.item(i) for i in range(item_count)]
+            return(items)
+
+        def populate(self):
+            items = []
+
+            for name, obj in inspect.getmembers(HCNetworkEditor, inspect.isfunction):
+                if hasattr(obj, 'interactive') and obj.interactive:
+                    items.append(('HCNetworkEditor', name))
+
+            for name, obj in inspect.getmembers(hcu.HCPane, inspect.isfunction):
+                if hasattr(obj, 'interactive') and obj.interactive:
+                    items.append(('HCPane', name))
+
+            for name, obj in inspect.getmembers(hcu.HCTab, inspect.isfunction):
+                if hasattr(obj, 'nteractive') and obj.interactive:
+                    items.append(('HCTab', name))
+
+            if self.owner.hc_tab.type() == hou.paneTabType.SceneViewer:
+                for name, obj in inspect.getmembers(HCSceneViewer, inspect.isfunction):
+                    if hasattr(obj, 'interactive') and obj.interactive:
+                        items.append(('HCSceneViewer', name))
+
+            for name, obj in inspect.getmembers(HCGlobal, inspect.isfunction):
+                if hasattr(obj, 'interactive') and obj.interactive:
+                    items.append(('HCGlobal', name))
+
+            for item in items:
+                self.addItem(item[0] + '.' + item[1])
+
+        def setIndex(self, index):
+            items = self.items()
+            counter = 0
+            for item in items:
+                if not item.isHidden():
+                    if counter == index:
+                        self.setCurrentItem(item)
+                    counter += 1
diff --git a/python3.11libs/hclib/ui/hcnewtabpanel.py b/python3.11libs/hclib/ui/hcnewtabpanel.py
new file mode 100644
index 0000000..50e7c11
--- /dev/null
+++ b/python3.11libs/hclib/ui/hcnewtabpanel.py
@@ -0,0 +1,104 @@
+import hou
+from fuzzyfinder import fuzzyfinder
+from PySide6 import QtCore, QtWidgets
+from PySide6.QtWidgets import QLineEdit, QDialog
+from .core.hcglobal import HCGlobal
+
+
+class inputBox(QLineEdit):
+    onTab = QtCore.Signal()
+    def event(self, event):
+        if event.type() == QtCore.QEvent.Type.KeyPress and event.key() == QtCore.Qt.Key_Tab:
+            self.onTab.emit()
+            return True
+        else:
+            return QLineEdit.event(self, event)
+
+
+class newTabPanel(QDialog):
+    def __init__(self):
+        super(newTabPanel, self).__init__(hou.qt.mainWindow())
+
+        self.hc_global = HCGlobal()
+
+        # Input box
+        self.input_box = inputBox()
+        self.input_box.onTab.connect(self.nextItem)
+        self.input_box.textEdited.connect(self.filter)
+        self.input_box.returnPressed.connect(self.execAction)
+
+        # Item array
+        self.items = []
+        self.items.append(("Geometry Spreadsheet", hou.paneTabType.DetailsView))
+        self.items.append(("Network Editor", hou.paneTabType.NetworkEditor))
+        self.items.append(("Parameters", hou.paneTabType.Parm))
+        self.items.append(("Python Shell", hou.paneTabType.PythonShell))
+        self.items.append(("Scene Viewer", hou.paneTabType.SceneViewer))
+
+        # List widget
+        self.list_widget = QtWidgets.QListWidget()
+        for item in self.items:
+            self.list_widget.addItem(item[0])
+        self.list_widget.itemClicked.connect(self.execAction)
+
+        # Make layout
+        self.layout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.Direction.TopToBottom)
+        self.layout.addWidget(self.input_box)
+        self.layout.addWidget(self.list_widget)
+        self.setLayout(self.layout)
+        self.setIndex(0)
+
+    def closeEvent(self, event):
+        print("closing")
+        self.setParent(None)
+
+    def execAction(self):
+        current_item = self.list_widget.selectedItems()[0]
+        items = self.getItems()
+        index = items.index(current_item)
+        tab = self.hc_global.tab()
+        tab.createTab(self.items[index][1])
+        self.accept()
+
+    def filter(self):
+        text = self.input_box.text()
+        items = self.getItems()
+        names = [item.text() for item in items]
+        suggestions = fuzzyfinder(text, names)
+        suggestions = list(suggestions)
+        for item in items:
+            if item.text() in suggestions:
+                item.setHidden(0)
+            else:
+                item.setHidden(1)
+        self.setIndex(0)
+
+    def getItems(self):
+        item_count = self.list_widget.count()
+        items = [self.list_widget.item(i) for i in range(item_count)]
+        return(items)
+
+    def getVisibleItems(self):
+        item_count = self.list_widget.count()
+        items = []
+        for i in range(item_count):
+            item = self.list_widget.item(i)
+            if not item.isHidden():
+                items.append(item)
+        return(items)
+
+    def nextItem(self):
+        items = self.getVisibleItems()
+        selected_item = self.list_widget.selectedItems()[0]
+        index = items.index(selected_item)
+        index = (index + 1) % len(items)
+        self.setIndex(index)
+
+    def setIndex(self, idx):
+        items = self.getItems()
+        counter = 0
+        for item in items:
+            if not item.isHidden():
+                if counter == idx:
+                    self.listWidget.setItemSelected(item, 1)
+                counter += 1
diff --git a/python3.11libs/hclib/ui/hcpanel.py b/python3.11libs/hclib/ui/hcpanel.py
new file mode 100644
index 0000000..d74403e
--- /dev/null
+++ b/python3.11libs/hclib/ui/hcpanel.py
@@ -0,0 +1,221 @@
+import hou
+from PySide6.QtCore import Qt
+from PySide6.QtWidgets import (
+    QCheckBox,
+    QDialog,
+    QHBoxLayout,
+    QLabel,
+    QMenu,
+    QSlider,
+    QVBoxLayout,
+)
+
+from ..core.hcglobal import HCGlobal
+from ..core.hcpane import HCPane
+from .hcwidgets import HCButton
+
+
+class HCPanel(QDialog):
+    def __init__(self, hc_tab):
+        super(HCPanel, self).__init__(hou.qt.mainWindow())
+
+        # Objects
+        self.hc_global= HCSession()
+        self.hc_tab = hc_tab
+        self.hc_pane = HCPane(hc_pane.pane())
+
+        # Window parameters
+        pane_geo = self.hcPane.qtScreenGeometry()
+        pane_center = pane_geo.center()
+        x = pane_center.x() - 200
+        y = pane_center.y() - 75
+        self.resize(200, 100)
+        self.move(x, y)
+        self.setWindowTitle("hctl panel")
+        self.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint)
+
+        # Utility lists
+        self.tab_types = (
+            hou.paneTabType.ApexEditor,
+            hou.paneTabType.ChannelEditor,
+            hou.paneTabType.ChannelViewer,
+            hou.paneTabType.CompositorViewer,
+            hou.paneTabType.DetailsView,
+            hou.paneTabType.IPRViewer,
+            hou.paneTabType.NetworkEditor,
+            hou.paneTabType.Parm,
+            hou.paneTabType.PythonPanel,
+            hou.paneTabType.PythonShell,
+            hou.paneTabType.SceneViewer,
+            hou.paneTabType.Textport,
+            hou.paneTabType.TreeView,
+        )
+        self.tab_names = [tab.name() for tab in self.hc_global.tabs()]
+        self.tab_type_names = (
+            "ApexEditor",
+            "Channel Editor",
+            "Channel Viewer",
+            "CompositorViewer",
+            "DetailsView",
+            "IPR Viewer",
+            "NetworkEditor",
+            "Parm",
+            "PythonPanel",
+            "PythonShell",
+            "SceneViewer",
+            "Textport",
+            "Tree View",
+        )
+        self.tab_labels = []
+        for tab in self.hc_global.tabs():
+            index = self.tab_types.index(tab.type())
+            label = self.tab_type_names[index]
+            self.tab_labels.append(label)
+
+        # Paths
+        self.project_path = hou.hipFile.name()
+        ct = self.project_path.count("/")
+        self.project_path = self.project_path.split("/", ct - 2)[-1]
+        self.network_path = self.hc_tab.pwd()
+
+        # Global column
+        global_col = QVBoxLayout()
+        # Label
+        global_label = QLabel("Global")
+        global_label.setStyleSheet("color: #909090")
+        global_col.addWidget(global_label)
+        # Toggle tabs
+        global_tabs_btn = HCButton("Tabs")
+        global_tabs_btn.clicked.connect(self.hc_global.toggleTabs)
+        global_col.addWidget(global_tabs_btn)
+        # Toggle network controls
+        global_network_controls_btn = HCButton("Network Controls")
+        global_network_controls_btn.clicked.connect(self.hc_global.toggleNetworkControls)
+        global_col.addWidget(global_network_controls_btn)
+        # Toggle autosave
+        global_col.addWidget(self.SessionAutosaveCheckBox(self))
+        # Toggle menus
+        global_menus_btn = HCButton("Menus")
+        global_menus_btn.clicked.connect(self.hc_global.toggleMenus)
+        global_col.addWidget(global_menus_btn)
+        # Toggle stowbars
+        global_stowbars_btn = HCButton("Stowbars")
+        global_stowbars_btn.clicked.connect(self.hc_global.toggleStowbars)
+        global_col.addWidget(global_stowbars_btn)
+        # Fill empty space
+        global_col.addStretch()
+
+        # Context column
+        context_col = QVBoxLayout()
+        # Label
+        context_label = QLabel("Context")
+        context_label.setStyleSheet("color: #909090")
+        context_col.addWidget(context_label)
+        # Toggle tabs
+        context_tabs_btn = HCButton("Tabs")
+        context_tabs_btn.clicked.connect(self.hc_pane.toggleTabs)
+        context_col.addWidget(context_tabs_btn)
+        # Toggle network controls
+        context_network_controls_btn = HCButton("Network Controls")
+        context_network_controls_btn.clicked.connect(self.hc_tab.toggleNetworkControls)
+        context_col.addWidget(context_network_controls_btn)
+        # Toggle pin
+        context_col.addWidget(self.TabPinCheckBox(self))
+        # Tab switcher
+        context_col.addWidget(self.TabMenu(self))
+        # Tab type switcher
+        # context_col.addWidget(self.TabTypeMenu(self))
+        # Toggle maximize
+        context_maximize_btn = HCButton("Maximize")
+        context_maximize_btn.clicked.connect(self.hc_pane.toggleMaximized)
+        context_col.addWidget(context_maximize_btn)
+        # Size slider
+        context_size_slider = QSlider(Qt.Horizontal)
+        context_size_slider.setFixedWidth(300 / 2)
+        context_size_slider.setValue(self.hc_pane.splitFraction() * 100)
+        context_size_slider.valueChanged.connect(self.sliderChange)
+        context_col.addWidget(context_size_slider)
+
+        # Scene viewer controls
+        if self.hc_tab.type() == hou.paneTabType.SceneViewer:
+            # Toggle keycam
+            context_keycam_btn = HCButton("Keycam")
+            context_keycam_btn.clicked.connect(self.hc_tab.keycam)
+            context_col.addWidget(context_keycam_btn)
+            # Home all viewports
+            context_home_btn = HCButton("Home")
+            context_home_btn.clicked.connect(self.hc_tab.homeAllViewports)
+            context_col.addWidget(context_home_btn)
+
+        # Fill empty space
+        context_col.addStretch()
+
+        # LAYOUT
+        self.layout = QHBoxLayout()
+        self.layout.addLayout(global_col)
+        self.layout.addLayout(global_col)
+        self.setLayout(self.layout)
+
+    def sliderChange(self, value):
+        self.hc_pane.setSplitFraction(value / 100)
+
+    def closeEvent(self, event):
+        self.setParent(None)
+
+    class GlobalAutosaveCheckBox(QCheckBox):
+        def __init__(self, owner):
+            super().__init__("Autosave")
+            state = owner.hc_global.autosave()
+            if state == "1":
+                self.setCheckState(Qt.Checked)
+            elif state == "0":
+                self.setCheckState(Qt.Unchecked)
+            self.clicked.connect(owner.hc_global.toggleAutoSave)
+
+    class TabPinCheckBox(QCheckBox):
+        def __init__(self, owner):
+            super().__init__("Pin")
+            self.owner = owner
+            self.clicked.connect(self.owner.hc_tab.togglePin)
+            if self.owner.hc_tab.isPin():
+                self.setCheckState(Qt.Checked)
+            else:
+                self.setCheckState(Qt.Unchecked)
+
+    class TabMenu(HCButton):
+        def __init__(self, owner):
+            super().__init__(str(owner.hc_pane.currentTab().type()).split(".")[-1])
+            self.owner = owner
+            self.tabs = self.owner.hc_pane.tabs()
+            self.tab_names = [str(tab.type()).split(".")[-1] for tab in self.tabs]
+            self.menu = QMenu(self)
+            idx = 0
+            for tab_name in self.tab_names:
+                action = self.menu.addAction(tab_name)
+                action.triggered.connect(
+                    lambda checked=False, index=idx: self.changeTab(index)
+                )
+                idx += 1
+            self.setMenu(self.menu)
+
+        def changeTab(self, index):
+            new_tab = self.tabs[index]
+            new_tab.setIsCurrentTab()
+            self.owner.close()
+
+    class TabTypeMenu(HCButton):
+        def __init__(self, owner):
+            super().__init__("menu")
+            self.owner = owner
+            menu = QMenu(self)
+            for label in owner.tab_type_names:
+                menu.addAction(label)
+            menu.triggered.connect(self.on_action_triggered)
+            self.setMenu(menu)
+
+        def on_action_triggered(self, action):
+            self.setText(action.text())
+            # index = self.owner.tab_type_names.index(action.text())
+            # tab_type = self.owner.tab_types[index]
+            # tab = self.owner.hctlTab.setType(tab_type)
+            # self.owner.hctlTab = hcu.HctlTab(tab)
diff --git a/python3.11libs/hclib/ui/hcresizepanel.py b/python3.11libs/hclib/ui/hcresizepanel.py
new file mode 100644
index 0000000..879ed43
--- /dev/null
+++ b/python3.11libs/hclib/ui/hcresizepanel.py
@@ -0,0 +1,44 @@
+import hou
+from PySide6 import QtGui, QtWidgets
+from PySide6.QtWidgets import QLabel, QShortcut, QBoxLayout
+
+
+class HCResizePanel(QtWidgets.QDialog):
+    def __init__(self, pane):
+        super(HCResizePanel, self).__init__(hou.qt.mainWindow())
+
+        self.pane = pane
+
+        # Keys
+        key_j = QShortcut(QtGui.QKeySequence("J"), self)
+        key_j.activated.connect(self.onJ)
+        key_k = QShortcut(QtGui.QKeySequence("K"), self)
+        key_k.activated.connect(self.onK)
+
+        self.pane_label = QLabel()
+        self.pane_label.setText("Pane: " + str(pane.currentTab().type()))
+
+        self.is_maximized_label = QLabel()
+        self.is_maximized_label.setText("Maximized: " + str(pane.isMaximized))
+
+        self.split_fraction_label = QLabel()
+        self.split_lraction_label.setText("Split Fraction: " + str(pane.getSplitFraction()))
+
+        self.layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
+        self.layout.addWidget(self.pane_label)
+        self.layout.addWidget(self.is_maximized_label)
+        self.layout.addWidget(self.split_fraction_label)
+
+        self.setLayout(self.layout)
+
+    def onJ(self):
+        split_fraction = self.pane.getSplitFraction()
+        split_fraction += 0.05
+        self.pane.setSplitFraction(split_fraction)
+        self.split_fraction_label.setText("Split Fraction: " + str(split_fraction))
+
+    def onK(self):
+        split_fraction = self.pane.getSplitFraction()
+        split_fraction -= 0.05
+        self.pane.setSplitFraction(split_fraction)
+        self.split_fraction_label.setText("Split Fraction: " + str(split_fraction))
diff --git a/python3.11libs/hclib/ui/hcstatuspanel.py b/python3.11libs/hclib/ui/hcstatuspanel.py
new file mode 100644
index 0000000..622f880
--- /dev/null
+++ b/python3.11libs/hclib/ui/hcstatuspanel.py
@@ -0,0 +1,69 @@
+import hou
+from PySide6 import QtWidgets
+from PySide6.QtWidgets import QLabel, QVBoxLayout
+from PySide6.QtCore import Qt
+
+
+class Dialog(QtWidgets.QDialog):
+    def __init__(self):
+        super(Dialog, self).__init__(hou.qt.mainWindow())
+        self.resize(500, 200)
+        self.setWindowTitle("hctl status")
+        self.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint)
+
+        # Widgets
+        self.project_path_label = QLabel("Project Path")
+        self.network_path_label = QLabel("Network Path")
+        self.tab_type_label = QLabel("Tab Type")
+
+        # Layout
+        self.layout = QVBoxLayout()
+        self.layout.addWidget(self.project_path_label)
+        self.layout.addWidget(self.network_path_label)
+        self.layout.addWidget(self.tab_type_label)
+        self.layout.addStretch()
+        self.setLayout(self.layout)
+
+        self.update()
+
+    def closeEvent(self, event):
+        self.setParent(None)
+
+    def lists(self):
+        # Arrays for navigating pane tabs
+        self.tab_types = (
+            hou.paneTabType.ApexEditor,
+            hou.paneTabType.CompositorViewer,
+            hou.paneTabType.DetailsView,
+            hou.paneTabType.NetworkEditor,
+            hou.paneTabType.Parm,
+            hou.paneTabType.PythonPanel,
+            hou.paneTabType.PythonShell,
+            hou.paneTabType.SceneViewer,
+            hou.paneTabType.Textport
+        )
+        self.tab_type_names = (
+            "ApexEditor",
+            "CompositorViewer",
+            "DetailsView",
+            "NetworkEditor",
+            "Parm",
+            "PythonPanel",
+            "PythonShell",
+            "SceneViewer",
+            "Textport"
+        )
+        self.tab_names = [tab.name() for tab in self.hc_global.tabs()]
+
+        # Populate pane tab labels array
+        self.tab_labels = []
+        for tab in self.hc_global.tabs():
+            index = self.tab_types.index(tab.type())
+            label = self.tab_type_names[index]
+            self.tab_labels.append(label)
+
+    def update(self):
+        # Labels
+        self.project_path_label.setText("Project path: " + hou.session.projectPath)
+        self.network_path_label.setText("Network Path: " + hou.session.networkPath)
+        self.tab_type_label.setText("Tab type: " + str(hou.session.tabType))
diff --git a/python3.11libs/hclib/ui/hcvisualizerpanel.py b/python3.11libs/hclib/ui/hcvisualizerpanel.py
new file mode 100644
index 0000000..ee40680
--- /dev/null
+++ b/python3.11libs/hclib/ui/hcvisualizerpanel.py
@@ -0,0 +1,131 @@
+import hou
+from fuzzyfinder import fuzzyfinder
+from PySide6 import QtCore
+from PySide6.QtWidgets import QListWidget, QListWidgetItem, QDialog, QLineEdit, QBoxLayout
+from PySide6.QtCore import Qt, QEvent
+
+
+class filterBox(QLineEdit):
+    def __init__(self):
+        # Key handler
+        self.onTab = QtCore.Signal()
+
+    def event(self, event):
+        if event.type() == QEvent.Type.KeyPress:
+            key = event.key()
+            if key == Qt.Key_Tab:
+                self.onTab.emit()
+                return True
+        return QLineEdit.event(self, event)
+
+
+class VisualizerMenu(QDialog):
+    def __init__(self):
+        super(VisualizerMenu, self).__init__(hou.qt.mainWindow())
+
+        # Resources
+        self.viewport = hou.session.hctlSession.viewport()
+        self.vis_arr = self.viewport.visualizers()
+
+        # Filter box
+        self.filter_box = filterBox()
+        self.filter_box.onTab.connect(self.listNext)
+        self.filter_box.returnPressed.connect(self.itemToggle)
+        self.filter_box.textEdited.connect(self.listFilter)
+
+        # List widget
+        self.list_widget = QListWidget()
+        if self.vis_arr:
+            for vis in self.vis_arr:
+                list_item = QListWidgetItem()
+                item_label = vis.label()
+                item_state = vis.isActive(self.curViewport)
+
+                list_item.setText(item_label)
+
+                if item_state:
+                    list_item.setCheckState(Qt.Checked)
+                else:
+                    list_item.setCheckState(Qt.Unchecked)
+
+                self.list_widget.addItem(list_item)
+
+        self.list_widget.itemClicked.connect(self.item_toggle)
+
+        # Layout
+        self.layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
+        self.layout.addWidget(self.filter_box)
+        self.layout.addWidget(self.list_widget)
+        self.setLayout(self.layout)
+        self.listSetIndex(0)
+
+    def closeEvent(self, event):
+        print("Closing")
+        self.setParent(None)
+
+    def itemToggle(self):
+        current_item = self.list_widget.selectedItems()[0]
+        item_name = current_tem.text()
+        items = self.listGetItems()
+        item_names = [item.text() for item in items]
+        index = item_names.index(item_name)
+
+        vis = self.vis_arr[index]
+        state = vis.isActive(self.viewport)
+
+        vis.setIsActive(not state, self.viewport)
+
+        if state:
+            current_item.setCheckState(Qt.Unchecked)
+        else:
+            current_item.setCheckState(Qt.Checked)
+
+    def listFilter(self):
+        text = self.input_box.text()
+        items = self.getItems()
+        names = [item.text() for item in items]
+        suggestions = fuzzyfinder(text, names)
+        suggestions = list(suggestions)
+        for item in items:
+            if item.text() in suggestions:
+                item.setHidden(0)
+            else:
+                item.setHidden(1)
+        self.listSetIndex(0)
+
+    def listGetItems(self):
+        item_count = self.list_widget.count()
+        items = [self.list_widget.item(i) for i in range(item_count)]
+        return(items)
+
+    def listGetVisibleItems(self):
+        item_count = self.list_widget.count()
+        items = []
+        for i in range(item_count):
+            item = self.list_widget.item(i)
+            if not item.isHidden():
+                items.append(item)
+        return(items)
+
+    def listNext(self):
+        visible_items = self.listGetVisibleItems()
+        current_item = self.list_widget.selectedItems()[0]
+        index = visible_items.index(current_item)
+        index = (index + 1) % len(visible_items)
+        self.listSetIndex(index)
+
+    def listPrev(self):
+        visible_items = self.listGetVisibleItems()
+        current_item = self.list_widget.selectedItems()[0]
+        index = visible_items.index(current_item)
+        index = (index - 1) % len(visible_items)
+        self.listSetIndex(index)
+
+    def listSetIndex(self, index):
+        visible_items = self.listGetVisibleItems()
+        counter = 0
+        for visible_item in visible_items:
+            if counter == index:
+                self.list_widget.setItemSelected(visible_item, 1)
+                return
+            counter += 1
diff --git a/python3.11libs/hclib/ui/hcwidgets.py b/python3.11libs/hclib/ui/hcwidgets.py
new file mode 100644
index 0000000..c7f1cc6
--- /dev/null
+++ b/python3.11libs/hclib/ui/hcwidgets.py
@@ -0,0 +1,18 @@
+from importlib import reload
+from PySide6 import QtWidgets
+from PySide6.QtCore import Qt
+
+
+class HCButton(QtWidgets.QPushButton):
+    def __init__(self, text, parent=None):
+        super().__init__(text, parent)
+        self.setStyleSheet("text-align: left; padding: 0 0 0 0")
+        self.setFlat(1)
+        self.setFixedSize(120, 16)
+
+
+class HCMenu(QtWidgets.QPushButton):
+    def __init__(self, label, parent=None):
+        super().__init__(label, parent)
+        self.setStyleSheet("text-align: left; padding: 0 0 0 0")
+        self.setFlat(1)
diff --git a/python3.11libs/hclib/utils/__init__.py b/python3.11libs/hclib/utils/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/python3.11libs/hclib/utils/hcbindings.py b/python3.11libs/hclib/utils/hcbindings.py
new file mode 100644
index 0000000..c66f965
--- /dev/null
+++ b/python3.11libs/hclib/utils/hcbindings.py
@@ -0,0 +1,263 @@
+import hou, platform
+
+# KEY NAMES
+# uparrow, downarrow, leftarrow, rightarrow
+# alt, cmd, shift, ctrl, tab, del, backspace, enter, esc
+# f1...f12
+# pageup, pagedown, end, home, insert
+# /, \\
+# pad0...pad9
+# padstar, padslash
+# pause
+# space
+
+def load():
+    clear_assignments()
+    remove_assignments()
+    add_assignments()
+    return
+
+
+def clear_assignments():
+    assignments = (
+        ## h
+        'h.add_key',
+        'h.aliases',
+        'h.audio_panel',
+        'h.auto_key',
+        'h.cache_manager',
+        'h.channeleditor',
+        'h.clear_cop_caches',
+        'h.comp_project_manager',
+        'h.context_help',
+        'h.desktop_mgr',
+        'h.global_animation_options',
+        'h.mat_palette',
+        'h.merge',
+        'h.new',
+        'h.next_key',
+        'h.open',
+        'h.perf_monitor',
+        # 'h.play_bwd',
+        # 'h.play_fwd',
+        # 'h.prev_key',
+        'h.python_shell',
+        # 'h.range_end',
+        # 'h.range_start',
+        'h.textport',
+        ## deskmgr
+        'deskmgr.new',
+        "deskmgr.save",
+        ## h.pane
+        'h.pane.clone',
+        'h.pane.closetab',
+        'h.pane.copytab',
+        'h.pane.edit_bookmark',
+        'h.pane.editpathastext',
+        # 'h.pane.jump_back',
+        # 'h.pane.jump_forth',
+        'h.pane.link_minus',
+        'h.pane.link_plus',
+        'h.pane.nexttab',
+        'h.pane.prevtab',
+        'h.pane.to_cop_view',
+        'h.pane.to_chanedit',
+        'h.pane.to_chop_view',
+        'h.pane.to_geosheet',
+        'h.pane.to_ipr_viewer',
+        'h.pane.to_mat_palette',
+        'h.pane.to_net',
+        'h.pane.to_old_net',
+        'h.pane.to_parm',
+        'h.pane.to_scene_view',
+        'h.pane.to_textport',
+        'h.pane.to_treeview',
+        ## h.pane.bundle
+        'h.pane.bundle.addbundle',
+        'h.pane.bundle.duplicate',
+        ## h.pane.chedit
+        'h.pane.chedit.bsave',
+        'h.pane.chedit.load',
+        'h.pane.chedit.save',
+        'h.pane.chedit.scroll_to_current_frame',
+        'h.pane.chedit.show_groups',
+        'h.pane.chedit.show_layers',
+        'h.pane.chedit.show_parmbox',
+        ## h.pane.group
+        'h.pane.group.addgroup',
+        'h.pane.group.equals',
+        'h.pane.group.minus',
+        'h.pane.group.selectall',
+        'h.pane.group.selectnone',
+        'h.pane.group.togpin',
+        'h.pane.group.togpinall',
+        ## h.pane.gview
+        'h.pane.gview.increase_subd',
+        'h.pane.gview.decrease_subd',
+        'h.pane.gview.delete',
+        'h.pane.gview.dockhudhandles',
+        'h.pane.gview.edit_snap_options',
+        'h.pane.gview.operator_menu_branch',
+        'h.pane.gview.repeat_current',
+        'h.pane.gview.repeat_current_branch',
+        'h.pane.gview.restore_prevcam',
+        'h.pane.gview.selectstylebox',
+        'h.pane.gview.selectstylebrush',
+        'h.pane.gview.selectstylelaser',
+        'h.pane.gview.selectstylelasso',
+        ## h.pane.gview.handle
+        'h.pane.gview.handle.remove_keyframe',
+        'h.pane.gview.handle.set_keyframe',
+        ## h.pane.gview.handle.agentcollisionlayer
+        'h.pane.gview.handle.agentcollisionlayer.boxhandle',
+        'h.pane.gview.handle.agentcollisionlayer.orientationhandle',
+        ## h.pane.gview.handle.agentconfigurejoints
+        'h.pane.gview.handle.agentconfigurejoints.conehandle',
+        'h.pane.gview.handle.agentconfigurejoints.childrotationhandle',
+        ## h.pane.gview.state
+        'h.pane.gview.state.volatile_chmodify',
+        ## h.pane.wsheet
+        'h.pane.wsheet.add_image',
+        'h.pane.wsheet.add_postit',
+        'h.pane.wsheet.addfileop',
+        'h.pane.wsheet.allowdroponwire',
+        'h.pane.wsheet.batch_rename',
+        'h.pane.wsheet.color_palette',
+        'h.pane.wsheet.doautomovenodes',
+        'h.pane.wsheet.home',
+        'h.pane.wsheet.home_selected',
+        'h.pane.wsheet.up',
+        'h.pane.wsheet.down',
+        'h.pane.wsheet.left',
+        'h.pane.wsheet.right',
+        'h.pane.wsheet.edit_images',
+        'h.pane.wsheet.layout',
+        'h.pane.wsheet.layout_all',
+        'h.pane.wsheet.layout_mode',
+        'h.pane.wsheet.maximize',
+        'h.pane.wsheet.maximize_adjust',
+        'h.pane.wsheet.minimize',
+        'h.pane.wsheet.minimize_adjust',
+        'h.pane.wsheet.open_display_options',
+        'h.pane.wsheet.open_treeview',
+        'h.pane.wsheet.node_quick_nav',
+        'h.pane.wsheet.scope_chans',
+        'h.pane.wsheet.select',
+        'h.pane.wsheet.stitch_mode',
+        'h.pane.wsheet.zoom_in',
+        'h.pane.wsheet.zoom_out',
+        ## h.playbar
+        'h.playbar.next_bookmark',
+        'h.playbar.prev_bookmark',
+        'h.playbar.show_range',
+        ## inputfield
+        'inputfield.context_help',
+        'inputfield.editor',
+    )
+
+    for assignment in assignments:
+        context = assignment.rpartition('.')[0]
+        symbol = assignment
+        hou.hotkeys.clearAssignments(context, symbol)
+
+
+def remove_assignments():
+    assignments = (
+        ## h
+        ('h.copy', 'alt+c'),
+        ('h.cut', 'alt+x'),
+        ('h.find', 'alt+f'),
+    )
+
+def add_assignments():
+    assignments = (
+        ## h
+        ('h.stow_shelf', 'ctrl+['),
+        ('h.stow_shelf', 'cmd+['),
+        ## h.pane
+        ('h.pane.shelf', 'ctrl+]'),
+        ('h.pane.shelf', 'cmd+]'),
+        ## h.pane.gview
+        ('h.pane.gview.refplane', 'shift+g'),
+        ## h.pane.parms
+        ('h.pane.parms.edit_expression', 'ctrl+e'),
+        ## h.pane.editparms
+        ('h.pane.editparms.selectall', 'alt+h'),
+        ## h.pane.wsheet
+        ('h.pane.wsheet.bypass_mode', 'b'),
+        ('h.pane.wsheet.drop_on_wire_mode', 'pad8'),
+        ('h.pane.wsheet.doautomovenodes', 'cmd+pad9'),
+        ('h.pane.wsheet.home_selected', 'shift+f'),
+        ('h.pane.wsheet.home_selected', 'g'),
+        ('h.pane.wsheet.jump_mark_1', 'pad1'),
+        ('h.pane.wsheet.jump_mark_2', 'pad2'),
+        ('h.pane.wsheet.jump_mark_3', 'pad3'),
+        ('h.pane.wsheet.jump_mark_4', 'pad4'),
+        ('h.pane.wsheet.jump_mark_5', 'pad5'),
+        ('h.pane.wsheet.up', 'shift+k'),
+        ('h.pane.wsheet.down', 'shift+j'),
+        ('h.pane.wsheet.left', 'shift+h'),
+        ('h.pane.wsheet.right', 'shift+l'),
+        ('h.pane.wsheet.set_mark_1', 'cmd+pad1'),
+        ('h.pane.wsheet.set_mark_2', 'cmd+pad2'),
+        ('h.pane.wsheet.set_mark_3', 'cmd+pad3'),
+        ('h.pane.wsheet.set_mark_4', 'cmd+pad4'),
+        ('h.pane.wsheet.set_mark_5', 'cmd+pad5'),
+        ('h.pane.wsheet.node_quick_nav', 'ctrl+s'),
+        ('h.pane.wsheet.select', 'ctrl+alt+h'),
+        ## h.pane.textport - emacs
+        ('h.pane.textport.up', 'ctrl+p'),
+        ('h.pane.textport.down', 'ctrl+n'),
+        ('h.pane.textport.next', 'ctrl+f'),
+        ('h.pane.textport.prev', 'ctrl+b'),
+        ('h.pane.textport.top', 'ctrl+a'),
+        ('h.pane.textport.bottom', 'ctrl+e'),
+        ('h.pane.textport.nextword', 'cmd+f'),
+        ('h.pane.textport.pageup', 'cmd+v'),
+        ('h.pane.textport.pagedown', 'ctrl+v'),
+        ('h.pane.textport.firstline', 'cmd+shift+,'),
+        ('h.pane.textport.lastline', 'cmd+shift+.'),
+        ('h.pane.textport.jump_to_line', 'alt+g'),
+        ('h.pane.textport.selectup', 'ctrl+shift+p'),
+        ('h.pane.textport.selectdown', 'ctrl+shift+n'),
+        ('h.pane.textport.selectnext', 'ctrl+shift+f'),
+        ('h.pane.textport.selectprev', 'ctrl+shift+b'),
+        ('h.pane.textport.selectbottom', 'ctrl+shift+e'),
+        ('h.pane.textport.selecttop', 'ctrl+shift+a'),
+        ('h.pane.textport.selectnextword', 'cmd+shift+f'),
+        ('h.pane.textport.toggle_comment', 'ctrl+;'),
+        ## inputfield - emacs
+        ('inputfield.up', 'ctrl+p'),
+        ('inputfield.down', 'ctrl+n'),
+        ('inputfield.next', 'ctrl+f'),
+        ('inputfield.prev', 'ctrl+b'),
+        ('inputfield.next_word', 'alt+f'),
+        ('inputfield.prev_word', 'alt+b'),
+        ('inputfield.end', 'ctrl+e'),
+        ('inputfield.home', 'ctrl+a'),
+    )
+
+    # list_mac = ()
+
+    # list_linux = ()
+
+    # if platform.system() == "Darwin":
+        # return
+    # elif platform.system() == "linux":
+        # return
+
+    for assignment in assignments:
+        context = assignment[0].rpartition(".")[0]
+        print(context)
+        symbol = assignment[0]
+        key = assignment[1]
+        hou.hotkeys.addAssignment(context, symbol, key)
+
+
+def bind_commands():
+
+    list = ()
+    for command in list:
+        context = binding[0]
+        command = binding[1]
+        hou.hotkeys.addCommandBinding(context, command)
diff --git a/python3.11libs/hclib/utils/hclayouts.py b/python3.11libs/hclib/utils/hclayouts.py
new file mode 100644
index 0000000..6c63f77
--- /dev/null
+++ b/python3.11libs/hclib/utils/hclayouts.py
@@ -0,0 +1,85 @@
+from ..core.hcglobal import HCGlobal
+
+def setLayoutQuad(self, hcglobal):
+    hcglobal.clearLayout()
+    hcglobal.tabs()[0].setType(hou.paneTabType.PythonShell)
+    hcglobal.panes()[0].splitHorizontally()
+    hcglobal.panes()[0].splitVertically()
+    hcglobal.panes()[1].splitVertically()
+
+def setLayoutRamp(self, hc_global):
+    hcglobal.removeEventLoopCallbacks()
+    hcglobal.clearLayout()
+    hcglobal.panes()[0].splitVertically()
+    hcglobal.paneTabs()[1].setType(hou.paneTabType.Parm)
+    hcglobal.panes()[1].setSplitRatio(0.3)
+    hcglobal.panes()[1].createTab()
+
+def setLayoutTriH(self):
+    hcglobal.removeEventLoopCallbacks()
+    hcglobal.clearLayout()
+    # Make panes
+    hcglobal.tabs()[0].setType(hou.paneTabType.PythonShell)
+    hcglobal.panes()[0].splitHorizontally()
+    hcglobal.panes()[1].splitHorizontally()
+    # Make paneTabs
+    hcglobal.panes()[1].createTab(hou.paneTabType.PythonShell)
+    hcglobal.panes()[1].tabs()[0].setIsCurrentTab()
+    # Set types
+    hcglobal.panes()[0].tabs()[0].setType(hou.paneTabType.SceneViewer)
+    hcglobal.panes()[1].tabs()[0].setType(hou.paneTabType.Parm)
+    hcglobal.panes()[1].tabs()[1].setType(hou.paneTabType.DetailsView)
+    hcglobal.panes()[2].tabs()[0].setType(hou.paneTabType.NetworkEditor)
+    # Ratios
+    hcglobal.panes()[0].setSplitFraction(0.5)
+    hou.session.last_pane = self.pane()
+    hou.ui.addEventLoopCallback(triHCallback)
+
+def triHCallback(hcglobal):
+    panes = hcglobal.panes()
+    pane = hcglobal.pane()
+    if str(pane) != str(hou.session.lastPane):
+        hou.session.last_pane = pane
+        if str(pane) == str(panes[1]):
+            pane.setSplitFraction(0.6)
+        elif str(pane) == str(panes[2]):
+            pane.setSplitFraction(0.3)
+    return True
+
+def setLayoutTriV(hcglobal):
+    # Remove callbacks
+    hcglobal.removeEventLoopCallbacks()
+    # Reset layout
+    hcglobal.clearLayout()
+    # Make panes
+    hcglobal.panes()[0].tabs()[0].setType(hou.paneTabType.PythonShell)
+    hcglobal.panes()[0].splitHorizontally()
+    hcglobal.panes()[1].splitVertically()
+    # Make pane tabs
+    hcglobal.panes()[1].createTab(hou.paneTabType.PythonShell)
+    hcglobal.panes()[1].tabs()[0].setIsCurrentTab()
+    # Set types
+    hcglobal.panes()[0].tabs()[0].setType(hou.paneTabType.SceneViewer)
+    hcglobal.panes()[1].tabs()[0].setType(hou.paneTabType.Parm)
+    hcglobal.panes()[1].tabs()[1].setType(hou.paneTabType.DetailsView)
+    hcglobal.panes()[2].tabs()[0].setType(hou.paneTabType.NetworkEditor)
+    # Set ratios
+    hcglobal.panes()[0].setSplitFraction(0.66)
+    # Ok
+    hou.session.last_pane = self.pane()
+    hou.ui.addEventLoopCallback(self.triVCallback)
+
+def triVCallback(hcglobal):
+    panes = hcglobal.panes()
+    pane = hcglobal.pane()
+    if str(pane) != str(hou.session.last_pane):
+        hou.session.last_pane = pane
+        if str(pane) == str(panes[0]):
+            pane.setSplitFraction(0.7)
+        elif str(pane) == str(panes[1]):
+            panes[0].setSplitFraction(0.4)
+            pane.setSplitFraction(0.33)
+        elif str(pane) == str(panes[2]):
+            panes[0].setSplitFraction(0.4)
+            pane.setSplitFraction(0.66)
+    return True
diff --git a/python3.11libs/hclib/utils/hclistener.py b/python3.11libs/hclib/utils/hclistener.py
new file mode 100644
index 0000000..e9ee27e
--- /dev/null
+++ b/python3.11libs/hclib/utils/hclistener.py
@@ -0,0 +1,107 @@
+import hou
+# from importlib import reload
+from ..core.hcglobal import HCGlobal
+from ..core.hcpane import HCPane
+from ..core.hctab import HCTab
+# from .core.hcviewport import HCViewport
+
+
+class HCListener():
+    def __init__(self):
+        self.report_tab = 1
+        hou.session.tab = None
+        hou.session.pane = None
+        hou.session.hc_global = None
+        hou.session.hc_pane = None
+        hou.session.hc_tab = None
+        hou.session.hc_sceneviewer = None
+        hou.session.hc_networkeditor = None
+        hou.session.project_path = hou.hipFile.path()
+        hou.session.network_path = None
+        hou.session.tab_type = None
+        self.update_objects()
+        return
+
+    def start(self):
+        hou.ui.addEventLoopCallback(self.listener)
+
+    def stop(self):
+        hou.ui.removeEventLoopCallback(self.listener)
+
+    def update_objects(self):
+        hou.session.tab = hou.ui.paneTabUnderCursor()
+        hou.session.pane = hou.ui.paneUnderCursor()
+
+        hou.session.hc_global = HCGlobal()
+        hou.session.hc_pane = HCPane(hou.ui.paneUnderCursor())
+        hou.session.hc_tab = HCTab(hou.session.tab)
+
+        if hou.session.hc_tab != None:
+
+            if hou.session.hc_tab.hasNetworkControls():
+                hou.session.network_path = hou.session.hc_tab.path()
+            hou.session.tab_type = hou.session.hc_tab.type()
+
+            if hou.session.tab.type() == hou.paneTabType.SceneViewer:
+                hou.session.sceneviewer = HCSceneViewer(hou.session.tab)
+            else: hou.session.sceneviewer = None
+
+            if hou.session.tab.type() == hou.paneTabType.NetworkEditor:
+                hou.session.networkeditor = HctlNetworkEditor(hou.session.tab)
+            else: hou.session.networkeditor = None
+
+        # Labels
+        # self.project_path_label.setText("Project path: " + self.projectPath())
+        # if hou.session.tab.hasNetworkControls():
+            # self.network_path_label.setText("Network Path: " + self.networkPath())
+        # else: self.network_path_label.setText("No Network Path")
+        # self.tab_type_label.setText("Tab type: " + str(hou.session.hc_tab.type()))
+
+    def listener(self):
+        tab = hou.ui.paneTabUnderCursor()
+        if tab == None:
+            hou.session.tab = None
+        elif tab != hou.session.tab:
+            print(tab)
+            self.update_objects()
+
+    def lists(self):
+        # Arrays for navigating pane tabs
+        self.tab_types = (
+            hou.paneTabType.ApexEditor,
+            hou.paneTabType.CompositorViewer,
+            hou.paneTabType.DetailsView,
+            hou.paneTabType.NetworkEditor,
+            hou.paneTabType.Parm,
+            hou.paneTabType.PythonPanel,
+            hou.paneTabType.PythonShell,
+            hou.paneTabType.SceneViewer,
+            hou.paneTabType.Textport
+        )
+        self.tab_type_names = (
+            "ApexEditor",
+            "CompositorViewer",
+            "DetailsView",
+            "NetworkEditor",
+            "Parm",
+            "PythonPanel",
+            "PythonShell",
+            "SceneViewer",
+            "Textport"
+        )
+        self.tab_names = [tab.name() for tab in hou.session.hc_global.tabs()]
+
+        # Populate pane tab labels array
+        self.tab_labels = []
+        for tab in self.hc_global.tabs():
+            index = self.tab_types.index(tab.type())
+            label = self.tab_type_names[index]
+            self.tab_labels.append(label)
+
+    def networkPath(self):
+        return str(hou.session.tab.pwd())
+
+    def projectPath(self):
+        return hou.hipFile.name()
+        # ct = self.project_path.count("/")
+        # self.project_path = self.project_path.split("/", ct - 2)[-1]
diff --git a/python3.11libs/hclib/utils/hcmenuutils.py b/python3.11libs/hclib/utils/hcmenuutils.py
new file mode 100644
index 0000000..a8f7701
--- /dev/null
+++ b/python3.11libs/hclib/utils/hcmenuutils.py
@@ -0,0 +1,28 @@
+import hou
+
+
+def vector3Test(kwargs):
+    parms = kwargs['parms']
+    print(parms[0])
+    if len(parms) == 3 \
+    and parms[0].parmTemplate().type() == hou.parmTemplateType.Float \
+    and parms[1].parmTemplate().type() == hou.parmTemplateType.Float \
+    and parms[2].parmTemplate().type() == hou.parmTemplateType.Float:
+        return True
+    else:
+        return False
+
+def setVector3(kwargs, x, y, z):
+    parms = kwargs['parms']
+    name0 = parms[0].name()
+    name1 = parms[1].name()
+    name2 = parms[2].name()
+    node = parms[0].node()
+    node.setParmExpressions({name0: x, name1: y, name2: z})
+
+def vector3XMaster(kwargs):
+    name0 = parms[0].name()
+    name1 = parms[1].name()
+    name2 = parms[2].name()
+    node = parms[0].node()
+    node.setParmExpressions({name1: 'ch("'+name0+'")', name2: 'ch("'+name0+'")'})
diff --git a/python3.11libs/hclib/utils/hcprinter.py b/python3.11libs/hclib/utils/hcprinter.py
new file mode 100644
index 0000000..2a30605
--- /dev/null
+++ b/python3.11libs/hclib/utils/hcprinter.py
@@ -0,0 +1,24 @@
+import hou
+
+
+class Printer():
+    def __init__(self):
+        self.message = ""
+    __init__.interactive = False
+
+    def layout(self):
+        message = "Layout:"
+        desktop = hou.ui.curDesktop()
+        panes = desktop.panes()
+        ct = 0
+        for pane in panes:
+            message += " Pane" + str(ct) + " -"
+            if pane.isSplit():
+                message += " split"
+            else:
+                message += " whole"
+                message += "    "
+            ct += 1
+        message = message[0:-1]
+        hou.ui.setStatusMessage(message)
+    layout.interactive = True
diff --git a/python3.11libs/hclib/utils/hcradialutils.py b/python3.11libs/hclib/utils/hcradialutils.py
new file mode 100644
index 0000000..940dd91
--- /dev/null
+++ b/python3.11libs/hclib/utils/hcradialutils.py
@@ -0,0 +1,183 @@
+import hou
+from hclib import HCGlobal, HCPane, HCSceneViewer, HCTab
+
+"""
+Notes: tab object is retrieved by calling kwargs["pane"]
+"""
+
+def createItem(label="label", pos=0, submenu=False, script='script'):
+    item = hou.ui.createRadialItem(submenu=submenu)
+    item.setLabel(label)
+    item.setScript(script)
+    hou.ui.injectRadialItem(pos, item)
+
+"""
+Viewer menu
+"""
+
+def viewerRadialMain(**kwargs):
+    menu = hou.ui.createRadialMenu('hcviewerradial', "HC Viewer Radial")
+    createItem(
+        pos=0,
+        label="UI",
+        submenu=True, script='from hclib import hcradialutils; hcradialutils.viewerRadialUI()'
+    )
+    createItem(
+        pos=7,
+        label="Display bar",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).toggleDisplayOptionsToolbar()'
+    )
+    createItem(
+        pos=6,
+        label="Operation bar",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).toggleOperationBar()'
+    )
+    createItem(
+        pos=5,
+        label="Selection bar",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).toggleSelectionBar()'
+    )
+    createItem(
+        pos=4,
+        label="Keycam",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).keycam()'
+    )
+    return menu
+
+def viewerRadialLayout(**kwargs):
+    menu = hou.ui.createRadialMenu('hcviewerradial', "HC Viewer Radial")
+    createItem(
+        pos=0,
+        label="DoubleSide",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("DoubleSide")'
+    )
+    createItem(
+        pos=1,
+        label="DoubleStack",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("DoubleStack")'
+    )
+    createItem(
+        pos=2,
+        label="Quad",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("Quad")'
+    )
+    createItem(
+        pos=3,
+        label="QuadBottomSplit",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("QuadBottomSplit")'
+    )
+    createItem(
+        pos=4,
+        label="QuadLeftSplit",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("QuadLeftSplit")'
+    )
+    createItem(
+        pos=5,
+        label="Single",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("Single")'
+    )
+    createItem(
+        pos=6,
+        label="TripleBottomSplit",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("TripleBottomSplit")'
+    )
+    createItem(
+        pos=7,
+        label="TripleLeftSplit",
+        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("TripleLeftSplit")'
+    )
+    return menu
+
+def viewerRadialUI(**kwargs):
+    menu = hou.ui.createRadialMenu('hcviewerradial', "HC Viewer Radial")
+    createItem(
+        pos=0,
+        label="Pane tabs",
+        script='from hclib import HCTab; HCTab(kwargs["pane"]).hcPane().toggleTabs()'
+    )
+    createItem(
+        pos=7,
+        label="Pane path",
+        script='from hclib import HCTab; HCTab(kwargs["pane"]).toggleNetworkControls()'
+    )
+    createItem(
+        pos=6,
+        label="Pane maximize",
+        script='from hclib import HCTab; HCTab(kwargs["pane"]).hcPane().toggleMaximize()'
+    )
+    createItem(
+        pos=5,
+        label="Global tabs",
+        script='from hclib import HCGlobal; HCGlobal().toggleTabs()'
+    )
+    createItem(
+        pos=4,
+        label="Global paths",
+        script='from hclib import HCGlobal; HCGlobal().toggleNetworkControls()'
+    )
+    createItem(
+        pos=3,
+        label="Stowbars",
+        script='from hclib import HCGlobal; HCGlobal().toggleStowbars()'
+    )
+    createItem(
+        pos=2,
+        label="Layout",
+        submenu=True, script='from hclib import hcradialutils; hcradialutils.viewerRadialLayout()'
+    )
+    return menu
+
+
+def editorRadialMain(**kwargs):
+    menu = hou.ui.createRadialMenu('hceditorradial', "HC Editor Radial")
+    createItem(
+        pos=0,
+        label="Menu",
+        script='from hclib import HCNetworkEditor; HCNetworkEditor(kwargs["pane"]).toggleMenu()'
+    )
+    createItem(
+        pos=7,
+        label="Frame all",
+        script='from hclib import HCNetworkEditor; HCNetworkEditor(kwargs["pane"]).frameAll()'
+    )
+    createItem(
+        pos=1,
+        submenu=True,
+        label="UI",
+        script='from hclib import hcradialutils; hcradialutils.editorRadialUI()'
+    )
+    return menu
+
+def editorRadialUI(**kwargs):
+    menu = hou.ui.createRadialMenu('hceditorradial', "HC Editor Radial")
+    createItem(
+        pos=0,
+        label="Pane tabs",
+        script='from hclib import HCTab; HCTab(kwargs["pane"]).hcPane().toggleTabs()'
+    )
+    createItem(
+        pos=1,
+        label="Pane Maximize",
+        script='from hclib import HCTab; HCTab(kwargs["pane"]).hcPane().toggleMaximize()'
+    )
+    createItem(
+        pos=2,
+        label="Pane path",
+        script='from hclib import HCTab; HCTab(kwargs["pane"]).toggleNetworkControls()'
+    )
+    createItem(
+        pos=3,
+        label="Global tabs",
+        script='from hclib import HCGlobal; HCGlobal().toggleTabs()'
+    )
+    createItem(
+        pos=4,
+        label="Global paths",
+        script='from hclib import HCGlobal; HCGlobal().toggleNetworkControls()'
+    )
+    createItem(
+        pos=5,
+        label="Stowbars",
+        script='from hclib import HCGlobal; HCGlobal().toggleStowbars()'
+    )
+    return menu
diff --git a/python3.11libs/hclib/utils/hcutils.py b/python3.11libs/hclib/utils/hcutils.py
new file mode 100644
index 0000000..e69de29
diff --git a/python3.11libs/nodegraphhooks.py b/python3.11libs/nodegraphhooks.py
new file mode 100755
index 0000000..03e62dd
--- /dev/null
+++ b/python3.11libs/nodegraphhooks.py
@@ -0,0 +1,53 @@
+import hou

+from canvaseventtypes import *

+import nodegraphdisplay as display

+from hclib import HCNetworkEditor

+# import nodegraphview as view

+

+

+def createEventHandler(uievent, pending_actions):

+

+    if isinstance(uievent, ContextEvent):

+        # hceditor = HCNetworkEditor(uievent.editor)

+        # hceditor.showPathMessage()

+        # return None, True

+        return None, False

+

+    elif isinstance(uievent, MouseEvent):

+        return None, False

+

+    elif isinstance(uievent, KeyboardEvent) and \

+    uievent.eventtype == 'keyhit':

+        hceditor = HCNetworkEditor(uievent.editor)

+        keymap = {

+            ## Zoom

+            '=': lambda: hceditor.zoom('in'),

+            '-': lambda: hceditor.zoom('out'),

+            ## Move view

+            'K': lambda: hceditor.translateView('up'),

+            'J': lambda: hceditor.translateView('down'),

+            'H': lambda: hceditor.translateView('left'),

+            'L': lambda: hceditor.translateView('right'),

+            ## Move node

+            'Ctrl+K': lambda: hceditor.translateNodes('up'),

+            'Ctrl+J': lambda: hceditor.translateNodes('down'),

+            'Ctrl+H': lambda: hceditor.translateNodes('left'),

+            'Ctrl+L': lambda: hceditor.translateNodes('right'),

+            ## Organize

+            'Ctrl+Shift+A': hceditor.arrangeNodes,

+            'Shift+D': hceditor.placeDot,

+            ## Grid

+            'Shift+G': hceditor.toggleGridMode,

+            ## Update mode

+            'M': hceditor.toggleUpdateMode

+        }

+

+        key = uievent.key

+        if key in keymap:

+            func = keymap[key]()

+            return None, True

+        else:

+            return None, False

+

+    else:

+        return None, False

diff --git a/python3.11libs/uiready.py b/python3.11libs/uiready.py
new file mode 100644
index 0000000..19523c0
--- /dev/null
+++ b/python3.11libs/uiready.py
@@ -0,0 +1,21 @@
+import hou
+from hclib import HCGlobal
+from PySide6.QtCore import Qt
+
+hcglobal = HCGlobal()
+
+hcglobal.reloadHotkeys()
+hcglobal.toggleStowbars()
+
+## Set network grid points to on
+# networkeditors = desktop.getNetworkEditors()
+# for networkeditor in networkeditors:
+    # networkeditor.setPref("gridmode", "1")
+
+
+## Qt
+# if qt_commands:
+#     window = hou.qt.mainWindow()
+#     window.setWindowFlags(Qt.FramelessWindowHint)
+#     window.setFixedWidth(1710)
+#     window.setFixedHeight(1100)
diff --git a/scripts/123.py b/scripts/123.py
new file mode 100644
index 0000000..27894a0
--- /dev/null
+++ b/scripts/123.py
@@ -0,0 +1,29 @@
+# import pathlib
+
+# print("--BEGIN 123.py--")
+
+# enable_recent_menu = 0
+
+# if enable_recent_menu == 1:
+#     path_raw = "~/src/hou-ctl/recent_paths"
+#     path = pathlib.PosixPath(path_raw)
+#     path = path.expanduser()
+
+#     if not path.is_file():
+#         path.touch()
+
+#     choices_raw = path.read_text()
+#     choice_arr = choices_raw.split("\n")
+#     i = hou.ui.selectFromList(
+#         choices=choice_arr,
+#         exclusive=True,
+#         message="Recent Files",
+#         column_header="Path"
+#     )
+
+#     # on accept
+#     if len(i) > 0:
+#         choice = choice_arr[i[0]]
+#         hou.hipFile.load(choice)
+
+# print("--END 123.py--")
diff --git a/scripts/beforescenesave.py b/scripts/beforescenesave.py
new file mode 100644
index 0000000..5b9bf20
--- /dev/null
+++ b/scripts/beforescenesave.py
@@ -0,0 +1,23 @@
+# import os.path
+
+# print("--BEGIN beforescenesave.py--")
+# #####################################
+
+
+# this_path = hou.hipFile.path()
+
+# path = "~/src/hou-ctl/recent_paths"
+# path = os.path.expanduser(path)
+# file = open(path, "r")
+# path_arr = file.read().split("\n")
+
+# if this_path in path_arr:
+#     path_arr.remove(this_path)
+# path_arr.insert(0, this_path)
+
+# file = open(path, "w")
+# file.write("\n".join(path_arr))
+
+
+# ###################################
+# print("--END beforescenesave.py--")
diff --git a/scripts/diffuse.py b/scripts/diffuse.py
new file mode 100755
index 0000000..2997acc
--- /dev/null
+++ b/scripts/diffuse.py
@@ -0,0 +1,38 @@
+import hou
+
+def gainlosslink(kwargs):
+
+    node = kwargs["node"]
+
+    gain = node.parm("gain").eval()
+
+    loss = node.parm("loss")
+
+    loss.set(gain)
+
+def avg(node):
+    
+    valnode = hou.node('./valnode')
+    geo = valnode.geometry()
+    avg = geo.attribValue('avg')
+    
+    thisnode = hou.pwd()
+    thisnode.parm('diffusegoal').set(avg)
+    
+def min(node):
+    
+    valnode = hou.node('./valnode')
+    geo = valnode.geometry()
+    min = geo.attribValue('min')
+    
+    thisnode = hou.pwd()
+    thisnode.parm('diffusegoal').set(min)
+    
+def max(node):
+    
+    valnode = hou.node('./valnode')
+    geo = valnode.geometry()
+    max = geo.attribValue('max')
+    
+    thisnode = hou.pwd()
+    thisnode.parm('diffusegoal').set(max)
\ No newline at end of file
diff --git a/scripts/generate_menu.py b/scripts/generate_menu.py
new file mode 100755
index 0000000..794a75e
--- /dev/null
+++ b/scripts/generate_menu.py
@@ -0,0 +1,18 @@
+node = kwargs['node']
+geometry = node.geometry()
+pts = geometry.pointAttribs()
+dets = geometry.globalAttribs()
+menu = []
+menu.append('pt_attrs')
+menu.append('Point Attributes:')
+for pt in pts:
+	menu.append('pt-' + pt.name())
+	menu.append(pt.name())
+menu.append('_separator_')
+menu.append('_separator_')
+menu.append('det_attrs')
+menu.append('Detail Attributes:')
+for det in dets:
+	menu.append('det-' + det.name())
+	menu.append(det.name())
+return(menu)
\ No newline at end of file
diff --git a/scripts/morpho_combine_module.py b/scripts/morpho_combine_module.py
new file mode 100755
index 0000000..6985d8a
--- /dev/null
+++ b/scripts/morpho_combine_module.py
@@ -0,0 +1,12 @@
+def update_description(kwargs):
+	node = kwargs['node']
+	n_inputs = len(node.inputs())
+	desc = ''
+	for n in range(n_inputs):
+		attr_parm = node.parm('attrs' + str(n))
+		if n != 0:
+			desc += '\n'
+		attr_str = attr_parm.evalAsString()
+		desc += str(n) + ': ' + attr_str
+	desc_parm = node.parm('desc')
+	desc_parm.set(desc)
\ No newline at end of file
diff --git a/scripts/morpho_combine_oninputchanged.py b/scripts/morpho_combine_oninputchanged.py
new file mode 100755
index 0000000..83c7d48
--- /dev/null
+++ b/scripts/morpho_combine_oninputchanged.py
@@ -0,0 +1,39 @@
+node = kwargs['node']
+
+inputs = node.inputs()
+n_inputs = len(inputs)
+
+group = hou.ParmTemplateGroup(())
+group.append(node.parm('iterations').parmTemplate())
+group.append(node.parm('desc').parmTemplate())
+
+for i in range(n_inputs):
+	string_template = hou.StringParmTemplate(
+		name='attrs' + str(i),
+		label='Input ' + str(i) + ' Attributes',
+		num_components=1,
+		default_value=(''),
+		item_generator_script="kwargs['node'].generateInputAttribMenu(" + str(i) + ", hou.attribType.Point)",
+		menu_type=hou.menuType.StringToggle,
+		script_callback='hou.phm().update_description(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python)
+	group.append(string_template)
+
+node.setParmTemplateGroup(group)
+
+iterations_parm = node.parm('iterations')
+iterations_parm.set(n_inputs)
+
+#############
+
+node = kwargs['node']
+n_inputs = len(node.inputs())
+desc = ''
+for n in range(n_inputs):
+	attr_parm = node.parm('attrs' + str(n))
+	if n != 0:
+		desc += '\n'
+	attr_str = attr_parm.evalAsString()
+	desc += str(n) + ': ' + attr_str
+desc_parm = node.parm('desc')
+desc_parm.set(desc)
\ No newline at end of file
diff --git a/scripts/morpho_composite_module.py b/scripts/morpho_composite_module.py
new file mode 100755
index 0000000..33dfa72
--- /dev/null
+++ b/scripts/morpho_composite_module.py
@@ -0,0 +1,70 @@
+def update_description(kwargs):
+	node = kwargs['node']
+	n_ops_parm = node.parm('n_ops')
+	n_ops = n_ops_parm.evalAsInt()
+	desc = ''
+	for n_op in range(n_ops):
+		attr = node.parm('attr' + str(n_op)).evalAsString()
+		op = node.parm('op' + str(n_op)).evalAsString()
+		if op == 'set':
+			desc = attr + ' '
+
+		if op == 'add':
+			desc += '+ ' + attr + ' '
+
+		if op == 'sub':
+			desc += '- ' + attr + ' '
+
+		if op == 'multi':
+			desc += '* ' + attr + ' '
+
+		if op == 'raise':
+			desc += '^ ' + attr + ' '
+
+		if op == 'min':
+			desc = 'min(' + attr + ') '
+
+		if op == 'max':
+			desc = 'max(' + attr + ') '
+			
+		if op == 'avg':
+			desc = 'avg(' + attr + ') '
+
+	result = node.parm('result').evalAsString()
+	desc += '= ' + result
+	desc_parm = node.parm('desc')
+	desc_parm.set(desc)
+
+def op_menu(kwargs):
+	menu = []
+
+	node = kwargs['node']
+	mp_index = kwargs['script_multiparm_index']
+
+	new_type_parm = node.parm("type" + str(mp_index))
+	new_type = new_type_parm.evalAsString()
+
+	op_parm = node.parm("op" + str(mp_index))
+	op = op_parm.evalAsString()
+
+	current_type = "x"
+	if mp_index > 0:
+		current_type_parm = node.parm("type" + str(mp_index - 1))
+		current_type = current_type_parm.evalAsString()
+
+	if mp_index == 0:
+		menu = ["set", "Set"]
+
+	if new_type == "float" and current_type == "float":
+		menu = ["set", "Set", "add", "Add", "sub", "Subtract", "multi", "Multiply", "raise", "Raise", "min", "Min", "max", "Max", "avg", "Average"]
+
+	if new_type == "float" and current_type == "vec":
+		menu = ["set", "Set", "multi", "Multiply", "raise", "Raise"]
+
+	if new_type == "vec" and current_type == "float":
+		menu = ["set", "Set", "multi", "Multiply"]
+
+	if new_type == "vec" and current_type == "vec":
+		menu = ["set", "Set", "add", "Add", "sub", "Subtract", "multi", "Multiply", "min", "Min", "max", "Max", "avg", "Average"]
+
+	return menu
\ No newline at end of file
diff --git a/scripts/morpho_develop_module.py b/scripts/morpho_develop_module.py
new file mode 100755
index 0000000..290cca4
--- /dev/null
+++ b/scripts/morpho_develop_module.py
@@ -0,0 +1,7 @@
+def desc(kwargs):
+	node = kwargs['node']
+	dir_attr = node.parm('dir_attr').evalAsString()
+	multi__attr = node.parm('multi_attr').evalAsString()
+	desc_parm = node.parm('desc')
+	desc = '@P += ' + dir_attr + ' * ' + multi__attr
+	desc_parm.set(desc)
\ No newline at end of file
diff --git a/scripts/morpho_panel_module.py b/scripts/morpho_panel_module.py
new file mode 100755
index 0000000..772c0c5
--- /dev/null
+++ b/scripts/morpho_panel_module.py
@@ -0,0 +1,528 @@
+import hou
+import importlib
+import ramp_color_presets
+import ramp_color_schemes
+
+def add_vis_callback(kwargs):
+	node = kwargs['node']
+	group = node.parmTemplateGroup()
+
+	vis_index = 0
+	for parm in group.entries():
+		if parm.type() == hou.parmTemplateType.Folder:
+			vis_index += 1
+
+	enable_template = hou.ToggleParmTemplate(
+		name='enable_' + str(vis_index),
+		label="Enable",
+		default_value=True,
+		script_callback='hou.phm().enable_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python,
+		join_with_next=True)
+
+	update_folder_name_template = hou.ButtonParmTemplate(
+		name='update_folder_name_' + str(vis_index),
+		label="Update Folder Name",
+		script_callback='hou.phm().update_folder_name_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python)
+
+	attr_template = hou.StringParmTemplate(
+		name='attr_' + str(vis_index),
+		label="Attribute",
+		num_components=1,
+		menu_items=('mag', 'mag2', 'mag3', 'dir', 'dir2', 'dir3'),
+		menu_labels=("mag", "mag2", "mag3", "dir", "dir2", "dir3"),
+		menu_type=hou.menuType.StringReplace,
+		script_callback='hou.phm().attr_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python)
+
+	type_template = hou.MenuParmTemplate(
+		name='type_' + str(vis_index),
+		label="Type",
+		menu_items=('color', 'marker'),
+		menu_labels=("Color", "Marker"),
+		script_callback='hou.phm().type_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python)
+
+	coloring_template = hou.MenuParmTemplate(
+		name='coloring_' + str(vis_index),
+		label="Coloring",
+		menu_items=('fixed', 'vec_val', 'vec_dir', 'attr'),
+		menu_labels=("Fixed Color", "Vector Values", "Vector Directions", "Attribute"),
+		script_callback='hou.phm().coloring_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python)
+	coloring_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + str(vis_index) + ' != marker }')
+
+	coloring_attr_template = hou.StringParmTemplate(
+		name='coloring_attr_' + str(vis_index),
+		label="Coloring Attribute",
+		num_components=1,
+		menu_items=('mag', 'mag2', 'mag3', 'dir', 'dir2', 'dir3'),
+		menu_labels=("mag", "mag2", "mag3", "dir", "dir2", "dir3"),
+		menu_type=hou.menuType.StringReplace,
+		script_callback='hou.phm().coloring_attr_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python)
+	coloring_attr_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + str(vis_index) + ' != marker } { coloring_' + str(vis_index) + ' != attr }')
+
+	sep1_template = hou.SeparatorParmTemplate(
+		name='sep1_' + str(vis_index))
+
+	preset_template = hou.MenuParmTemplate(
+		name='preset_' + str(vis_index),
+		label="Preset",
+		menu_items=(),
+		menu_labels=(),
+		item_generator_script='hou.phm().generate_preset_menu()',
+		script_callback='hou.phm().preset_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python,
+		join_with_next=True)
+	preset_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
+
+	del_preset_template = hou.ButtonParmTemplate(
+		name='del_preset_' + str(vis_index),
+		label="Delete",
+		script_callback='hou.phm().del_preset_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python)
+	del_preset_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
+
+	interpol_template = hou.MenuParmTemplate(
+		name='interpol_' + str(vis_index),
+		label="Interpolation",
+		menu_items=('Constant', 'Linear', 'CatmullRom', 'MonotoneCubic', 'Bezier', 'BSpline', 'Hermite'),
+		menu_labels=("Constant", "Linear", "Catmull-Rom", "Monotone-Cubic", "Bezier", "B-Spline", "Hermite"),
+		default_value=3,
+		script_callback='hou.phm().interpol_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python)
+	interpol_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
+	
+	ramp_template = hou.RampParmTemplate(
+		name='ramp_' + str(vis_index),
+		label=" ",
+		ramp_parm_type=hou.rampParmType.Color,
+		show_controls=False,
+		script_callback='hou.phm().ramp_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python)
+	ramp_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
+	
+	color_template = hou.FloatParmTemplate(
+		name='color_' + str(vis_index),
+		label="Color",
+		num_components=3,
+		naming_scheme=hou.parmNamingScheme.RGBA,
+		look=hou.parmLook.ColorSquare,
+		script_callback='hou.phm().color_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python)
+	color_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + str(vis_index) + ' != marker } { coloring_' + str(vis_index) + ' != fixed }')
+	
+	length_template = hou.FloatParmTemplate(
+		name='length_' + str(vis_index),
+		label="Length",
+		num_components=1,
+		max=1.0,
+		script_callback='hou.phm().length_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python)
+	length_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + str(vis_index) + ' != marker }')
+	
+	sep2_template = hou.SeparatorParmTemplate(
+		name='sep2_' + str(vis_index))
+	
+	del_vis_template = hou.ButtonParmTemplate(
+		name='del_vis_' + str(vis_index),
+		label="Delete Visualizer",
+		script_callback='hou.phm().del_vis_callback(kwargs)',
+		script_callback_language=hou.scriptLanguage.Python,
+		join_with_next=True)
+	
+	folder_template = hou.FolderParmTemplate(
+		name='folder_' + str(vis_index),
+		label="Vis " + str(vis_index),
+		parm_templates=([
+			enable_template,
+			update_folder_name_template,
+			attr_template,
+			type_template,
+			coloring_template,
+			coloring_attr_template,
+			sep1_template,
+			preset_template,
+			del_preset_template,
+			interpol_template,
+			ramp_template,
+			color_template,
+			length_template,
+			sep2_template,
+			del_vis_template]),
+		folder_type=hou.folderType.Tabs)
+
+	group.append(folder_template)
+	node.setParmTemplateGroup(group)
+
+	vis = hou.viewportVisualizers.createVisualizer(
+		hou.viewportVisualizers.type('vis_color'),
+		hou.viewportVisualizerCategory.Node,
+		hou.node('./vis'))
+	update(kwargs)
+
+def enable_callback(kwargs):
+	vis_index = kwargs['parm_name'].removeprefix('enable_')
+	vis = get_vis(vis_index)
+	val = kwargs['parm'].evalAsInt()
+	if val == 1:
+		vis.setIsActive(True)
+	if val == 0:
+		vis.setIsActive(False)
+
+def attr_callback(kwargs):
+	vis_index = kwargs['parm_name'].removeprefix('attr_')
+	vis = get_vis(vis_index)
+	val = kwargs['parm'].evalAsString()
+	vis.setParm('attrib', val)
+
+def type_callback(kwargs):
+	vis_index = kwargs['parm_name'].removeprefix('type_')
+	vis = get_vis(vis_index)
+	val = kwargs['parm'].evalAsInt()
+	if val == 0:
+		vis.setType(hou.viewportVisualizers.types()[1])
+		vis.setParm('colortype', 1)
+		vis.setParm('rangespec', 1)
+		vis.setParm('clamptype', 1)
+	if val == 1:
+		vis.setType(hou.viewportVisualizers.types()[0])
+		vis.setParm('style', 4)
+		kwargs['node'].parm('coloring_' + str(vis_index)).pressButton()
+
+def coloring_callback(kwargs):
+	if kwargs['parm'].isHidden() == False:
+		vis_index = kwargs['parm_name'].removeprefix('coloring_')
+		vis = get_vis(vis_index)
+		val = kwargs['parm'].evalAsInt()
+		vis.setParm('vectorcoloring', val)
+		if val == 0:
+			kwargs['node'].parm('color_' + str(vis_index) + 'r').pressButton()
+		if val != 0:
+			vis.setParm('ramptype', 6)
+			vis.setParm('rangespec', 0)
+		if val == 3:
+			kwargs['node'].parm('coloring_attr_' + str(vis_index)).pressButton()
+
+def preset_callback(kwargs):
+	if kwargs['parm'].isHidden() == False:
+		vis_index = kwargs['parm_name'].removeprefix('preset_')
+		val = kwargs['parm'].evalAsString()
+		ramp_parm = kwargs['node'].parm('ramp_' + str(vis_index))
+		
+		if val == 'new':
+			new_preset(parm, ramp_parm)
+			kwargs['parm'].set(0)
+		if val == '_separator_':
+			return
+		if val != 'new' and val != '_separator_':
+			vis = get_vis(vis_index)
+			ramp_val = getattr(ramp_color_schemes, val)
+			ramp_parm.set(ramp_val)
+			vis.setParm('colorramp', ramp_val)
+
+def del_preset_callback(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+
+	vis_index = kwargs['parm_name'].removeprefix('del_preset_')
+	preset_parm = kwargs['node'].parm('preset_' + str(vis_index))
+	preset_val = preset_parm.evalAsString()
+
+	menu = ramp_color_presets.menu
+	menu.remove(preset_val)
+	menu.remove(preset_val)
+
+	presets_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_color_presets.py', 'w')
+	presets_file.write('menu=' + str(menu))
+	presets_file.close()
+	preset_parm.set(0)
+
+	scheme = getattr(ramp_color_schemes, preset_val)
+	scheme = new_scheme(preset_val, scheme)
+
+	path = 'C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_color_schemes.py'
+
+	schemes_file = open(path, 'r').read()
+	ramp_color_schemes = schemes_file.replace(scheme, '')
+	schemes_file.close()
+
+	schemes_file = open(path, 'w')
+	schemes_file.write(ramp_color_schemes)
+	schemes_file.close()
+
+	importlib.reload(ramp_color_presets)
+	importlib.reload(ramp_color_schemes)
+
+def interpol_callback(kwargs):
+	if kwargs['parm'].isHidden() == False:
+		vis_index = kwargs['parm_name'].removeprefix('interpol_')
+		vis = get_vis(vis_index)
+		val = kwargs['parm'].evalAsString()
+
+		ramp_parm = kwargs['node'].parm('ramp_' + str(vis_index))
+		ramp_val = ramp_parm.evalAsRamp()
+		
+		basis = ramp_val.basis()
+		keys = ramp_val.keys()
+		values = ramp_val.values()
+		
+		new_basis = []
+		for x in basis:
+				new_basis.append(eval('hou.rampBasis.' + val))
+
+		new_ramp = hou.Ramp(new_basis, keys, values)
+		ramp_parm.set(new_ramp)
+		
+		vis.setParm('colorramp', new_ramp)
+
+def ramp_callback(kwargs):
+	if kwargs['parm'].isHidden() == False:
+		vis_index = kwargs['parm_name'].removeprefix('ramp_')
+		vis = get_vis(vis_index)
+		val = kwargs['parm'].evalAsRamp()
+
+		vis.setParm('colorramp', val)
+
+def color_callback(kwargs):
+	vis_index = kwargs['parm_name'].removeprefix('color_')
+	vis_index = str(vis_index).removesuffix('r')
+	vis = get_vis(vis_index)
+
+	if kwargs['node'].parm('color_' + vis_index + 'r').isHidden() == False:
+		colorr = kwargs['node'].parm('color_' + vis_index + 'r').eval()
+		colorg = kwargs['node'].parm('color_' + vis_index + 'g').eval()
+		colorb = kwargs['node'].parm('color_' + vis_index + 'b').eval()
+
+		vis.setParm('markercolorr', colorr)
+		vis.setParm('markercolorg', colorg)
+		vis.setParm('markercolorb', colorb)
+
+def coloring_attr_callback(kwargs):
+	if kwargs['parm'].isHidden() == False:
+		vis_index = kwargs['parm_name'].removeprefix('coloring_attr_')
+		vis = get_vis(vis_index)
+		val = kwargs['node'].parm('coloring_attr_' + str(vis_index)).evalAsString()
+
+		vis.setParm('colorattrib', val)
+
+def length_callback(kwargs):
+	if kwargs['parm'].isHidden() == False:
+		vis_index = kwargs['parm_name'].removeprefix('length_')
+		vis = get_vis(vis_index)
+		val = kwargs['parm'].evalAsFloat()
+		vis.setParm('lengthscale', val)
+
+def del_vis_callback(kwargs):
+	vis_index = kwargs['parm_name'].removeprefix('del_vis_')
+	vis = get_vis(vis_index)
+	vis.destroy()
+
+	group = kwargs['node'].parmTemplateGroup()
+	entries = list(group.entries())
+	entry_index = -1
+	folder_name = 'folder_0'
+	if vis_index != '0':
+		folder_name = 'folder_0_' + str(vis_index)
+	for entry in entries:
+		entry_index += 1
+		if entry.name() == folder_name:
+			entries.pop(entry_index)
+
+	vis_index = -1
+	for entry in entries:
+		if entry.type() == hou.parmTemplateType.Folder:
+			vis_index += 1
+			if vis_index == 0:
+				entry.setName('folder_0')
+			else:
+				entry.setName('folder_0_' + str(vis_index))
+			parm_templates = entry.parmTemplates()
+			index = -1
+			for parm_template in parm_templates:
+				index += 1
+				if parm_template.label() == 'Enable':
+					new_name = 'enable_' + str(vis_index)
+					parm_template.setName(new_name)
+
+				if parm_template.label() == 'Update Folder Name':
+					parm_template.setName('update_folder_name_' + str(vis_index))
+					
+				if parm_template.label() == 'Attribute':
+					parm_template.setName('attr_' + str(vis_index))
+				
+				if parm_template.label() == 'Type':
+					parm_template.setName('type_' + str(vis_index))
+				
+				if parm_template.label() == 'Coloring':
+					parm_template.setName('coloring_' + str(vis_index))
+					parm_template.setConditional(
+						hou.parmCondType.HideWhen,
+						'{ type_' + str(vis_index) + ' != marker }')
+				
+				if parm_template.label() == 'Coloring Attribute':
+					parm_template.setName('coloring_attr_' + str(vis_index))
+					parm_template.setConditional(
+						hou.parmCondType.HideWhen,
+						'{ type_' + str(vis_index) + ' != marker } { coloring_' + str(vis_index) + ' != attr }')
+				
+				if parm_template.name().find('sep1') >= 0:
+					parm_template.setName('sep1_' + str(vis_index))
+				
+				if parm_template.label() == 'Preset':
+					parm_template.setName('preset_' + str(vis_index))
+					parm_template.setConditional(
+						hou.parmCondType.HideWhen,
+						'{ type_' + str('vis_index') + ' == marker coloring_' + str(vis_index) + ' == fixed }')
+				
+				if parm_template.label() == 'Delete':
+					parm_template.setName('del_preset_' + str(vis_index))
+					parm_template.setConditional(
+						hou.parmCondType.HideWhen,
+						'{ type_' + str('vis_index') + ' == marker coloring_' + str(vis_index) + ' == fixed }')
+				
+				if parm_template.label() == 'Interpolation':
+					parm_template.setName('interpol_' + str(vis_index))
+					parm_template.setConditional(
+						hou.parmCondType.HideWhen,
+						'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
+				
+				if parm_template.type() == hou.parmTemplateType.Ramp:
+					parm_template.setName('ramp_' + str(vis_index))
+					parm_template.setConditional(
+						hou.parmCondType.HideWhen,
+						'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
+
+				if parm_template.label() == 'Color':
+					parm_template.setName('color_' + str(vis_index))
+					parm_template.setConditional(
+						hou.parmCondType.HideWhen,
+						'{ type_' + str(vis_index) + ' != marker } { coloring_' + str(vis_index) + ' != fixed }')
+				
+				if parm_template.label() == 'Length':
+					parm_template.setName('length_' + str(vis_index))
+					parm_template.setConditional(
+						hou.parmCondType.HideWhen,
+						'{ type_' + str(vis_index) + ' != marker }')
+				
+				if parm_template.name().find('sep2') >= 0:
+					parm_template.setName('sep2_' + str(vis_index))
+
+				if parm_template.label() == 'Delete Visualizer':
+					parm_template.setName('del_vis_' + str(vis_index))
+
+			entry.setParmTemplates(parm_templates)
+
+	# print(entries)
+
+	kwargs['node'].setParmTemplateGroup(hou.ParmTemplateGroup(entries))
+	
+	update(kwargs)
+
+def update(kwargs):	
+	visualizers = hou.viewportVisualizers.visualizers(hou.viewportVisualizerCategory.Node, hou.node('./vis'))
+	vis_index = 0
+	for visualizer in visualizers:
+		vis_index = str(vis_index)
+		kwargs['node'].parm('enable_' + vis_index).pressButton()
+		kwargs['node'].parm('type_' + vis_index).pressButton()
+		kwargs['node'].parm('attr_' + vis_index).pressButton()
+		kwargs['node'].parm('preset_' + vis_index).pressButton()
+		kwargs['node'].parm('coloring_' + vis_index).pressButton()
+		kwargs['node'].parm('coloring_attr_' + vis_index).pressButton()
+		kwargs['node'].parm('ramp_' + vis_index).pressButton()
+		kwargs['node'].parm('color_' + vis_index + 'r').pressButton()
+		kwargs['node'].parm('length_' + vis_index).pressButton()
+		vis_index = int(vis_index)
+		vis_index += 1
+
+def update_folder_name_callback(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+	vis_index = kwargs['parm_name'].removeprefix('update_folder_name_')
+	attr_parm = node.parm('attr_' + str(vis_index))
+	attr_val = attr_parm.evalAsString()
+
+	group = node.parmTemplateGroup()
+	
+	entries = group.entries()
+	
+	folder_template = entries[int(vis_index) + 2]
+	new_folder_template = folder_template.clone()
+
+	if attr_val == "":
+		new_folder_template.setLabel("Vis " + vis_index)
+
+	else:
+		new_folder_template.setLabel(attr_val)
+
+	group.replace(folder_template, new_folder_template)
+
+	node.setParmTemplateGroup(group)
+
+def get_vis(vis_index):
+	vistup = hou.viewportVisualizers.visualizers(
+		hou.viewportVisualizerCategory.Node,
+		hou.node('./vis'))
+	vis = vistup[int(vis_index)]
+	return(vis)
+
+def generate_preset_menu():
+	importlib.reload(ramp_color_presets)
+	menu = ramp_color_presets.menu
+	return(menu)
+
+def new_preset(preset_parm, ramp_parm):
+	new_name = hou.ui.readInput("New Preset", buttons = ("Add", "Cancel"))
+	if new_name[0] == 0:
+		menu = ramp_color_presets.menu
+		menu.insert(0, new_name[1])
+		menu.insert(0, new_name[1])
+
+		ramp_val = ramp_parm.evalAsRamp()
+		new_scheme = new_scheme(new_name[1], ramp_val)
+		
+		menu_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_color_presets.py', 'w')
+		menu_file.write('menu=' + str(menu))
+		menu_file.close()
+
+		scheme_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_color_schemes.py', 'a')
+		scheme_file.write(new_scheme)
+		scheme_file.close()
+
+		importlib.reload(ramp_color_presets)
+		importlib.reload(ramp_color_schemes)
+		preset_parm.set(0)
+
+def new_scheme(preset_val, ramp_val):
+	basis = ramp_val.basis()
+	basis = tuple('hou.' + str(x) for x in basis)
+	basis = str(basis).replace("'", "")
+
+	keys = ramp_val.keys()
+	keys = tuple(round(x, 4) for x in keys)
+
+	values = ramp_val.values()
+	values = tuple(tuple(round(x2, 4) for x2 in x) for x in values)
+
+	scheme = '\n' + preset_val + '=' + 'hou.Ramp(' + str(basis) + ',' + str(keys) + ',' + str(values) + ')\n'
+
+	return(scheme)
\ No newline at end of file
diff --git a/scripts/morpho_ramp_module.py b/scripts/morpho_ramp_module.py
new file mode 100755
index 0000000..627524c
--- /dev/null
+++ b/scripts/morpho_ramp_module.py
@@ -0,0 +1,113 @@
+import hou
+import importlib
+import ramp_float_presets
+import ramp_color_presets
+import ramp_float_schemes
+import ramp_color_schemes
+
+def preset_float_callback(kwargs):
+	importlib.reload(ramp_float_schemes)
+	node = kwargs['node']
+	preset_parm = kwargs['parm']
+	preset_val = preset_parm.evalAsString()
+	ramp_parm = node.parm('ramp_float')
+
+	importlib.reload(ramp_float_presets)
+	if preset_val == 'new':
+		new_name = hou.ui.readInput("New Preset", buttons=("Add", "Cancel"))
+
+		if new_name[0] == 0:
+			presets = ramp_float_presets.presets
+			presets.insert(0, new_name[1])
+			presets.insert(0, new_name[1])
+			presets_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_float_presets.py', 'w')
+			presets_file.write('presets=' + str(presets))
+			presets_file.close()
+
+			ramp_basis = ramp_parm.eval().basis()
+			ramp_keys = ramp_parm.eval().keys()
+			ramp_values = ramp_parm.eval().values()
+			new_scheme = (ramp_basis, ramp_keys, ramp_values)
+			schemes_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_float_schemes.py', 'a')
+			schemes_file.write('\n' + new_name[1] + '=Ramp' + str(new_scheme))
+			schemes_file.close()
+
+			importlib.reload(ramp_float_presets)
+			importlib.reload(ramp_float_schemes)
+			preset_parm.set(0)
+
+	else:
+		new_ramp_val = getattr(ramp_float_schemes, preset_val)
+		ramp_parm.set(new_ramp_val)
+
+def del_preset_float_callback(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+
+	preset_parm = node.parm('preset_float')
+	preset_val = preset_parm.evalAsString()
+	presets = ramp_float_presets.presets
+	presets.remove(preset_val)
+	presets.remove(preset_val)
+	presets_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_float_presets.py', 'w')
+	presets_file.write('presets=' + str(presets))
+	presets_file.close()
+	preset_parm.set(0)
+
+	scheme = getattr(ramp_float_schemes, preset_val)
+	basis = scheme.basis()
+	keys = scheme.keys()
+	values = scheme.values()
+	scheme = preset_val + '=Ramp' + str((basis, keys, values))
+	# print(scheme)
+
+	schemes_file_path = 'C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_float_schemes.py'
+
+	schemes_file = open(schemes_file_path, 'r')
+	schemes_str = schemes_file.read()
+	schemes_file.close()
+	schemes = schemes_str.replace(scheme, '')
+
+	schemes_file = open(schemes_file_path, 'w')
+	schemes_file.write(schemes)
+	schemes_file.close()
+
+	importlib.reload(ramp_float_presets)
+	importlib.reload(ramp_float_schemes)
+
+def interpolation_float_callback(kwargs):
+	node = kwargs['node']
+	interpolation_parm = kwargs['parm']
+	interpolation_val = interpolation_parm.evalAsString()
+	ramp_parm = node.parm('ramp_float')
+	ramp_basis = ramp_parm.eval().basis()
+	new_basis = []
+	for basis in ramp_basis:
+		new_basis.append(eval('hou.rampBasis.' + interpolation_val))
+	ramp_keys = ramp_parm.eval().keys()
+	ramp_values = ramp_parm.eval().values()
+	new_ramp_val = hou.Ramp(new_basis, ramp_keys, ramp_values)
+	ramp_parm.set(hou.Ramp(new_basis, ramp_keys, ramp_values))
+
+def attr_menu_callback(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+	val_str = parm.evalAsString()
+	val_int = parm.evalAsInt()
+	attr_parm = node.parm('attr')
+	attr_parm.set(val_str)
+
+	index = node.parm('index').evalAsInt()
+	data_parm = node.parm('data')
+	if val_int < index:
+		data_parm.set(0)
+	else:
+		data_parm.set(1)
+
+def attr_callback(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+	
+	parm_int = parm.evalAsInt()
+	print(parm_int)
+	index = node.parm('index').evalAsInt()
\ No newline at end of file
diff --git a/scripts/source_created.py b/scripts/source_created.py
new file mode 100755
index 0000000..086499d
--- /dev/null
+++ b/scripts/source_created.py
@@ -0,0 +1,8 @@
+import hou
+
+network = hou.node(".")
+node = kwargs['node']
+
+solver = network.createNode("morphosolver")
+
+solver.setInput(0, node, 0)
\ No newline at end of file
diff --git a/scripts/source_module.py b/scripts/source_module.py
new file mode 100755
index 0000000..cfff4dc
--- /dev/null
+++ b/scripts/source_module.py
@@ -0,0 +1,564 @@
+import hou
+import importlib
+import stain_menu
+import stain_schemes
+
+def addvis(kwargs):
+	node = kwargs['node']
+	group = node.parmTemplateGroup()
+	top_folder = group.findFolder("Visualizers")
+
+	vis_id = 0
+	bottom_folders = top_folder.parmTemplates()
+	for bottom_folder in bottom_folders:
+		vis_id += 1
+
+	vis_id = str(vis_id)
+
+	enable_template = hou.ToggleParmTemplate(
+		'enable_' + vis_id,
+		label = "Enable Visualizer",
+		default_value = True,
+		script_callback = 'hou.phm().enable(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python)
+
+	attr_template = hou.StringParmTemplate(
+		name = 'attr_' + vis_id,
+		label = "Attribute",
+		num_components = 1,
+		menu_items = ('mag', 'mag2', 'mag3', 'dir', 'dir2', 'dir3'),
+		menu_labels = ("mag", "mag2", "mag3", "dir", "dir2", "dir3"),
+		menu_type = hou.menuType.StringReplace,
+		script_callback = 'hou.phm().attr(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python)
+
+	type_template = hou.MenuParmTemplate(
+		name = 'type_' + vis_id,
+		label = "Type",
+		menu_items = ('color', 'marker'),
+		menu_labels = ("Color", "Marker"),
+		script_callback = 'hou.phm().type(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python)
+
+	coloring_template = hou.MenuParmTemplate(
+		name = 'coloring_' + vis_id,
+		label = "Coloring",
+		menu_items = ('fixed', 'val', 'dir', 'other'),
+		menu_labels = ("Fixed Color", "Vector Values", "Vector Directions", "Other Attribute"),
+		script_callback = 'hou.phm().coloring(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python)
+
+	coloring_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + vis_id + ' != marker }')
+
+	otherattr_template = hou.StringParmTemplate(
+		name = 'otherattr_' + vis_id,
+		label = "Other Attribute",
+		num_components = 1,
+		menu_items = ('mag', 'mag2', 'mag3', 'dir', 'dir2', 'dir3'),
+		menu_labels = ("mag", "mag2", "mag3", "dir", "dir2", "dir3"),
+		menu_type = hou.menuType.StringReplace,
+		script_callback = 'hou.phm().otherattr(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python)
+
+	otherattr_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + vis_id + ' != marker } { coloring_' + vis_id + ' != other }')
+
+	sep1_template = hou.SeparatorParmTemplate(
+		name = 'sep1_' + vis_id)
+
+	preset_template = hou.MenuParmTemplate(
+		name = 'preset_' + vis_id,
+		label = "Preset",
+		menu_items = (),
+		menu_labels = (),
+		item_generator_script = 'hou.phm().presetmenu()',
+		script_callback = 'hou.phm().preset(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python,
+		join_with_next = True)
+
+	preset_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
+
+	delpreset_template = hou.ButtonParmTemplate(
+		name = 'delpreset_' + vis_id,
+		label = "Delete Preset",
+		script_callback = 'hou.phm().delpreset(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python)
+
+	delpreset_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
+
+	interpol_template = hou.MenuParmTemplate(
+		name = 'interpol_' + vis_id,
+		label = "Interpolation",
+		menu_items = ('Constant', 'Linear', 'CatmullRom', 'MonotoneCubic', 'Bezier', 'BSpline', 'Hermite'),
+		menu_labels = ("Constant", "Linear", "Catmull-Rom", "Monotone-Cubic", "Bezier", "B-Spline", "Hermite"),
+		default_value = 3,
+		script_callback = 'hou.phm().interpol(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python)
+
+	interpol_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
+
+	ramp_template = hou.RampParmTemplate(
+		name = 'ramp_' + vis_id,
+		label = "Color Ramp",
+		ramp_parm_type = hou.rampParmType.Color,
+		show_controls = False,
+		script_callback = 'hou.phm().ramp(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python)
+
+	ramp_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
+
+	color_template = hou.FloatParmTemplate(
+		name = 'color_' + vis_id,
+		label = "Color",
+		num_components = 3,
+		naming_scheme = hou.parmNamingScheme.RGBA,
+		look = hou.parmLook.ColorSquare,
+		script_callback = 'hou.phm().color(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python)
+
+	color_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + vis_id + ' != marker } { coloring_' + vis_id + ' != fixed }')
+
+	length_template = hou.FloatParmTemplate(
+		name = 'length_' + vis_id,
+		label = "Length Scale",
+		num_components = 1,
+		max = 1.0,
+		script_callback = 'hou.phm().length(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python)
+
+	length_template.setConditional(
+		hou.parmCondType.HideWhen,
+		'{ type_' + vis_id + ' != marker }')
+
+	sep2_template = hou.SeparatorParmTemplate(
+		name = 'sep2_' + vis_id)
+
+	delvis_template = hou.ButtonParmTemplate(
+		name = 'delvis_' + vis_id,
+		label = "Delete Visualizer",
+		script_callback = 'hou.phm().delvis(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python,
+		join_with_next = True)
+
+	foldername_template = hou.ButtonParmTemplate(
+		name = 'foldername_' + vis_id,
+		label = "Update Folder Name",
+		script_callback = 'hou.phm().foldername(kwargs)',
+		script_callback_language = hou.scriptLanguage.Python)
+
+	folder_template = hou.FolderParmTemplate(
+		name = 'folder_' + vis_id,
+		label = "Vis " + vis_id,
+		parm_templates = ([
+			enable_template,
+			attr_template,
+			type_template,
+			coloring_template,
+			otherattr_template,
+			sep1_template,
+			preset_template,
+			delpreset_template,
+			interpol_template,
+			ramp_template,
+			color_template,
+			length_template,
+			sep2_template,
+			delvis_template,
+			foldername_template]),
+		folder_type = hou.folderType.Tabs)
+
+	group.appendToFolder(top_folder, folder_template)
+	node.setParmTemplateGroup(group)
+
+	##
+
+	vis = hou.viewportVisualizers.createVisualizer(
+		hou.viewportVisualizers.type('vis_color'),
+		hou.viewportVisualizerCategory.Node,
+		hou.node('./vis'))
+
+	update(kwargs)
+
+def enable(kwargs):
+	parm = kwargs['parm']
+	vis_id = parm.containingFolderIndices()[1]
+	vis = getvis(vis_id)
+	val = parm.evalAsInt()
+	if val == 1:
+		vis.setIsActive(True)
+	if val == 0:
+		vis.setIsActive(False)
+
+def attr(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+	vis_id = parm.containingFolderIndices()[1]
+	val = parm.evalAsString()
+	vis = getvis(vis_id)
+	vis.setParm('attrib', val)
+
+def type(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+	val = parm.evalAsInt()
+	vis_id = parm.containingFolderIndices()[1]
+
+	vistypes = hou.viewportVisualizers.types()
+	vis = getvis(vis_id)
+	if val == 0:
+		vis.setType(vistypes[1])
+		vis.setParm('colortype', 1)
+		vis.setParm('rangespec', 1)
+		vis.setParm('clamptype', 1)
+	if val == 1:
+		vis.setType(vistypes[0])
+		vis.setParm('style', 4)
+		node.parm('coloring_' + str(vis_id)).pressButton()
+
+def coloring(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+
+	if parm.isHidden() == False:
+		vis_id = parm.containingFolderIndices()[1]
+		val = parm.evalAsInt()
+		vis = getvis(vis_id)
+		vis.setParm('vectorcoloring', val)
+		if val == 0:
+			node.parm('color_' + str(vis_id) + 'r').pressButton()
+		if val != 0:
+			vis.setParm('ramptype', 6)
+			vis.setParm('rangespec', 0)
+		if val == 3:
+			node.parm('otherattr_' + str(vis_id)).pressButton()
+
+def preset(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+
+	if parm.isHidden() == False:
+		val = parm.evalAsString()
+		vis_id = parm.containingFolderIndices()[1]
+		ramp_parm = node.parm('ramp_' + str(vis_id))
+		
+		if val == 'New...':
+			newpreset(parm, ramp_parm)
+			parm.set(0)
+		if val == '_separator_':
+			return
+		if val != 'New...' and val != '_separator_':
+			vis = getvis(vis_id)
+			ramp_val = getattr(stain_schemes, val)
+			ramp_parm.set(ramp_val)
+			vis.setParm('colorramp', ramp_val)
+
+def delpreset(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+
+	vis_id = parm.containingFolderIndices()[1]
+	preset_parm = node.parm('preset_' + str(vis_id))
+	preset_val = preset_parm.evalAsString()
+
+	menu = stain_menu.menu
+	menu.remove(preset_val)
+	menu.remove(preset_val)
+
+	file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/stain_menu.py', 'w')
+	file.write('menu=' + str(menu))
+	file.close()
+	preset_parm.set(0)
+
+	current_scheme = getattr(stain_schemes, preset_val)
+	current_scheme = create_scheme(preset_val, current_scheme)
+
+	path = 'C:/Users/lucas/OneDrive/Git/morphogen/scripts/stain_schemes.py'
+
+	file = open(path, 'r').read()
+	stain_schemes = file.replace(current_scheme, '')
+	file.close()
+
+	file = open(path, 'w')
+	file.write(stain_schemes)
+	write.close()
+
+	importlib.reload(stain_menu)
+	importlib.reload(stain_schemes)
+
+def interpol(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+
+	if parm.isHidden() == False:
+		vis_id = parm.containingFolderIndices()[1]
+		val = parm.evalAsString()
+
+		ramp_parm = node.parm('ramp_' + str(vis_id))
+		ramp_val = ramp_parm.evalAsRamp()
+		
+		basis = ramp_val.basis()
+		keys = ramp_val.keys()
+		values = ramp_val.values()
+		
+		new_basis = []
+		for x in basis:
+				new_basis.append(eval('hou.rampBasis.' + val))
+
+		new_ramp = hou.Ramp(new_basis, keys, values)
+		ramp_parm.set(new_ramp)
+		
+		vis = getvis(vis_id)
+		vis.setParm('colorramp', new_ramp)
+
+def ramp(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+
+	if parm.isHidden() == False:
+		val = parm.evalAsRamp()
+		vis_id = parm.containingFolderIndices()[1]
+
+		vis = getvis(vis_id)
+		vis.setParm('colorramp', val)
+
+def color(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+
+	if parm.isHidden() == False:
+		vis_id = parm.containingFolderIndices()[1]
+		vis = getvis(vis_id)
+		vis_id = str(vis_id)
+		
+		colorr = node.parm('color_' + vis_id + 'r').eval()
+		colorg = node.parm('color_' + vis_id + 'g').eval()
+		colorb = node.parm('color_' + vis_id + 'b').eval()
+
+		vis.setParm('markercolorr', colorr)
+		vis.setParm('markercolorg', colorg)
+		vis.setParm('markercolorb', colorb)
+
+def otherattr(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+
+	if parm.isHidden() == False:
+		vis_id = parm.containingFolderIndices()[1]
+		vis = getvis(vis_id)
+		val = node.parm('otherattr_' + str(vis_id)).evalAsString()
+		vis.setParm('colorattrib', val)
+
+def length(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+
+	if parm.isHidden() == False:
+		vis_id = parm.containingFolderIndices()[1]
+		val = parm.evalAsFloat()
+		vis = getvis(vis_id)
+		vis.setParm('lengthscale', val)
+
+def delvis(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+	vis_id = parm.containingFolderIndices()[1]
+	vis = getvis(vis_id)
+	vis.destroy()
+
+	group = node.parmTemplateGroup()
+	top_folder = group.findFolder("Visualizers")
+	bottom_folders = list(top_folder.parmTemplates())
+	bottom_folders.pop(vis_id)
+	top_folder.setParmTemplates(bottom_folders)
+	group.replace((4,), top_folder)
+	node.setParmTemplateGroup(group)
+
+	vis_id = 0
+	for bottom_folder in bottom_folders:
+		rename(kwargs, vis_id, 'enable')
+		rename(kwargs, vis_id, 'attr')
+		rename(kwargs, vis_id, 'type')
+		rename(kwargs, vis_id, 'coloring')
+		rename(kwargs, vis_id, 'otherattr')
+		rename(kwargs, vis_id, 'sep1')
+		rename(kwargs, vis_id, 'preset')
+		rename(kwargs, vis_id, 'delpreset')
+		rename(kwargs, vis_id, 'interpol')
+		rename(kwargs, vis_id, 'ramp')
+		rename(kwargs, vis_id, 'color')
+		rename(kwargs, vis_id, 'length')
+		rename(kwargs, vis_id, 'sep2')
+		rename(kwargs, vis_id, 'delvis')
+		rename(kwargs, vis_id, 'foldername')
+		vis_id += 1
+
+	update(kwargs)
+
+def rename(kwargs, vis_id, parmname):
+	node = kwargs['node']
+	vis_id = int(vis_id)
+
+	group = node.parmTemplateGroup()
+	top_folder = group.findFolder("Visualizers")
+	bottom_folders = top_folder.parmTemplates()
+	bottom_folder = bottom_folders[vis_id] 
+	bottom_contents = bottom_folder.parmTemplates()
+
+	for template in bottom_contents:
+		split = template.name().split('_')[0]
+		vis_id = str(vis_id)
+
+		if split == parmname:
+			template.setName(parmname + '_' + vis_id)
+
+			if parmname == 'coloring':
+				template.setConditional(
+				hou.parmCondType.HideWhen,
+				'{ type_' + vis_id + ' != marker }')
+
+			if parmname == 'otherattr':
+				template.setConditional(
+				hou.parmCondType.HideWhen,
+				'{ type_' + vis_id + ' != marker } { coloring_' + vis_id + ' != other }')
+
+			if parmname == 'preset':
+				template.setConditional(
+				hou.parmCondType.HideWhen,
+				'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
+
+			if parmname == 'delpreset':
+				template.setConditional(
+				hou.parmCondType.HideWhen,
+				'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
+
+			if parmname == 'interpol':
+				template.setConditional(
+				hou.parmCondType.HideWhen,
+				'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
+
+			if parmname == 'ramp':
+				template.setConditional(
+				hou.parmCondType.HideWhen,
+				'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
+
+			if parmname == 'color':
+				template.setConditional(
+				hou.parmCondType.HideWhen,
+				'{ type_' + vis_id + ' != marker } { coloring_' + vis_id + ' != fixed }')
+
+			if parmname == 'length':
+				template.setConditional(
+				hou.parmCondType.HideWhen,
+				'{ type_' + vis_id + ' != marker }')
+
+	bottom_folder.setParmTemplates(bottom_contents)
+	bottom_folders = list(bottom_folders)
+	bottom_folders[int(vis_id)] = bottom_folder
+	top_folder.setParmTemplates(bottom_folders)
+	group.replace((4,), top_folder)
+	node.setParmTemplateGroup(group)
+
+def update(kwargs):
+	node = kwargs['node']
+	group = node.parmTemplateGroup()
+	top_folder = group.findFolder("Visualizers")
+	bottom_folders = list(top_folder.parmTemplates())
+	
+	vis_id = 0
+	for bottom_folder in bottom_folders:
+		vis_id = str(vis_id)
+		node.parm('enable_' + vis_id).pressButton()
+		node.parm('type_' + vis_id).pressButton()
+		node.parm('attr_' + vis_id).pressButton()
+		node.parm('preset_' + vis_id).pressButton()
+		node.parm('coloring_' + vis_id).pressButton()
+		node.parm('otherattr_' + vis_id).pressButton()
+		node.parm('ramp_' + vis_id).pressButton()
+		node.parm('color_' + vis_id + 'r').pressButton()
+		node.parm('length_' + vis_id).pressButton()
+		vis_id = int(vis_id)
+		vis_id += 1
+
+def foldername(kwargs):
+	node = kwargs['node']
+	parm = kwargs['parm']
+	vis_id = parm.containingFolderIndices()[1]
+
+	attr_parm = node.parm('attr_' + str(vis_id))
+	attr_val = attr_parm.evalAsString()
+	group = node.parmTemplateGroup()
+	top_folder = group.findFolder("Visualizers")
+	bottom_folders = top_folder.parmTemplates()
+	bottom_folders = list(bottom_folders)
+	bottom_folder = bottom_folders[vis_id]
+	if attr_val == '':
+		bottom_folder.setLabel('vis' + str(vis_id))
+	if attr_val != '':
+		bottom_folder.setLabel(attr_val)
+	bottom_folders[vis_id] = bottom_folder
+	top_folder.setParmTemplates(bottom_folders)
+	group.replace((4,), top_folder)
+	node.setParmTemplateGroup(group)
+
+def getvis(vis_id):
+	vistup = hou.viewportVisualizers.visualizers(
+		hou.viewportVisualizerCategory.Node,
+		hou.node('./vis'))
+	vis = vistup[int(vis_id)]
+	return(vis)
+
+def presetmenu():
+	importlib.reload(stain_menu)
+	menu = stain_menu.menu
+	return(menu)
+
+def newpreset(preset_parm, ramp_parm):
+	new_name = hou.ui.readInput("New Preset", buttons = ("Add", "Cancel"))
+
+	if new_name[0] == 0:
+		menu = stain_menu.menu
+		menu.insert(0, new_name[1])
+		menu.insert(0, new_name[1])
+
+		ramp_val = ramp_parm.evalAsRamp()
+		new_scheme = create_scheme(new_name[1], ramp_val)
+		
+		menu_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/stain_menu.py', 'w')
+		menu_file.write('menu=' + str(menu))
+		menu_file.close()
+
+		scheme_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/stain_schemes.py', 'a')
+		scheme_file.write(new_scheme)
+		scheme_file.close()
+
+		importlib.reload(stain_menu)
+		importlib.reload(stain_schemes)
+		preset_parm.set(0)
+
+def newscheme(preset_val, ramp_val):
+	basis = ramp_val.basis()
+	basis = tuple('hou.' + str(x) for x in basis)
+	basis = str(basis).replace("'", "")
+
+	keys = ramp_val.keys()
+	keys = tuple(round(x, 4) for x in keys)
+
+	values = ramp_val.values()
+	values = tuple(tuple(round(x2, 4) for x2 in x) for x in values)
+
+	scheme = '\n' + preset_val + '=' + 'hou.Ramp(' + str(basis) + ',' + str(keys) + ',' + str(values) + ')\n'
+
+	return(scheme)
\ No newline at end of file
diff --git a/systems_knowledge.txt b/systems_knowledge.txt
new file mode 100755
index 0000000..6ee9519
--- /dev/null
+++ b/systems_knowledge.txt
@@ -0,0 +1,18 @@
+    A common circumstance I encounter is processing feedback in indeterminate systems. In a dynamic simulation, variables inform the procession of model states as the variables themselves develop. Say, for example, that I want the volume of an expanding solid to have an inverse correlation with its growth rate. In other words, as the solid grows, its growth rate slows.
+	
+    Essentially, variables are informing other variables. In some systems, resources are fluid and theoretically infinite, like a pipe or arterial vessel. During its normal function, it is a passageway for matter. However, if there is buildup within the passage, the function of the greater system which it is a part of will be altered.
+
+    Macro-organs, like blood vessels, seem to have simplistic duties compared to their micro-counterparts. On a small scale, chemical reactions constantly rend micro-organs and rebuild them, in a way that would be disturbing to witness happening to organs on a macro-scale. Yet the behavior of organs on the macro scale is a direct result of this unseen behavior driven by chemical reactions and transformation of energy.
+
+	At the establishment of a fluid-transportation system, it has two aspects: the purpose of the system and its own health. Its health has to do with its ability to operate in a way that is understood to be the \'93good\'94 or \'93normal\'94 way for it to operate. Interestingly, in microbiology, it is not really possible to determine the purpose of any bio-strategy outside of the context of the maintenance of the complex and repetitive reactions which is called \'93living\'94. Any divination of purpose aside from this is speculative.\
+	Any system is borne of circumstances which yield its existence. Somehow, entiti-hood is a discernible quality of systems and items. In a way, it is the only quality of them, though it is constructed of unique parts for every instance of every thing. I do not believe it is worthwhile, here and for me at least, to reflect for too long on the phenomenon of individuality and the activity of discretization. If I was to try to cover it briefly, I would say imagine a cell, and a cell wall; imagine a walled city set in the land around it. The distinction is clear. It is so natural for us to distinguish differences that it can be a hindrance in certain pursuits, e.g., attempting to describe the topic of this piece of writing.\
+	Prescribing intention and purpose to the properties of matter, from the perspective I am attempting to embody, is futile. It may seem like the spilt honey has desire, it may feel as though the honey wants badly to spread and ruin the cover of my open book, but none of that is true. The honey does not have desire, even though it may feel like it does. It only seems that way to me, and sympathy with honey is not in my repertoire.\
+	But maybe honey sympathy is in my repertoire. After all, if I am only matter the way that honey is matter, and we both do particular things in different circumstances, and if we both have behaviors, then how am I to deny that I have a certain type of honey sympathy?\
+	Perhaps my two axioms for now are a.) an intuitive understanding of dependence and independence, b.) the prescription of traits such as desire, purpose and intent to items and circumstances.
+
+	My aqueduct has a problem. Aqueous flora, mineral deposits and silt buildup constrict the water\'92s passage at several points along its course. Lately, my bath has been taking twice as long to fill, and I need to use one and a half times as much wood to heat the water since it has more time to cool before my water basin that I like to go into is full. This means that one of my servants has less time to peel shrimp, which means I have to assign another one of my servants to shrimp peeling, and now she has less time to read, which makes her upset, which makes everyone in my house upset, and now there is an air of dis-ease in my house.\
+	Problems have solutions, but my purpose for this scenario is to illustrate how one system meant for a single task is difficult to separate from its context and cause to work in its purest manner. If I were to model a system, I would say that there are variables, and changes to variables causes the state of the system to change.\
+	Id\'99efining the behavior of a simulated dynamical system requires partitioning information commensurate with what the system should clarify. Programs analyzing force or diffusion in materials may consider some of the behavior of particles on a very minute scale, but there is always a limit, and the magnitude of data in silica does not begin to approach the real world, especially in organic scenarios. To be effective, a model\'92s purpose must only be to predict the behavior of entities in particular conditions, regardless of the actual mechanics of that process on an arbitrary scale. If the behavior of groups of actors is predictable, a model can be made. Somebody might call this \'93emergent behavior\'94 because it concerns a result borne from an aggregate of autonomous or semi-autonomous actors. I don\'92t personally care for the term \'93emergent behavior\'94. It\'92s too cool, too concise, too fetishistic. It packs a wonderful field of thought into a term that seems hand-picked to impress as many people as possible with as little effort as possible.\
+	Perhaps I am a purist, but I prefer something much drier, and hopefully more specific.\
+\
+	Considering all of this, it seems reasonable to state that organic tissue growth relies on certain principles which yield an observable result. I am modeling a system which reproduces a speculative observable result, usually without attempting to reproduce the actual chemical dynamics of my target phenomena. I believe that cells divide and multiply, then somehow they become arranged in ways that form tissue. The substance for organic tissue is a product of some wort of metabolism, which is a system not unlike an aqueduct, although components are broken down into more basic chemical composition for use in the body along the way.}
\ No newline at end of file
diff --git a/toolbar/hc_shelf.shelf b/toolbar/hc_shelf.shelf
new file mode 100644
index 0000000..fe16429
--- /dev/null
+++ b/toolbar/hc_shelf.shelf
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shelfDocument>
+  <!-- This file contains definitions of shelves, toolbars, and tools.
+ It should not be hand-edited when it is being used by the application.
+ Note, that two definitions of the same element are not allowed in
+ a single file. -->
+
+  <shelfSet name="my_shelf_set" label="My Shelf Set">
+    <memberToolshelf name="hc_shelf_global"/>
+    <memberToolshelf name="hc_shelf_pane"/>
+    <memberToolshelf name="hc_shelf_networkeditor"/>
+    <memberToolshelf name="hc_shelf_sceneviewer"/>
+  </shelfSet>
+
+  <tool name="hcsceneviewer_keycam" label="Keycam" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[from hclib import HCGlobal, HCSceneViewer
+HCSceneViewer(HCGlobal().tab()).keycam()]]></script>
+  </tool>
+
+  <tool name="hcglobal_toggle_tabs" label="Tabs" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[import hclib
+hclib.HCGlobal().toggleTabs()]]></script>
+  </tool>
+
+  <tool name="hcglobal_toggle_paths" label="Paths" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[import hclib
+hclib.HCGlobal().toggleNetworkControls()]]></script>
+  </tool>
+
+  <tool name="hcglobal_toggle_stowbars" label="Stowbars" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[import hclib
+hclib.HCGlobal().toggleStowbars()]]></script>
+  </tool>
+
+  <tool name="hc_shelf_separator_1" label="|" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[]]></script>
+  </tool>
+
+  <tool name="hc_shelf_separator_2" label="|" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[]]></script>
+  </tool>
+
+  <tool name="hcpane_resize_right" label="Right" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[]]></script>
+  </tool>
+
+  <tool name="hcpane_home" label="Home" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[]]></script>
+  </tool>
+
+  <tool name="hcnetworkeditor_toggle_menu" label="Menu" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[from hclib import HCGlobal, HCNetworkEditor
+tab = HCGlobal().hcPane().tab()
+HCNetworkEditor(tab).toggleMenu()]]></script>
+  </tool>
+
+  <toolshelf name="hc_shelf_sceneviewer" label="Scene Viewer">
+    <memberTool name="hcsceneviewer_keycam"/>
+    <memberTool name="hc_shelf_separator_1"/>
+    <memberTool name="hcsceneviewer_toggleleftbar"/>
+    <memberTool name="hcsceneviewer_toggletopbar"/>
+    <memberTool name="hcsceneviewer_togglerightbar"/>
+  </toolshelf>
+
+  <toolshelf name="hc_shelf_networkeditor" label="Network Editor">
+    <memberTool name="hcnetworkeditor_toggle_menu"/>
+  </toolshelf>
+
+  <toolshelf name="hc_shelf_pane" label="Pane">
+    <memberTool name="hcpane_toggle_tabs"/>
+    <memberTool name="hcpane_toggle_path"/>
+  </toolshelf>
+
+  <toolshelf name="hc_shelf_global" label="Global">
+    <memberTool name="hcglobal_toggle_tabs"/>
+    <memberTool name="hcglobal_toggle_paths"/>
+    <memberTool name="hcglobal_toggle_stowbars"/>
+  </toolshelf>
+
+  <tool name="hcsceneviewer_toggleleftbar" label="Menu 1" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[import hclib
+hclib.HCGlobal().hcPane().hcTab().toggleSelectionBar()]]></script>
+  </tool>
+
+  <tool name="hcsceneviewer_toggletopbar" label="Menu 2" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[import hclib
+hclib.HCGlobal().hcPane().hcTab().toggleOperationBar()]]></script>
+  </tool>
+
+  <tool name="hcsceneviewer_togglerightbar" label="Menu 3" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[import hclib
+hclib.HCGlobal().hcPane().hcTab().toggleDisplayOptionsToolbar()]]></script>
+  </tool>
+
+  <tool name="hcpane_toggle_tabs" label="Tabs" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[import hclib
+hclib.HCGlobal().hcPane().toggleTabs()]]></script>
+  </tool>
+
+  <tool name="hcpane_toggle_path" label="Path" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[import hclib
+hclib.HCGlobal().hcPane().hcTab().toggleNetworkControls()]]></script>
+  </tool>
+
+  <tool name="hcpane_resize_up" label="Up" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[]]></script>
+  </tool>
+
+  <tool name="hcpane_resize_down" label="Down" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[]]></script>
+  </tool>
+
+  <tool name="hcpane_resize_left" label="Left" icon="PLASMA_App">
+    <script scriptType="python"><![CDATA[]]></script>
+  </tool>
+</shelfDocument>
diff --git a/vex/include/VAT_utilitiesx.h b/vex/include/VAT_utilitiesx.h
new file mode 100755
index 0000000..cc3586b
--- /dev/null
+++ b/vex/include/VAT_utilitiesx.h
@@ -0,0 +1,77 @@
+function vector coord_swizzle_vector(vector coord; int coord_swizzle, coord_flip, inv;)
+{
+        vector result;
+        vector swizzle;
+        if (coord_swizzle == 0) swizzle = set(0, 1, 2);
+        else if (coord_swizzle == 1) swizzle = set(0, 2, 1);
+        else if (coord_swizzle == 2) swizzle = set(1, 0, 2);
+        else if (coord_swizzle == 3) swizzle = set(1, 2, 0);
+        else if (coord_swizzle == 4) swizzle = set(2, 0, 1);
+        else if (coord_swizzle == 5) swizzle = set(2, 1, 0);
+        
+        vector flip;
+        if (coord_flip == 0) flip = set(1,1,1);
+        else if (coord_flip == 1) flip = set(-1,1,1);
+        else if (coord_flip == 2) flip = set(1,-1,1);
+        else if (coord_flip == 3) flip = set(1,1,-1);
+        else if (coord_flip == 4) flip = set(-1,-1,1);
+        else if (coord_flip == 5) flip = set(-1,1,-1);
+        else if (coord_flip == 6) flip = set(-1,-1,-1);
+        else if (coord_flip == 7) flip = set(1,-1,-1);
+        
+        result = swizzle(coord, swizzle.x, swizzle.y, swizzle.z) * flip;
+
+        return result;
+}
+
+function vector4 coord_swizzle_vector(vector4 coord; int coord_swizzle, coord_flip, inv;)
+{
+        vector4 result;
+        vector swizzle;
+        if (coord_swizzle == 0) swizzle = set(0, 1, 2);
+        else if (coord_swizzle == 1) swizzle = set(0, 2, 1);
+        else if (coord_swizzle == 2) swizzle = set(1, 0, 2);
+        else if (coord_swizzle == 3) swizzle = set(1, 2, 0);
+        else if (coord_swizzle == 4) swizzle = set(2, 0, 1);
+        else if (coord_swizzle == 5) swizzle = set(2, 1, 0);
+        
+        vector flip;
+        if (coord_flip == 0) flip = set(1,1,1);
+        else if (coord_flip == 1) flip = set(-1,1,1);
+        else if (coord_flip == 2) flip = set(1,-1,1);
+        else if (coord_flip == 3) flip = set(1,1,-1);
+        else if (coord_flip == 4) flip = set(-1,-1,1);
+        else if (coord_flip == 5) flip = set(-1,1,-1);
+        else if (coord_flip == 6) flip = set(-1,-1,-1);
+        else if (coord_flip == 7) flip = set(1,-1,-1);
+        
+        result = swizzle(coord, swizzle.x, swizzle.y, swizzle.z) * flip;
+        result.w = coord.w;
+
+        return result;
+}
+
+function vector4 coord_swizzle_quaternion(vector4 src; int quaternion_flip;)
+{
+    vector4 result;
+    vector4 flip;
+    if (quaternion_flip == 0) flip = set(1,1,1,1);
+    else if (quaternion_flip == 1) flip = set(-1,1,1,1);
+    else if (quaternion_flip == 2) flip = set(1,-1,1,1);
+    else if (quaternion_flip == 3) flip = set(1,1,-1,1);
+    else if (quaternion_flip == 4) flip = set(1,1,1,-1);
+    else if (quaternion_flip == 5) flip = set(-1,-1,1,1);
+    else if (quaternion_flip == 6) flip = set(-1,1,-1,1);
+    else if (quaternion_flip == 7) flip = set(-1,1,1,-1);
+    else if (quaternion_flip == 8) flip = set(-1,-1,-1,1);
+    else if (quaternion_flip == 9) flip = set(-1,-1,1,-1);
+    else if (quaternion_flip == 10) flip = set(-1,-1,-1,-1);
+    else if (quaternion_flip == 11) flip = set(1,-1,-1,1);
+    else if (quaternion_flip == 12) flip = set(1,1,-1,-1);
+    else if (quaternion_flip == 13) flip = set(1,-1,-1,-1);
+    else if (quaternion_flip == 14) flip = set(1,1,-1,-1);
+    
+    result = src * flip;
+    
+    return result;
+}
\ No newline at end of file
diff --git a/vex/include/hctl_utils.h b/vex/include/hctl_utils.h
new file mode 100755
index 0000000..440e712
--- /dev/null
+++ b/vex/include/hctl_utils.h
@@ -0,0 +1,279 @@
+#ifndef _im_utils_
+#define _im_utils_
+
+// Iterated Neighbours
+int[] im_nbrs(int geo; int pt_in; int depth) {
+    int pt_arr[] = array(pt_in);
+    int searched[] = array(pt_in);
+    int result[] = array(pt_in);
+    for(int i = 0; i < depth; i++) {
+        int new_pt_arr[] = {};
+        foreach(int pt; pt_arr) {
+            int nbr_arr[] = neighbours(geo, pt);
+            foreach(int nbr; nbr_arr) {
+                int idx = find(searched, nbr);
+                if(idx < 0) {
+                    append(searched, nbr);
+                    append(new_pt_arr, nbr);
+                    append(result, nbr);
+                }
+            }
+        }
+        pt_arr = new_pt_arr;
+    }
+    return result;
+}
+int[] im_nbrs(int geo; int pt_arr_in[]; int depth) {
+    int pt_arr[] = pt_arr_in;
+    int searched[] = pt_arr_in;
+    int result[] = pt_arr_in;
+    for(int i = 0; i < depth; i++) {
+        int new_pt_arr[] = {};
+        foreach(int pt; pt_arr) {
+            int nbr_arr[] = neighbours(geo, pt);
+            foreach(int nbr; nbr_arr) {
+                int idx = find(searched, nbr);
+                if(idx < 0) {
+                    append(searched, nbr);
+                    append(new_pt_arr, nbr);
+                    append(result, nbr);
+                }
+            }
+        }
+        pt_arr = new_pt_arr;
+    }
+    return result;
+}
+
+// neighbours Shortcut
+int[] im_nbrs(int geo; int pt) {
+    int nbrs[] = neighbours(geo, pt);
+    return nbrs;
+}
+
+// Neighbours in Group
+int[] im_nbrs_in_group(int geo; string group; int pt) {
+    int nbrs_0[] = neighbours(geo, pt);
+    int nbrs_1[];
+    int group_pts[] = expandpointgroup(0, group);
+    foreach(int nbr; nbrs_0) {
+        int idx = find(group_pts, nbr);
+        if(idx >= 0)
+            append(nbrs_1, nbr);
+    }
+    return(nbrs_1);
+}
+
+// setpointattrib Shortcut
+void im_set_pt_attr(int geo; string attr; int pt; int val) {
+    setpointattrib(geo, attr, pt, val);
+}
+void im_set_pt_attr(int geo; string attr; int pt; int val[]) {
+    setpointattrib(geo, attr, pt, val);
+}
+
+// setpointgroup Shortcut
+void im_set_pt_grp(int geo; string group; int pt; int val) {
+    setpointgroup(geo, group, pt, val);
+}
+
+// npoints Shortcut
+int im_npts(int geo) {
+    return(npoints(geo));
+}
+
+// Float to String
+string im_ftoa(const float f; const int decimal_places) {
+    return sprintf("%.*g", decimal_places + (int)log10(abs(f)) + (abs(f) >= 1.0), f);
+}
+string im_ftoa(const float f) {
+    return im_ftoa(f, 3);
+}
+
+// Binary Search
+float im_bin_search(const int arr[], target_val; export int success) {
+    success = 0;
+    int ct = len(arr);
+    if(ct == 0)
+        return -1.0;
+    int l = 0;
+    int r = ct - 1;
+    int m = -1;
+
+    while(l <= r) {
+        m = (l + r) / 2;
+        if(arr[m] < target_val)
+            l = m + 1;
+        else if(arr[m] > target_val)
+            r = m - 1;
+        else {
+            success = 1;
+            break;
+        }
+    }
+    // Only happens when the left index is 1 less than the right
+    // index and the target value is between the two values
+    if(l > r)
+        m = r;
+    // If the target value is greater than a few duplicated values
+    // but less than the next value, the middle index will always
+    // move to the last of the duplicates
+    float idx = m;
+    if(!success) {
+        if(target_val < arr[0] || target_val > arr[ct - 1])
+            idx = -1.0;
+        else if(m + 1 < ct)
+            // In VEX division by zero returns zero.
+            idx += float(target_val - arr[m]) / (arr[m + 1] - arr[m]);
+    }
+    return idx;
+}
+float im_bin_search(const float arr[], target_val; export int success) {
+    success = 0;
+    int ct = len(arr);
+    if(ct == 0)
+        return -1.0;
+    int l = 0;
+    int r = ct - 1;
+    int m = -1;
+    // Forces the target value to have the same floating-point precision as the array elements
+    float target_val_safe = set(target_val, 0)[0];
+
+    while (l <= r) {
+        m = (l + r) / 2;
+        if(arr[m] < target_val_safe)
+            l = m + 1;
+        else if(arr[m] > target_val_safe)
+            r = m - 1;
+        else {
+            success = 1;
+            break;
+        }
+    }
+    // Only happens when the left index is 1 less than the right
+    // index and the target value is between the two values
+    if(l > r)
+        m = r;
+    // If the target value is greater than a few duplicated values
+    // but less than the next value, the middle index will always
+    // move to the last of the duplicates
+    float idx = m;
+    if(!success) {
+        if(target_val_safe < arr[0] || target_val_safe > arr[ct - 1])
+            idx = -1.0;
+        else if(m + 1 < ct)
+            // In VEX division by zero returns zero.
+            idx += float(target_val_safe - arr[m]) / (arr[m + 1] - arr[m]);
+    }
+    return idx;
+}
+int im_bin_search(const string arr[], target_val; export int success) {
+    success = 0;
+    int ct = len(arr);
+    if(ct == 0)
+        return -1;
+    int l = 0;
+    int r = ct - 1;
+    int m = -1;
+
+    while(l <= r) {
+        m = (l + r) / 2;
+        if(arr[m] < target_val)
+            l = m + 1;
+        else if(arr[m] > target_val)
+            r = m - 1;
+        else {
+            success = 1;
+            break;
+        }
+    }
+    // Only happens when the left index is 1 less than the right
+    // index and the target value is between the two values
+    if(l > r)
+        m = r;
+    // If the target value is greater than a few duplicated values
+    // but less than the next value, the middle index will always
+    // move to the last of the duplicates
+    int idx = m;
+    if(!success) {
+        if(target_val < arr[0] || target_val > arr[ct - 1])
+            idx = -1;
+    }
+    return idx;
+}
+
+// Append Unique
+void im_append_unique(export int arr[]; const int val) {
+    if(find(arr, val) < 0)
+        append(arr, val);
+}
+void im_append_unique(export float arr[]; const float val) {
+    if(find(arr, val) < 0)
+        append(arr, val);
+}
+void im_append_unique(export vector2 arr[]; const vector2 val) {
+    if(find(arr, val) < 0)
+        append(arr, val);
+}
+void im_append_unique(export vector arr[]; const vector val) {
+    if(find(arr, val) < 0)
+        append(arr, val);
+}
+void im_append_unique(export vector4 arr[]; const vector4 val) {
+    if(find(arr, val) < 0)
+        append(arr, val);
+}
+void im_append_unique(export string arr[]; const string val) {
+    if(find(arr, val) < 0)
+        append(arr, val);
+}
+void im_append_unique(export string str; const string val) {
+    if(find(str, val) < 0)
+        append(str, val);
+}
+
+// Make Array Unique
+int[] im_unique_arr(const int arr[]) {
+    int new_arr[] = {};
+    foreach(int val; arr)
+        im_append_unique(new_arr, val);
+    return new_arr;
+}
+float[] im_unique_arr(const float arr[]) {
+    float new_arr[] = {};
+    foreach(float val; arr)
+        im_append_unique(new_arr, val);
+    return unique_arr;
+}
+vector2[] im_unique_arr(const vector2 arr[]) {
+    vector2 new_arr[] = {};
+    foreach(vector2 val; arr)
+        im_append_unique(new_arr, val);
+    return new_arr;
+}
+vector[] im_unique_arr(const vector arr[]) {
+    vector new_arr[] = {};
+    foreach(vector val; arr)
+        im_append_unique(new_arr, val);
+    return new_arr;
+}
+vector4[] im_unique_arr(const vector4 arr[]) {
+    vector4 new_arr[] = {};
+    foreach(vector4 val; arr)
+        im_append_unique(new_arr, val);
+    return new_arr;
+}
+string[] im_unique_arr(const string arr[]) {
+    string new_arr[] = {};
+    foreach(string val; arr)
+        im_append_unique(new_arr, val);
+    return new_arr;
+}
+string im_unique_arr(const string str) {
+    string new_str = "";
+    foreach(string val; str)
+        im_append_unique(new_str, val);
+    return new_str;
+}
+
+#endif
diff --git a/vex/include/myLib.h b/vex/include/myLib.h
new file mode 100755
index 0000000..cd00f5e
--- /dev/null
+++ b/vex/include/myLib.h
@@ -0,0 +1,205 @@
+// include guards: those two lines and #endif at the end of this file will prevent multiple including of this header
+#ifndef _myLib_
+#define _myLib_
+
+
+
+// you can use macros to define constants and use them in your code
+#define MY_INT			123
+#define MY_FLOAT		3.1415926
+
+// you can also create alias to the function
+#define RENAMEDPOWER	pow
+
+// or use macros for defining new functions
+#define ADDTEN(val)	 	(val+10)
+
+
+
+// void functions do not return anything
+// "function" keyword is not required
+function void myRemPoints(int ptnum) {
+	if (ptnum > 30)
+    	removepoint(0, ptnum);
+}
+
+// function parameters are passed by reference automatically, without additional syntax
+// (function receive the original variable, not its copy)
+void scaleByTen(vector P) {
+	P *= 10;
+}
+
+// you can prevent changing input variable references
+void changeA(int a; const int b; int c) {
+	a += 10;
+	//b += 10; // uncommenting this line will result in error
+	c = a;
+	c += 4; // even though arguments are passed by reference, they are not true references, "c" is still independent from "a"
+}
+
+// testing escaping of special characters
+// here it requires two backslashes :D I am wondering about a legendary place where it needs only one :)
+void printTestEscaping() {
+	string a = "from myLib.h: \\n \\t v\@P, %04.2f";
+	printf(a + "\n");
+}
+
+// a function returning float value
+float superRandom(vector4 seeds) {
+	float out = rand(seeds.x * seeds.y * seeds.z * seeds.w);
+	return out;
+}
+
+// a function returnig an array
+int[] range(int max) {
+	int out[];
+
+	for(int i=0; i<max; i++) push(out, i);
+
+	return out;
+}
+
+// normalize Normal vector by amount [0..1] with specified seed value
+vector randomizeN(vector N; float amount, seed) {
+	vector randDir;
+	
+	// getting different random value for each axis, scaling to [-1..1] range
+	randDir.x = rand(seed * 684.49848) * 2 - 1;
+	randDir.y = rand(seed * 178.46548) * 2 - 1;
+	randDir.z = rand(seed * 489.49856) * 2 - 1;
+	
+	randDir = normalize(randDir);
+
+	N = lerp(N, randDir, amount);
+	N = normalize(N);
+
+	return N;
+}
+
+// function has different set of parameters, but the same name
+vector randomizeN(vector N; float amount; vector4 seed) {
+	vector randDir;
+	
+	// getting different random value for each axis, scaling to [-1..1] range
+	randDir.x = rand(seed.x * 684.49848 * seed.w) * 2 - 1;
+	randDir.y = rand(seed.y * 178.46548 * seed.w) * 2 - 1;
+	randDir.z = rand(seed.z * 489.49856 * seed.w) * 2 - 1;
+	
+	randDir = normalize(randDir);
+
+	N = lerp(N, randDir, amount);
+	N = normalize(N);
+
+	return N;
+}
+
+// this function declaration returns different type
+// the function name does not really match its functionality, it is just for the example
+float randomizeN(vector N; float amount; int seed) {
+	float randDir;
+	
+	// getting different random value for each axis, scaling to [-1..1] range
+	randDir = rand((float)seed * 684.49848) * 2 - 1;
+
+	return randDir;
+}
+
+// vex also supoorts structs and methods associated with them
+struct myCustomMatrix {
+	// uninitialized variables
+	vector x, y, z;
+	
+	// variables with default values
+	vector translate = {0,0,0};
+	string comment = 'default comment';
+	float myPi = 3.14159265;
+	float uniformScale = 1.0;
+	float myArray[] = {1,2,3};
+}
+
+// struct for carrying information about our project file
+struct hipFile {
+	string base, ext;
+	int version = 1;
+
+	// you can create methods that operate on structs
+	// this method increases version by 1 and returns new version number
+	int incVersion() {
+		this.version++;
+		return this.version;
+	}
+
+	// inside of a struct function, you can refer to struct fields by name as if they 
+	// were variables (for example, base is a shortcut for this.base).
+	// this method writes to console window / terminal
+	void printName() {
+		printf("this file has name: %s_%03d.%s\n", base, version, ext);
+	}
+
+	// returns a string with full file name
+	string getFullName() {
+		return sprintf("%s_%03d.%s", this.base, this.version, this.ext);
+	}
+}
+
+// we can create functions that operate on our structs and use their methods
+int compareHipFiles(hipFile A, B) {
+	int match = 0;
+	if (A->getFullName() == B->getFullName()) match = 1;
+
+	return match;
+}
+
+// func returning hipFile type
+// this function expects comma separated list of filenames and will 
+// return the first occurance of a hip file
+hipFile findFirstHipFile(string text) {
+	string inFiles[] = split(text, ",");
+	string hipParts[];
+
+	foreach(string file; inFiles) {
+		string parts[] = split(file, ".");
+		if (parts[-1] == "hip" || parts[-1] == "hipnc") {
+			hipParts = parts;
+			break;
+		}
+	}
+
+	// we can also return error state, warning() function is also available
+	if (len(hipParts) == 0) error("No houdini project found in this file list: %+s.", text);
+
+	string prefix[] = split(hipParts[0], "_");
+	int ver = atoi( prefix[-1] );
+	string base = join( prefix[:-1], "_");
+	string ext = hipParts[1];
+
+	hipFile out = hipFile(base, ext, ver);
+	return out;
+}
+
+// we can as well return an array of structs
+hipFile[] findAllHipFiles(string text) {
+	string inFiles[] = split(text, ",");
+	hipFile hips[];
+
+	foreach(string file; inFiles) {
+		string parts[] = split(file, ".");
+		if (parts[-1] == "hip" || parts[-1] == "hipnc") {
+			string prefix[] = split(parts[0], "_");
+			int ver = atoi( prefix[-1] );
+			string base = join( prefix[:-1], "_");
+			string ext = parts[1];
+
+			hipFile out = hipFile(base, ext, ver);
+			push(hips, out);
+		}
+	}
+
+	// output a warning when no Houdini projects were found
+	if (len(hips) == 0) warning("No Houdini projects found.");
+
+	return hips;
+}
+
+
+#endif // end of include guards
\ No newline at end of file
diff --git a/vex/include/sidefxlabs_datax.h b/vex/include/sidefxlabs_datax.h
new file mode 100755
index 0000000..57a3493
--- /dev/null
+++ b/vex/include/sidefxlabs_datax.h
@@ -0,0 +1,292 @@
+#ifndef __sidefxlabs_data_h__
+#define __sidefxlabs_data_h__
+
+
+// Float to String
+
+string labs_ftoa(const float f; const int decimal_places)
+{
+    return sprintf("%.*g", decimal_places + (int)log10(abs(f)) + (abs(f) >= 1.0), f);
+}
+
+string labs_ftoa(const float f)
+{
+    return labs_ftoa(f, 3);
+}
+
+
+// Binary Search
+
+float labs_binarysearch(const int array[], target_value; export int success)
+{
+    success = 0;
+    int n = len(array);
+    if (n == 0) return -1.0;
+
+    int l = 0;
+    int r = n - 1;
+    int m = -1;
+
+    while (l <= r)
+    {
+        m = (l + r) / 2;
+
+        if (array[m] < target_value)
+        {
+            l = m + 1;
+        }
+        else if (array[m] > target_value)
+        {
+            r = m - 1;
+        }
+        else
+        {
+            success = 1;
+            break;
+        }
+    }
+
+    // Only happens when the left index is 1 less than the right
+    // index and the target value is between the two values
+    if (l > r) m = r;
+
+    // If the target value is greater than a few duplicated values
+    // but less than the next value, the middle index will always
+    // move to the last of the duplicates
+
+    float index = m;
+
+    if (!success)
+    {
+        if (target_value < array[0] || target_value > array[n - 1])
+            index = -1.0;
+        else if (m + 1 < n)
+            // In VEX, division by zero is allowed. It just returns zero.
+            index += float(target_value - array[m]) / (array[m + 1] - array[m]);
+    }
+
+    return index;
+}
+
+float labs_binarysearch(const float array[], target_value; export int success)
+{
+    success = 0;
+    int n = len(array);
+    if (n == 0) return -1.0;
+
+    int l = 0;
+    int r = n - 1;
+    int m = -1;
+
+    // Forces the target value to have the same floating-point precision as the array elements
+    float target_value_safe = set(target_value, 0)[0];
+
+    while (l <= r)
+    {
+        m = (l + r) / 2;
+
+        if (array[m] < target_value_safe)
+        {
+            l = m + 1;
+        }
+        else if (array[m] > target_value_safe)
+        {
+            r = m - 1;
+        }
+        else
+        {
+            success = 1;
+            break;
+        }
+    }
+
+    // Only happens when the left index is 1 less than the right
+    // index and the target value is between the two values
+    if (l > r) m = r;
+
+    // If the target value is greater than a few duplicated values
+    // but less than the next value, the middle index will always
+    // move to the last of the duplicates
+
+    float index = m;
+
+    if (!success)
+    {
+        if (target_value_safe < array[0] || target_value_safe > array[n - 1])
+            index = -1.0;
+        else if (m + 1 < n)
+            // In VEX, division by zero is allowed. It just returns zero.
+            index += float(target_value_safe - array[m]) / (array[m + 1] - array[m]);
+    }
+
+    return index;
+}
+
+int labs_binarysearch(const string array[], target_value; export int success)
+{
+    success = 0;
+    int n = len(array);
+    if (n == 0) return -1;
+
+    int l = 0;
+    int r = n - 1;
+    int m = -1;
+
+    while (l <= r)
+    {
+        m = (l + r) / 2;
+
+        if (array[m] < target_value)
+        {
+            l = m + 1;
+        }
+        else if (array[m] > target_value)
+        {
+            r = m - 1;
+        }
+        else
+        {
+            success = 1;
+            break;
+        }
+    }
+
+    // Only happens when the left index is 1 less than the right
+    // index and the target value is between the two values
+    if (l > r) m = r;
+
+    // If the target value is greater than a few duplicated values
+    // but less than the next value, the middle index will always
+    // move to the last of the duplicates
+
+    int index = m;
+
+    if (!success)
+    {
+        if (target_value < array[0] || target_value > array[n - 1])
+            index = -1;
+    }
+
+    return index;
+}
+
+
+// Append Unique
+
+void labs_append_unique(export int array[]; const int value)
+{
+    if (find(array, value) < 0)
+        append(array, value);
+}
+
+void labs_append_unique(export float array[]; const float value)
+{
+    if (find(array, value) < 0)
+        append(array, value);
+}
+
+void labs_append_unique(export vector2 array[]; const vector2 value)
+{
+    if (find(array, value) < 0)
+        append(array, value);
+}
+
+void labs_append_unique(export vector array[]; const vector value)
+{
+    if (find(array, value) < 0)
+        append(array, value);
+}
+
+void labs_append_unique(export vector4 array[]; const vector4 value)
+{
+    if (find(array, value) < 0)
+        append(array, value);
+}
+
+void labs_append_unique(export string array[]; const string value)
+{
+    if (find(array, value) < 0)
+        append(array, value);
+}
+
+void labs_append_unique(export string str; const string value)
+{
+    if (find(str, value) < 0)
+        append(str, value);
+}
+
+
+// Make Array Unique
+
+int[] labs_array_unique(const int array[])
+{
+    int array_unique[] = {};
+
+    foreach (int value; array)
+        labs_append_unique(array_unique, value);
+
+    return array_unique;
+}
+
+float[] labs_array_unique(const float array[])
+{
+    float array_unique[] = {};
+
+    foreach (float value; array)
+        labs_append_unique(array_unique, value);
+
+    return array_unique;
+}
+
+vector2[] labs_array_unique(const vector2 array[])
+{
+    vector2 array_unique[] = {};
+
+    foreach (vector2 value; array)
+        labs_append_unique(array_unique, value);
+
+    return array_unique;
+}
+
+vector[] labs_array_unique(const vector array[])
+{
+    vector array_unique[] = {};
+
+    foreach (vector value; array)
+        labs_append_unique(array_unique, value);
+
+    return array_unique;
+}
+
+vector4[] labs_array_unique(const vector4 array[])
+{
+    vector4 array_unique[] = {};
+
+    foreach (vector4 value; array)
+        labs_append_unique(array_unique, value);
+
+    return array_unique;
+}
+
+string[] labs_array_unique(const string array[])
+{
+    string array_unique[] = {};
+
+    foreach (string value; array)
+        labs_append_unique(array_unique, value);
+
+    return array_unique;
+}
+
+string labs_array_unique(const string str)
+{
+    string str_unique = "";
+
+    foreach (string value; str)
+        labs_append_unique(str_unique, value);
+
+    return str_unique;
+}
+
+
+#endif
\ No newline at end of file
diff --git a/vex/include/sidefxlabs_mathx.h b/vex/include/sidefxlabs_mathx.h
new file mode 100755
index 0000000..4df417c
--- /dev/null
+++ b/vex/include/sidefxlabs_mathx.h
@@ -0,0 +1,811 @@
+#ifndef __sidefxlabs_math_h__
+#define __sidefxlabs_math_h__
+
+
+#define LABS_2PI     6.28318530718
+#define LABS_RAD360  6.28318530718
+#define LABS_PI      3.14159265359
+#define LABS_RAD180  3.14159265359
+#define LABS_PI2     1.57079632679
+#define LABS_RAD90   1.57079632679
+
+#define LABS_E       2.71828182846
+#define LABS_SR2     1.41421356237
+
+// Defines 32-bit tolerances
+#define LABS_TOL16    0.000001 // Accurate below 16
+#define LABS_TOL128   0.00001  // Accurate below 128
+#define LABS_TOL1K    0.0001   // Accurate below 1024
+#define LABS_TOL      0.0001   // Accurate below 1024 (default tolerance)
+#define LABS_TOL16K   0.001    // Accurate below 16384
+#define LABS_TOL130K  0.01     // Accurate below 131072
+#define LABS_TOL1M    0.1      // Accurate below 1048576
+
+
+// Triangle Area
+
+float labs_triarea(const vector pos_a, pos_b, pos_c)
+{
+    return 0.5 * length(cross(pos_a - pos_c, pos_b - pos_c));
+}
+
+float labs_triarea(const int geometry, ptnum_a, ptnum_b, ptnum_c)
+{
+    return labs_triarea(vector(point(geometry, "P", ptnum_a)),
+                        vector(point(geometry, "P", ptnum_b)),
+                        vector(point(geometry, "P", ptnum_c)));
+}
+
+float labs_triarea(const int geometry, primnum)
+{
+    return labs_triarea(geometry,
+                        primpoint(geometry, primnum, 0),
+                        primpoint(geometry, primnum, 1),
+                        primpoint(geometry, primnum, 2));
+}
+
+
+// Plane Normal
+
+vector labs_planenormal(const vector pos_a, pos_b, pos_c; const int normalized)
+{
+    // Uses left-hand rule (Houdini's default face winding order).
+    // If not normalized, the magnitude of the output vector is
+    // the area of the input triangle.
+    return normalized ?
+           normalize(cross(pos_b - pos_c, pos_a - pos_c)) :
+           0.5 * cross(pos_b - pos_c, pos_a - pos_c);
+}
+
+vector labs_planenormal(const int geometry, ptnum_a, ptnum_b, ptnum_c, normalized)
+{
+    return labs_planenormal(vector(point(geometry, "P", ptnum_a)),
+                            vector(point(geometry, "P", ptnum_b)),
+                            vector(point(geometry, "P", ptnum_c)), normalized);
+}
+
+vector labs_planenormal(const int geometry, primnum, normalized)
+{
+    return labs_planenormal(geometry,
+                            primpoint(geometry, primnum, 0),
+                            primpoint(geometry, primnum, 1),
+                            primpoint(geometry, primnum, 2), normalized);
+}
+
+
+// Is to the Right Of
+
+int labs_istotheright(const vector pivot, forward, up, pos)
+{
+    return (int)sign(dot(cross(pos - pivot, forward), up));
+}
+
+
+// Is Above
+
+int labs_isabove(const vector plane_pos, plane_normal, pos)
+{
+    return (int)sign(dot(pos - plane_pos, plane_normal));
+}
+
+int labs_isabove(const vector pos_a, pos_b, pos_c, pos)
+{
+    // Uses left-hand rule (Houdini's default face winding order)
+    return (int)sign(dot(cross(pos - pos_a, pos_c - pos_a), pos_b - pos_a));
+}
+
+int labs_isabove(const int geometry, ptnum_a, ptnum_b, ptnum_c; const vector pos)
+{
+    return labs_isabove(vector(point(geometry, "P", ptnum_a)),
+                        vector(point(geometry, "P", ptnum_b)),
+                        vector(point(geometry, "P", ptnum_c)), pos);
+}
+
+int labs_isabove(const int geometry, primnum; const vector pos)
+{
+    return labs_isabove(geometry,
+                        primpoint(geometry, primnum, 0),
+                        primpoint(geometry, primnum, 1),
+                        primpoint(geometry, primnum, 2), pos);
+}
+
+
+// Point-Plane Distance
+
+float labs_pointplanedist(const vector plane_pos, plane_unit_normal, pos)
+{
+    return dot(pos - plane_pos, plane_unit_normal);
+}
+
+float labs_pointplanedist(const vector pos_a, pos_b, pos_c, pos)
+{
+    return labs_pointplanedist(pos_a, labs_planenormal(pos_a, pos_b, pos_c, 1), pos);
+}
+
+float labs_pointplanedist(const int geometry, ptnum_a, ptnum_b, ptnum_c; const vector pos)
+{
+    return labs_pointplanedist(vector(point(geometry, "P", ptnum_a)),
+                               vector(point(geometry, "P", ptnum_b)),
+                               vector(point(geometry, "P", ptnum_c)), pos);
+}
+
+float labs_pointplanedist(const int geometry, primnum; const vector pos)
+{
+    return labs_pointplanedist(geometry,
+                               primpoint(geometry, primnum, 0),
+                               primpoint(geometry, primnum, 1),
+                               primpoint(geometry, primnum, 2), pos);
+}
+
+
+// Point-Plane Projection
+
+float labs_pointplaneproj(const vector plane_pos, plane_unit_normal, pos; export vector nearest_pos)
+{
+    float signed_dist = dot(pos - plane_pos, plane_unit_normal);
+    nearest_pos = pos - signed_dist * plane_unit_normal;
+    return signed_dist;
+}
+
+float labs_pointplaneproj(const vector pos_a, pos_b, pos_c, pos; export vector nearest_pos)
+{
+    return labs_pointplaneproj(pos_a, labs_planenormal(pos_a, pos_b, pos_c, 1), pos, nearest_pos);
+}
+
+float labs_pointplaneproj(const int geometry, ptnum_a, ptnum_b, ptnum_c; const vector pos; export vector nearest_pos)
+{
+    return labs_pointplaneproj(vector(point(geometry, "P", ptnum_a)),
+                               vector(point(geometry, "P", ptnum_b)),
+                               vector(point(geometry, "P", ptnum_c)), pos, nearest_pos);
+}
+
+float labs_pointplaneproj(const int geometry, primnum; const vector pos; export vector nearest_pos)
+{
+    return labs_pointplaneproj(geometry,
+                               primpoint(geometry, primnum, 0),
+                               primpoint(geometry, primnum, 1),
+                               primpoint(geometry, primnum, 2), pos, nearest_pos);
+}
+
+
+// Point-Line Distance
+
+float labs_pointlinedist(const vector line_pos, line_unit_direction, pos)
+{
+    // This outperforms the cross product (triangle area) approach in accuracy
+    return distance(pos, line_pos + dot(pos - line_pos, line_unit_direction) * line_unit_direction);
+}
+
+float labs_pointlinedist(const int geometry, ptnum_a, ptnum_b; const vector pos)
+{
+    vector line_pos = point(geometry, "P", ptnum_a);
+    return labs_pointlinedist(line_pos, normalize(vector(point(geometry, "P", ptnum_b)) - line_pos), pos);
+}
+
+float labs_pointlinedist(const int geometry, primnum; const vector pos)
+{
+    return labs_pointlinedist(geometry,
+                              primpoint(geometry, primnum, 0),
+                              primpoint(geometry, primnum, 1), pos);
+}
+
+
+// Point-Line Projection
+
+float labs_pointlineproj(con
diff truncated