From 5787ba36a98bb76a3a1e169f0e6e15f18ec6b6c6 Mon Sep 17 00:00:00 2001 From: Kevin Nadro Date: Fri, 2 May 2025 10:26:08 -0500 Subject: [PATCH] fix: Needed to support the bad request flow, the toast will hang forever, the return control flows don't dismiss a forever toast --- .github/dependabot.yml | 441 +- .github/workflows/cargo-test.yml | 9 +- .github/workflows/generate-website-docs.yml | 6 +- .github/workflows/kcl-python-bindings.yml | 3 +- .gitignore | 1 + docs/kcl-src/known-issues.md | 26 + docs/kcl-src/modules.md | 365 + docs/kcl-src/settings.md | 45 + docs/kcl-src/types.md | 299 + docs/kcl/README.md | 5 + docs/kcl/angledLine.md | 36 +- docs/kcl/angledLineThatIntersects.md | 24 +- docs/kcl/appearance.md | 26 +- docs/kcl/arc.md | 32 +- docs/kcl/assert.md | 32 +- docs/kcl/assertIs.md | 8 +- docs/kcl/bezierCurve.md | 24 +- docs/kcl/circleThreePoint.md | 24 +- docs/kcl/clone.md | 6 +- docs/kcl/close.md | 12 +- docs/kcl/e.md | 42 - docs/kcl/extrude.md | 28 +- docs/kcl/fromCm.md | 49 - docs/kcl/fromFt.md | 49 - docs/kcl/fromInches.md | 49 - docs/kcl/fromM.md | 49 - docs/kcl/fromMm.md | 49 - docs/kcl/fromYd.md | 49 - docs/kcl/{ => functions}/std-helix.md | 24 +- docs/kcl/{ => functions}/std-math-abs.md | 6 +- docs/kcl/{ => functions}/std-math-acos.md | 2 +- docs/kcl/{ => functions}/std-math-asin.md | 2 +- docs/kcl/{ => functions}/std-math-atan.md | 2 +- docs/kcl/{ => functions}/std-math-atan2.md | 6 +- docs/kcl/{ => functions}/std-math-ceil.md | 6 +- docs/kcl/{ => functions}/std-math-cos.md | 2 +- docs/kcl/{ => functions}/std-math-floor.md | 6 +- docs/kcl/{ => functions}/std-math-ln.md | 6 +- docs/kcl/{ => functions}/std-math-log.md | 10 +- docs/kcl/{ => functions}/std-math-log10.md | 6 +- docs/kcl/{ => functions}/std-math-log2.md | 6 +- docs/kcl/{ => functions}/std-math-max.md | 6 +- docs/kcl/{ => functions}/std-math-min.md | 6 +- docs/kcl/{ => functions}/std-math-polar.md | 8 +- docs/kcl/{ => functions}/std-math-pow.md | 10 +- docs/kcl/{ => functions}/std-math-rem.md | 12 +- docs/kcl/{ => functions}/std-math-round.md | 6 +- docs/kcl/{ => functions}/std-math-sin.md | 2 +- docs/kcl/{ => functions}/std-math-sqrt.md | 6 +- docs/kcl/{ => functions}/std-math-tan.md | 2 +- docs/kcl/{ => functions}/std-offsetPlane.md | 12 +- docs/kcl/{ => functions}/std-revolve.md | 26 +- docs/kcl/{ => functions}/std-sketch-circle.md | 16 +- .../{ => functions}/std-sketch-mirror2d.md | 12 +- docs/kcl/{ => functions}/std-solid-chamfer.md | 18 +- docs/kcl/{ => functions}/std-solid-fillet.md | 18 +- docs/kcl/{ => functions}/std-solid-hollow.md | 10 +- docs/kcl/{ => functions}/std-solid-shell.md | 12 +- .../std-units-toCentimeters.md | 2 +- .../{ => functions}/std-units-toDegrees.md | 2 +- docs/kcl/{ => functions}/std-units-toFeet.md | 2 +- .../kcl/{ => functions}/std-units-toInches.md | 2 +- .../kcl/{ => functions}/std-units-toMeters.md | 2 +- .../std-units-toMillimeters.md | 2 +- .../{ => functions}/std-units-toRadians.md | 2 +- docs/kcl/{ => functions}/std-units-toYards.md | 2 +- docs/kcl/getCommonEdge.md | 4 +- docs/kcl/getNextAdjacentEdge.md | 4 +- docs/kcl/getOppositeEdge.md | 4 +- docs/kcl/getPreviousAdjacentEdge.md | 4 +- docs/kcl/index.md | 147 +- docs/kcl/int.md | 52 - docs/kcl/intersect.md | 20 +- docs/kcl/involuteCircular.md | 28 +- docs/kcl/lastSegX.md | 6 +- docs/kcl/lastSegY.md | 6 +- docs/kcl/legAngX.md | 12 +- docs/kcl/legAngY.md | 12 +- docs/kcl/legLen.md | 12 +- docs/kcl/line.md | 20 +- docs/kcl/loft.md | 32 +- docs/kcl/map.md | 10 +- docs/kcl/modules.md | 8 +- docs/kcl/patternCircular2d.md | 28 +- docs/kcl/patternCircular3d.md | 32 +- docs/kcl/patternLinear2d.md | 24 +- docs/kcl/patternLinear3d.md | 24 +- docs/kcl/patternTransform.md | 32 +- docs/kcl/patternTransform2d.md | 18 +- docs/kcl/pi.md | 41 - docs/kcl/polygon.md | 20 +- docs/kcl/pop.md | 6 +- docs/kcl/profileStart.md | 6 +- docs/kcl/profileStartX.md | 6 +- docs/kcl/profileStartY.md | 6 +- docs/kcl/push.md | 12 +- docs/kcl/reduce.md | 16 +- docs/kcl/rotate.md | 32 +- docs/kcl/scale.md | 24 +- docs/kcl/segAng.md | 6 +- docs/kcl/segEnd.md | 14 +- docs/kcl/segEndX.md | 6 +- docs/kcl/segEndY.md | 6 +- docs/kcl/segLen.md | 6 +- docs/kcl/segStart.md | 14 +- docs/kcl/segStartX.md | 6 +- docs/kcl/segStartY.md | 6 +- .../project.md => settings-project.md} | 0 .../{settings/user.md => settings-user.md} | 0 docs/kcl/settings.md | 10 +- docs/kcl/startProfile.md | 16 +- docs/kcl/startSketchOn.md | 14 +- docs/kcl/std.json | 104 +- docs/kcl/subtract.md | 24 +- docs/kcl/subtract2d.md | 12 +- docs/kcl/sweep.md | 28 +- docs/kcl/tangentToEnd.md | 6 +- docs/kcl/tangentialArc.md | 28 +- docs/kcl/tau.md | 42 - docs/kcl/translate.md | 26 +- docs/kcl/types.md | 39 +- docs/kcl/types/ArtifactId.md | 15 - docs/kcl/types/BasePath.md | 25 - docs/kcl/types/EdgeCut.md | 58 - docs/kcl/types/ExtrudeSurface.md | 98 - docs/kcl/types/FaceTag.md | 41 - docs/kcl/types/GeoMeta.md | 22 - .../kcl/types/GeometryWithImportedGeometry.md | 84 - docs/kcl/types/KclNone.md | 21 - docs/kcl/types/KclValue.md | 326 - docs/kcl/types/ModuleId.md | 16 - docs/kcl/types/NumericType.md | 282 - docs/kcl/types/Path.md | 247 - docs/kcl/types/PlaneData.md | 106 - docs/kcl/types/PlaneInfo.md | 22 - docs/kcl/types/PlaneType.md | 53 - docs/kcl/types/Point2d.md | 17 - docs/kcl/types/Point3d.md | 17 - docs/kcl/types/SketchData.md | 52 - docs/kcl/types/SketchOrSurface.md | 41 - docs/kcl/types/SketchSurface.md | 62 - docs/kcl/types/SolidOrImportedGeometry.md | 51 - .../types/SolidOrSketchOrImportedGeometry.md | 66 - docs/kcl/types/StartOrEnd.md | 41 - docs/kcl/types/SweepPath.md | 40 - docs/kcl/types/UnitAngle.md | 63 - docs/kcl/types/UnitLen.md | 123 - .../types/{Axis2d.md => std-types-Axis2d.md} | 0 .../types/{Axis3d.md => std-types-Axis3d.md} | 0 docs/kcl/types/{Edge.md => std-types-Edge.md} | 0 docs/kcl/types/{Face.md => std-types-Face.md} | 0 .../types/{Helix.md => std-types-Helix.md} | 0 .../types/{Plane.md => std-types-Plane.md} | 0 docs/kcl/types/std-types-Point2d.md | 17 + docs/kcl/types/std-types-Point3d.md | 17 + .../types/{Sketch.md => std-types-Sketch.md} | 2 +- .../types/{Solid.md => std-types-Solid.md} | 2 +- docs/kcl/types/std-types-any.md | 12 + docs/kcl/types/{bool.md => std-types-bool.md} | 0 .../types/{number.md => std-types-number.md} | 0 .../types/{string.md => std-types-string.md} | 0 docs/kcl/types/{tag.md => std-types-tag.md} | 8 +- docs/kcl/union.md | 24 +- docs/kcl/xLine.md | 20 +- docs/kcl/yLine.md | 20 +- e2e/playwright/app-header-tests.spec.ts | 31 + e2e/playwright/fixtures/homePageFixture.ts | 2 - e2e/playwright/fixtures/toolbarFixture.ts | 4 - e2e/playwright/native-file-menu.spec.ts | 10 +- e2e/playwright/onboarding-tests.spec.ts | 667 +- e2e/playwright/point-click.spec.ts | 8 +- e2e/playwright/projects.spec.ts | 12 +- .../prompt-to-edit-snapshot-tests.spec.ts | 3 +- e2e/playwright/prompt-to-edit.spec.ts | 30 +- ...example-snapshots--change-colour.snap.json | 2 +- e2e/playwright/storageStates.ts | 11 +- e2e/playwright/test-utils.ts | 3 +- flake.lock | 30 +- flake.nix | 2 +- known-circular.txt | 1 + package-lock.json | 2150 +++- package.json | 1 + .../codemirror-lsp-client/src/plugin/lsp.ts | 17 +- public/kcl-samples/80-20-rail/main.kcl | 2 +- public/kcl-samples/axial-fan/fan.kcl | 12 +- public/kcl-samples/bench/bench-parts.kcl | 28 +- public/kcl-samples/bench/main.kcl | 10 +- .../car-wheel-assembly/car-wheel.kcl | 4 +- .../car-wheel-assembly/lug-nut.kcl | 2 +- public/kcl-samples/color-cube/main.kcl | 12 +- public/kcl-samples/cycloidal-gear/main.kcl | 9 +- public/kcl-samples/dodecahedron/main.kcl | 6 +- public/kcl-samples/enclosure/main.kcl | 2 +- public/kcl-samples/exhaust-manifold/main.kcl | 32 +- .../main.kcl | 13 +- .../kcl-samples/food-service-spatula/main.kcl | 28 +- .../gridfinity-baseplate-magnets/main.kcl | 6 +- .../kcl-samples/gridfinity-baseplate/main.kcl | 2 +- .../gridfinity-bins-stacking-lip/main.kcl | 4 +- public/kcl-samples/gridfinity-bins/main.kcl | 2 +- public/kcl-samples/hex-nut/main.kcl | 2 +- public/kcl-samples/keyboard/main.kcl | 174 +- public/kcl-samples/kitt/main.kcl | 344 +- public/kcl-samples/makeup-mirror/main.kcl | 29 +- public/kcl-samples/mounting-plate/main.kcl | 2 +- public/kcl-samples/walkie-talkie/case.kcl | 10 +- public/zma-logomark-outlined.png | Bin 11467 -> 9172 bytes rust/Cargo.lock | 62 +- rust/Cargo.toml | 2 +- rust/kcl-derive-docs/src/lib.rs | 14 +- rust/kcl-lib/Cargo.toml | 1 + rust/kcl-lib/e2e/executor/inputs/cube.kcl | 2 +- .../inputs/extrude-inside-fn-with-tags.kcl | 2 +- .../e2e/executor/inputs/fillet-and-shell.kcl | 16 +- .../focusrite_scarlett_mounting_braket.kcl | 2 +- .../e2e/executor/inputs/function_sketch.kcl | 2 +- .../inputs/function_sketch_with_position.kcl | 2 +- .../e2e/executor/inputs/global-tags.kcl | 2 +- rust/kcl-lib/e2e/executor/inputs/lsystem.kcl | 45 +- .../inputs/member_expression_sketch.kcl | 4 +- .../e2e/executor/inputs/negative_args.kcl | 8 +- .../executor/inputs/no_visuals/identity.kcl | 2 +- .../executor/inputs/no_visuals/numbers.kcl | 4 +- ...n_inside_function_called_from_pipeline.kcl | 2 +- .../e2e/executor/inputs/pattern_vase.kcl | 2 +- .../executor/inputs/pentagon_fillet_sugar.kcl | 6 +- .../e2e/executor/inputs/pipe_as_arg.kcl | 4 +- rust/kcl-lib/e2e/executor/inputs/riddle.kcl | 5282 +++++----- .../e2e/executor/inputs/riddle_small.kcl | 2 +- .../e2e/executor/inputs/scoped-tags.kcl | 2 +- .../e2e/executor/inputs/server-rack-heavy.kcl | 4 +- .../e2e/executor/inputs/server-rack-lite.kcl | 4 +- .../inputs/sketch_on_face_circle_tagged.kcl | 4 +- .../executor/inputs/sketch_on_face_end.kcl | 2 +- .../sketch_on_face_end_negative_extrude.kcl | 2 +- .../executor/inputs/sketch_on_face_start.kcl | 2 +- rust/kcl-lib/e2e/executor/main.rs | 93 +- rust/kcl-lib/src/docs/gen_std_tests.rs | 1033 +- rust/kcl-lib/src/docs/kcl_doc.rs | 74 +- rust/kcl-lib/src/docs/templates/array.hbs | 1 - .../src/docs/templates/consts-index.hbs | 17 - rust/kcl-lib/src/docs/templates/index.hbs | 26 +- .../kcl-lib/src/docs/templates/properties.hbs | 13 - .../src/docs/templates/propertyType.hbs | 11 - rust/kcl-lib/src/docs/templates/schema.hbs | 70 - .../kcl-lib/src/docs/templates/schemaType.hbs | 19 - rust/kcl-lib/src/docs/templates/type.hbs | 7 - rust/kcl-lib/src/execution/artifact.rs | 46 +- rust/kcl-lib/src/execution/exec_ast.rs | 10 +- rust/kcl-lib/src/execution/geometry.rs | 5 +- rust/kcl-lib/src/execution/mod.rs | 30 +- rust/kcl-lib/src/lib.rs | 6 +- rust/kcl-lib/src/lint/checks/default_plane.rs | 7 +- rust/kcl-lib/src/lint/checks/offset_plane.rs | 44 +- rust/kcl-lib/src/lsp/kcl/mod.rs | 217 +- rust/kcl-lib/src/lsp/tests.rs | 200 +- rust/kcl-lib/src/parsing/ast/digest.rs | 6 +- .../src/parsing/ast/types/literal_value.rs | 17 +- rust/kcl-lib/src/parsing/ast/types/mod.rs | 198 +- rust/kcl-lib/src/parsing/ast/types/path.rs | 406 + rust/kcl-lib/src/parsing/parser.rs | 187 +- ...b__parsing__parser__snapshot_tests__a.snap | 470 +- ...__parsing__parser__snapshot_tests__af.snap | 88 +- ...__parsing__parser__snapshot_tests__ag.snap | 88 +- ...__parsing__parser__snapshot_tests__ah.snap | 52 +- ...__parsing__parser__snapshot_tests__ai.snap | 17 +- ...__parsing__parser__snapshot_tests__aj.snap | 52 +- ...__parsing__parser__snapshot_tests__ap.snap | 88 +- ...__parsing__parser__snapshot_tests__aq.snap | 97 +- ...__parsing__parser__snapshot_tests__at.snap | 13 +- ...__parsing__parser__snapshot_tests__av.snap | 75 +- ...b__parsing__parser__snapshot_tests__b.snap | 151 +- ...b__parsing__parser__snapshot_tests__c.snap | 178 +- ...b__parsing__parser__snapshot_tests__d.snap | 17 +- ...b__parsing__parser__snapshot_tests__y.snap | 35 +- ...b__parsing__parser__snapshot_tests__z.snap | 83 +- .../src/settings/generate_settings_docs.rs | 4 +- rust/kcl-lib/src/settings/types/mod.rs | 3 + rust/kcl-lib/src/simulation_tests.rs | 1 + .../src/simulation_tests/kcl_samples.rs | 1 + rust/kcl-lib/src/source_range.rs | 5 + rust/kcl-lib/src/std/appearance.rs | 6 +- rust/kcl-lib/src/std/array.rs | 6 +- rust/kcl-lib/src/std/csg.rs | 28 +- rust/kcl-lib/src/std/patterns.rs | 18 +- rust/kcl-lib/src/std/segment.rs | 16 +- rust/kcl-lib/src/std/transform.rs | 2 +- rust/kcl-lib/src/unparser.rs | 520 +- rust/kcl-lib/std/solid.kcl | 2 +- rust/kcl-lib/std/types.kcl | 12 +- rust/kcl-lib/tests/add_lots/ast.snap | 3 +- rust/kcl-lib/tests/add_lots/input.kcl | 2 +- rust/kcl-lib/tests/add_lots/unparsed.snap | 2 +- rust/kcl-lib/tests/argument_error/ast.snap | 97 +- .../tests/argument_error/execution_error.snap | 2 +- rust/kcl-lib/tests/argument_error/input.kcl | 4 +- .../tests/argument_error/unparsed.snap | 4 +- .../tests/bad_units_in_annotation/ast.snap | 345 +- .../tests/bad_units_in_annotation/input.kcl | 6 +- .../bad_units_in_annotation/unparsed.snap | 6 +- rust/kcl-lib/tests/cube_with_error/ast.snap | 103 +- rust/kcl-lib/tests/cube_with_error/input.kcl | 2 +- rust/kcl-lib/tests/cube_with_error/ops.snap | 53 +- .../tests/cube_with_error/unparsed.snap | 2 +- rust/kcl-lib/tests/double_map_fn/ast.snap | 3 +- rust/kcl-lib/tests/double_map_fn/input.kcl | 2 +- .../kcl-lib/tests/double_map_fn/unparsed.snap | 2 +- rust/kcl-lib/tests/fillet-and-shell/ast.snap | 1353 +-- rust/kcl-lib/tests/fillet-and-shell/input.kcl | 11 +- rust/kcl-lib/tests/fillet-and-shell/ops.snap | 204 +- .../tests/fillet-and-shell/unparsed.snap | 11 +- rust/kcl-lib/tests/function_sketch/ast.snap | 89 +- rust/kcl-lib/tests/function_sketch/input.kcl | 2 +- rust/kcl-lib/tests/function_sketch/ops.snap | 51 +- .../tests/function_sketch/unparsed.snap | 2 +- .../function_sketch_with_position/ast.snap | 161 +- .../function_sketch_with_position/input.kcl | 2 +- .../function_sketch_with_position/ops.snap | 85 +- .../unparsed.snap | 7 +- .../artifact_graph_flowchart.snap.md | 2 +- rust/kcl-lib/tests/intersect_cubes/ast.snap | 206 +- rust/kcl-lib/tests/intersect_cubes/input.kcl | 4 +- rust/kcl-lib/tests/intersect_cubes/ops.snap | 106 +- .../tests/intersect_cubes/unparsed.snap | 4 +- .../tests/kcl_samples/80-20-rail/ast.snap | 135 +- .../tests/kcl_samples/80-20-rail/ops.snap | 69 +- .../artifact_graph_flowchart.snap.md | 18 +- .../bench/artifact_graph_flowchart.snap.md | 446 +- rust/kcl-lib/tests/kcl_samples/bench/ast.snap | 1120 +- rust/kcl-lib/tests/kcl_samples/bench/ops.snap | 279 +- .../artifact_graph_flowchart.snap.md | 54 +- .../tests/kcl_samples/color-cube/ast.snap | 342 +- .../tests/kcl_samples/color-cube/ops.snap | 102 +- .../artifact_graph_flowchart.snap.md | 62 +- .../tests/kcl_samples/cycloidal-gear/ast.snap | 138 +- .../tests/kcl_samples/cycloidal-gear/ops.snap | 67 +- .../artifact_graph_flowchart.snap.md | 190 +- .../tests/kcl_samples/dodecahedron/ast.snap | 9 +- .../artifact_graph_flowchart.snap.md | 128 +- .../tests/kcl_samples/enclosure/ast.snap | 3 +- .../kcl_samples/enclosure/program_memory.snap | 240 +- .../artifact_graph_flowchart.snap.md | 80 +- .../kcl_samples/exhaust-manifold/ast.snap | 580 +- .../kcl_samples/exhaust-manifold/ops.snap | 332 +- .../exhaust-manifold/program_memory.snap | 84 +- .../artifact_graph_flowchart.snap.md | 100 +- .../ast.snap | 1103 +- .../ops.snap | 51 +- .../program_memory.snap | 339 +- .../artifact_graph_flowchart.snap.md | 60 +- .../kcl_samples/food-service-spatula/ast.snap | 900 +- .../kcl_samples/food-service-spatula/ops.snap | 376 +- .../food-service-spatula/program_memory.snap | 78 +- .../artifact_graph_flowchart.snap.md | 164 +- .../gridfinity-baseplate-magnets/ast.snap | 9 +- .../program_memory.snap | 240 +- .../artifact_graph_flowchart.snap.md | 36 +- .../kcl_samples/gridfinity-baseplate/ast.snap | 3 +- .../artifact_graph_flowchart.snap.md | 188 +- .../gridfinity-bins-stacking-lip/ast.snap | 6 +- .../program_memory.snap | 1008 +- .../artifact_graph_flowchart.snap.md | 100 +- .../kcl_samples/gridfinity-bins/ast.snap | 3 +- .../gridfinity-bins/program_memory.snap | 576 +- .../tests/kcl_samples/hex-nut/ast.snap | 145 +- .../tests/kcl_samples/hex-nut/ops.snap | 69 +- .../keyboard/artifact_graph_flowchart.snap.md | 94 +- .../tests/kcl_samples/keyboard/ast.snap | 7274 +++++++------ .../tests/kcl_samples/keyboard/ops.snap | 2139 +++- .../kitt/artifact_graph_flowchart.snap.md | 96 +- rust/kcl-lib/tests/kcl_samples/kitt/ast.snap | 8969 +++++++++++------ rust/kcl-lib/tests/kcl_samples/kitt/ops.snap | 3914 ++++++- .../kcl_samples/kitt/program_memory.snap | 2 +- .../artifact_graph_flowchart.snap.md | 40 +- .../tests/kcl_samples/makeup-mirror/ast.snap | 1760 ++-- .../tests/kcl_samples/makeup-mirror/ops.snap | 563 +- .../artifact_graph_flowchart.snap.md | 30 +- .../tests/kcl_samples/mounting-plate/ast.snap | 145 +- .../tests/kcl_samples/mounting-plate/ops.snap | 69 +- .../artifact_graph_flowchart.snap.md | 12 +- .../loop_tag/artifact_graph_flowchart.snap.md | 106 +- rust/kcl-lib/tests/loop_tag/ast.snap | 3 +- rust/kcl-lib/tests/loop_tag/input.kcl | 2 +- .../tests/loop_tag/program_memory.snap | 1176 +-- rust/kcl-lib/tests/loop_tag/unparsed.snap | 2 +- rust/kcl-lib/tests/misc/cube.kcl | 22 + .../artifact_graph_flowchart.snap.md | 18 +- rust/kcl-lib/tests/multi_transform/ast.snap | 3 +- rust/kcl-lib/tests/multi_transform/input.kcl | 2 +- .../tests/multi_transform/unparsed.snap | 2 +- ..._test_example_angle_to_match_length_x0.png | Bin 59972 -> 0 bytes ..._test_example_angle_to_match_length_y0.png | Bin 57479 -> 0 bytes ..._test_example_angled_line_of_x_length0.png | Bin 54928 -> 0 bytes ..._test_example_angled_line_of_y_length0.png | Bin 62105 -> 0 bytes .../serial_test_example_angled_line_to_x0.png | Bin 61015 -> 0 bytes .../serial_test_example_angled_line_to_y0.png | Bin 57499 -> 0 bytes .../serial_test_example_assert_gt0.png | Bin 19651 -> 0 bytes .../serial_test_example_assert_gte0.png | Bin 19651 -> 0 bytes .../serial_test_example_assert_lt0.png | Bin 19651 -> 0 bytes .../serial_test_example_assert_lte0.png | Bin 19651 -> 0 bytes .../serial_test_example_assert_order0.png | Bin 19651 -> 0 bytes .../outputs/serial_test_example_atan0.png | Bin 58026 -> 0 bytes .../tests/outputs/serial_test_example_e0.png | Bin 60211 -> 0 bytes ... => serial_test_example_fn_std-helix0.png} | Bin ... => serial_test_example_fn_std-helix1.png} | Bin ... => serial_test_example_fn_std-helix2.png} | Bin ... => serial_test_example_fn_std-helix3.png} | Bin ... serial_test_example_fn_std-math-abs0.png} | Bin ...serial_test_example_fn_std-math-acos0.png} | Bin ...serial_test_example_fn_std-math-asin0.png} | Bin ...erial_test_example_fn_std-math-atan20.png} | Bin ...serial_test_example_fn_std-math-ceil0.png} | Bin ... serial_test_example_fn_std-math-cos0.png} | Bin ...erial_test_example_fn_std-math-floor0.png} | Bin ...> serial_test_example_fn_std-math-ln0.png} | Bin ... serial_test_example_fn_std-math-log0.png} | Bin ...erial_test_example_fn_std-math-log100.png} | Bin ...serial_test_example_fn_std-math-log20.png} | Bin ... serial_test_example_fn_std-math-max0.png} | Bin ... serial_test_example_fn_std-math-min0.png} | Bin ...erial_test_example_fn_std-math-polar0.png} | Bin ... serial_test_example_fn_std-math-pow0.png} | Bin ... serial_test_example_fn_std-math-rem0.png} | Bin ...erial_test_example_fn_std-math-round0.png} | Bin ... serial_test_example_fn_std-math-sin0.png} | Bin ...serial_test_example_fn_std-math-sqrt0.png} | Bin ... serial_test_example_fn_std-math-tan0.png} | Bin ...rial_test_example_fn_std-offsetPlane0.png} | Bin ...rial_test_example_fn_std-offsetPlane1.png} | Bin ...rial_test_example_fn_std-offsetPlane2.png} | Bin ...rial_test_example_fn_std-offsetPlane3.png} | Bin ...rial_test_example_fn_std-offsetPlane4.png} | Bin ...> serial_test_example_fn_std-revolve0.png} | Bin ...> serial_test_example_fn_std-revolve1.png} | Bin ... serial_test_example_fn_std-revolve10.png} | Bin ... serial_test_example_fn_std-revolve11.png} | Bin ... serial_test_example_fn_std-revolve12.png} | Bin ...> serial_test_example_fn_std-revolve2.png} | Bin ...> serial_test_example_fn_std-revolve3.png} | Bin ...> serial_test_example_fn_std-revolve4.png} | Bin ...> serial_test_example_fn_std-revolve5.png} | Bin ...> serial_test_example_fn_std-revolve6.png} | Bin ...> serial_test_example_fn_std-revolve7.png} | Bin ...> serial_test_example_fn_std-revolve8.png} | Bin ...> serial_test_example_fn_std-revolve9.png} | Bin ...al_test_example_fn_std-sketch-circle0.png} | Bin ...al_test_example_fn_std-sketch-circle1.png} | Bin ..._test_example_fn_std-sketch-mirror2d0.png} | Bin ..._test_example_fn_std-sketch-mirror2d1.png} | Bin ..._test_example_fn_std-sketch-mirror2d2.png} | Bin ..._test_example_fn_std-sketch-mirror2d3.png} | Bin ..._test_example_fn_std-sketch-mirror2d4.png} | Bin ...al_test_example_fn_std-solid-chamfer0.png} | Bin ...al_test_example_fn_std-solid-chamfer1.png} | Bin ...ial_test_example_fn_std-solid-fillet0.png} | Bin ...ial_test_example_fn_std-solid-fillet1.png} | Bin ...ial_test_example_fn_std-solid-hollow0.png} | Bin ...ial_test_example_fn_std-solid-hollow1.png} | Bin ...ial_test_example_fn_std-solid-hollow2.png} | Bin ...rial_test_example_fn_std-solid-shell0.png} | Bin ...rial_test_example_fn_std-solid-shell1.png} | Bin ...rial_test_example_fn_std-solid-shell2.png} | Bin ...rial_test_example_fn_std-solid-shell3.png} | Bin ...rial_test_example_fn_std-solid-shell4.png} | Bin ...rial_test_example_fn_std-solid-shell5.png} | Bin ...rial_test_example_fn_std-solid-shell6.png} | Bin ..._test_example_fn_std-units-toDegrees0.png} | Bin ..._test_example_fn_std-units-toRadians0.png} | Bin .../outputs/serial_test_example_from_cm0.png | Bin 19651 -> 0 bytes .../outputs/serial_test_example_from_ft0.png | Bin 19651 -> 0 bytes .../serial_test_example_from_inches0.png | Bin 19651 -> 0 bytes .../outputs/serial_test_example_from_m0.png | Bin 19651 -> 0 bytes .../outputs/serial_test_example_from_mm0.png | Bin 19651 -> 0 bytes .../outputs/serial_test_example_from_yd0.png | Bin 19651 -> 0 bytes .../outputs/serial_test_example_get_edge0.png | Bin 142503 -> 0 bytes ...st_example_get_extrude_wall_transform0.png | Bin 111040 -> 0 bytes .../outputs/serial_test_example_hole0.png | Bin 83525 -> 0 bytes .../outputs/serial_test_example_hole1.png | Bin 62650 -> 0 bytes .../outputs/serial_test_example_import0.png | Bin 64536 -> 0 bytes .../outputs/serial_test_example_import1.png | Bin 64539 -> 0 bytes .../outputs/serial_test_example_import2.png | Bin 64536 -> 0 bytes .../outputs/serial_test_example_import3.png | Bin 75953 -> 0 bytes .../outputs/serial_test_example_import4.png | Bin 76468 -> 0 bytes .../outputs/serial_test_example_import5.png | Bin 25521 -> 0 bytes .../outputs/serial_test_example_int0.png | Bin 91404 -> 0 bytes .../outputs/serial_test_example_line1.png | Bin 87003 -> 0 bytes .../outputs/serial_test_example_line_to0.png | Bin 58893 -> 0 bytes .../tests/outputs/serial_test_example_pi0.png | Bin 81095 -> 0 bytes .../serial_test_example_start_profile_at0.png | Bin 87003 -> 0 bytes .../serial_test_example_start_profile_at1.png | Bin 83080 -> 0 bytes .../serial_test_example_start_profile_at2.png | Bin 76391 -> 0 bytes .../serial_test_example_std-math-rem0.png | Bin 19651 -> 0 bytes ...serial_test_example_std-sketch-circle0.png | Bin 82782 -> 0 bytes ...serial_test_example_std-sketch-circle1.png | Bin 107909 -> 0 bytes .../outputs/serial_test_example_tau0.png | Bin 62614 -> 0 bytes ...ial_test_example_ty_std-types-Sketch0.png} | Bin ...ial_test_example_ty_std-types-Sketch1.png} | Bin ...rial_test_example_ty_std-types-Solid0.png} | Bin ...rial_test_example_ty_std-types-Solid1.png} | Bin .../serial_test_example_x_line_to0.png | Bin 55415 -> 0 bytes .../serial_test_example_y_line_to0.png | Bin 64837 -> 0 bytes .../artifact_graph_flowchart.snap.md | 16 +- .../tests/pentagon_fillet_sugar/ast.snap | 160 +- .../tests/pentagon_fillet_sugar/input.kcl | 6 +- .../tests/pentagon_fillet_sugar/ops.snap | 54 +- .../tests/pentagon_fillet_sugar/unparsed.snap | 6 +- .../tests/pipe_as_arg/artifact_commands.snap | 383 - .../artifact_graph_flowchart.snap.md | 79 - rust/kcl-lib/tests/pipe_as_arg/ast.snap | 1209 +-- rust/kcl-lib/tests/pipe_as_arg/input.kcl | 22 +- rust/kcl-lib/tests/pipe_as_arg/ops.snap | 100 +- .../tests/pipe_as_arg/program_memory.snap | 202 +- .../tests/pipe_as_arg/rendered_model.png | Bin 92942 -> 19651 bytes rust/kcl-lib/tests/pipe_as_arg/unparsed.snap | 26 +- .../ast.snap | 3 +- .../input.kcl | 2 +- .../unparsed.snap | 2 +- .../artifact_graph_flowchart.snap.md | 14 +- rust/kcl-lib/tests/riddle_small/ast.snap | 3 +- rust/kcl-lib/tests/riddle_small/input.kcl | 2 +- rust/kcl-lib/tests/riddle_small/unparsed.snap | 2 +- .../artifact_graph_flowchart.snap.md | 12 +- .../sketch_on_face_circle_tagged/ast.snap | 103 +- .../sketch_on_face_circle_tagged/input.kcl | 2 +- .../sketch_on_face_circle_tagged/ops.snap | 53 +- .../program_memory.snap | 12 +- .../unparsed.snap | 2 +- .../artifact_graph_flowchart.snap.md | 18 +- .../kcl-lib/tests/sketch_on_face_end/ast.snap | 103 +- .../tests/sketch_on_face_end/input.kcl | 2 +- .../kcl-lib/tests/sketch_on_face_end/ops.snap | 53 +- .../tests/sketch_on_face_end/unparsed.snap | 2 +- .../artifact_graph_flowchart.snap.md | 18 +- .../ast.snap | 103 +- .../input.kcl | 2 +- .../ops.snap | 53 +- .../unparsed.snap | 2 +- .../artifact_graph_flowchart.snap.md | 18 +- .../tests/sketch_on_face_start/ast.snap | 103 +- .../tests/sketch_on_face_start/input.kcl | 2 +- .../tests/sketch_on_face_start/ops.snap | 53 +- .../tests/sketch_on_face_start/unparsed.snap | 2 +- .../artifact_graph_flowchart.snap.md | 10 +- .../subtract_cylinder_from_cube/ast.snap | 75 +- .../subtract_cylinder_from_cube/input.kcl | 2 +- .../subtract_cylinder_from_cube/ops.snap | 37 +- .../subtract_cylinder_from_cube/unparsed.snap | 2 +- .../artifact_graph_flowchart.snap.md | 30 +- .../subtract_doesnt_need_brackets/ast.snap | 242 +- .../subtract_doesnt_need_brackets/input.kcl | 14 +- .../subtract_doesnt_need_brackets/ops.snap | 106 +- .../unparsed.snap | 14 +- .../artifact_graph_flowchart.snap.md | 30 +- rust/kcl-lib/tests/union_cubes/ast.snap | 244 +- rust/kcl-lib/tests/union_cubes/input.kcl | 16 +- rust/kcl-lib/tests/union_cubes/ops.snap | 106 +- rust/kcl-lib/tests/union_cubes/unparsed.snap | 16 +- rust/kcl-wasm-lib/src/wasm.rs | 15 +- src/App.tsx | 55 +- src/Auth.tsx | 2 +- src/Router.tsx | 4 +- src/components/CustomIcon.tsx | 8 - src/components/EngineStream.tsx | 49 +- src/components/FileTree.tsx | 41 - src/components/HelpMenu.tsx | 185 +- src/components/LowerRightControls.tsx | 7 +- src/components/ModelingMachineProvider.tsx | 3 +- .../ModelingSidebar/ModelingPane.tsx | 4 +- .../ModelingSidebar/ModelingSidebar.tsx | 4 +- .../Providers/SystemIOProviderDesktop.tsx | 33 +- src/components/RouteProvider.tsx | 33 +- src/components/Settings/AllSettingsFields.tsx | 48 +- src/components/ShareButton.tsx | 20 +- src/components/ToastTextToCad.tsx | 100 +- src/lang/KclSingleton.ts | 12 + src/lang/queryAstNodePathUtils.ts | 55 +- src/lang/wasm.test.ts | 24 +- src/lang/wasm.ts | 186 +- src/lib/constants.ts | 4 +- src/lib/desktopFS.ts | 73 +- src/lib/isPlaywright.ts | 10 + src/lib/paths.ts | 63 +- src/lib/promptToEdit.tsx | 124 +- src/lib/routeLoaders.ts | 8 + src/lib/rustContext.ts | 20 +- src/lib/toolbar.ts | 4 - src/lib/utils.ts | 137 + src/lib/wasm_lib_wrapper.ts | 4 + src/machines/modelingMachine.ts | 9 +- src/machines/systemIO/systemIOMachine.ts | 134 +- .../systemIO/systemIOMachineDesktop.ts | 105 +- src/machines/systemIO/systemIOMachineWeb.ts | 2 - src/machines/systemIO/utils.ts | 20 +- src/menu/channels.ts | 2 +- src/menu/helpRole.ts | 6 +- src/menu/roles.ts | 2 +- src/routes/Home.tsx | 156 +- src/routes/Onboarding/Camera.tsx | 13 +- src/routes/Onboarding/CmdK.tsx | 5 +- src/routes/Onboarding/CodeEditor.tsx | 5 +- src/routes/Onboarding/Export.tsx | 5 +- src/routes/Onboarding/FutureWork.tsx | 6 +- src/routes/Onboarding/InteractiveNumbers.tsx | 7 +- src/routes/Onboarding/Introduction.tsx | 129 +- src/routes/Onboarding/ParametricModeling.tsx | 7 +- src/routes/Onboarding/ProjectMenu.tsx | 5 +- src/routes/Onboarding/Sketching.tsx | 6 +- src/routes/Onboarding/Streaming.tsx | 5 +- src/routes/Onboarding/Units.tsx | 5 +- src/routes/Onboarding/UserMenu.tsx | 6 +- src/routes/Onboarding/index.tsx | 24 +- .../Onboarding/paths.ts} | 3 +- src/routes/Onboarding/utils.tsx | 306 +- src/routes/SignIn.tsx | 4 +- src/routes/utils.ts | 1 - vite.config.ts | 153 +- 616 files changed, 39602 insertions(+), 25610 deletions(-) create mode 100644 docs/kcl-src/known-issues.md create mode 100644 docs/kcl-src/modules.md create mode 100644 docs/kcl-src/settings.md create mode 100644 docs/kcl-src/types.md create mode 100644 docs/kcl/README.md delete mode 100644 docs/kcl/e.md delete mode 100644 docs/kcl/fromCm.md delete mode 100644 docs/kcl/fromFt.md delete mode 100644 docs/kcl/fromInches.md delete mode 100644 docs/kcl/fromM.md delete mode 100644 docs/kcl/fromMm.md delete mode 100644 docs/kcl/fromYd.md rename docs/kcl/{ => functions}/std-helix.md (99%) rename docs/kcl/{ => functions}/std-math-abs.md (99%) rename docs/kcl/{ => functions}/std-math-acos.md (99%) rename docs/kcl/{ => functions}/std-math-asin.md (99%) rename docs/kcl/{ => functions}/std-math-atan.md (87%) rename docs/kcl/{ => functions}/std-math-atan2.md (99%) rename docs/kcl/{ => functions}/std-math-ceil.md (99%) rename docs/kcl/{ => functions}/std-math-cos.md (99%) rename docs/kcl/{ => functions}/std-math-floor.md (99%) rename docs/kcl/{ => functions}/std-math-ln.md (99%) rename docs/kcl/{ => functions}/std-math-log.md (99%) rename docs/kcl/{ => functions}/std-math-log10.md (99%) rename docs/kcl/{ => functions}/std-math-log2.md (99%) rename docs/kcl/{ => functions}/std-math-max.md (99%) rename docs/kcl/{ => functions}/std-math-min.md (99%) rename docs/kcl/{ => functions}/std-math-polar.md (99%) rename docs/kcl/{ => functions}/std-math-pow.md (99%) rename docs/kcl/{ => functions}/std-math-rem.md (98%) rename docs/kcl/{ => functions}/std-math-round.md (99%) rename docs/kcl/{ => functions}/std-math-sin.md (99%) rename docs/kcl/{ => functions}/std-math-sqrt.md (99%) rename docs/kcl/{ => functions}/std-math-tan.md (99%) rename docs/kcl/{ => functions}/std-offsetPlane.md (99%) rename docs/kcl/{ => functions}/std-revolve.md (99%) rename docs/kcl/{ => functions}/std-sketch-circle.md (99%) rename docs/kcl/{ => functions}/std-sketch-mirror2d.md (99%) rename docs/kcl/{ => functions}/std-solid-chamfer.md (99%) rename docs/kcl/{ => functions}/std-solid-fillet.md (99%) rename docs/kcl/{ => functions}/std-solid-hollow.md (99%) rename docs/kcl/{ => functions}/std-solid-shell.md (99%) rename docs/kcl/{ => functions}/std-units-toCentimeters.md (77%) rename docs/kcl/{ => functions}/std-units-toDegrees.md (99%) rename docs/kcl/{ => functions}/std-units-toFeet.md (78%) rename docs/kcl/{ => functions}/std-units-toInches.md (78%) rename docs/kcl/{ => functions}/std-units-toMeters.md (78%) rename docs/kcl/{ => functions}/std-units-toMillimeters.md (77%) rename docs/kcl/{ => functions}/std-units-toRadians.md (99%) rename docs/kcl/{ => functions}/std-units-toYards.md (78%) delete mode 100644 docs/kcl/int.md delete mode 100644 docs/kcl/pi.md rename docs/kcl/{settings/project.md => settings-project.md} (100%) rename docs/kcl/{settings/user.md => settings-user.md} (100%) delete mode 100644 docs/kcl/tau.md delete mode 100644 docs/kcl/types/ArtifactId.md delete mode 100644 docs/kcl/types/BasePath.md delete mode 100644 docs/kcl/types/EdgeCut.md delete mode 100644 docs/kcl/types/ExtrudeSurface.md delete mode 100644 docs/kcl/types/FaceTag.md delete mode 100644 docs/kcl/types/GeoMeta.md delete mode 100644 docs/kcl/types/GeometryWithImportedGeometry.md delete mode 100644 docs/kcl/types/KclNone.md delete mode 100644 docs/kcl/types/KclValue.md delete mode 100644 docs/kcl/types/ModuleId.md delete mode 100644 docs/kcl/types/NumericType.md delete mode 100644 docs/kcl/types/Path.md delete mode 100644 docs/kcl/types/PlaneData.md delete mode 100644 docs/kcl/types/PlaneInfo.md delete mode 100644 docs/kcl/types/PlaneType.md delete mode 100644 docs/kcl/types/Point2d.md delete mode 100644 docs/kcl/types/Point3d.md delete mode 100644 docs/kcl/types/SketchData.md delete mode 100644 docs/kcl/types/SketchOrSurface.md delete mode 100644 docs/kcl/types/SketchSurface.md delete mode 100644 docs/kcl/types/SolidOrImportedGeometry.md delete mode 100644 docs/kcl/types/SolidOrSketchOrImportedGeometry.md delete mode 100644 docs/kcl/types/StartOrEnd.md delete mode 100644 docs/kcl/types/SweepPath.md delete mode 100644 docs/kcl/types/UnitAngle.md delete mode 100644 docs/kcl/types/UnitLen.md rename docs/kcl/types/{Axis2d.md => std-types-Axis2d.md} (100%) rename docs/kcl/types/{Axis3d.md => std-types-Axis3d.md} (100%) rename docs/kcl/types/{Edge.md => std-types-Edge.md} (100%) rename docs/kcl/types/{Face.md => std-types-Face.md} (100%) rename docs/kcl/types/{Helix.md => std-types-Helix.md} (100%) rename docs/kcl/types/{Plane.md => std-types-Plane.md} (100%) create mode 100644 docs/kcl/types/std-types-Point2d.md create mode 100644 docs/kcl/types/std-types-Point3d.md rename docs/kcl/types/{Sketch.md => std-types-Sketch.md} (99%) rename docs/kcl/types/{Solid.md => std-types-Solid.md} (99%) create mode 100644 docs/kcl/types/std-types-any.md rename docs/kcl/types/{bool.md => std-types-bool.md} (100%) rename docs/kcl/types/{number.md => std-types-number.md} (100%) rename docs/kcl/types/{string.md => std-types-string.md} (100%) rename docs/kcl/types/{tag.md => std-types-tag.md} (96%) delete mode 100644 rust/kcl-lib/src/docs/templates/array.hbs delete mode 100644 rust/kcl-lib/src/docs/templates/consts-index.hbs delete mode 100644 rust/kcl-lib/src/docs/templates/properties.hbs delete mode 100644 rust/kcl-lib/src/docs/templates/propertyType.hbs delete mode 100644 rust/kcl-lib/src/docs/templates/schema.hbs delete mode 100644 rust/kcl-lib/src/docs/templates/schemaType.hbs delete mode 100644 rust/kcl-lib/src/docs/templates/type.hbs create mode 100644 rust/kcl-lib/src/parsing/ast/types/path.rs create mode 100644 rust/kcl-lib/tests/misc/cube.kcl delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_angle_to_match_length_x0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_angle_to_match_length_y0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_angled_line_of_x_length0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_angled_line_of_y_length0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_angled_line_to_x0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_angled_line_to_y0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_assert_gt0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_assert_gte0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_assert_lt0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_assert_lte0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_assert_order0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_atan0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_e0.png rename rust/kcl-lib/tests/outputs/{serial_test_example_std-helix0.png => serial_test_example_fn_std-helix0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-helix1.png => serial_test_example_fn_std-helix1.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-helix2.png => serial_test_example_fn_std-helix2.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-helix3.png => serial_test_example_fn_std-helix3.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-abs0.png => serial_test_example_fn_std-math-abs0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-acos0.png => serial_test_example_fn_std-math-acos0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-asin0.png => serial_test_example_fn_std-math-asin0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-atan20.png => serial_test_example_fn_std-math-atan20.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-ceil0.png => serial_test_example_fn_std-math-ceil0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-cos0.png => serial_test_example_fn_std-math-cos0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-floor0.png => serial_test_example_fn_std-math-floor0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-ln0.png => serial_test_example_fn_std-math-ln0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-log0.png => serial_test_example_fn_std-math-log0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-log100.png => serial_test_example_fn_std-math-log100.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-log20.png => serial_test_example_fn_std-math-log20.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-max0.png => serial_test_example_fn_std-math-max0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-min0.png => serial_test_example_fn_std-math-min0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-polar0.png => serial_test_example_fn_std-math-polar0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-pow0.png => serial_test_example_fn_std-math-pow0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_Sketch1.png => serial_test_example_fn_std-math-rem0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-round0.png => serial_test_example_fn_std-math-round0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-sin0.png => serial_test_example_fn_std-math-sin0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-sqrt0.png => serial_test_example_fn_std-math-sqrt0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-math-tan0.png => serial_test_example_fn_std-math-tan0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-offsetPlane0.png => serial_test_example_fn_std-offsetPlane0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-offsetPlane1.png => serial_test_example_fn_std-offsetPlane1.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-offsetPlane2.png => serial_test_example_fn_std-offsetPlane2.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-offsetPlane3.png => serial_test_example_fn_std-offsetPlane3.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-offsetPlane4.png => serial_test_example_fn_std-offsetPlane4.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve0.png => serial_test_example_fn_std-revolve0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve1.png => serial_test_example_fn_std-revolve1.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve10.png => serial_test_example_fn_std-revolve10.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve11.png => serial_test_example_fn_std-revolve11.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve12.png => serial_test_example_fn_std-revolve12.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve2.png => serial_test_example_fn_std-revolve2.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve3.png => serial_test_example_fn_std-revolve3.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve4.png => serial_test_example_fn_std-revolve4.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve5.png => serial_test_example_fn_std-revolve5.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve6.png => serial_test_example_fn_std-revolve6.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve7.png => serial_test_example_fn_std-revolve7.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve8.png => serial_test_example_fn_std-revolve8.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-revolve9.png => serial_test_example_fn_std-revolve9.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_circle0.png => serial_test_example_fn_std-sketch-circle0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_circle1.png => serial_test_example_fn_std-sketch-circle1.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-sketch-mirror2d0.png => serial_test_example_fn_std-sketch-mirror2d0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-sketch-mirror2d1.png => serial_test_example_fn_std-sketch-mirror2d1.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-sketch-mirror2d2.png => serial_test_example_fn_std-sketch-mirror2d2.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-sketch-mirror2d3.png => serial_test_example_fn_std-sketch-mirror2d3.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-sketch-mirror2d4.png => serial_test_example_fn_std-sketch-mirror2d4.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-chamfer0.png => serial_test_example_fn_std-solid-chamfer0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-chamfer1.png => serial_test_example_fn_std-solid-chamfer1.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-fillet0.png => serial_test_example_fn_std-solid-fillet0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-fillet1.png => serial_test_example_fn_std-solid-fillet1.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_Solid0.png => serial_test_example_fn_std-solid-hollow0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-hollow1.png => serial_test_example_fn_std-solid-hollow1.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-hollow2.png => serial_test_example_fn_std-solid-hollow2.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-shell0.png => serial_test_example_fn_std-solid-shell0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-shell1.png => serial_test_example_fn_std-solid-shell1.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-shell2.png => serial_test_example_fn_std-solid-shell2.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-shell3.png => serial_test_example_fn_std-solid-shell3.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-shell4.png => serial_test_example_fn_std-solid-shell4.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-shell5.png => serial_test_example_fn_std-solid-shell5.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-shell6.png => serial_test_example_fn_std-solid-shell6.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-units-toDegrees0.png => serial_test_example_fn_std-units-toDegrees0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-units-toRadians0.png => serial_test_example_fn_std-units-toRadians0.png} (100%) delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_from_cm0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_from_ft0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_from_inches0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_from_m0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_from_mm0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_from_yd0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_get_edge0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_get_extrude_wall_transform0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_hole0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_hole1.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_import0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_import1.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_import2.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_import3.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_import4.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_import5.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_int0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_line1.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_line_to0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_pi0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_start_profile_at0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_start_profile_at1.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_start_profile_at2.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_std-math-rem0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_std-sketch-circle0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_std-sketch-circle1.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_tau0.png rename rust/kcl-lib/tests/outputs/{serial_test_example_Sketch0.png => serial_test_example_ty_std-types-Sketch0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_Solid1.png => serial_test_example_ty_std-types-Sketch1.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_std-solid-hollow0.png => serial_test_example_ty_std-types-Solid0.png} (100%) rename rust/kcl-lib/tests/outputs/{serial_test_example_assert_equal0.png => serial_test_example_ty_std-types-Solid1.png} (100%) delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_x_line_to0.png delete mode 100644 rust/kcl-lib/tests/outputs/serial_test_example_y_line_to0.png create mode 100644 src/lib/isPlaywright.ts rename src/{lib/onboardingPaths.ts => routes/Onboarding/paths.ts} (83%) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index bcc55d291..999650853 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,9 +16,12 @@ updates: security: applies-to: security-updates update-types: - - major - minor - patch + security-major: + applies-to: security-updates + update-types: + - major patch: applies-to: version-updates update-types: @@ -49,9 +52,408 @@ updates: security: applies-to: security-updates update-types: - - major - minor - patch + security-major: + applies-to: security-updates + update-types: + - major + patch: + applies-to: version-updates + update-types: + - patch + major: + applies-to: version-updates + update-types: + - major + minor: + applies-to: version-updates + update-types: + - minor + - patch +- package-ecosystem: cargo + directory: /rust/kcl-python-bindings + schedule: + interval: weekly + day: monday + time: '03:00' + timezone: America/Los_Angeles + open-pull-requests-limit: 5 + reviewers: + - adamchalmers + - franknoirot + - irev-dev + - jessfraz + groups: + security: + applies-to: security-updates + update-types: + - minor + - patch + security-major: + applies-to: security-updates + update-types: + - major + patch: + applies-to: version-updates + update-types: + - patch + major: + applies-to: version-updates + update-types: + - major + minor: + applies-to: version-updates + update-types: + - minor + - patch +- package-ecosystem: cargo + directory: /rust/kcl-to-core + schedule: + interval: weekly + day: monday + time: '03:00' + timezone: America/Los_Angeles + open-pull-requests-limit: 5 + reviewers: + - adamchalmers + - franknoirot + - irev-dev + - jessfraz + groups: + security: + applies-to: security-updates + update-types: + - minor + - patch + security-major: + applies-to: security-updates + update-types: + - major + patch: + applies-to: version-updates + update-types: + - patch + major: + applies-to: version-updates + update-types: + - major + minor: + applies-to: version-updates + update-types: + - minor + - patch +- package-ecosystem: cargo + directory: /rust/kcl-language-server-release + schedule: + interval: weekly + day: monday + time: '03:00' + timezone: America/Los_Angeles + open-pull-requests-limit: 5 + reviewers: + - adamchalmers + - franknoirot + - irev-dev + - jessfraz + groups: + security: + applies-to: security-updates + update-types: + - minor + - patch + security-major: + applies-to: security-updates + update-types: + - major + patch: + applies-to: version-updates + update-types: + - patch + major: + applies-to: version-updates + update-types: + - major + minor: + applies-to: version-updates + update-types: + - minor + - patch +- package-ecosystem: cargo + directory: /rust/kcl-wasm-lib + schedule: + interval: weekly + day: monday + time: '03:00' + timezone: America/Los_Angeles + open-pull-requests-limit: 5 + reviewers: + - adamchalmers + - franknoirot + - irev-dev + - jessfraz + groups: + security: + applies-to: security-updates + update-types: + - minor + - patch + security-major: + applies-to: security-updates + update-types: + - major + patch: + applies-to: version-updates + update-types: + - patch + major: + applies-to: version-updates + update-types: + - major + minor: + applies-to: version-updates + update-types: + - minor + - patch +- package-ecosystem: cargo + directory: /rust/kcl-derive-docs + schedule: + interval: weekly + day: monday + time: '03:00' + timezone: America/Los_Angeles + open-pull-requests-limit: 5 + reviewers: + - adamchalmers + - franknoirot + - irev-dev + - jessfraz + groups: + security: + applies-to: security-updates + update-types: + - minor + - patch + security-major: + applies-to: security-updates + update-types: + - major + patch: + applies-to: version-updates + update-types: + - patch + major: + applies-to: version-updates + update-types: + - major + minor: + applies-to: version-updates + update-types: + - minor + - patch +- package-ecosystem: cargo + directory: /rust/kcl-bumper + schedule: + interval: weekly + day: monday + time: '03:00' + timezone: America/Los_Angeles + open-pull-requests-limit: 5 + reviewers: + - adamchalmers + - franknoirot + - irev-dev + - jessfraz + groups: + security: + applies-to: security-updates + update-types: + - minor + - patch + security-major: + applies-to: security-updates + update-types: + - major + patch: + applies-to: version-updates + update-types: + - patch + major: + applies-to: version-updates + update-types: + - major + minor: + applies-to: version-updates + update-types: + - minor + - patch +- package-ecosystem: cargo + directory: /rust/kcl-language-server + schedule: + interval: weekly + day: monday + time: '03:00' + timezone: America/Los_Angeles + open-pull-requests-limit: 5 + reviewers: + - adamchalmers + - franknoirot + - irev-dev + - jessfraz + groups: + security: + applies-to: security-updates + update-types: + - minor + - patch + security-major: + applies-to: security-updates + update-types: + - major + patch: + applies-to: version-updates + update-types: + - patch + major: + applies-to: version-updates + update-types: + - major + minor: + applies-to: version-updates + update-types: + - minor + - patch +- package-ecosystem: cargo + directory: /rust/kcl-lib + schedule: + interval: weekly + day: monday + time: '03:00' + timezone: America/Los_Angeles + open-pull-requests-limit: 5 + reviewers: + - adamchalmers + - franknoirot + - irev-dev + - jessfraz + groups: + security: + applies-to: security-updates + update-types: + - minor + - patch + security-major: + applies-to: security-updates + update-types: + - major + patch: + applies-to: version-updates + update-types: + - patch + major: + applies-to: version-updates + update-types: + - major + minor: + applies-to: version-updates + update-types: + - minor + - patch +- package-ecosystem: cargo + directory: /rust/kcl-lib/fuzz + schedule: + interval: weekly + day: monday + time: '03:00' + timezone: America/Los_Angeles + open-pull-requests-limit: 5 + reviewers: + - adamchalmers + - franknoirot + - irev-dev + - jessfraz + groups: + security: + applies-to: security-updates + update-types: + - minor + - patch + security-major: + applies-to: security-updates + update-types: + - major + patch: + applies-to: version-updates + update-types: + - patch + major: + applies-to: version-updates + update-types: + - major + minor: + applies-to: version-updates + update-types: + - minor + - patch +- package-ecosystem: cargo + directory: /rust/kcl-test-server + schedule: + interval: weekly + day: monday + time: '03:00' + timezone: America/Los_Angeles + open-pull-requests-limit: 5 + reviewers: + - adamchalmers + - franknoirot + - irev-dev + - jessfraz + groups: + security: + applies-to: security-updates + update-types: + - minor + - patch + security-major: + applies-to: security-updates + update-types: + - major + patch: + applies-to: version-updates + update-types: + - patch + major: + applies-to: version-updates + update-types: + - major + minor: + applies-to: version-updates + update-types: + - minor + - patch +- package-ecosystem: cargo + directory: /rust/kcl-directory-test-macro + schedule: + interval: weekly + day: monday + time: '03:00' + timezone: America/Los_Angeles + open-pull-requests-limit: 5 + reviewers: + - adamchalmers + - franknoirot + - irev-dev + - jessfraz + groups: + security: + applies-to: security-updates + update-types: + - minor + - patch + security-major: + applies-to: security-updates + update-types: + - major patch: applies-to: version-updates update-types: @@ -82,9 +484,12 @@ updates: security: applies-to: security-updates update-types: - - major - minor - patch + security-major: + applies-to: security-updates + update-types: + - major patch: applies-to: version-updates update-types: @@ -115,9 +520,12 @@ updates: security: applies-to: security-updates update-types: - - major - minor - patch + security-major: + applies-to: security-updates + update-types: + - major patch: applies-to: version-updates update-types: @@ -148,9 +556,12 @@ updates: security: applies-to: security-updates update-types: - - major - minor - patch + security-major: + applies-to: security-updates + update-types: + - major patch: applies-to: version-updates update-types: @@ -181,9 +592,12 @@ updates: security: applies-to: security-updates update-types: - - major - minor - patch + security-major: + applies-to: security-updates + update-types: + - major patch: applies-to: version-updates update-types: @@ -214,9 +628,12 @@ updates: security: applies-to: security-updates update-types: - - major - minor - patch + security-major: + applies-to: security-updates + update-types: + - major patch: applies-to: version-updates update-types: @@ -247,9 +664,12 @@ updates: security: applies-to: security-updates update-types: - - major - minor - patch + security-major: + applies-to: security-updates + update-types: + - major patch: applies-to: version-updates update-types: @@ -280,9 +700,12 @@ updates: security: applies-to: security-updates update-types: - - major - minor - patch + security-major: + applies-to: security-updates + update-types: + - major patch: applies-to: version-updates update-types: diff --git a/.github/workflows/cargo-test.yml b/.github/workflows/cargo-test.yml index a4c963a39..8508c612c 100644 --- a/.github/workflows/cargo-test.yml +++ b/.github/workflows/cargo-test.yml @@ -86,7 +86,8 @@ jobs: cd rust cargo nextest run --workspace --features artifact-graph --retries=2 --no-fail-fast --profile ci simulation_tests::kcl_samples 2>&1 | tee /tmp/github-actions.log env: - KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN}} + KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN_DEV}} + ZOO_HOST: https://api.dev.zoo.dev RUST_BACKTRACE: full - name: Commit differences if: steps.path-changes.outputs.outside-kcl-samples == 'false' && steps.cargo-test-kcl-samples.outcome == 'failure' @@ -116,7 +117,8 @@ jobs: env: # The default is auto, and insta behaves differently in CI vs. not. INSTA_UPDATE: always - KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN}} + KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN_DEV}} + ZOO_HOST: https://api.dev.zoo.dev # Configure nextest when it's run by insta (via just). NEXTEST_PROFILE: ci RUST_BACKTRACE: full @@ -182,5 +184,6 @@ jobs: --partition count:${{ matrix.partitionIndex}}/${{ matrix.partitionTotal }} \ 2>&1 | tee /tmp/github-actions.log env: - KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN}} + KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN_DEV}} + ZOO_HOST: https://api.dev.zoo.dev diff --git a/.github/workflows/generate-website-docs.yml b/.github/workflows/generate-website-docs.yml index a31a72b38..7e02fbaf3 100644 --- a/.github/workflows/generate-website-docs.yml +++ b/.github/workflows/generate-website-docs.yml @@ -40,13 +40,15 @@ jobs: # cleanup old rm -rf documentation/content/pages/docs/kcl/*.md rm -rf documentation/content/pages/docs/kcl/types - rm -rf documentation/content/pages/docs/kcl/settings + rm -rf documentation/content/pages/docs/kcl/functions rm -rf documentation/content/pages/docs/kcl/consts # move new mv -f docs/kcl/*.md documentation/content/pages/docs/kcl/ mv -f docs/kcl/types documentation/content/pages/docs/kcl/ - mv -f docs/kcl/settings documentation/content/pages/docs/kcl/ + mv -f docs/kcl/functions documentation/content/pages/docs/kcl/ mv -f docs/kcl/consts documentation/content/pages/docs/kcl/ + # We don't need the README + rm documentation/content/pages/docs/kcl/README.md - name: move kcl-samples shell: bash run: | diff --git a/.github/workflows/kcl-python-bindings.yml b/.github/workflows/kcl-python-bindings.yml index 55967e294..dfc80d976 100644 --- a/.github/workflows/kcl-python-bindings.yml +++ b/.github/workflows/kcl-python-bindings.yml @@ -125,7 +125,8 @@ jobs: just setup-uv just test env: - KITTYCAD_API_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN }} + KITTYCAD_API_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} + ZOO_HOST: https://api.dev.zoo.dev sdist: runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 3089b837d..6a348c886 100644 --- a/.gitignore +++ b/.gitignore @@ -85,3 +85,4 @@ venv .vscode-test .biome/ +.million diff --git a/docs/kcl-src/known-issues.md b/docs/kcl-src/known-issues.md new file mode 100644 index 000000000..eb3025d07 --- /dev/null +++ b/docs/kcl-src/known-issues.md @@ -0,0 +1,26 @@ +--- +title: "KCL Known Issues" +excerpt: "Known issues with the KCL standard library for the Zoo Design Studio." +layout: manual +--- + +The following are bugs that are not in modeling-app or kcl itself. These bugs +once fixed in engine will just start working here with no language changes. + +- **Sketch on Face**: If your sketch is outside the edges of the face (on which you + are sketching) you will get multiple models returned instead of one single + model for that sketch and its underlying 3D object. + If you see a red line around your model, it means this is happening. + +- **Import**: Right now you can import a file, even if that file has brep data + you cannot edit it, after v1, the engine will account for this. + +- **Fillets**: Fillets cannot intersect, you will get an error. Only simple fillet + cases work currently. + +- **Chamfers**: Chamfers cannot intersect, you will get an error. Only simple + chamfer cases work currently. + +- **Appearance**: Changing the appearance on a loft does not work. + +- **CSG Booleans**: Coplanar (bodies that share a plane) unions, subtractions, and intersections are not currently supported. diff --git a/docs/kcl-src/modules.md b/docs/kcl-src/modules.md new file mode 100644 index 000000000..47c4daa9a --- /dev/null +++ b/docs/kcl-src/modules.md @@ -0,0 +1,365 @@ +--- +title: "KCL Modules" +excerpt: "Documentation of modules for the KCL language for the Zoo Design Studio." +layout: manual +--- + +`KCL` allows splitting code up into multiple files. Each file is somewhat +isolated from other files as a separate module. + +When you define a function, you can use `export` before it to make it available +to other modules. + +```kcl +// util.kcl +export fn increment(@x) { + return x + 1 +} +``` + +Other files in the project can now import functions that have been exported. +This makes them available to use in another file. + +```norun +// main.kcl +import increment from "util.kcl" + +answer = increment(41) +``` + +Imported files _must_ be in the same project so that units are uniform across +modules. This means that it must be in the same directory. + +Import statements must be at the top-level of a file. It is not allowed to have +an `import` statement inside a function or in the body of an if‑else. + +Multiple functions can be exported in a file. + +```kcl +// util.kcl +export fn increment(@x) { + return x + 1 +} + +export fn decrement(@x) { + return x - 1 +} +``` + +When importing, you can import multiple functions at once. + +```norun +import increment, decrement from "util.kcl" +``` + +Imported symbols can be renamed for convenience or to avoid name collisions. + +```norun +import increment as inc, decrement as dec from "util.kcl" +``` + +--- + +## Functions vs `clone` + +There are two common patterns for re‑using geometry: + +1. **Wrap the construction in a function** – flexible and fully parametric. +2. **Duplicate an existing object with `clone`** – lightning‑fast, but an exact + duplicate. + +### Parametric function example + +```kcl +fn cube(center) { + return startSketchOn(XY) + |> startProfile(at = [center[0] - 10, center[1] - 10]) + |> line(endAbsolute = [center[0] + 10, center[1] - 10]) + |> line(endAbsolute = [center[0] + 10, center[1] + 10]) + |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> close() + |> extrude(length = 10) +} + +myCube = cube(center = [0, 0]) +``` + +*Pros* +- Any argument can be a parameter – size, position, appearance, etc. +- Works great inside loops, arrays, or optimisation sweeps. + +*Cons* +- Every invocation rebuilds the entire feature tree. +- **Slower** than a straight duplicate – each call is its own render job. + +### `clone` example + +```kcl +sketch001 = startSketchOn(-XZ) + |> circle(center = [0, 0], radius = 10) + |> extrude(length = 5) + |> appearance(color = "#ff0000", metalness = 90, roughness = 90) + +sketch002 = clone(sketch001) // ✓ instant copy +``` + +*Pros* +- Roughly an O(1) operation – we just duplicate the underlying engine handle. +- Perfect when you need ten identical bolts or two copies of the same imported STEP file. + +*Cons* +- **Not parametric** – the clone is exactly the same shape as the source. +- If you need to tweak dimensions per‑instance, you’re back to a function. + +> **Rule of thumb** – Reach for `clone` when the geometry is already what you want. Reach for a function when you need customisation. + +--- + +## Module‑level parallelism + +Under the hood, the Design Studio runs **every module in parallel** where it can. This means: + +- The top‑level code of `foo.kcl`, `bar.kcl`, and `baz.kcl` all start executing immediately and concurrently. +- Imports that read foreign files (STEP/OBJ/…) overlap their I/O and background render. +- CPU‑bound calculations in separate modules get their own worker threads. + +### Why modules beat one‑big‑file + +If you shoe‑horn everything into `main.kcl`, each statement runs sequentially: + +```norun +import "big.step" as gizmo // blocks main while reading + +gizmo |> translate(x=50) // blocks again while waiting for render +``` + +Split `gizmo` into its own file and the read/render can overlap whatever else `main.kcl` is doing. + +```norun +// gizmo.kcl (worker A) +import "big.step" + +// main.kcl (worker B) +import "gizmo.kcl" as gizmo // non‑blocking + +// ... other setup ... + +gizmo |> translate(x=50) // only blocks here +``` + +### Gotcha: defining but **not** calling functions + +Defining a function inside a module is instantaneous – we just record the byte‑code. The heavy lifting happens when the function is **called**. So: + +```norun +// util.kcl +export fn makeBolt(size) { /* … expensive CAD … */ } +``` + +If `main.kcl` waits until the very end to call `makeBolt`, *none* of that work was parallelised – you’ve pushed the cost back onto the serial tail of your script. + +**Better:** call it early or move the invocation into another module. + +```norun +// bolt_instance.kcl +import makeBolt from "util.kcl" +bolt = makeBolt(5) // executed in parallel +bolt +``` + +Now `main.kcl` can `import "bolt_instance.kcl" as bolt` and get the result that was rendered while it was busy doing other things. + +--- + +## Whole module import + +You can also import the whole module. This is useful if you want to use the +result of a module as a variable, like a part. + +```norun +import "tests/inputs/cube.kcl" as cube +cube + |> translate(x=10) +``` + +This imports the whole module and makes it available as `cube`. You can then +use it like any other object. The `cube` variable is now a reference to the +result of the module. This means that if you change the module, the `cube` +variable will change as well. + +In `cube.kcl`, you cannot have multiple objects. It has to be a single part. If +you have multiple objects, you will get an error. This is because the module is +expected to return a single object that can be used as a variable. + +The last expression or variable definition becomes the module's return value. +The module is expected to return a single object that can be used as a variable +by whatever imports it. + +So for example, this is allowed: + +```norun +... a bunch of code to create cube and cube2 ... + +myUnion = union([cube, cube2]) +``` + +You can also do this: + +```norun +... a bunch of code to create cube and cube2 ... + +union([cube, cube2]) +``` + +Either way, the last line will return the union of the two objects. + +Or what you could do instead is: + +```norun +... a bunch of code to create cube and cube2 ... + +myUnion = union([cube, cube2]) +myUnion +``` + +This will assign the union of the two objects to a variable, and then return it +on the last statement. It's simply another way of doing the same thing. + +The final statement is what's important because it's the return value of the +entire module. The module is expected to return a single object that can be used +as a variable by the file that imports it. + +--- + +## Multiple instances of the same import + +Whether you are importing a file from another CAD system or a KCL file, that +file represents object(s) in memory. If you import the same file multiple times, +it will only be rendered once. + +If you want to have multiple instances of the same object, you can use the +[`clone`](/docs/kcl/clone) function. This will render a new instance of the object in memory. + +```norun +import cube from "tests/inputs/cube.kcl" + +cube + |> translate(x=10) +clone(cube) + |> translate(x=20) +``` + +In the sample above, the `cube` object is imported from a KCL file. The first +instance is translated 10 units in the x direction. The second instance is +cloned and translated 20 units in the x direction. The two instances are now +separate objects in memory, and can be manipulated independently. + +Here is an example with a file from another CAD system: + +```kcl +import "tests/inputs/cube.step" as cube + +cube + |> translate(x=10) +clone(cube) + |> translate(x=20) +``` + +--- + +## Importing files from other CAD systems + +`import` can also be used to import files from other CAD systems. The format of the statement is the +same as for KCL files. You can only import the whole file, not items from it. E.g., + +```norun +import "tests/inputs/cube.obj" + +// Use `cube` just like a KCL object. +``` + +```kcl +import "tests/inputs/cube.sldprt" as cube + +// Use `cube` just like a KCL object. +``` + +For formats lacking unit data (such as STL, OBJ, or PLY files), the default +unit of measurement is millimeters. Alternatively you may specify the unit +by using an attribute. Likewise, you can also specify a coordinate system. E.g., + +```kcl +@(lengthUnit = ft, coords = opengl) +import "tests/inputs/cube.obj" +``` + +When importing a GLTF file, the bin file will be imported as well. + +Import paths are relative to the current project directory. Imports currently only work when +using the native Design Studio, not in the browser. + +### Supported values + +File formats: `fbx`, `gltf`/`glb`, `obj`+, `ply`+, `sldprt`, `step`/`stp`, `stl`+. (Those marked with a +'+' support customising the length unit and coordinate system). + +Length units: `mm` (the default), `cm`, `m`, `inch`, `ft`, `yd`. + +Coordinate systems: + +- `zoo` (the default), forward: -Y, up: +Z, handedness: right +- `opengl`, forward: +Z, up: +Y, handedness: right +- `vulkan`, forward: +Z, up: -Y, handedness: left + +--- + +## Performance deep‑dive for foreign‑file imports + +Parallelized foreign‑file imports now let you overlap file reads, initialization, +and rendering. To maximize throughput, you need to understand the three distinct +stages—reading, initializing (background render start), and invocation (blocking) +—and structure your code to defer blocking operations until the end. + +### Foreign import execution stages + +1. **Import (Read / Initialization) Stage** + ```kcl + import "tests/inputs/cube.step" as cube + ``` + - Reads the file from disk and makes its API available. + - Starts engine rendering but **does not block** your script. + - This kick‑starts the render pipeline while you keep executing other code. + +2. **Invocation (Blocking) Stage** + ```kcl + import "tests/inputs/cube.step" as cube + + cube + |> translate(z=10) // ← blocks here only + ``` + - Any method call (e.g., `translate`, `scale`, `rotate`) waits for the background render to finish before applying transformations. + +### Best practices + +#### 1. Defer blocking calls + +```kcl +import "tests/inputs/cube.step" as cube // 1) Read / Background render starts + + +// --- perform other operations and calculations here --- + + +cube + |> translate(z=10) // 2) Blocks only here +``` + +#### 2. Split heavy work into separate modules + +Place computationally expensive or IO‑heavy work into its own module so it can render in parallel while `main.kcl` continues. + +#### Future improvements + +Upcoming releases will auto‑analyse dependencies and only block when truly necessary. Until then, explicit deferral will give you the best performance. + + diff --git a/docs/kcl-src/settings.md b/docs/kcl-src/settings.md new file mode 100644 index 000000000..fef877621 --- /dev/null +++ b/docs/kcl-src/settings.md @@ -0,0 +1,45 @@ +--- +title: "KCL Settings" +excerpt: "Documentation of settings for the KCL language and Zoo Design Studio." +layout: manual +--- + +# KCL Settings + +There are three levels of settings available in Zoo Design Studio: + +1. [User Settings](/docs/kcl/settings-user): Global settings that apply to all projects, stored in `user.toml` +2. [Project Settings](/docs/kcl/settings-project): Settings specific to a project, stored in `project.toml` +3. Per-file Settings: Settings that apply to a single KCL file, specified using the `@settings` attribute + +## Configuration Files + +Zoo Design Studio uses TOML files for configuration: + +* **User Settings**: `user.toml` - See [complete documentation](/docs/kcl/settings-user) +* **Project Settings**: `project.toml` - See [complete documentation](/docs/kcl/settings-project) + +## Per-file settings + +Settings which affect a single file are configured using the settings attribute. +This must be at the top of the KCL file (comments before the attribute are permitted). +For example: + +```kcl +// The settings attribute. +@settings(defaultLengthUnit = in) + +// The rest of your KCL code goes below... + +x = 42 // Represents 42 inches. +``` + +The settings attribute may contain multiple properties separated by commas. +Valid properties are: + +- `defaultLengthUnit`: the default length unit to use for numbers declared in this file. + - Accepted values: `mm`, `cm`, `m`, `in` (inches), `ft` (feet), `yd` (yards). +- `defaultAngleUnit`: the default angle unit to use for numbers declared in this file. + - Accepted values: `deg` (degrees), `rad` (radians). + +These settings override any project-wide settings (configured in project.toml or via the UI). diff --git a/docs/kcl-src/types.md b/docs/kcl-src/types.md new file mode 100644 index 000000000..7cea7be5a --- /dev/null +++ b/docs/kcl-src/types.md @@ -0,0 +1,299 @@ +--- +title: "KCL Types" +excerpt: "Documentation of types for the KCL standard library for the Zoo Design Studio." +layout: manual +--- + +`KCL` defines the following types and keywords the language. + +All these types can be nested in various forms where nesting applies. Like +arrays can hold objects and vice versa. + +## Constant declaration + +Constants are defined with a name and a value, like so: + +``` +myBool = false +``` + +Currently you cannot redeclare a constant. + +## Arrays + +An array is defined with `[]` braces. What is inside the brackets can +be of any type. For example, the following is completely valid: + +``` +myArray = ["thing", 2, false] +``` + +If you want to get a value from an array you can use the index like so: +`myArray[0]`. + + +## Objects + +An object is defined with `{}` braces. Here is an example object: + +``` +myObj = { a = 0, b = "thing" } +``` + +We support two different ways of getting properties from objects, you can call +`myObj.a` or `myObj["a"]` both work. + +## `ImportedGeometry` + +Using `import` you can import geometry defined using other CAD software. In KCL, +these objects have type `ImportedGeometry` and can mostly be treated like any +other solid (they can be rotated, scaled, etc.), although there is no access to +their internal components. See the [modules and imports docs](modules) for more +detail on importing geometry. + + +## Binary expressions + +You can also do math! Let's show an example below: + +``` +myMathExpression = 3 + 1 * 2 / 3 - 7 +``` + +You can nest expressions in parenthesis as well: + +``` +myMathExpression = 3 + (1 * 2 / (3 - 7)) +``` + +## Functions + +We also have support for defining your own functions. Functions can take in any +type of argument. Below is an example of the syntax: + +``` +fn myFn(x) { + return x +} +``` + +As you can see above `myFn` just returns whatever it is given. + +KCL's early drafts used positional arguments, but we now use keyword arguments: + +``` +// If you declare a function like this +fn add(left, right) { + return left + right +} + +// You can call it like this: +total = add(left = 1, right = 2) +``` + +Functions can also declare one *unlabeled* arg. If you do want to declare an unlabeled arg, it must +be the first arg declared. + +``` +// The @ indicates an argument can be used without a label. +// Note that only the first argument can use @. +fn increment(@x) { + return x + 1 +} + +fn add(@x, delta) { + return x + delta +} + +two = increment(1) +three = add(1, delta = 2) +``` + +## Pipelines + +It can be hard to read repeated function calls, because of all the nested brackets. + +```norun +i = 1 +x = h(g(f(i))) +``` + +You can make this easier to read by breaking it into many declarations, but that is a bit annoying. + +```norun +i = 1 +x0 = f(i) +x1 = g(x0) +x = h(x1) +``` + +Instead, you can use the pipeline operator (`|>`) to simplify this. + +Basically, `x |> f(%)` is a shorthand for `f(x)`. The left-hand side of the `|>` gets put into +the `%` in the right-hand side. + +So, this means `x |> f(%) |> g(%)` is shorthand for `g(f(x))`. The code example above, with its +somewhat-clunky `x0` and `x1` constants could be rewritten as + +```norun +i = 1 +x = i + |> f(%) + |> g(%) + |> h(%) +``` + +This helps keep your code neat and avoid unnecessary declarations. + +## Pipelines and keyword arguments + +Say you have a long pipeline of sketch functions, like this: + +```norun +startSketchOn(XZ) + |> line(%, end = [3, 4]) + |> line(%, end = [10, 10]) + |> line(%, end = [-13, -14]) + |> close(%) +``` + +In this example, each function call outputs a sketch, and it gets put into the next function call via +the `%`, into the first (unlabeled) argument. + +If a function call uses an unlabeled first parameter, it will default to `%` if it's not given. This +means that `|> line(%, end = [3, 4])` and `|> line(end = [3, 4])` are equivalent! So the above +could be rewritten as + +```norun +startSketchOn(XZ) + |> line(end = [3, 4]) + |> line(end = [10, 10]) + |> line(end = [-13, -14]) + |> close() +``` + +Note that we are still in the process of migrating KCL's standard library to use keyword arguments. So some +functions are still unfortunately using positional arguments. We're moving them over, so keep checking back. +Some functions are still using the old positional argument syntax. +Check the docs page for each function and look at its examples to see. + +## Tags + +Tags are used to give a name (tag) to a specific path. + +### `TagDeclarator` + +The syntax for declaring a tag is `$myTag` you would use it in the following +way: + +```norun +startSketchOn(XZ) + |> startProfile(at = origin) + |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) + |> angledLine( + angle = segAng(rectangleSegmentA001) - 90, + length = 196.99, + tag = $rectangleSegmentB001, + ) + |> angledLine( + angle = segAng(rectangleSegmentA001), + length = -segLen(rectangleSegmentA001), + tag = $rectangleSegmentC001, + ) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() +``` + +### `TagIdentifier` + +As per the example above you can use the tag identifier to get a reference to the +tagged object. The syntax for this is `myTag`. + +In the example above we use the tag identifier to get the angle of the segment +`segAng(rectangleSegmentA001, %)`. + +### `Start` + +There is a special tag, `START` (with type `Start`, although under the cover, it's a string) +for identifying the face of a solid which was the start of an extrusion (i.e., the surface which +is extruded). + +### `End` + +There is a special tag, `END` (with type `End`, although under the cover, it's a string) +for identifying the face of a solid which was finishes an extrusion. + +### Tag Scope + +Tags are scoped globally if in the root context meaning in this example you can +use the tag `rectangleSegmentA001` in any function or expression in the file. + +However if the code was written like this: + +```norun +fn rect(origin) { + return startSketchOn(XZ) + |> startProfile(at = origin) + |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) + |> angledLine( + angle = segAng(rectangleSegmentA001) - 90, + length = 196.99, + tag = $rectangleSegmentB001, + ) + |> angledLine( + angle = segAng(rectangleSegmentA001), + length = -segLen(rectangleSegmentA001), + tag = $rectangleSegmentC001, + ) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() +} + +rect(origin = [0, 0]) +rect(origin = [20, 0]) +``` + +Those tags would only be available in the `rect` function and not globally. + +However you likely want to use those tags somewhere outside the `rect` function. + +Tags are accessible through the sketch group they are declared in. +For example the following code works. + +```norun +fn rect(origin) { + return startSketchOn(XZ) + |> startProfile(at = origin) + |> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001) + |> angledLine( + angle = segAng(rectangleSegmentA001) - 90, + length = 196.99, + tag = $rectangleSegmentB001, + ) + |> angledLine( + angle = segAng(rectangleSegmentA001), + length = -segLen(rectangleSegmentA001), + tag = $rectangleSegmentC001, + ) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() +} + +rect(origin = [0, 0]) +myRect = rect(origin = [20, 0]) + +myRect + |> extrude(length = 10) + |> fillet(radius = 0.5, tags = [myRect.tags.rectangleSegmentA001]) +``` + +See how we use the tag `rectangleSegmentA001` in the `fillet` function outside +the `rect` function. This is because the `rect` function is returning the +sketch group that contains the tags. + + +--- + +If you find any issues using any of the above expressions or syntax, +please file an issue with the `ast` label on the [modeling-app +repo](https://github.com/KittyCAD/modeling-app/issues/new). diff --git a/docs/kcl/README.md b/docs/kcl/README.md new file mode 100644 index 000000000..f1dff1f1b --- /dev/null +++ b/docs/kcl/README.md @@ -0,0 +1,5 @@ +# Autogenerated docs + +Everything in this directory and its subdirectories (except this file) is automatically generated. Do not edit anything in this directory directly, your changes will be lost. + +The directory contents are generated by running the `test_generate_stdlib_markdown_docs` test in `/rust/kcl-lib/src/docs/gen_std_tests.rs`. Files are generated from the standard library declared in KCL (`/rust/kcl-lib/std`) and in Rust (`/rust/kcl-lib/src/std`), and by copying files from `../kcl-src`. \ No newline at end of file diff --git a/docs/kcl/angledLine.md b/docs/kcl/angledLine.md index 94177f263..70fc315af 100644 --- a/docs/kcl/angledLine.md +++ b/docs/kcl/angledLine.md @@ -10,15 +10,15 @@ Draw a line segment relative to the current origin using the polar measure of so ```kcl angledLine( - sketch: [Sketch](/docs/kcl/types/Sketch), - angle: [number](/docs/kcl/types/number), - length?: [number](/docs/kcl/types/number), - lengthX?: [number](/docs/kcl/types/number), - lengthY?: [number](/docs/kcl/types/number), - endAbsoluteX?: [number](/docs/kcl/types/number), - endAbsoluteY?: [number](/docs/kcl/types/number), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketch: Sketch, + angle: number, + length?: number, + lengthX?: number, + lengthY?: number, + endAbsoluteX?: number, + endAbsoluteY?: number, + tag?: TagDeclarator, +): Sketch ``` @@ -26,18 +26,18 @@ angledLine( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes | -| `angle` | [`number`](/docs/kcl/types/number) | Which angle should the line be drawn at? | Yes | -| `length` | [`number`](/docs/kcl/types/number) | Draw the line this distance along the given angle. Only one of `length`, `lengthX`, `lengthY`, `endAbsoluteX`, `endAbsoluteY` can be given. | No | -| `lengthX` | [`number`](/docs/kcl/types/number) | Draw the line this distance along the X axis. Only one of `length`, `lengthX`, `lengthY`, `endAbsoluteX`, `endAbsoluteY` can be given. | No | -| `lengthY` | [`number`](/docs/kcl/types/number) | Draw the line this distance along the Y axis. Only one of `length`, `lengthX`, `lengthY`, `endAbsoluteX`, `endAbsoluteY` can be given. | No | -| `endAbsoluteX` | [`number`](/docs/kcl/types/number) | Draw the line along the given angle until it reaches this point along the X axis. Only one of `length`, `lengthX`, `lengthY`, `endAbsoluteX`, `endAbsoluteY` can be given. | No | -| `endAbsoluteY` | [`number`](/docs/kcl/types/number) | Draw the line along the given angle until it reaches this point along the Y axis. Only one of `length`, `lengthX`, `lengthY`, `endAbsoluteX`, `endAbsoluteY` can be given. | No | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Which sketch should this path be added to? | Yes | +| `angle` | [`number`](/docs/kcl/types/std-types-number) | Which angle should the line be drawn at? | Yes | +| `length` | [`number`](/docs/kcl/types/std-types-number) | Draw the line this distance along the given angle. Only one of `length`, `lengthX`, `lengthY`, `endAbsoluteX`, `endAbsoluteY` can be given. | No | +| `lengthX` | [`number`](/docs/kcl/types/std-types-number) | Draw the line this distance along the X axis. Only one of `length`, `lengthX`, `lengthY`, `endAbsoluteX`, `endAbsoluteY` can be given. | No | +| `lengthY` | [`number`](/docs/kcl/types/std-types-number) | Draw the line this distance along the Y axis. Only one of `length`, `lengthX`, `lengthY`, `endAbsoluteX`, `endAbsoluteY` can be given. | No | +| `endAbsoluteX` | [`number`](/docs/kcl/types/std-types-number) | Draw the line along the given angle until it reaches this point along the X axis. Only one of `length`, `lengthX`, `lengthY`, `endAbsoluteX`, `endAbsoluteY` can be given. | No | +| `endAbsoluteY` | [`number`](/docs/kcl/types/std-types-number) | Draw the line along the given angle until it reaches this point along the Y axis. Only one of `length`, `lengthX`, `lengthY`, `endAbsoluteX`, `endAbsoluteY` can be given. | No | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Create a new tag which refers to this line | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/angledLineThatIntersects.md b/docs/kcl/angledLineThatIntersects.md index ea0dbc699..aa5d08743 100644 --- a/docs/kcl/angledLineThatIntersects.md +++ b/docs/kcl/angledLineThatIntersects.md @@ -10,12 +10,12 @@ Draw an angled line from the current origin, constructing a line segment such th ```kcl angledLineThatIntersects( - sketch: [Sketch](/docs/kcl/types/Sketch), - angle: [number](/docs/kcl/types/number), - intersectTag: [TagIdentifier](/docs/kcl/types#tag-identifier), - offset?: [number](/docs/kcl/types/number), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketch: Sketch, + angle: number, + intersectTag: TagIdentifier, + offset?: number, + tag?: TagDeclarator, +): Sketch ``` @@ -23,15 +23,15 @@ angledLineThatIntersects( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes | -| `angle` | [`number`](/docs/kcl/types/number) | Which angle should the line be drawn at? | Yes | -| `intersectTag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The tag of the line to intersect with | Yes | -| `offset` | [`number`](/docs/kcl/types/number) | The offset from the intersecting line. Defaults to 0. | No | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Which sketch should this path be added to? | Yes | +| `angle` | [`number`](/docs/kcl/types/std-types-number) | Which angle should the line be drawn at? | Yes | +| `intersectTag` | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The tag of the line to intersect with | Yes | +| `offset` | [`number`](/docs/kcl/types/std-types-number) | The offset from the intersecting line. Defaults to 0. | No | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Create a new tag which refers to this line | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/appearance.md b/docs/kcl/appearance.md index 28bea674a..4cb592631 100644 --- a/docs/kcl/appearance.md +++ b/docs/kcl/appearance.md @@ -10,11 +10,11 @@ This will work on any solid, including extruded solids, revolved solids, and she ```kcl appearance( - solids: [[Solid](/docs/kcl/types/Solid)OrImportedGeometry](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)OrImportedGeometry), - color: String, - metalness?: [number](/docs/kcl/types/number), - roughness?: [number](/docs/kcl/types/number), -): [[Solid](/docs/kcl/types/Solid)OrImportedGeometry](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)OrImportedGeometry) + solids: [Solid] | ImportedGeometry, + color: string, + metalness?: number, + roughness?: number, +): [Solid] | ImportedGeometry ``` @@ -22,14 +22,14 @@ appearance( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`SolidOrImportedGeometry`](/docs/kcl/types/SolidOrImportedGeometry) | The solid(s) whose appearance is being set | Yes | -| `color` | `String` | Color of the new material, a hex string like '#ff0000' | Yes | -| `metalness` | [`number`](/docs/kcl/types/number) | Metalness of the new material, a percentage like 95.7. | No | -| `roughness` | [`number`](/docs/kcl/types/number) | Roughness of the new material, a percentage like 95.7. | No | +| `solids` | [`[Solid]`](/docs/kcl/types/std-types-Solid) or [`ImportedGeometry`](/docs/kcl/types#ImportedGeometry) | The solid(s) whose appearance is being set | Yes | +| `color` | [`string`](/docs/kcl/types/std-types-string) | Color of the new material, a hex string like '#ff0000' | Yes | +| `metalness` | [`number`](/docs/kcl/types/std-types-number) | Metalness of the new material, a percentage like 95.7. | No | +| `roughness` | [`number`](/docs/kcl/types/std-types-number) | Roughness of the new material, a percentage like 95.7. | No | ### Returns -[`SolidOrImportedGeometry`](/docs/kcl/types/SolidOrImportedGeometry) - Data for a solid or an imported geometry. +[`[Solid]`](/docs/kcl/types/std-types-Solid) or [`ImportedGeometry`](/docs/kcl/types#ImportedGeometry) - Data for a solid or an imported geometry. ### Examples @@ -72,9 +72,9 @@ fn cube(center) { |> extrude(length = 10) } -example0 = cube([0, 0]) -example1 = cube([20, 0]) -example2 = cube([40, 0]) +example0 = cube(center = [0, 0]) +example1 = cube(center = [20, 0]) +example2 = cube(center = [40, 0]) appearance( [example0, example1], diff --git a/docs/kcl/arc.md b/docs/kcl/arc.md index 9b1328922..f38d50477 100644 --- a/docs/kcl/arc.md +++ b/docs/kcl/arc.md @@ -12,14 +12,14 @@ Unless this makes a lot of sense and feels like what you're looking for to const ```kcl arc( - sketch: [Sketch](/docs/kcl/types/Sketch), - angleStart?: [number](/docs/kcl/types/number), - angleEnd?: [number](/docs/kcl/types/number), - radius?: [number](/docs/kcl/types/number), - interiorAbsolute?: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - endAbsolute?: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketch: Sketch, + angleStart?: number, + angleEnd?: number, + radius?: number, + interiorAbsolute?: Point2d, + endAbsolute?: Point2d, + tag?: TagDeclarator, +): Sketch ``` @@ -27,17 +27,17 @@ arc( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes | -| `angleStart` | [`number`](/docs/kcl/types/number) | Where along the circle should this arc start? | No | -| `angleEnd` | [`number`](/docs/kcl/types/number) | Where along the circle should this arc end? | No | -| `radius` | [`number`](/docs/kcl/types/number) | How large should the circle be? | No | -| `interiorAbsolute` | [`[number]`](/docs/kcl/types/number) | Any point between the arc's start and end? Requires `endAbsolute`. Incompatible with `angleStart` or `angleEnd` | No | -| `endAbsolute` | [`[number]`](/docs/kcl/types/number) | Where should this arc end? Requires `interiorAbsolute`. Incompatible with `angleStart` or `angleEnd` | No | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Which sketch should this path be added to? | Yes | +| `angleStart` | [`number`](/docs/kcl/types/std-types-number) | Where along the circle should this arc start? | No | +| `angleEnd` | [`number`](/docs/kcl/types/std-types-number) | Where along the circle should this arc end? | No | +| `radius` | [`number`](/docs/kcl/types/std-types-number) | How large should the circle be? | No | +| `interiorAbsolute` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | Any point between the arc's start and end? Requires `endAbsolute`. Incompatible with `angleStart` or `angleEnd` | No | +| `endAbsolute` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | Where should this arc end? Requires `interiorAbsolute`. Incompatible with `angleStart` or `angleEnd` | No | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Create a new tag which refers to this line | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/assert.md b/docs/kcl/assert.md index edd4b1371..e0e3caabf 100644 --- a/docs/kcl/assert.md +++ b/docs/kcl/assert.md @@ -10,14 +10,14 @@ Check a value meets some expected conditions at runtime. Program terminates with ```kcl assert( - actual: [number](/docs/kcl/types/number), - isGreaterThan?: [number](/docs/kcl/types/number), - isLessThan?: [number](/docs/kcl/types/number), - isGreaterThanOrEqual?: [number](/docs/kcl/types/number), - isLessThanOrEqual?: [number](/docs/kcl/types/number), - isEqualTo?: [number](/docs/kcl/types/number), - tolerance?: [number](/docs/kcl/types/number), - error?: String, + actual: number, + isGreaterThan?: number, + isLessThan?: number, + isGreaterThanOrEqual?: number, + isLessThanOrEqual?: number, + isEqualTo?: number, + tolerance?: number, + error?: string, ): () ``` @@ -26,14 +26,14 @@ assert( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `actual` | [`number`](/docs/kcl/types/number) | Value to check. It will be compared with one of the comparison arguments. | Yes | -| `isGreaterThan` | [`number`](/docs/kcl/types/number) | Comparison argument. If given, checks the `actual` value is greater than this. | No | -| `isLessThan` | [`number`](/docs/kcl/types/number) | Comparison argument. If given, checks the `actual` value is less than this. | No | -| `isGreaterThanOrEqual` | [`number`](/docs/kcl/types/number) | Comparison argument. If given, checks the `actual` value is greater than or equal to this. | No | -| `isLessThanOrEqual` | [`number`](/docs/kcl/types/number) | Comparison argument. If given, checks the `actual` value is less than or equal to this. | No | -| `isEqualTo` | [`number`](/docs/kcl/types/number) | Comparison argument. If given, checks the `actual` value is less than or equal to this. | No | -| `tolerance` | [`number`](/docs/kcl/types/number) | If `isEqualTo` is used, this is the tolerance to allow for the comparison. This tolerance is used because KCL's number system has some floating-point imprecision when used with very large decimal places. | No | -| `error` | `String` | If the value was false, the program will terminate with this error message | No | +| `actual` | [`number`](/docs/kcl/types/std-types-number) | Value to check. It will be compared with one of the comparison arguments. | Yes | +| `isGreaterThan` | [`number`](/docs/kcl/types/std-types-number) | Comparison argument. If given, checks the `actual` value is greater than this. | No | +| `isLessThan` | [`number`](/docs/kcl/types/std-types-number) | Comparison argument. If given, checks the `actual` value is less than this. | No | +| `isGreaterThanOrEqual` | [`number`](/docs/kcl/types/std-types-number) | Comparison argument. If given, checks the `actual` value is greater than or equal to this. | No | +| `isLessThanOrEqual` | [`number`](/docs/kcl/types/std-types-number) | Comparison argument. If given, checks the `actual` value is less than or equal to this. | No | +| `isEqualTo` | [`number`](/docs/kcl/types/std-types-number) | Comparison argument. If given, checks the `actual` value is less than or equal to this. | No | +| `tolerance` | [`number`](/docs/kcl/types/std-types-number) | If `isEqualTo` is used, this is the tolerance to allow for the comparison. This tolerance is used because KCL's number system has some floating-point imprecision when used with very large decimal places. | No | +| `error` | [`string`](/docs/kcl/types/std-types-string) | If the value was false, the program will terminate with this error message | No | ### Returns diff --git a/docs/kcl/assertIs.md b/docs/kcl/assertIs.md index 0b7b6e5b3..78593851a 100644 --- a/docs/kcl/assertIs.md +++ b/docs/kcl/assertIs.md @@ -10,8 +10,8 @@ Asserts that a value is the boolean value true. ```kcl assertIs( - actual: [bool](/docs/kcl/types/bool), - error?: String, + actual: bool, + error?: string, ): () ``` @@ -20,8 +20,8 @@ assertIs( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `actual` | [`bool`](/docs/kcl/types/bool) | Value to check. If this is the boolean value true, assert passes. Otherwise it fails. | Yes | -| `error` | `String` | If the value was false, the program will terminate with this error message | No | +| `actual` | [`bool`](/docs/kcl/types/std-types-bool) | Value to check. If this is the boolean value true, assert passes. Otherwise it fails. | Yes | +| `error` | [`string`](/docs/kcl/types/std-types-string) | If the value was false, the program will terminate with this error message | No | ### Returns diff --git a/docs/kcl/bezierCurve.md b/docs/kcl/bezierCurve.md index 787c29c77..27b9ccd99 100644 --- a/docs/kcl/bezierCurve.md +++ b/docs/kcl/bezierCurve.md @@ -10,12 +10,12 @@ Draw a smooth, continuous, curved line segment from the current origin to the de ```kcl bezierCurve( - sketch: [Sketch](/docs/kcl/types/Sketch), - control1: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - control2: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - end: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketch: Sketch, + control1: Point2d, + control2: Point2d, + end: Point2d, + tag?: TagDeclarator, +): Sketch ``` @@ -23,15 +23,15 @@ bezierCurve( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes | -| `control1` | [`[number]`](/docs/kcl/types/number) | First control point for the cubic | Yes | -| `control2` | [`[number]`](/docs/kcl/types/number) | Second control point for the cubic | Yes | -| `end` | [`[number]`](/docs/kcl/types/number) | How far away (along the X and Y axes) should this line go? | Yes | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Which sketch should this path be added to? | Yes | +| `control1` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | First control point for the cubic | Yes | +| `control2` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | Second control point for the cubic | Yes | +| `end` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | How far away (along the X and Y axes) should this line go? | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Create a new tag which refers to this line | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/circleThreePoint.md b/docs/kcl/circleThreePoint.md index 0c7e7247d..07158f0e2 100644 --- a/docs/kcl/circleThreePoint.md +++ b/docs/kcl/circleThreePoint.md @@ -10,12 +10,12 @@ Construct a circle derived from 3 points. ```kcl circleThreePoint( - sketchSurfaceOrGroup: [[Sketch](/docs/kcl/types/Sketch)OrSurface](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)OrSurface), - p1: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - p2: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - p3: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketchSurfaceOrGroup: Sketch | Plane | Face, + p1: Point2d, + p2: Point2d, + p3: Point2d, + tag?: TagDeclarator, +): Sketch ``` @@ -23,15 +23,15 @@ circleThreePoint( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketchSurfaceOrGroup` | [`SketchOrSurface`](/docs/kcl/types/SketchOrSurface) | Plane or surface to sketch on. | Yes | -| `p1` | [`[number]`](/docs/kcl/types/number) | 1st point to derive the circle. | Yes | -| `p2` | [`[number]`](/docs/kcl/types/number) | 2nd point to derive the circle. | Yes | -| `p3` | [`[number]`](/docs/kcl/types/number) | 3rd point to derive the circle. | Yes | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Identifier for the circle to reference elsewhere. | No | +| `sketchSurfaceOrGroup` | [`Sketch`](/docs/kcl/types/std-types-Sketch) or [`Plane`](/docs/kcl/types/std-types-Plane) or [`Face`](/docs/kcl/types/std-types-Face) | Plane or surface to sketch on. | Yes | +| `p1` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | 1st point to derive the circle. | Yes | +| `p2` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | 2nd point to derive the circle. | Yes | +| `p3` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | 3rd point to derive the circle. | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Identifier for the circle to reference elsewhere. | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/clone.md b/docs/kcl/clone.md index 62c88791f..37f51ef55 100644 --- a/docs/kcl/clone.md +++ b/docs/kcl/clone.md @@ -13,7 +13,7 @@ This doesn't really have much utility unless you need the equivalent of a double Really only use this function if YOU ARE SURE you need it. In most cases you do not need clone and using a pattern with `instance = 2` is more appropriate. ```kcl -clone(geometry: [GeometryWithImportedGeometry](/docs/kcl/types/GeometryWithImportedGeometry)): [GeometryWithImportedGeometry](/docs/kcl/types/GeometryWithImportedGeometry) +clone(geometry: Solid | Sketch | ImportedGeometry): Solid | Sketch | ImportedGeometry ``` @@ -21,11 +21,11 @@ clone(geometry: [GeometryWithImportedGeometry](/docs/kcl/types/GeometryWithImpor | Name | Type | Description | Required | |----------|------|-------------|----------| -| `geometry` | [`GeometryWithImportedGeometry`](/docs/kcl/types/GeometryWithImportedGeometry) | The sketch, solid, or imported geometry to be cloned | Yes | +| `geometry` | [`Solid`](/docs/kcl/types/std-types-Solid) or [`Sketch`](/docs/kcl/types/std-types-Sketch) or [`ImportedGeometry`](/docs/kcl/types#ImportedGeometry) | The sketch, solid, or imported geometry to be cloned | Yes | ### Returns -[`GeometryWithImportedGeometry`](/docs/kcl/types/GeometryWithImportedGeometry) - A geometry including an imported geometry. +[`Solid`](/docs/kcl/types/std-types-Solid) or [`Sketch`](/docs/kcl/types/std-types-Sketch) or [`ImportedGeometry`](/docs/kcl/types#ImportedGeometry) - A geometry including an imported geometry. ### Examples diff --git a/docs/kcl/close.md b/docs/kcl/close.md index 72d74fbae..dd731e779 100644 --- a/docs/kcl/close.md +++ b/docs/kcl/close.md @@ -10,9 +10,9 @@ Construct a line segment from the current origin back to the profile's origin, e ```kcl close( - sketch: [Sketch](/docs/kcl/types/Sketch), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketch: Sketch, + tag?: TagDeclarator, +): Sketch ``` @@ -20,12 +20,12 @@ close( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | The sketch you want to close | Yes | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | The sketch you want to close | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Create a new tag which refers to this line | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/e.md b/docs/kcl/e.md deleted file mode 100644 index 7ae401b60..000000000 --- a/docs/kcl/e.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: "e" -excerpt: "Return the value of Euler’s number `e`." -layout: manual ---- - -**WARNING:** This function is deprecated. - -Return the value of Euler’s number `e`. - -**DEPRECATED** use the constant E - -```js -e(): number -``` - -### Tags - -* `math` - - - -### Returns - -[`number`](/docs/kcl/types/number) - - -### Examples - -```js -exampleSketch = startSketchOn(XZ) - |> startProfile(at = [0, 0]) - |> angledLine(angle = 30, length = 2 * e() ^ 2) - |> yLine(endAbsolute = 0) - |> close() - -example = extrude(exampleSketch, length = 10) -``` - -![Rendered example of e 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAADq+klEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/inL8+HGuuuqqq6666qqrrrrqqqv+t7vmmmse/D7v8z5fdXh4eEkSh4eHu1x11VVXXXXVVehBD3oQV1111VVXXXXVVVddddVV/1tdc801D37t137t93qnd3qnz+aZ7rvvvls/5EM+5CFcddVVV1111VWU48ePc9VVV1111VVXXXXVVVdd9b/NNddc8+A3e7M3+6hP+qRP+ukXf/EXf22A3/zN3wTgpptuOn7NNdc8+E//9E9/hquuuuqqq676/41y/Phxrrrqqquuuuqqq6666qqr/jd5x3d8x8/6pE/6pJ9+8Rd/8dcG+M3f/E1+4id+gsc//vE8/elP51Vf9VV5yEMe8tIA//AP//A7XHXVVVddddX/X5Tjx49z1VVXXXXVVVddddVVV131v8E7vuM7ftaHf/iHf/crvdIrvTXA05/+dL7jO76Dxz/+8axWKwBWqxUXL17ksY99LNdcc82Db7311r85e/bsrVx11VVXXXXV/0/oQQ96EFddddVVV1111VVXXXXVVf+TvdiLvdhrf/iHf/h3XXPNNQ8GuHjxIj/5kz/J05/+dJ6bJABe53Veh9d93dflvvvuu/VDPuRDHsJVV1111VVX/f9EOX78OFddddVVV1111VVXXXXVVf8TXXPNNQ/+pE/6pJ96p3d6p8/e3Nw8fvHiRX7xF3+Rn/zJn2R3d5cHkoQk7re7u8v111/PTTfddPyaa6558J/+6Z/+DFddddVVV131/w/l+PHjXHXVVVddddVVV1111VVX/U9yzTXXPPh93ud9vurDP/zDv/uaa6558MWLF/mjP/ojfvAHf5B77rmHB5KEJJ7barXi6U9/Oo997GN5zGMe89IA//AP//A7XHXVVVddddX/L5Tjx49z1VVXXXXVVVddddVVV131P8E111zz4Dd7szf7qE/6pE/66Yc85CEvDfCbv/mb/OAP/iBPf/rTeW6SeGFWqxX33HMPL/MyL8M111zz4FtvvfVvzp49eytXXXXVVVdd9f8HetCDHsRVV1111VVXXXXVVVddddV/p2uuuebBr/3ar/1e7/RO7/TZPNNv/uZv8pu/+Zs8P5L413id13kdXvd1X5f77rvv1s/6rM96nfvuu+9Wrrrqqquuuur/B8rx48e56qqrrrrqqquuuuqqq6767/KO7/iOn/VJn/RJP/3iL/7irw3w9Kc/ne/4ju/g8Y9/PM9NEpL417p06RLXXXcdN9100/GHPOQhL/1bv/Vb38NVV1111VVX/f9AOX78OFddddVVV1111VVXXXXVVf/VXud1Xue9P+mTPumnXumVXumtAS5evMg3fMM38Ed/9EesViseSBKS+NeShCRWqxW33norj3nMY7jlllseDPAP//APv8NVV1111VVX/d9HOX78OFddddVVV1111VVXXXXVVf9VXuzFXuy1P/dzP/e3Xud1Xue9Nzc3j1+8eJEf/MEf5Bd/8RdZrVY8N0n8a0lCEg+0Wq24++67eZmXeRmuueaaB996661/c/bs2Vu56qqrrrrqqv/b0IMe9CCuuuqqq6666qqrrrrqqqv+s11zzTUP/vAP//DverEXe7HXBrh48SJ/9Vd/xW/+5m/y/Eji30ISL8zrvM7r8Dqv8zrcd999t37WZ33W69x33323ctVVV1111VX/d1GOHz/OVVddddVVV1111VVXXXXVf5ZrrrnmwW/2Zm/2UZ/0SZ/009dcc82DL168yB/90R/xgz/4gzz96U/nuUlCEv9akpDEv2R3d5frrruOm2666fhDHvKQl/6t3/qt7+Gqq6666qqr/u+iHD9+nKuuuuqqq6666qqrrrrqqv9o11xzzYPf7M3e7KM+6ZM+6adf/MVf/LUBfvM3f5Mf/MEf5OlPfzrPjyT+tSQhiRfVarXi1ltv5TGPeQy33HLLgwH+4R/+4Xe46qqrrrrqqv+bKMePH+eqq6666qqrrrrqqquuuuo/0ju+4zt+1id90if99Iu/+Iu/NsBv/uZv8h3f8R08/elP5/mRhCT+tSTxryWJ9XrNPffcw8u8zMtwzTXXPPjWW2/9m7Nnz97KVVddddVVV/3fQzl+/DhXXXXVVVddddVVV1111VX/Ed7xHd/xsz73cz/3t1/8xV/8tQGe/vSn8x3f8R08/vGP5/mRhCT+tSQhiX8tSdxvd3cXgBd/8Rc//mIv9mKv/Wd/9mc/c3h4uMtVV1111VVX/d+CHvSgB3HVVVddddVVV1111VVXXfXv8WIv9mKv/eEf/uHfdc011zwY4OLFi/zkT/4kT3/603l+JPFvIYl/C0k8P8ePH+dt3uZtePCDH8x9991364d8yIc8hKuuuuqqq676v4Vy/Phxrrrqqquuuuqqq6666qqr/i2uueaaB3/SJ33ST73TO73TZ29ubh6/ePEiv/iLv8hP/uRPsru7y/MjiX8tSUjiX0sSknhBVqsVt956K495zGM4derUcYB/+Id/+B2uuuqqq6666v8O9KAHPYirrrrqqquuuuqqq6666qp/jWuuuebBH/7hH/5dL/ZiL/baABcvXuSv/uqv+M3f/E1eEEn8W0jiX0sS/xrHjx/nYz7mYwD4zM/8zNf5h3/4h9/mqquuuuqqq/5voBw/fpyrrrrqqquuuuqqq6666qoXxTXXXPPgN3uzN/uoT/qkT/rpa6655sEXL17kj/7oj/jBH/xBnv70p/P8SEIS/1qSkMS/liT+tVarFZJ48IMfzIu92Iu99p/92Z/9zOHh4S5XXXXVVVdd9b8fetCDHsRVV1111VVXXXXVVVddddULc8011zz4tV/7td/rnd7pnT6bZ/rN3/xNfvM3f5MXRhL/WpL4t5DEv4Uk7vfe7/3ePPjBD+a+++679UM+5EMewlVXXXXVVVf970c5fvw4V1111VVXXXXVVVddddVVL8g7vuM7ftYnfdIn/fSLv/iLvzbAb/7mb/Id3/EdPP3pT+cFkYQk/jUkIYl/LUlI4l9LEpJ4oFtvvZVHP/rRnDp16jjAP/zDP/wOV1111VVXXfW/G+X48eNcddVVV1111VVXXXXVVVc9t3d8x3f8rM/93M/97Rd/8Rd/bYCnP/3pfMd3fAePf/zjeUEkIYl/LUn8W0ji30ISz89qteIJT3gCr/zKr8yLv/iLv/bZs2efceutt/41V1111VVXXfW/F+X48eNcddVVV1111VVXXXXVVVfd78Ve7MVe+3M/93N/65Ve6ZXeGuDixYv84A/+IL/5m7/JarXiBZHEv5YkJPGvJQlJ/GtJQhIvzGq1Ynd3l0c/+tE8+MEPfuk/+7M/+5nDw8Ndrrrqqquuuup/J/SgBz2Iq6666qqrrrrqqquuuuqqa6655sEf/uEf/l0v9mIv9toAFy9e5Dd/8zf5q7/6K14YSfxrSeLfQhL/FpL413rrt35rXvqlX5r77rvv1g/5kA95CFddddVVV131vxPl+PHjXHXVVVddddVVV1111VX/f11zzTUPfp/3eZ+v+vAP//Dvvuaaax588eJF/uiP/ogf/MEf5J577uEFkYQk/rUk8a8lCUn8a0lCEv8W9957L49+9KM5derU8WuuuebBf/qnf/ozXHXVVVddddX/PuhBD3oQV1111VVXXXXVVVddddX/P9dcc82DX/u1X/u93umd3umzAS5evMhf/dVf8Zu/+Zv8SyTxryWJfwtJ/FtI4t9CEvc7fvw4H/VRHwXA13/917/Pb/3Wb303V1111VVXXfW/C3rQgx7EVVddddVVV1111VVXXfX/xzXXXPPg137t136vd3qnd/psnuk3f/M3+c3f/E3+JZL415LEv4Uk/i0k8W8hiefnpV/6pXmrt3or7rvvvls/67M+63Xuu+++W7nqqquuuuqq/z3Qgx70IK666qqrrrrqqquuuuqq/x/e8R3f8bPe6Z3e6bN5pt/8zd/kL//yL9nd3eWFkcS/hST+tSTxbyGJfwtJ/Eve6q3eipd+6Zfmvvvuu/VDPuRDHsJVV1111VVX/e9BOX78OFddddVVV1111VVXXXXV/23v+I7v+Fmf+7mf+9sv/uIv/toAT3/60/mO7/gOHv/4x7NarXhhJPGvJQlJ/GtIQhL/WpKQxL+WJCTxorj33nt59KMfzalTp45fc801D/7TP/3Tn+Gqq6666qqr/negHD9+nKuuuuqqq6666qqrrrrq/6YXe7EXe+3P/dzP/a1XeqVXemuAixcv8oM/+IP85m/+JqvVihdGEpL415CEJP61JPFvIYl/C0n8a6xWK574xCfyyq/8yjzkIQ956bNnzz7j1ltv/Wuuuuqqq6666n8+9KAHPYirrrrqqquuuuqqq6666v+Wa6655sEf/uEf/l0v9mIv9toAFy9e5Dd/8zf5q7/6K/4lkvjXksS/hST+LSTxbyGJfwtJALzUS70Ub/VWb8V9991362d91me9zn333XcrV1111VVXXfU/G3rQgx7EVVddddVVV1111VVXXfV/wzXXXPPgd3zHd/ys13md13lvgIsXL/JXf/VX/OZv/iYvCkn8a0niX0sS/xaS+LeQxL+VJB7ord7qrXipl3op7rvvvls/5EM+5CFcddVVV1111f9slOPHj3PV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rbfyopDEi0ISLypJvKgk8aKSxItKEi8qSbyoJPH8vPqrvzqv8Rqvwf329vb4lV/5Fe644w7+L7DNv5UkrnpOtrnqX882/5vY5n8S2/x3ss1/lptvvhmA++6771auuuqqq6666l+HylVXXXXVVVf9L/I6r/M67wXwV3/1V7woJPGikMSLShIvKkm8KCTxryGJF5UkXlSSeG6v/uqvzmu8xmtwv729PX7lV36FO+64g6uusM1VV/1r2OZ/I9v8T2Ob/062+a909uzZZ3DVVVddddVV/zpUrrrqqquuuup/kRd7sRd7bYBbb72VF0YSLypJvKgk8aKSxItCEv8aknhRSeJFIYnn9uqv/uq8xmu8Bvfb29vjl3/5l7njjjuQxFVXXfUvs83/Zrb5n8Y2/91s81/t5ptvBuAf/uEffpurrrrqqquu+tehctVVV1111VX/S7zO67zOewP89V//Nbu7u7wgknhRSeJFJYkXhSReVJL415DEi0ISLypJPNCrv/qr8xqv8Rrcb29vj1/+5V/mjjvu4H62eUEkcdVV/5/Y5v8C2/xPZZv/brb572AbgGPHjgFw33333cpVV1111VVX/etQueqqq6666qr/Jd7xHd/xswD+6q/+ihdEEi8qSbwoJPGiksSLShIvKkm8qCTxopLE/V791V+d13iN1+B+e3t7/OEf/iGPe9zj+NewzQsiiauu+t/INv/X2OZ/Ktv8T2Cb/w62ueqqq6666qr/QFSuuuqqq6666n+B13md13nva6655sEAt956K8+PJF4UknhRSeJFJYkXlSReVJJ4UUniRSUJgFd/9VfnNV7jNbjf3t4ef/RHf8Q//MM/8B/NNi+MJK666r+Lbf6vss3/ZLb5n8I2/x1s84LcfPPNAPzDP/zDb3PVVVddddVV/3pUrrrqqquuuup/gRd7sRd7LYDf+q3f4vmRxItCEi8qSbyoJPGiksSLShIvKkm8qCTx6q/+6rzGa7wG99vb2+OP/uiP+Id/+Af+u9jmhZHEVVf9W9jm/wvb/G9gm/8JbPPfxTYvimPHjgFw33333cpVV1111VVX/etRueqqq6666qr/BV7ndV7nvQH++q//mgeSxItKEi8qSbyoJPGikMS/hiReVJJ4UUji1V/91XmN13gN7re3t8cf/dEf8Q//8A/8T2ebF4Ukrvr/wzb/X9nmfwvb/E9h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STzTfffddytXXXXVVVdd9R8PPehBD+Kqq6666qqrrrrqqquuuuqqq6666qqrrvo/icpVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KfwQul2P7hK2iWwAAAABJRU5ErkJggg==) - - diff --git a/docs/kcl/extrude.md b/docs/kcl/extrude.md index 7a0d18735..6c9e0ebdf 100644 --- a/docs/kcl/extrude.md +++ b/docs/kcl/extrude.md @@ -10,13 +10,13 @@ You can provide more than one sketch to extrude, and they will all be extruded i ```kcl extrude( - sketches: [[[Sketch](/docs/kcl/types/Sketch)]](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)), - length: [number](/docs/kcl/types/number), - symmetric?: [bool](/docs/kcl/types/bool), - bidirectionalLength?: [number](/docs/kcl/types/number), - tagStart?: [TagDeclarator](/docs/kcl/types#tag-declaration), - tagEnd?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)) + sketches: [Sketch], + length: number, + symmetric?: bool, + bidirectionalLength?: number, + tagStart?: TagDeclarator, + tagEnd?: TagDeclarator, +): [Solid] ``` @@ -24,16 +24,16 @@ extrude( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketches` | [`[Sketch]`](/docs/kcl/types/Sketch) | Which sketch or sketches should be extruded | Yes | -| `length` | [`number`](/docs/kcl/types/number) | How far to extrude the given sketches | Yes | -| `symmetric` | [`bool`](/docs/kcl/types/bool) | If true, the extrusion will happen symmetrically around the sketch. Otherwise, the | No | -| `bidirectionalLength` | [`number`](/docs/kcl/types/number) | If specified, will also extrude in the opposite direction to 'distance' to the specified distance. If 'symmetric' is true, this value is ignored. | No | -| `tagStart` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the start of the extrusion, i.e. the original sketch | No | -| `tagEnd` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the end of the extrusion, i.e. the new face created by extruding the original sketch | No | +| `sketches` | [`[Sketch]`](/docs/kcl/types/std-types-Sketch) | Which sketch or sketches should be extruded | Yes | +| `length` | [`number`](/docs/kcl/types/std-types-number) | How far to extrude the given sketches | Yes | +| `symmetric` | [`bool`](/docs/kcl/types/std-types-bool) | If true, the extrusion will happen symmetrically around the sketch. Otherwise, the | No | +| `bidirectionalLength` | [`number`](/docs/kcl/types/std-types-number) | If specified, will also extrude in the opposite direction to 'distance' to the specified distance. If 'symmetric' is true, this value is ignored. | No | +| `tagStart` | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | A named tag for the face at the start of the extrusion, i.e. the original sketch | No | +| `tagEnd` | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | A named tag for the face at the end of the extrusion, i.e. the new face created by extruding the original sketch | No | ### Returns -[`[Solid]`](/docs/kcl/types/Solid) +[`[Solid]`](/docs/kcl/types/std-types-Solid) ### Examples diff --git a/docs/kcl/fromCm.md b/docs/kcl/fromCm.md deleted file mode 100644 index 152a4e6c7..000000000 --- a/docs/kcl/fromCm.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "fromCm" -excerpt: "Converts a number from centimeters to the current default unit." -layout: manual ---- - -**WARNING:** This function is deprecated. - -Converts a number from centimeters to the current default unit. - -*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42cm`) or the `to...` conversion functions. - -No matter what units the current file uses, this function will always return a number equivalent to the input in centimeters. - -For example, if the current file uses inches, `fromCm(1)` will return `0.393701`. If the current file uses millimeters, `fromCm(1)` will return `10`. If the current file uses centimeters, `fromCm(1)` will return `1`. - -**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function. - -We merely provide these functions for convenience and readability, as `fromCm(10)` is more readable that your intent is "I want 10 centimeters" than `10 * 10`, if the file settings are in millimeters. - -```js -fromCm(input: number): number -``` - -### Tags - -* `units` - - -### Arguments - -| Name | Type | Description | Required | -|----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | - -### Returns - -[`number`](/docs/kcl/types/number) - - -### Examples - -```js -totalWidth = fromCm(10) -``` - -![Rendered example of fromCm 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAABMiklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V/FPwKn4gueWQqZ4gAAAABJRU5ErkJggg==) - - diff --git a/docs/kcl/fromFt.md b/docs/kcl/fromFt.md deleted file mode 100644 index 945e6ada3..000000000 --- a/docs/kcl/fromFt.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "fromFt" -excerpt: "Converts a number from feet to the current default unit." -layout: manual ---- - -**WARNING:** This function is deprecated. - -Converts a number from feet to the current default unit. - -*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42ft`) or the `to...` conversion functions. - -No matter what units the current file uses, this function will always return a number equivalent to the input in feet. - -For example, if the current file uses inches, `fromFt(1)` will return `12`. If the current file uses millimeters, `fromFt(1)` will return `304.8`. If the current file uses feet, `fromFt(1)` will return `1`. - -**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function. - -We merely provide these functions for convenience and readability, as `fromFt(10)` is more readable that your intent is "I want 10 feet" than `10 * 304.8`, if the file settings are in millimeters. - -```js -fromFt(input: number): number -``` - -### Tags - -* `units` - - -### Arguments - -| Name | Type | Description | Required | -|----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | - -### Returns - -[`number`](/docs/kcl/types/number) - - -### Examples - -```js -totalWidth = fromFt(10) -``` - -![Rendered example of fromFt 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAABMiklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V/FPwKn4gueWQqZ4gAAAABJRU5ErkJggg==) - - diff --git a/docs/kcl/fromInches.md b/docs/kcl/fromInches.md deleted file mode 100644 index d64a2477b..000000000 --- a/docs/kcl/fromInches.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "fromInches" -excerpt: "Converts a number from inches to the current default unit." -layout: manual ---- - -**WARNING:** This function is deprecated. - -Converts a number from inches to the current default unit. - -*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42inch`) or the `to...` conversion functions. - -No matter what units the current file uses, this function will always return a number equivalent to the input in inches. - -For example, if the current file uses inches, `fromInches(1)` will return `1`. If the current file uses millimeters, `fromInches(1)` will return `25.4`. - -**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function. - -We merely provide these functions for convenience and readability, as `fromInches(10)` is more readable that your intent is "I want 10 inches" than `10 * 25.4`, if the file settings are in millimeters. - -```js -fromInches(input: number): number -``` - -### Tags - -* `units` - - -### Arguments - -| Name | Type | Description | Required | -|----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | - -### Returns - -[`number`](/docs/kcl/types/number) - - -### Examples - -```js -totalWidth = fromInches(10) -``` - -![Rendered example of fromInches 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAABMiklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V/FPwKn4gueWQqZ4gAAAABJRU5ErkJggg==) - - diff --git a/docs/kcl/fromM.md b/docs/kcl/fromM.md deleted file mode 100644 index 3fe12845f..000000000 --- a/docs/kcl/fromM.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "fromM" -excerpt: "Converts a number from meters to the current default unit." -layout: manual ---- - -**WARNING:** This function is deprecated. - -Converts a number from meters to the current default unit. - -*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42m`) or the `to...` conversion functions. - -No matter what units the current file uses, this function will always return a number equivalent to the input in meters. - -For example, if the current file uses inches, `fromM(1)` will return `39.3701`. If the current file uses millimeters, `fromM(1)` will return `1000`. If the current file uses meters, `fromM(1)` will return `1`. - -**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function. - -We merely provide these functions for convenience and readability, as `fromM(10)` is more readable that your intent is "I want 10 meters" than `10 * 1000`, if the file settings are in millimeters. - -```js -fromM(input: number): number -``` - -### Tags - -* `units` - - -### Arguments - -| Name | Type | Description | Required | -|----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | - -### Returns - -[`number`](/docs/kcl/types/number) - - -### Examples - -```js -totalWidth = 10 * fromM(10) -``` - -![Rendered example of fromM 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAABMiklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V/FPwKn4gueWQqZ4gAAAABJRU5ErkJggg==) - - diff --git a/docs/kcl/fromMm.md b/docs/kcl/fromMm.md deleted file mode 100644 index 40fc7b45e..000000000 --- a/docs/kcl/fromMm.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "fromMm" -excerpt: "Converts a number from mm to the current default unit." -layout: manual ---- - -**WARNING:** This function is deprecated. - -Converts a number from mm to the current default unit. - -*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42mm`) or the `to...` conversion functions. - -No matter what units the current file uses, this function will always return a number equivalent to the input in millimeters. - -For example, if the current file uses inches, `fromMm(1)` will return `1/25.4`. If the current file uses millimeters, `fromMm(1)` will return `1`. - -**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function. - -We merely provide these functions for convenience and readability, as `fromMm(10)` is more readable that your intent is "I want 10 millimeters" than `10 * (1/25.4)`, if the file settings are in inches. - -```js -fromMm(input: number): number -``` - -### Tags - -* `units` - - -### Arguments - -| Name | Type | Description | Required | -|----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | - -### Returns - -[`number`](/docs/kcl/types/number) - - -### Examples - -```js -totalWidth = fromMm(10) -``` - -![Rendered example of fromMm 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAABMiklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V/FPwKn4gueWQqZ4gAAAABJRU5ErkJggg==) - - diff --git a/docs/kcl/fromYd.md b/docs/kcl/fromYd.md deleted file mode 100644 index 01c4707d5..000000000 --- a/docs/kcl/fromYd.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "fromYd" -excerpt: "Converts a number from yards to the current default unit." -layout: manual ---- - -**WARNING:** This function is deprecated. - -Converts a number from yards to the current default unit. - -*DEPRECATED* prefer using explicit numeric suffixes (e.g., `42yd`) or the `to...` conversion functions. - -No matter what units the current file uses, this function will always return a number equivalent to the input in yards. - -For example, if the current file uses inches, `fromYd(1)` will return `36`. If the current file uses millimeters, `fromYd(1)` will return `914.4`. If the current file uses yards, `fromYd(1)` will return `1`. - -**Caution**: This function is only intended to be used when you absolutely MUST have different units in your code than the file settings. Otherwise, it is a bad pattern to use this function. - -We merely provide these functions for convenience and readability, as `fromYd(10)` is more readable that your intent is "I want 10 yards" than `10 * 914.4`, if the file settings are in millimeters. - -```js -fromYd(input: number): number -``` - -### Tags - -* `units` - - -### Arguments - -| Name | Type | Description | Required | -|----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | - -### Returns - -[`number`](/docs/kcl/types/number) - - -### Examples - -```js -totalWidth = fromYd(10) -``` - -![Rendered example of fromYd 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAABMiklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V/FPwKn4gueWQqZ4gAAAABJRU5ErkJggg==) - - diff --git a/docs/kcl/std-helix.md b/docs/kcl/functions/std-helix.md similarity index 99% rename from docs/kcl/std-helix.md rename to docs/kcl/functions/std-helix.md index d1a89818b..5b018d334 100644 --- a/docs/kcl/std-helix.md +++ b/docs/kcl/functions/std-helix.md @@ -10,14 +10,14 @@ Create a helix. ```kcl helix( - revolutions: [number](/docs/kcl/types/number)(_), - angleStart: [number](/docs/kcl/types/number)(Angle), - ccw?: [bool](/docs/kcl/types/bool), - radius?: [number](/docs/kcl/types/number)(Length), - axis?: [Axis3d](/docs/kcl/types/Axis3d) | [Edge](/docs/kcl/types/Edge), - length?: [number](/docs/kcl/types/number)(Length), - cylinder?: [Solid](/docs/kcl/types/Solid), -): [Helix](/docs/kcl/types/Helix) + revolutions: number(_), + angleStart: number(Angle), + ccw?: bool, + radius?: number(Length), + axis?: Axis3d | Edge, + length?: number(Length), + cylinder?: Solid, +): Helix ``` @@ -27,15 +27,15 @@ helix( |----------|------|-------------|----------| | `revolutions` | `number(_)` | Number of revolutions. | Yes | | `angleStart` | `number(Angle)` | Start angle. | Yes | -| `ccw` | [`bool`](/docs/kcl/types/bool) | Is the helix rotation counter clockwise? The default is `false`. | No | +| `ccw` | [`bool`](/docs/kcl/types/std-types-bool) | Is the helix rotation counter clockwise? The default is `false`. | No | | `radius` | `number(Length)` | Radius of the helix. | No | -| `axis` | [`Axis3d`](/docs/kcl/types/Axis3d) or [`Edge`](/docs/kcl/types/Edge) | Axis to use for the helix. | No | +| `axis` | [`Axis3d`](/docs/kcl/types/std-types-Axis3d) or [`Edge`](/docs/kcl/types/std-types-Edge) | Axis to use for the helix. | No | | `length` | `number(Length)` | Length of the helix. This is not necessary if the helix is created around an edge. If not given the length of the edge is used. | No | -| `cylinder` | [`Solid`](/docs/kcl/types/Solid) | Cylinder to create the helix on. | No | +| `cylinder` | [`Solid`](/docs/kcl/types/std-types-Solid) | Cylinder to create the helix on. | No | ### Returns -[`Helix`](/docs/kcl/types/Helix) +[`Helix`](/docs/kcl/types/std-types-Helix) ### Examples diff --git a/docs/kcl/std-math-abs.md b/docs/kcl/functions/std-math-abs.md similarity index 99% rename from docs/kcl/std-math-abs.md rename to docs/kcl/functions/std-math-abs.md index 775bf770d..795b87b02 100644 --- a/docs/kcl/std-math-abs.md +++ b/docs/kcl/functions/std-math-abs.md @@ -9,7 +9,7 @@ Compute the absolute value of a number. ```kcl -abs(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) +abs(@input: number): number ``` @@ -17,11 +17,11 @@ abs(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | +| `input` | [`number`](/docs/kcl/types/std-types-number) | | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-acos.md b/docs/kcl/functions/std-math-acos.md similarity index 99% rename from docs/kcl/std-math-acos.md rename to docs/kcl/functions/std-math-acos.md index 6ca5b68fb..a7751c2a4 100644 --- a/docs/kcl/std-math-acos.md +++ b/docs/kcl/functions/std-math-acos.md @@ -9,7 +9,7 @@ Compute the arccosine of a number. ```kcl -acos(@num: [number](/docs/kcl/types/number)(_)): [number](/docs/kcl/types/number)(rad) +acos(@num: number(_)): number(rad) ``` diff --git a/docs/kcl/std-math-asin.md b/docs/kcl/functions/std-math-asin.md similarity index 99% rename from docs/kcl/std-math-asin.md rename to docs/kcl/functions/std-math-asin.md index c475f99a9..50d982300 100644 --- a/docs/kcl/std-math-asin.md +++ b/docs/kcl/functions/std-math-asin.md @@ -9,7 +9,7 @@ Compute the arcsine of a number. ```kcl -asin(@num: [number](/docs/kcl/types/number)(_)): [number](/docs/kcl/types/number)(rad) +asin(@num: number(_)): number(rad) ``` diff --git a/docs/kcl/std-math-atan.md b/docs/kcl/functions/std-math-atan.md similarity index 87% rename from docs/kcl/std-math-atan.md rename to docs/kcl/functions/std-math-atan.md index b3a873324..63d6a7bea 100644 --- a/docs/kcl/std-math-atan.md +++ b/docs/kcl/functions/std-math-atan.md @@ -9,7 +9,7 @@ Compute the arctangent of a number. Consider using `atan2()` instead for the true inverse of tangent. ```kcl -atan(@num: [number](/docs/kcl/types/number)(_)): [number](/docs/kcl/types/number)(rad) +atan(@num: number(_)): number(rad) ``` diff --git a/docs/kcl/std-math-atan2.md b/docs/kcl/functions/std-math-atan2.md similarity index 99% rename from docs/kcl/std-math-atan2.md rename to docs/kcl/functions/std-math-atan2.md index 8df61ef69..30432058d 100644 --- a/docs/kcl/std-math-atan2.md +++ b/docs/kcl/functions/std-math-atan2.md @@ -10,9 +10,9 @@ Compute the four quadrant arctangent of Y and X. ```kcl atan2( - y: [number](/docs/kcl/types/number)(Length), - x: [number](/docs/kcl/types/number)(Length), -): [number](/docs/kcl/types/number)(rad) + y: number(Length), + x: number(Length), +): number(rad) ``` diff --git a/docs/kcl/std-math-ceil.md b/docs/kcl/functions/std-math-ceil.md similarity index 99% rename from docs/kcl/std-math-ceil.md rename to docs/kcl/functions/std-math-ceil.md index 376b22b96..d5e0612b1 100644 --- a/docs/kcl/std-math-ceil.md +++ b/docs/kcl/functions/std-math-ceil.md @@ -9,7 +9,7 @@ Compute the smallest integer greater than or equal to a number. ```kcl -ceil(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) +ceil(@input: number): number ``` @@ -17,11 +17,11 @@ ceil(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | +| `input` | [`number`](/docs/kcl/types/std-types-number) | | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-cos.md b/docs/kcl/functions/std-math-cos.md similarity index 99% rename from docs/kcl/std-math-cos.md rename to docs/kcl/functions/std-math-cos.md index d5d447067..92b39e469 100644 --- a/docs/kcl/std-math-cos.md +++ b/docs/kcl/functions/std-math-cos.md @@ -9,7 +9,7 @@ Compute the cosine of a number. ```kcl -cos(@num: [number](/docs/kcl/types/number)(Angle)): [number](/docs/kcl/types/number)(_) +cos(@num: number(Angle)): number(_) ``` diff --git a/docs/kcl/std-math-floor.md b/docs/kcl/functions/std-math-floor.md similarity index 99% rename from docs/kcl/std-math-floor.md rename to docs/kcl/functions/std-math-floor.md index 9c410ab66..6745622ac 100644 --- a/docs/kcl/std-math-floor.md +++ b/docs/kcl/functions/std-math-floor.md @@ -9,7 +9,7 @@ Compute the largest integer less than or equal to a number. ```kcl -floor(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) +floor(@input: number): number ``` @@ -17,11 +17,11 @@ floor(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | +| `input` | [`number`](/docs/kcl/types/std-types-number) | | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-ln.md b/docs/kcl/functions/std-math-ln.md similarity index 99% rename from docs/kcl/std-math-ln.md rename to docs/kcl/functions/std-math-ln.md index a958f9cb6..bf5a20aaa 100644 --- a/docs/kcl/std-math-ln.md +++ b/docs/kcl/functions/std-math-ln.md @@ -9,7 +9,7 @@ Compute the natural logarithm of the number. ```kcl -ln(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) +ln(@input: number): number ``` @@ -17,11 +17,11 @@ ln(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | +| `input` | [`number`](/docs/kcl/types/std-types-number) | | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-log.md b/docs/kcl/functions/std-math-log.md similarity index 99% rename from docs/kcl/std-math-log.md rename to docs/kcl/functions/std-math-log.md index c4492573c..46c25b1d4 100644 --- a/docs/kcl/std-math-log.md +++ b/docs/kcl/functions/std-math-log.md @@ -12,9 +12,9 @@ and `log10` can produce more accurate results for base 10. ```kcl log( - @input: [number](/docs/kcl/types/number), - base: [number](/docs/kcl/types/number)(_), -): [number](/docs/kcl/types/number) + @input: number, + base: number(_), +): number ``` @@ -22,12 +22,12 @@ log( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | The number to compute the logarithm of. | Yes | +| `input` | [`number`](/docs/kcl/types/std-types-number) | The number to compute the logarithm of. | Yes | | `base` | `number(_)` | The base of the logarithm. | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-log10.md b/docs/kcl/functions/std-math-log10.md similarity index 99% rename from docs/kcl/std-math-log10.md rename to docs/kcl/functions/std-math-log10.md index dba8b68c9..a7be136a2 100644 --- a/docs/kcl/std-math-log10.md +++ b/docs/kcl/functions/std-math-log10.md @@ -9,7 +9,7 @@ Compute the base 10 logarithm of the number. ```kcl -log10(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) +log10(@input: number): number ``` @@ -17,11 +17,11 @@ log10(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | +| `input` | [`number`](/docs/kcl/types/std-types-number) | | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-log2.md b/docs/kcl/functions/std-math-log2.md similarity index 99% rename from docs/kcl/std-math-log2.md rename to docs/kcl/functions/std-math-log2.md index 474f3dd0f..c607e63cf 100644 --- a/docs/kcl/std-math-log2.md +++ b/docs/kcl/functions/std-math-log2.md @@ -9,7 +9,7 @@ Compute the base 2 logarithm of the number. ```kcl -log2(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) +log2(@input: number): number ``` @@ -17,11 +17,11 @@ log2(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | +| `input` | [`number`](/docs/kcl/types/std-types-number) | | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-max.md b/docs/kcl/functions/std-math-max.md similarity index 99% rename from docs/kcl/std-math-max.md rename to docs/kcl/functions/std-math-max.md index 4ce618be6..891c68ec4 100644 --- a/docs/kcl/std-math-max.md +++ b/docs/kcl/functions/std-math-max.md @@ -9,7 +9,7 @@ Compute the maximum of the given arguments. ```kcl -max(@input: [[number](/docs/kcl/types/number); 1+]): [number](/docs/kcl/types/number) +max(@input: [number; 1+]): number ``` @@ -17,11 +17,11 @@ max(@input: [[number](/docs/kcl/types/number); 1+]): [number](/docs/kcl/types/nu | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | `[number; 1+]` | An array of numbers to compute the maximum of. | Yes | +| `input` | [`[number; 1+]`](/docs/kcl/types/std-types-number) | An array of numbers to compute the maximum of. | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-min.md b/docs/kcl/functions/std-math-min.md similarity index 99% rename from docs/kcl/std-math-min.md rename to docs/kcl/functions/std-math-min.md index ecac801d0..05222ceb0 100644 --- a/docs/kcl/std-math-min.md +++ b/docs/kcl/functions/std-math-min.md @@ -9,7 +9,7 @@ Compute the minimum of the given arguments. ```kcl -min(@input: [[number](/docs/kcl/types/number); 1+]): [number](/docs/kcl/types/number) +min(@input: [number; 1+]): number ``` @@ -17,11 +17,11 @@ min(@input: [[number](/docs/kcl/types/number); 1+]): [number](/docs/kcl/types/nu | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | `[number; 1+]` | An array of numbers to compute the minimum of. | Yes | +| `input` | [`[number; 1+]`](/docs/kcl/types/std-types-number) | An array of numbers to compute the minimum of. | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-polar.md b/docs/kcl/functions/std-math-polar.md similarity index 99% rename from docs/kcl/std-math-polar.md rename to docs/kcl/functions/std-math-polar.md index 8873e2b5f..190839a08 100644 --- a/docs/kcl/std-math-polar.md +++ b/docs/kcl/functions/std-math-polar.md @@ -11,9 +11,9 @@ cartesian (x/y/z grid) coordinates. ```kcl polar( - angle: [number](/docs/kcl/types/number)(rad), - length: [number](/docs/kcl/types/number)(Length), -): [Point2d](/docs/kcl/types/Point2d) + angle: number(rad), + length: number(Length), +): Point2d ``` @@ -26,7 +26,7 @@ polar( ### Returns -[`Point2d`](/docs/kcl/types/Point2d) +[`Point2d`](/docs/kcl/types/std-types-Point2d) ### Examples diff --git a/docs/kcl/std-math-pow.md b/docs/kcl/functions/std-math-pow.md similarity index 99% rename from docs/kcl/std-math-pow.md rename to docs/kcl/functions/std-math-pow.md index 5a06e0bca..165fef823 100644 --- a/docs/kcl/std-math-pow.md +++ b/docs/kcl/functions/std-math-pow.md @@ -10,9 +10,9 @@ Compute the number to a power. ```kcl pow( - @input: [number](/docs/kcl/types/number), - exp: [number](/docs/kcl/types/number)(_), -): [number](/docs/kcl/types/number) + @input: number, + exp: number(_), +): number ``` @@ -20,12 +20,12 @@ pow( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | The number to raise. | Yes | +| `input` | [`number`](/docs/kcl/types/std-types-number) | The number to raise. | Yes | | `exp` | `number(_)` | The power to raise to. | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-rem.md b/docs/kcl/functions/std-math-rem.md similarity index 98% rename from docs/kcl/std-math-rem.md rename to docs/kcl/functions/std-math-rem.md index 95667f036..aa1a5ad2f 100644 --- a/docs/kcl/std-math-rem.md +++ b/docs/kcl/functions/std-math-rem.md @@ -11,9 +11,9 @@ If `num` is negative, the result will be too. ```kcl rem( - @num: [number](/docs/kcl/types/number), - divisor: [number](/docs/kcl/types/number), -): [number](/docs/kcl/types/number) + @num: number, + divisor: number, +): number ``` @@ -21,12 +21,12 @@ rem( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `num` | [`number`](/docs/kcl/types/number) | The number which will be divided by `divisor`. | Yes | -| `divisor` | [`number`](/docs/kcl/types/number) | The number which will divide `num`. | Yes | +| `num` | [`number`](/docs/kcl/types/std-types-number) | The number which will be divided by `divisor`. | Yes | +| `divisor` | [`number`](/docs/kcl/types/std-types-number) | The number which will divide `num`. | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-round.md b/docs/kcl/functions/std-math-round.md similarity index 99% rename from docs/kcl/std-math-round.md rename to docs/kcl/functions/std-math-round.md index 0bb9ed4de..9d643595b 100644 --- a/docs/kcl/std-math-round.md +++ b/docs/kcl/functions/std-math-round.md @@ -9,7 +9,7 @@ Round a number to the nearest integer. ```kcl -round(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) +round(@input: number): number ``` @@ -17,11 +17,11 @@ round(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | +| `input` | [`number`](/docs/kcl/types/std-types-number) | | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-sin.md b/docs/kcl/functions/std-math-sin.md similarity index 99% rename from docs/kcl/std-math-sin.md rename to docs/kcl/functions/std-math-sin.md index 965ff8ebd..b325aedd8 100644 --- a/docs/kcl/std-math-sin.md +++ b/docs/kcl/functions/std-math-sin.md @@ -9,7 +9,7 @@ Compute the sine of a number. ```kcl -sin(@num: [number](/docs/kcl/types/number)(Angle)): [number](/docs/kcl/types/number)(_) +sin(@num: number(Angle)): number(_) ``` diff --git a/docs/kcl/std-math-sqrt.md b/docs/kcl/functions/std-math-sqrt.md similarity index 99% rename from docs/kcl/std-math-sqrt.md rename to docs/kcl/functions/std-math-sqrt.md index 2b07cc97a..945a7689f 100644 --- a/docs/kcl/std-math-sqrt.md +++ b/docs/kcl/functions/std-math-sqrt.md @@ -9,7 +9,7 @@ Compute the square root of a number. ```kcl -sqrt(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) +sqrt(@input: number): number ``` @@ -17,11 +17,11 @@ sqrt(@input: [number](/docs/kcl/types/number)): [number](/docs/kcl/types/number) | Name | Type | Description | Required | |----------|------|-------------|----------| -| `input` | [`number`](/docs/kcl/types/number) | | Yes | +| `input` | [`number`](/docs/kcl/types/std-types-number) | | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/std-math-tan.md b/docs/kcl/functions/std-math-tan.md similarity index 99% rename from docs/kcl/std-math-tan.md rename to docs/kcl/functions/std-math-tan.md index 22ceb195b..034c58c0f 100644 --- a/docs/kcl/std-math-tan.md +++ b/docs/kcl/functions/std-math-tan.md @@ -9,7 +9,7 @@ Compute the tangent of a number. ```kcl -tan(@num: [number](/docs/kcl/types/number)(Angle)): [number](/docs/kcl/types/number)(_) +tan(@num: number(Angle)): number(_) ``` diff --git a/docs/kcl/std-offsetPlane.md b/docs/kcl/functions/std-offsetPlane.md similarity index 99% rename from docs/kcl/std-offsetPlane.md rename to docs/kcl/functions/std-offsetPlane.md index 5d26f6d3f..40b4fda23 100644 --- a/docs/kcl/std-offsetPlane.md +++ b/docs/kcl/functions/std-offsetPlane.md @@ -10,10 +10,10 @@ For example, if you offset the `XZ` plane by 10, the new plane will be parallel plane and 10 units away from it. ```kcl -offset[Plane](/docs/kcl/types/Plane)( - @plane: [Plane](/docs/kcl/types/Plane), - offset: [number](/docs/kcl/types/number)(Length), -): [Plane](/docs/kcl/types/Plane) +offsetPlane( + @plane: Plane, + offset: number(Length), +): Plane ``` @@ -21,12 +21,12 @@ offset[Plane](/docs/kcl/types/Plane)( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `plane` | [`Plane`](/docs/kcl/types/Plane) | The plane (e.g. `XY`) which this new plane is created from. | Yes | +| `plane` | [`Plane`](/docs/kcl/types/std-types-Plane) | The plane (e.g. `XY`) which this new plane is created from. | Yes | | `offset` | `number(Length)` | Distance from the standard plane this new plane will be created at. | Yes | ### Returns -[`Plane`](/docs/kcl/types/Plane) +[`Plane`](/docs/kcl/types/std-types-Plane) ### Examples diff --git a/docs/kcl/std-revolve.md b/docs/kcl/functions/std-revolve.md similarity index 99% rename from docs/kcl/std-revolve.md rename to docs/kcl/functions/std-revolve.md index f59bf77c1..53990f087 100644 --- a/docs/kcl/std-revolve.md +++ b/docs/kcl/functions/std-revolve.md @@ -19,15 +19,15 @@ revolved around the same axis. ```kcl revolve( - @sketches: [[Sketch](/docs/kcl/types/Sketch); 1+], - axis: [Axis2d](/docs/kcl/types/Axis2d) | [Edge](/docs/kcl/types/Edge), - angle?: [number](/docs/kcl/types/number)(Angle), - tolerance?: [number](/docs/kcl/types/number)(Length), - symmetric?: [bool](/docs/kcl/types/bool), - bidirectionalAngle?: [number](/docs/kcl/types/number)(Angle), + @sketches: [Sketch; 1+], + axis: Axis2d | Edge, + angle?: number(Angle), + tolerance?: number(Length), + symmetric?: bool, + bidirectionalAngle?: number(Angle), tagStart?: tag, tagEnd?: tag, -): [Solid](/docs/kcl/types/Solid) +): Solid ``` @@ -35,18 +35,18 @@ revolve( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketches` | `[Sketch; 1+]` | The sketch or set of sketches that should be revolved | Yes | -| `axis` | [`Axis2d`](/docs/kcl/types/Axis2d) or [`Edge`](/docs/kcl/types/Edge) | Axis of revolution. | Yes | +| `sketches` | [`[Sketch; 1+]`](/docs/kcl/types/std-types-Sketch) | The sketch or set of sketches that should be revolved | Yes | +| `axis` | [`Axis2d`](/docs/kcl/types/std-types-Axis2d) or [`Edge`](/docs/kcl/types/std-types-Edge) | Axis of revolution. | Yes | | `angle` | `number(Angle)` | Angle to revolve (in degrees). Default is 360. | No | | `tolerance` | `number(Length)` | Tolerance for the revolve operation. | No | -| `symmetric` | [`bool`](/docs/kcl/types/bool) | If true, the extrusion will happen symmetrically around the sketch. Otherwise, the extrusion will happen on only one side of the sketch. | No | +| `symmetric` | [`bool`](/docs/kcl/types/std-types-bool) | If true, the extrusion will happen symmetrically around the sketch. Otherwise, the extrusion will happen on only one side of the sketch. | No | | `bidirectionalAngle` | `number(Angle)` | If specified, will also revolve in the opposite direction to 'angle' to the specified angle. If 'symmetric' is true, this value is ignored. | No | -| `tagStart` | `tag` | A named tag for the face at the start of the revolve, i.e. the original sketch. | No | -| `tagEnd` | `tag` | A named tag for the face at the end of the revolve. | No | +| `tagStart` | [`tag`](/docs/kcl/types/std-types-tag) | A named tag for the face at the start of the revolve, i.e. the original sketch. | No | +| `tagEnd` | [`tag`](/docs/kcl/types/std-types-tag) | A named tag for the face at the end of the revolve. | No | ### Returns -[`Solid`](/docs/kcl/types/Solid) +[`Solid`](/docs/kcl/types/std-types-Solid) ### Examples diff --git a/docs/kcl/std-sketch-circle.md b/docs/kcl/functions/std-sketch-circle.md similarity index 99% rename from docs/kcl/std-sketch-circle.md rename to docs/kcl/functions/std-sketch-circle.md index 288158cc9..3b62f4f2f 100644 --- a/docs/kcl/std-sketch-circle.md +++ b/docs/kcl/functions/std-sketch-circle.md @@ -11,11 +11,11 @@ the provided (x, y) origin point. ```kcl circle( - @sketch_or_surface: [Sketch](/docs/kcl/types/Sketch) | [Plane](/docs/kcl/types/Plane) | [Face](/docs/kcl/types/Face), - center: [Point2d](/docs/kcl/types/Point2d), - radius: [number](/docs/kcl/types/number)(Length), + @sketch_or_surface: Sketch | Plane | Face, + center: Point2d, + radius: number(Length), tag?: tag, -): [Sketch](/docs/kcl/types/Sketch) +): Sketch ``` @@ -23,14 +23,14 @@ circle( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch_or_surface` | [`Sketch`](/docs/kcl/types/Sketch) or [`Plane`](/docs/kcl/types/Plane) or [`Face`](/docs/kcl/types/Face) | Sketch to extend, or plane or surface to sketch on. | Yes | -| `center` | [`Point2d`](/docs/kcl/types/Point2d) | The center of the circle. | Yes | +| `sketch_or_surface` | [`Sketch`](/docs/kcl/types/std-types-Sketch) or [`Plane`](/docs/kcl/types/std-types-Plane) or [`Face`](/docs/kcl/types/std-types-Face) | Sketch to extend, or plane or surface to sketch on. | Yes | +| `center` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | The center of the circle. | Yes | | `radius` | `number(Length)` | The radius of the circle. | Yes | -| `tag` | `tag` | Create a new tag which refers to this circle. | No | +| [`tag`](/docs/kcl/types/std-types-tag) | [`tag`](/docs/kcl/types/std-types-tag) | Create a new tag which refers to this circle. | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/std-sketch-mirror2d.md b/docs/kcl/functions/std-sketch-mirror2d.md similarity index 99% rename from docs/kcl/std-sketch-mirror2d.md rename to docs/kcl/functions/std-sketch-mirror2d.md index 53ea5ed58..fa4b9e23a 100644 --- a/docs/kcl/std-sketch-mirror2d.md +++ b/docs/kcl/functions/std-sketch-mirror2d.md @@ -12,9 +12,9 @@ Mirror occurs around a local sketch axis rather than a global axis. ```kcl mirror2d( - @sketches: [[Sketch](/docs/kcl/types/Sketch); 1+], - axis: [Axis2d](/docs/kcl/types/Axis2d) | [Edge](/docs/kcl/types/Edge), -): [Sketch](/docs/kcl/types/Sketch) + @sketches: [Sketch; 1+], + axis: Axis2d | Edge, +): Sketch ``` @@ -22,12 +22,12 @@ mirror2d( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketches` | `[Sketch; 1+]` | The sketch or sketches to be reflected. | Yes | -| `axis` | [`Axis2d`](/docs/kcl/types/Axis2d) or [`Edge`](/docs/kcl/types/Edge) | The axis to reflect around. | Yes | +| `sketches` | [`[Sketch; 1+]`](/docs/kcl/types/std-types-Sketch) | The sketch or sketches to be reflected. | Yes | +| `axis` | [`Axis2d`](/docs/kcl/types/std-types-Axis2d) or [`Edge`](/docs/kcl/types/std-types-Edge) | The axis to reflect around. | Yes | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/std-solid-chamfer.md b/docs/kcl/functions/std-solid-chamfer.md similarity index 99% rename from docs/kcl/std-solid-chamfer.md rename to docs/kcl/functions/std-solid-chamfer.md index 2c9fbf23f..087d3ae4e 100644 --- a/docs/kcl/std-solid-chamfer.md +++ b/docs/kcl/functions/std-solid-chamfer.md @@ -12,11 +12,11 @@ a sharp, straight transitional edge. ```kcl chamfer( - @solid: [Solid](/docs/kcl/types/Solid), - length: [number](/docs/kcl/types/number)(Length), - tags: [[Edge](/docs/kcl/types/Edge); 1+], + @solid: Solid, + length: number(Length), + tags: [Edge; 1+], tag?: tag, -): [Solid](/docs/kcl/types/Solid) +): Solid ``` @@ -24,14 +24,14 @@ chamfer( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solid` | [`Solid`](/docs/kcl/types/Solid) | The solid whose edges should be chamfered | Yes | +| `solid` | [`Solid`](/docs/kcl/types/std-types-Solid) | The solid whose edges should be chamfered | Yes | | `length` | `number(Length)` | The length of the chamfer | Yes | -| `tags` | `[Edge; 1+]` | The paths you want to chamfer | Yes | -| `tag` | `tag` | Create a new tag which refers to this chamfer | No | +| `tags` | [`[Edge; 1+]`](/docs/kcl/types/std-types-Edge) | The paths you want to chamfer | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`tag`](/docs/kcl/types/std-types-tag) | Create a new tag which refers to this chamfer | No | ### Returns -[`Solid`](/docs/kcl/types/Solid) +[`Solid`](/docs/kcl/types/std-types-Solid) ### Examples @@ -76,7 +76,7 @@ sg = startSketchOn(XY) return sg } -part001 = cube([0,0], 20) +part001 = cube(pos = [0,0], scale = 20) |> close(tag = $line1) |> extrude(length = 20) // We tag the chamfer to reference it later. diff --git a/docs/kcl/std-solid-fillet.md b/docs/kcl/functions/std-solid-fillet.md similarity index 99% rename from docs/kcl/std-solid-fillet.md rename to docs/kcl/functions/std-solid-fillet.md index c7c67a103..bfa7bb36d 100644 --- a/docs/kcl/std-solid-fillet.md +++ b/docs/kcl/functions/std-solid-fillet.md @@ -12,12 +12,12 @@ will smoothly blend the transition. ```kcl fillet( - @solid: [Solid](/docs/kcl/types/Solid), - radius: [number](/docs/kcl/types/number)(Length), - tags: [[Edge](/docs/kcl/types/Edge); 1+], - tolerance?: [number](/docs/kcl/types/number)(Length), + @solid: Solid, + radius: number(Length), + tags: [Edge; 1+], + tolerance?: number(Length), tag?: tag, -): [Solid](/docs/kcl/types/Solid) +): Solid ``` @@ -25,15 +25,15 @@ fillet( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solid` | [`Solid`](/docs/kcl/types/Solid) | The solid whose edges should be filletted | Yes | +| `solid` | [`Solid`](/docs/kcl/types/std-types-Solid) | The solid whose edges should be filletted | Yes | | `radius` | `number(Length)` | The radius of the fillet | Yes | -| `tags` | `[Edge; 1+]` | The paths you want to fillet | Yes | +| `tags` | [`[Edge; 1+]`](/docs/kcl/types/std-types-Edge) | The paths you want to fillet | Yes | | `tolerance` | `number(Length)` | The tolerance for this fillet | No | -| `tag` | `tag` | Create a new tag which refers to this fillet | No | +| [`tag`](/docs/kcl/types/std-types-tag) | [`tag`](/docs/kcl/types/std-types-tag) | Create a new tag which refers to this fillet | No | ### Returns -[`Solid`](/docs/kcl/types/Solid) +[`Solid`](/docs/kcl/types/std-types-Solid) ### Examples diff --git a/docs/kcl/std-solid-hollow.md b/docs/kcl/functions/std-solid-hollow.md similarity index 99% rename from docs/kcl/std-solid-hollow.md rename to docs/kcl/functions/std-solid-hollow.md index dfc41a983..bcaba01aa 100644 --- a/docs/kcl/std-solid-hollow.md +++ b/docs/kcl/functions/std-solid-hollow.md @@ -11,9 +11,9 @@ provided thickness remains around the exterior of the shape. ```kcl hollow( - @solid: [Solid](/docs/kcl/types/Solid), - thickness: [number](/docs/kcl/types/number)(Length), -): [Solid](/docs/kcl/types/Solid) + @solid: Solid, + thickness: number(Length), +): Solid ``` @@ -21,12 +21,12 @@ hollow( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solid` | [`Solid`](/docs/kcl/types/Solid) | Which solid to hollow out | Yes | +| `solid` | [`Solid`](/docs/kcl/types/std-types-Solid) | Which solid to hollow out | Yes | | `thickness` | `number(Length)` | The thickness of the remaining shell | Yes | ### Returns -[`Solid`](/docs/kcl/types/Solid) +[`Solid`](/docs/kcl/types/std-types-Solid) ### Examples diff --git a/docs/kcl/std-solid-shell.md b/docs/kcl/functions/std-solid-shell.md similarity index 99% rename from docs/kcl/std-solid-shell.md rename to docs/kcl/functions/std-solid-shell.md index 38a28970a..2f119ced7 100644 --- a/docs/kcl/std-solid-shell.md +++ b/docs/kcl/functions/std-solid-shell.md @@ -11,10 +11,10 @@ provided thickness remains, taking volume starting at the providedface, leaving ```kcl shell( - @solids: [[Solid](/docs/kcl/types/Solid); 1+], - thickness: [number](/docs/kcl/types/number)(Length), + @solids: [Solid; 1+], + thickness: number(Length), faces: [tag; 1+], -): [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)) +): [Solid] ``` @@ -22,13 +22,13 @@ shell( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | `[Solid; 1+]` | Which solid (or solids) to shell out | Yes | +| `solids` | [`[Solid; 1+]`](/docs/kcl/types/std-types-Solid) | Which solid (or solids) to shell out | Yes | | `thickness` | `number(Length)` | The thickness of the shell | Yes | -| `faces` | `[tag; 1+]` | The faces you want removed | Yes | +| `faces` | [`[tag; 1+]`](/docs/kcl/types/std-types-tag) | The faces you want removed | Yes | ### Returns -[`[Solid]`](/docs/kcl/types/Solid) +[`[Solid]`](/docs/kcl/types/std-types-Solid) ### Examples diff --git a/docs/kcl/std-units-toCentimeters.md b/docs/kcl/functions/std-units-toCentimeters.md similarity index 77% rename from docs/kcl/std-units-toCentimeters.md rename to docs/kcl/functions/std-units-toCentimeters.md index ace5545d1..91b4ee4bd 100644 --- a/docs/kcl/std-units-toCentimeters.md +++ b/docs/kcl/functions/std-units-toCentimeters.md @@ -9,7 +9,7 @@ Convert a number to centimeters from its current units. ```kcl -units::toCentimeters(@num: [number](/docs/kcl/types/number)(cm)): [number](/docs/kcl/types/number)(cm) +units::toCentimeters(@num: number(cm)): number(cm) ``` diff --git a/docs/kcl/std-units-toDegrees.md b/docs/kcl/functions/std-units-toDegrees.md similarity index 99% rename from docs/kcl/std-units-toDegrees.md rename to docs/kcl/functions/std-units-toDegrees.md index f933d817f..269f2ee83 100644 --- a/docs/kcl/std-units-toDegrees.md +++ b/docs/kcl/functions/std-units-toDegrees.md @@ -9,7 +9,7 @@ Converts a number to degrees from its current units. ```kcl -units::toDegrees(@num: [number](/docs/kcl/types/number)(deg)): [number](/docs/kcl/types/number)(deg) +units::toDegrees(@num: number(deg)): number(deg) ``` diff --git a/docs/kcl/std-units-toFeet.md b/docs/kcl/functions/std-units-toFeet.md similarity index 78% rename from docs/kcl/std-units-toFeet.md rename to docs/kcl/functions/std-units-toFeet.md index e641eb290..389efa16d 100644 --- a/docs/kcl/std-units-toFeet.md +++ b/docs/kcl/functions/std-units-toFeet.md @@ -9,7 +9,7 @@ Convert a number to feet from its current units. ```kcl -units::toFeet(@num: [number](/docs/kcl/types/number)(ft)): [number](/docs/kcl/types/number)(ft) +units::toFeet(@num: number(ft)): number(ft) ``` diff --git a/docs/kcl/std-units-toInches.md b/docs/kcl/functions/std-units-toInches.md similarity index 78% rename from docs/kcl/std-units-toInches.md rename to docs/kcl/functions/std-units-toInches.md index 4b5e96720..c38ed2379 100644 --- a/docs/kcl/std-units-toInches.md +++ b/docs/kcl/functions/std-units-toInches.md @@ -9,7 +9,7 @@ Convert a number to inches from its current units. ```kcl -units::toInches(@num: [number](/docs/kcl/types/number)(in)): [number](/docs/kcl/types/number)(in) +units::toInches(@num: number(in)): number(in) ``` diff --git a/docs/kcl/std-units-toMeters.md b/docs/kcl/functions/std-units-toMeters.md similarity index 78% rename from docs/kcl/std-units-toMeters.md rename to docs/kcl/functions/std-units-toMeters.md index e8b059b99..d9e214e67 100644 --- a/docs/kcl/std-units-toMeters.md +++ b/docs/kcl/functions/std-units-toMeters.md @@ -9,7 +9,7 @@ Convert a number to meters from its current units. ```kcl -units::toMeters(@num: [number](/docs/kcl/types/number)(m)): [number](/docs/kcl/types/number)(m) +units::toMeters(@num: number(m)): number(m) ``` diff --git a/docs/kcl/std-units-toMillimeters.md b/docs/kcl/functions/std-units-toMillimeters.md similarity index 77% rename from docs/kcl/std-units-toMillimeters.md rename to docs/kcl/functions/std-units-toMillimeters.md index 1a485b2b5..dafde0542 100644 --- a/docs/kcl/std-units-toMillimeters.md +++ b/docs/kcl/functions/std-units-toMillimeters.md @@ -9,7 +9,7 @@ Convert a number to millimeters from its current units. ```kcl -units::toMillimeters(@num: [number](/docs/kcl/types/number)(mm)): [number](/docs/kcl/types/number)(mm) +units::toMillimeters(@num: number(mm)): number(mm) ``` diff --git a/docs/kcl/std-units-toRadians.md b/docs/kcl/functions/std-units-toRadians.md similarity index 99% rename from docs/kcl/std-units-toRadians.md rename to docs/kcl/functions/std-units-toRadians.md index 6857f4bd7..4fd89d332 100644 --- a/docs/kcl/std-units-toRadians.md +++ b/docs/kcl/functions/std-units-toRadians.md @@ -9,7 +9,7 @@ Converts a number to radians from its current units. ```kcl -units::toRadians(@num: [number](/docs/kcl/types/number)(rad)): [number](/docs/kcl/types/number)(rad) +units::toRadians(@num: number(rad)): number(rad) ``` diff --git a/docs/kcl/std-units-toYards.md b/docs/kcl/functions/std-units-toYards.md similarity index 78% rename from docs/kcl/std-units-toYards.md rename to docs/kcl/functions/std-units-toYards.md index 26de1bbfc..52293f421 100644 --- a/docs/kcl/std-units-toYards.md +++ b/docs/kcl/functions/std-units-toYards.md @@ -9,7 +9,7 @@ Converts a number to yards from its current units. ```kcl -units::toYards(@num: [number](/docs/kcl/types/number)(yd)): [number](/docs/kcl/types/number)(yd) +units::toYards(@num: number(yd)): number(yd) ``` diff --git a/docs/kcl/getCommonEdge.md b/docs/kcl/getCommonEdge.md index e3e4ec748..32b65ab72 100644 --- a/docs/kcl/getCommonEdge.md +++ b/docs/kcl/getCommonEdge.md @@ -9,7 +9,7 @@ Get the shared edge between two faces. ```kcl -getCommon[Edge](/docs/kcl/types/Edge)(faces: [[TagIdentifier](/docs/kcl/types#tag-identifier)]): Uuid +getCommonEdge(faces: [TagIdentifier]): Uuid ``` @@ -17,7 +17,7 @@ getCommon[Edge](/docs/kcl/types/Edge)(faces: [[TagIdentifier](/docs/kcl/types#ta | Name | Type | Description | Required | |----------|------|-------------|----------| -| `faces` | `[TagIdentifier]` | The tags of the faces you want to find the common edge between | Yes | +| `faces` | [`[TagIdentifier]`](/docs/kcl/types#TagIdentifier) | The tags of the faces you want to find the common edge between | Yes | ### Returns diff --git a/docs/kcl/getNextAdjacentEdge.md b/docs/kcl/getNextAdjacentEdge.md index efb08372b..1619bde57 100644 --- a/docs/kcl/getNextAdjacentEdge.md +++ b/docs/kcl/getNextAdjacentEdge.md @@ -9,7 +9,7 @@ Get the next adjacent edge to the edge given. ```kcl -getNextAdjacent[Edge](/docs/kcl/types/Edge)(edge: [TagIdentifier](/docs/kcl/types#tag-identifier)): Uuid +getNextAdjacentEdge(edge: TagIdentifier): Uuid ``` @@ -17,7 +17,7 @@ getNextAdjacent[Edge](/docs/kcl/types/Edge)(edge: [TagIdentifier](/docs/kcl/type | Name | Type | Description | Required | |----------|------|-------------|----------| -| `edge` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The tag of the edge you want to find the next adjacent edge of. | Yes | +| `edge` | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The tag of the edge you want to find the next adjacent edge of. | Yes | ### Returns diff --git a/docs/kcl/getOppositeEdge.md b/docs/kcl/getOppositeEdge.md index 5503c82fa..430e56cd8 100644 --- a/docs/kcl/getOppositeEdge.md +++ b/docs/kcl/getOppositeEdge.md @@ -9,7 +9,7 @@ Get the opposite edge to the edge given. ```kcl -getOpposite[Edge](/docs/kcl/types/Edge)(edge: [TagIdentifier](/docs/kcl/types#tag-identifier)): Uuid +getOppositeEdge(edge: TagIdentifier): Uuid ``` @@ -17,7 +17,7 @@ getOpposite[Edge](/docs/kcl/types/Edge)(edge: [TagIdentifier](/docs/kcl/types#ta | Name | Type | Description | Required | |----------|------|-------------|----------| -| `edge` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The tag of the edge you want to find the opposite edge of. | Yes | +| `edge` | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The tag of the edge you want to find the opposite edge of. | Yes | ### Returns diff --git a/docs/kcl/getPreviousAdjacentEdge.md b/docs/kcl/getPreviousAdjacentEdge.md index 07f7dca58..75fe03a09 100644 --- a/docs/kcl/getPreviousAdjacentEdge.md +++ b/docs/kcl/getPreviousAdjacentEdge.md @@ -9,7 +9,7 @@ Get the previous adjacent edge to the edge given. ```kcl -getPreviousAdjacent[Edge](/docs/kcl/types/Edge)(edge: [TagIdentifier](/docs/kcl/types#tag-identifier)): Uuid +getPreviousAdjacentEdge(edge: TagIdentifier): Uuid ``` @@ -17,7 +17,7 @@ getPreviousAdjacent[Edge](/docs/kcl/types/Edge)(edge: [TagIdentifier](/docs/kcl/ | Name | Type | Description | Required | |----------|------|-------------|----------| -| `edge` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The tag of the edge you want to find the previous adjacent edge of. | Yes | +| `edge` | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The tag of the edge you want to find the previous adjacent edge of. | Yes | ### Returns diff --git a/docs/kcl/index.md b/docs/kcl/index.md index 2ad34ff11..59ae2a4a2 100644 --- a/docs/kcl/index.md +++ b/docs/kcl/index.md @@ -12,24 +12,10 @@ layout: manual * [`Modules`](kcl/modules) * [`Settings`](kcl/settings) * [`Known Issues`](kcl/known-issues) -* [`Constants`](kcl/consts) -### Standard library +### Functions -* **Primitive types** - * [`bool`](kcl/types/bool) - * [`number`](kcl/types/number) - * [`string`](kcl/types/string) - * [`tag`](kcl/types/tag) * **std** - * [`END`](kcl/consts/std-END) - * [`START`](kcl/consts/std-START) - * [`X`](kcl/consts/std-X) - * [`XY`](kcl/consts/std-XY) - * [`XZ`](kcl/consts/std-XZ) - * [`Y`](kcl/consts/std-Y) - * [`YZ`](kcl/consts/std-YZ) - * [`Z`](kcl/consts/std-Z) * [`angledLine`](kcl/angledLine) * [`angledLineThatIntersects`](kcl/angledLineThatIntersects) * [`appearance`](kcl/appearance) @@ -45,7 +31,7 @@ layout: manual * [`getNextAdjacentEdge`](kcl/getNextAdjacentEdge) * [`getOppositeEdge`](kcl/getOppositeEdge) * [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge) - * [`helix`](kcl/std-helix) + * [`helix`](kcl/functions/std-helix) * [`intersect`](kcl/intersect) * [`involuteCircular`](kcl/involuteCircular) * [`lastSegX`](kcl/lastSegX) @@ -56,7 +42,7 @@ layout: manual * [`line`](kcl/line) * [`loft`](kcl/loft) * [`map`](kcl/map) - * [`offsetPlane`](kcl/std-offsetPlane) + * [`offsetPlane`](kcl/functions/std-offsetPlane) * [`patternCircular2d`](kcl/patternCircular2d) * [`patternCircular3d`](kcl/patternCircular3d) * [`patternLinear2d`](kcl/patternLinear2d) @@ -70,7 +56,7 @@ layout: manual * [`profileStartY`](kcl/profileStartY) * [`push`](kcl/push) * [`reduce`](kcl/reduce) - * [`revolve`](kcl/std-revolve) + * [`revolve`](kcl/functions/std-revolve) * [`rotate`](kcl/rotate) * [`scale`](kcl/scale) * [`segAng`](kcl/segAng) @@ -92,61 +78,90 @@ layout: manual * [`union`](kcl/union) * [`xLine`](kcl/xLine) * [`yLine`](kcl/yLine) +* **std::math** + * [`abs`](kcl/functions/std-math-abs) + * [`acos`](kcl/functions/std-math-acos) + * [`asin`](kcl/functions/std-math-asin) + * [`atan`](kcl/functions/std-math-atan) + * [`atan2`](kcl/functions/std-math-atan2) + * [`ceil`](kcl/functions/std-math-ceil) + * [`cos`](kcl/functions/std-math-cos) + * [`floor`](kcl/functions/std-math-floor) + * [`ln`](kcl/functions/std-math-ln) + * [`log`](kcl/functions/std-math-log) + * [`log10`](kcl/functions/std-math-log10) + * [`log2`](kcl/functions/std-math-log2) + * [`max`](kcl/functions/std-math-max) + * [`min`](kcl/functions/std-math-min) + * [`polar`](kcl/functions/std-math-polar) + * [`pow`](kcl/functions/std-math-pow) + * [`rem`](kcl/functions/std-math-rem) + * [`round`](kcl/functions/std-math-round) + * [`sin`](kcl/functions/std-math-sin) + * [`sqrt`](kcl/functions/std-math-sqrt) + * [`tan`](kcl/functions/std-math-tan) +* **std::sketch** + * [`circle`](kcl/functions/std-sketch-circle) + * [`mirror2d`](kcl/functions/std-sketch-mirror2d) +* **std::solid** + * [`chamfer`](kcl/functions/std-solid-chamfer) + * [`fillet`](kcl/functions/std-solid-fillet) + * [`hollow`](kcl/functions/std-solid-hollow) + * [`shell`](kcl/functions/std-solid-shell) +* **std::units** + * [`units::toCentimeters`](kcl/functions/std-units-toCentimeters) + * [`units::toDegrees`](kcl/functions/std-units-toDegrees) + * [`units::toFeet`](kcl/functions/std-units-toFeet) + * [`units::toInches`](kcl/functions/std-units-toInches) + * [`units::toMeters`](kcl/functions/std-units-toMeters) + * [`units::toMillimeters`](kcl/functions/std-units-toMillimeters) + * [`units::toRadians`](kcl/functions/std-units-toRadians) + * [`units::toYards`](kcl/functions/std-units-toYards) + +### Constants + +* **std** + * [`END`](kcl/consts/std-END) + * [`START`](kcl/consts/std-START) + * [`X`](kcl/consts/std-X) + * [`XY`](kcl/consts/std-XY) + * [`XZ`](kcl/consts/std-XZ) + * [`Y`](kcl/consts/std-Y) + * [`YZ`](kcl/consts/std-YZ) + * [`Z`](kcl/consts/std-Z) * **std::math** * [`E`](kcl/consts/std-math-E) * [`PI`](kcl/consts/std-math-PI) * [`TAU`](kcl/consts/std-math-TAU) - * [`abs`](kcl/std-math-abs) - * [`acos`](kcl/std-math-acos) - * [`asin`](kcl/std-math-asin) - * [`atan`](kcl/std-math-atan) - * [`atan2`](kcl/std-math-atan2) - * [`ceil`](kcl/std-math-ceil) - * [`cos`](kcl/std-math-cos) - * [`floor`](kcl/std-math-floor) - * [`ln`](kcl/std-math-ln) - * [`log`](kcl/std-math-log) - * [`log10`](kcl/std-math-log10) - * [`log2`](kcl/std-math-log2) - * [`max`](kcl/std-math-max) - * [`min`](kcl/std-math-min) - * [`polar`](kcl/std-math-polar) - * [`pow`](kcl/std-math-pow) - * [`rem`](kcl/std-math-rem) - * [`round`](kcl/std-math-round) - * [`sin`](kcl/std-math-sin) - * [`sqrt`](kcl/std-math-sqrt) - * [`tan`](kcl/std-math-tan) -* **std::sketch** - * [`circle`](kcl/std-sketch-circle) - * [`mirror2d`](kcl/std-sketch-mirror2d) -* **std::solid** - * [`chamfer`](kcl/std-solid-chamfer) - * [`fillet`](kcl/std-solid-fillet) - * [`hollow`](kcl/std-solid-hollow) - * [`shell`](kcl/std-solid-shell) * **std::turns** * [`turns::HALF_TURN`](kcl/consts/std-turns-HALF_TURN) * [`turns::QUARTER_TURN`](kcl/consts/std-turns-QUARTER_TURN) * [`turns::THREE_QUARTER_TURN`](kcl/consts/std-turns-THREE_QUARTER_TURN) * [`turns::ZERO`](kcl/consts/std-turns-ZERO) + +### Types + +See also the [types overview](types) + +* **Primitive types** + * [`End`](kcl/types.md#End) + * [`ImportedGeometry`](kcl/types.md#ImportedGeometry) + * [`Start`](kcl/types.md#Start) + * [`TagDeclarator`](kcl/types.md#TagDeclarator) + * [`TagIdentifier`](kcl/types.md#TagIdentifier) + * [`any`](kcl/types/std-types-any) + * [`bool`](kcl/types/std-types-bool) + * [`number`](kcl/types/std-types-number) + * [`string`](kcl/types/std-types-string) + * [`tag`](kcl/types/std-types-tag) * **std::types** - * [`Axis2d`](kcl/types/Axis2d) - * [`Axis3d`](kcl/types/Axis3d) - * [`Edge`](kcl/types/Edge) - * [`Face`](kcl/types/Face) - * [`Helix`](kcl/types/Helix) - * [`Plane`](kcl/types/Plane) - * [`Point2d`](kcl/types/Point2d) - * [`Point3d`](kcl/types/Point3d) - * [`Sketch`](kcl/types/Sketch) - * [`Solid`](kcl/types/Solid) -* **std::units** - * [`units::toCentimeters`](kcl/std-units-toCentimeters) - * [`units::toDegrees`](kcl/std-units-toDegrees) - * [`units::toFeet`](kcl/std-units-toFeet) - * [`units::toInches`](kcl/std-units-toInches) - * [`units::toMeters`](kcl/std-units-toMeters) - * [`units::toMillimeters`](kcl/std-units-toMillimeters) - * [`units::toRadians`](kcl/std-units-toRadians) - * [`units::toYards`](kcl/std-units-toYards) + * [`Axis2d`](kcl/types/std-types-Axis2d) + * [`Axis3d`](kcl/types/std-types-Axis3d) + * [`Edge`](kcl/types/std-types-Edge) + * [`Face`](kcl/types/std-types-Face) + * [`Helix`](kcl/types/std-types-Helix) + * [`Plane`](kcl/types/std-types-Plane) + * [`Point2d`](kcl/types/std-types-Point2d) + * [`Point3d`](kcl/types/std-types-Point3d) + * [`Sketch`](kcl/types/std-types-Sketch) + * [`Solid`](kcl/types/std-types-Solid) diff --git a/docs/kcl/int.md b/docs/kcl/int.md deleted file mode 100644 index 1ff85f72b..000000000 --- a/docs/kcl/int.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "int" -excerpt: "Convert a number to an integer." -layout: manual ---- - -**WARNING:** This function is deprecated. - -Convert a number to an integer. - -DEPRECATED use floor(), ceil(), or round(). - -```js -int(num: number): number -``` - -### Tags - -* `convert` - - -### Arguments - -| Name | Type | Description | Required | -|----------|------|-------------|----------| -| `num` | [`number`](/docs/kcl/types/number) | | Yes | - -### Returns - -[`number`](/docs/kcl/types/number) - - -### Examples - -```js -n = int(ceil(5 / 2)) -assert(n, isEqualTo = 3, error = "5/2 = 2.5, rounded up makes 3") -// Draw n cylinders. -startSketchOn(XZ) - |> circle(center = [0, 0], radius = 2) - |> extrude(length = 5) - |> patternTransform( - instances = n, - transform = fn(id) { - return { translate = [4 * id, 0, 0] } - }, - ) -``` - -![Rendered example of int 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAFk00lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXvVDXXHPNgwFe7MVe7LXPnDnzIIBrrrnmwddcc82DAc6cOfPga6655sG8EPfdd9+tPNPZs2dvve+++24F+Id/+IffAbjvvvtu/Yd/+Iff5qqr/pWuueaaB585c+bBL/ZiL/ZaANdcc82Dr7nmmgcDnDlz5sHXXHPNg3kh7rvvvlsBzp49eyvPdN99990K8A//8A+/c99999169uzZW++7775bueqqf4VrrrnmwQAv9mIv9tpnzpx5EMA111zz4GuuuebBZ86ceTDANddc82BeiPvuu+9Wnuns2bO33nfffbcC/MM//MPvANx33323/sM//MNvc9VVV1111VVXvTDoQQ96EFddddVVV1111RXXXHPNg1/sxV7stc+cOfOgF3/xF3/tF3uxF3ttgIsXLwJw8eJFnv70p3O/3d1dLl68yP12d3d5fo4fPw7AiRMnADh+/DgnTpzgxIkTADzkIQ8B4L777rv1H/7hH34b4B/+4R9+57777rv1H/7hH36bq/7fu+aaax585syZB7/Yi73Ya11zzTUPvuaaax585syZB19zzTUPftKTnnRr13UPvnjxIk94whO49tpr2d3d5eLFi9xvd3eXF+T48eMAnDhxAoCHPOQhABw/fpwTJ05w4sQJ7rvvvlsB/uEf/uG3/+Ef/uF37rvvvlv/4R/+4be56irgmmuuefBrv/ZrvxfAi7/4i7/2i73Yi702wMWLFwHY3d3laU97Gvfb3d3l4sWL2AZgd3eX52abEydOAHDixAkAjh8/zokTJwA4ceIED33oQwG47777bj179uyt9913363/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vTYPsL+/z1133cVdd93F/v4+d999N/8ekvj3kMS/1fb2No985CMBeNmXfVke6L777rv1t37rt777H/7hH37nH/7hH36bq/5fuuaaax782q/92u/14i/+4q/9Yi/2Yq/NMx0eHgJw7733ct999/H0pz+dF4Uk/iWSeFFI4oWRxL9EEhsbG2xubnLmzBnOnDnDmTNnODw8ZHNzE4D77rvv1t/6rd/67n/4h3/4nX/4h3/4ba76f+eaa6558JkzZx78Oq/zOu/1Yi/2Yq99zTXXPJhnWq/XXLp0ib29PdbrNXt7e9xPEg8kiecmiecmiQeSxHOTxHOTxPMjiecmiefW9z0nT54E4LrrruOB7rvvvlvPnj1769///d//9m//9m9/z3333XcrV1111VVXXfWfBz3oQQ/iqquuuuqqq/6rXHPNNQ8+c+bMg1/sxV7stSTpHd/xHT+LB9jf3wfgrrvu4u6772Z/f5+77rqLF5Uk/j0k8S/Z3t4G4BGPeAQAN9xwA9dffz0PdN9999169uzZW//+7//+t3/7t3/7e+67775bueqqB7jmmmse/GIv9mKv/WIv9mKvdc011zz4xV7sxV6bBzg8POS+++7j4OCAw8NDDg8Pue+++3ggSfxLJPGikMQLI4nntrm5ycbGBmfOnOGaa67hzJkzPNB99913K8Bv/dZvfTfAj/7oj34OV131XK655poHv9iLvdhrv87rvM57vdiLvdhr8wDr9Zr1es16vWZvb4/1es3e3h6SeG6SeCBJPDdJPDdJPDdJPDdJPD+z2Yy+79na2gJga2uLra0tntt9991362/91m999z/8wz/8zj/8wz/8NlddddVVV131Xwc96EEP4qqrrrrqqqv+u1xzzTUPBnixF3ux136xF3ux17rmmmse/GIv9mKvzXPZ398H4K677gLg7rvvZn9/H4D9/X329/e5nyT+PXZ2dgDY2tpie3ubra0tAG644Qauv/56np/77rvv1n/4h3/47fvuu+/Wf/iHf/idf/iHf/htrrrqX+Gaa6558Iu92Iu99ou92Iu91jXXXPPgF3uxF3ttnsvh4SEAh4eHHB4ect999wFweHjI4eEhh4eHPDdJvCgk8dw2NzfZ2NgA4JprrgHgmmuuAeDMmTM8t/vuu+9WgN/6rd/67n/4h3/4nX/4h3/4ba666l/hzJkzD5KkF3uxF3vtF3uxF3uta6655sEv9mIv9tr33Xffrddcc82Deab1es16vWa9XrO/vw/Aer1mGAbW6zWSeG6SeG6SeG6SeKC+75FE3/f0fU/f98xmM/q+Z2tri+fnvvvuu/Uf/uEffvu+++679R/+4R9+5x/+4R9+m6uuuuqqq67674Me9KAHcdVVV1111VX/k1xzzTUPPnPmzIOvueaaB7/Yi73Ya11zzTUPPnPmzIOvueaaB/NC7O/vc7/9/X0ADg4OeEG2tra43/b2NgDb29u8MPfdd9+tAP/wD//w2/fdd9+t//AP//A7//AP//DbXHXVf4JrrrnmwS/2Yi/22i/2Yi/2WgDXXHPNg1/sxV7stXkhDg8Pud/h4SH3Ozo6wjYPJImNjQ0eaHNzk83NTf4l9913361nz5699e///u9/++zZs8+47777bv2Hf/iH3+aqq/6DnTlz5kHXXHPNQ6655poHv9iLvdhrXXPNNQ9+sRd7sdfmhViv19xvGAbut16vkYRtJPFAfd9zv9lsRt/3/Evuu+++W8+ePXvr3//93/82wD/8wz/8zj/8wz/8NlddddVVV131Pwt60IMexFVXXXXVVVf9b3DNNdc8GODMmTMPvuaaax505syZB19zzTUPvuaaax4McObMmQdfc801D+ZfcN999916zTXXPJhnuu+++2695pprHnzffffdCnD27Nlb77vvvlvvu+++WwHOnj37jPvuu+/Wf/iHf/htrrrqf4BrrrnmwWfOnHnwNddc8+AzZ8486JprrnkwwDXXXPPgM2fOPBjgmmuueTAvgvvuu+/Wa6655sE803333XcrwNmzZ28F+Pu///vfBjh79uwz7rvvvlvPnj1763333XcrV1313+yaa6558JkzZx58zTXXPBjgxV7sxV4L4JprrnkwwJkzZx58zTXXPJh/g/vuu+9Wnuns2bO33nfffbfed999twL8wz/8w+8A/MM//MNvc9VVV1111VX/O6AHPehBXHXVVVddddX/Rddcc82DbVuSeADbliSA++6771auuur/sGuuuebBALYtSTyAbUvSfffddytXXfV/2DXXXPNgnsm2JYkHsG1Juu+++27lqquuuuqqq/7vQQ960IO46qqrrrrqqquuuuqqq6666qqrrrrqqqv+T6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4p/BOit0SjAd94mAAAAAElFTkSuQmCC) - - diff --git a/docs/kcl/intersect.md b/docs/kcl/intersect.md index 91911bbc0..22da99281 100644 --- a/docs/kcl/intersect.md +++ b/docs/kcl/intersect.md @@ -10,9 +10,9 @@ Intersect computes the geometric intersection of multiple solid bodies, returnin ```kcl intersect( - solids: [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)), - tolerance?: [number](/docs/kcl/types/number), -): [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)) + solids: [Solid], + tolerance?: number, +): [Solid] ``` @@ -20,12 +20,12 @@ intersect( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`[Solid]`](/docs/kcl/types/Solid) | The solids to intersect. | Yes | -| `tolerance` | [`number`](/docs/kcl/types/number) | The tolerance to use for the intersection operation. | No | +| `solids` | [`[Solid]`](/docs/kcl/types/std-types-Solid) | The solids to intersect. | Yes | +| `tolerance` | [`number`](/docs/kcl/types/std-types-number) | The tolerance to use for the intersection operation. | No | ### Returns -[`[Solid]`](/docs/kcl/types/Solid) +[`[Solid]`](/docs/kcl/types/std-types-Solid) ### Examples @@ -44,8 +44,8 @@ fn cube(center, size) { |> extrude(length = 10) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(center = [0, 0], size = 10) +part002 = cube(center = [7, 3], size = 5) |> translate(z = 1) intersectedPart = intersect([part001, part002]) @@ -69,8 +69,8 @@ fn cube(center, size) { |> extrude(length = 10) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(center = [0, 0], size = 10) +part002 = cube(center = [7, 3], size = 5) |> translate(z = 1) // This is the equivalent of: intersect([part001, part002]) diff --git a/docs/kcl/involuteCircular.md b/docs/kcl/involuteCircular.md index d36928247..cd0c1a27e 100644 --- a/docs/kcl/involuteCircular.md +++ b/docs/kcl/involuteCircular.md @@ -10,13 +10,13 @@ Extend the current sketch with a new involute circular curve. ```kcl involuteCircular( - sketch: [Sketch](/docs/kcl/types/Sketch), - startRadius: [number](/docs/kcl/types/number), - endRadius: [number](/docs/kcl/types/number), - angle: [number](/docs/kcl/types/number), - reverse?: [bool](/docs/kcl/types/bool), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketch: Sketch, + startRadius: number, + endRadius: number, + angle: number, + reverse?: bool, + tag?: TagDeclarator, +): Sketch ``` @@ -24,16 +24,16 @@ involuteCircular( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes | -| `startRadius` | [`number`](/docs/kcl/types/number) | The involute is described between two circles, start_radius is the radius of the inner circle. | Yes | -| `endRadius` | [`number`](/docs/kcl/types/number) | The involute is described between two circles, end_radius is the radius of the outer circle. | Yes | -| `angle` | [`number`](/docs/kcl/types/number) | The angle to rotate the involute by. A value of zero will produce a curve with a tangent along the x-axis at the start point of the curve. | Yes | -| `reverse` | [`bool`](/docs/kcl/types/bool) | If reverse is true, the segment will start from the end of the involute, otherwise it will start from that start. Defaults to false. | No | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Which sketch should this path be added to? | Yes | +| `startRadius` | [`number`](/docs/kcl/types/std-types-number) | The involute is described between two circles, start_radius is the radius of the inner circle. | Yes | +| `endRadius` | [`number`](/docs/kcl/types/std-types-number) | The involute is described between two circles, end_radius is the radius of the outer circle. | Yes | +| `angle` | [`number`](/docs/kcl/types/std-types-number) | The angle to rotate the involute by. A value of zero will produce a curve with a tangent along the x-axis at the start point of the curve. | Yes | +| `reverse` | [`bool`](/docs/kcl/types/std-types-bool) | If reverse is true, the segment will start from the end of the involute, otherwise it will start from that start. Defaults to false. | No | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Create a new tag which refers to this line | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/lastSegX.md b/docs/kcl/lastSegX.md index f1d2807e9..db5c4a4b4 100644 --- a/docs/kcl/lastSegX.md +++ b/docs/kcl/lastSegX.md @@ -9,7 +9,7 @@ Extract the 'x' axis value of the last line segment in the provided 2-d sketch. ```kcl -lastSegX(sketch: [Sketch](/docs/kcl/types/Sketch)): [number](/docs/kcl/types/number) +lastSegX(sketch: Sketch): number ``` @@ -17,11 +17,11 @@ lastSegX(sketch: [Sketch](/docs/kcl/types/Sketch)): [number](/docs/kcl/types/num | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | The sketch whose line segment is being queried | Yes | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | The sketch whose line segment is being queried | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/lastSegY.md b/docs/kcl/lastSegY.md index 3d1d078eb..638df839d 100644 --- a/docs/kcl/lastSegY.md +++ b/docs/kcl/lastSegY.md @@ -9,7 +9,7 @@ Extract the 'y' axis value of the last line segment in the provided 2-d sketch. ```kcl -lastSegY(sketch: [Sketch](/docs/kcl/types/Sketch)): [number](/docs/kcl/types/number) +lastSegY(sketch: Sketch): number ``` @@ -17,11 +17,11 @@ lastSegY(sketch: [Sketch](/docs/kcl/types/Sketch)): [number](/docs/kcl/types/num | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | The sketch whose line segment is being queried | Yes | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | The sketch whose line segment is being queried | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/legAngX.md b/docs/kcl/legAngX.md index ea374a70c..b0134682e 100644 --- a/docs/kcl/legAngX.md +++ b/docs/kcl/legAngX.md @@ -10,9 +10,9 @@ Compute the angle of the given leg for x. ```kcl legAngX( - hypotenuse: [number](/docs/kcl/types/number), - leg: [number](/docs/kcl/types/number), -): [number](/docs/kcl/types/number) + hypotenuse: number, + leg: number, +): number ``` ### Tags @@ -24,12 +24,12 @@ legAngX( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `hypotenuse` | [`number`](/docs/kcl/types/number) | The length of the triangle's hypotenuse | Yes | -| `leg` | [`number`](/docs/kcl/types/number) | The length of one of the triangle's legs (i.e. non-hypotenuse side) | Yes | +| `hypotenuse` | [`number`](/docs/kcl/types/std-types-number) | The length of the triangle's hypotenuse | Yes | +| `leg` | [`number`](/docs/kcl/types/std-types-number) | The length of one of the triangle's legs (i.e. non-hypotenuse side) | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/legAngY.md b/docs/kcl/legAngY.md index 2396c499b..7ecd6ea3b 100644 --- a/docs/kcl/legAngY.md +++ b/docs/kcl/legAngY.md @@ -10,9 +10,9 @@ Compute the angle of the given leg for y. ```kcl legAngY( - hypotenuse: [number](/docs/kcl/types/number), - leg: [number](/docs/kcl/types/number), -): [number](/docs/kcl/types/number) + hypotenuse: number, + leg: number, +): number ``` ### Tags @@ -24,12 +24,12 @@ legAngY( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `hypotenuse` | [`number`](/docs/kcl/types/number) | The length of the triangle's hypotenuse | Yes | -| `leg` | [`number`](/docs/kcl/types/number) | The length of one of the triangle's legs (i.e. non-hypotenuse side) | Yes | +| `hypotenuse` | [`number`](/docs/kcl/types/std-types-number) | The length of the triangle's hypotenuse | Yes | +| `leg` | [`number`](/docs/kcl/types/std-types-number) | The length of one of the triangle's legs (i.e. non-hypotenuse side) | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/legLen.md b/docs/kcl/legLen.md index 052b01a8c..9fc976ef7 100644 --- a/docs/kcl/legLen.md +++ b/docs/kcl/legLen.md @@ -10,9 +10,9 @@ Compute the length of the given leg. ```kcl legLen( - hypotenuse: [number](/docs/kcl/types/number), - leg: [number](/docs/kcl/types/number), -): [number](/docs/kcl/types/number) + hypotenuse: number, + leg: number, +): number ``` ### Tags @@ -24,12 +24,12 @@ legLen( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `hypotenuse` | [`number`](/docs/kcl/types/number) | The length of the triangle's hypotenuse | Yes | -| `leg` | [`number`](/docs/kcl/types/number) | The length of one of the triangle's legs (i.e. non-hypotenuse side) | Yes | +| `hypotenuse` | [`number`](/docs/kcl/types/std-types-number) | The length of the triangle's hypotenuse | Yes | +| `leg` | [`number`](/docs/kcl/types/std-types-number) | The length of one of the triangle's legs (i.e. non-hypotenuse side) | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/line.md b/docs/kcl/line.md index 89b9d7da5..768f50940 100644 --- a/docs/kcl/line.md +++ b/docs/kcl/line.md @@ -10,11 +10,11 @@ Extend the current sketch with a new straight line. ```kcl line( - sketch: [Sketch](/docs/kcl/types/Sketch), - endAbsolute?: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - end?: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketch: Sketch, + endAbsolute?: Point2d, + end?: Point2d, + tag?: TagDeclarator, +): Sketch ``` @@ -22,14 +22,14 @@ line( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes | -| `endAbsolute` | [`[number]`](/docs/kcl/types/number) | Which absolute point should this line go to? Incompatible with `end`. | No | -| `end` | [`[number]`](/docs/kcl/types/number) | How far away (along the X and Y axes) should this line go? Incompatible with `endAbsolute`. | No | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Which sketch should this path be added to? | Yes | +| `endAbsolute` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | Which absolute point should this line go to? Incompatible with `end`. | No | +| `end` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | How far away (along the X and Y axes) should this line go? Incompatible with `endAbsolute`. | No | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Create a new tag which refers to this line | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/loft.md b/docs/kcl/loft.md index 3f629fbaf..5e9619237 100644 --- a/docs/kcl/loft.md +++ b/docs/kcl/loft.md @@ -10,14 +10,14 @@ The sketches need to closed and on the same plane. ```kcl loft( - sketches: [[[Sketch](/docs/kcl/types/Sketch)]](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)), - vDegree: NonZeroU32, - bezApproximateRational: [bool](/docs/kcl/types/bool), - baseCurveIndex?: integer, - tolerance?: [number](/docs/kcl/types/number), - tagStart?: [TagDeclarator](/docs/kcl/types#tag-declaration), - tagEnd?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Solid](/docs/kcl/types/Solid) + sketches: [Sketch], + vDegree: number, + bezApproximateRational: bool, + baseCurveIndex?: number, + tolerance?: number, + tagStart?: TagDeclarator, + tagEnd?: TagDeclarator, +): Solid ``` @@ -25,17 +25,17 @@ loft( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketches` | [`[Sketch]`](/docs/kcl/types/Sketch) | Which sketches to loft. Must include at least 2 sketches. | Yes | -| `vDegree` | `NonZeroU32` | Degree of the interpolation. Must be greater than zero. For example, use 2 for quadratic, or 3 for cubic interpolation in the V direction. This defaults to 2, if not specified. | Yes | -| `bezApproximateRational` | [`bool`](/docs/kcl/types/bool) | Attempt to approximate rational curves (such as arcs) using a bezier. This will remove banding around interpolations between arcs and non-arcs. It may produce errors in other scenarios Over time, this field won't be necessary. | Yes | -| `baseCurveIndex` | `integer` | This can be set to override the automatically determined topological base curve, which is usually the first section encountered. | No | -| `tolerance` | [`number`](/docs/kcl/types/number) | Tolerance for the loft operation. | No | -| `tagStart` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the start of the loft, i.e. the original sketch | No | -| `tagEnd` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the end of the loft, i.e. the last sketch | No | +| `sketches` | [`[Sketch]`](/docs/kcl/types/std-types-Sketch) | Which sketches to loft. Must include at least 2 sketches. | Yes | +| `vDegree` | [`number`](/docs/kcl/types/std-types-number) | Degree of the interpolation. Must be greater than zero. For example, use 2 for quadratic, or 3 for cubic interpolation in the V direction. This defaults to 2, if not specified. | Yes | +| `bezApproximateRational` | [`bool`](/docs/kcl/types/std-types-bool) | Attempt to approximate rational curves (such as arcs) using a bezier. This will remove banding around interpolations between arcs and non-arcs. It may produce errors in other scenarios Over time, this field won't be necessary. | Yes | +| `baseCurveIndex` | [`number`](/docs/kcl/types/std-types-number) | This can be set to override the automatically determined topological base curve, which is usually the first section encountered. | No | +| `tolerance` | [`number`](/docs/kcl/types/std-types-number) | Tolerance for the loft operation. | No | +| `tagStart` | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | A named tag for the face at the start of the loft, i.e. the original sketch | No | +| `tagEnd` | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | A named tag for the face at the end of the loft, i.e. the last sketch | No | ### Returns -[`Solid`](/docs/kcl/types/Solid) +[`Solid`](/docs/kcl/types/std-types-Solid) ### Examples diff --git a/docs/kcl/map.md b/docs/kcl/map.md index 76bfb8754..490420335 100644 --- a/docs/kcl/map.md +++ b/docs/kcl/map.md @@ -10,9 +10,9 @@ Given a list like `[a, b, c]`, and a function like `f`, returns `[f(a), f(b), f( ```kcl map( - array: [[[KclValue](/docs/kcl/types/KclValue)]](/docs/kcl/types/[KclValue](/docs/kcl/types/KclValue)), + array: [any], f: FunctionSource, -): [[[KclValue](/docs/kcl/types/KclValue)]](/docs/kcl/types/[KclValue](/docs/kcl/types/KclValue)) +): [any] ``` @@ -20,19 +20,19 @@ map( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `array` | [`[KclValue]`](/docs/kcl/types/KclValue) | Input array. The output array is this input array, but every element has had the function `f` run on it. | Yes | +| `array` | [`[any]`](/docs/kcl/types/std-types-any) | Input array. The output array is this input array, but every element has had the function `f` run on it. | Yes | | `f` | `FunctionSource` | A function. The output array is just the input array, but `f` has been run on every item. | Yes | ### Returns -[`[KclValue]`](/docs/kcl/types/KclValue) +[`[any]`](/docs/kcl/types/std-types-any) ### Examples ```kcl r = 10 // radius -fn drawCircle(id) { +fn drawCircle(@id) { return startSketchOn(XY) |> circle(center = [id * 2 * r, 0], radius = r) } diff --git a/docs/kcl/modules.md b/docs/kcl/modules.md index 262780c51..47c4daa9a 100644 --- a/docs/kcl/modules.md +++ b/docs/kcl/modules.md @@ -12,7 +12,7 @@ to other modules. ```kcl // util.kcl -export fn increment(x) { +export fn increment(@x) { return x + 1 } ``` @@ -37,11 +37,11 @@ Multiple functions can be exported in a file. ```kcl // util.kcl -export fn increment(x) { +export fn increment(@x) { return x + 1 } -export fn decrement(x) { +export fn decrement(@x) { return x - 1 } ``` @@ -81,7 +81,7 @@ fn cube(center) { |> extrude(length = 10) } -myCube = cube([0, 0]) +myCube = cube(center = [0, 0]) ``` *Pros* diff --git a/docs/kcl/patternCircular2d.md b/docs/kcl/patternCircular2d.md index baf651308..00eaf2ea3 100644 --- a/docs/kcl/patternCircular2d.md +++ b/docs/kcl/patternCircular2d.md @@ -10,13 +10,13 @@ Repeat a 2-dimensional sketch some number of times along a partial or complete c ```kcl patternCircular2d( - sketchSet: [[[Sketch](/docs/kcl/types/Sketch)]](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)), - instances: integer, - center: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - arcDegrees: [number](/docs/kcl/types/number), - rotateDuplicates: [bool](/docs/kcl/types/bool), - useOriginal?: [bool](/docs/kcl/types/bool), -): [[[Sketch](/docs/kcl/types/Sketch)]](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)) + sketchSet: [Sketch], + instances: number, + center: Point2d, + arcDegrees: number, + rotateDuplicates: bool, + useOriginal?: bool, +): [Sketch] ``` @@ -24,16 +24,16 @@ patternCircular2d( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketchSet` | [`[Sketch]`](/docs/kcl/types/Sketch) | Which sketch(es) to pattern | Yes | -| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | -| `center` | [`[number]`](/docs/kcl/types/number) | The center about which to make the pattern. This is a 2D vector. | Yes | -| `arcDegrees` | [`number`](/docs/kcl/types/number) | The arc angle (in degrees) to place the repetitions. Must be greater than 0. | Yes | -| `rotateDuplicates` | [`bool`](/docs/kcl/types/bool) | Whether or not to rotate the duplicates as they are copied. | Yes | -| `useOriginal` | [`bool`](/docs/kcl/types/bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | +| `sketchSet` | [`[Sketch]`](/docs/kcl/types/std-types-Sketch) | Which sketch(es) to pattern | Yes | +| `instances` | [`number`](/docs/kcl/types/std-types-number) | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `center` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | The center about which to make the pattern. This is a 2D vector. | Yes | +| `arcDegrees` | [`number`](/docs/kcl/types/std-types-number) | The arc angle (in degrees) to place the repetitions. Must be greater than 0. | Yes | +| `rotateDuplicates` | [`bool`](/docs/kcl/types/std-types-bool) | Whether or not to rotate the duplicates as they are copied. | Yes | +| `useOriginal` | [`bool`](/docs/kcl/types/std-types-bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns -[`[Sketch]`](/docs/kcl/types/Sketch) +[`[Sketch]`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/patternCircular3d.md b/docs/kcl/patternCircular3d.md index a7eb350ed..0276595e7 100644 --- a/docs/kcl/patternCircular3d.md +++ b/docs/kcl/patternCircular3d.md @@ -10,14 +10,14 @@ Repeat a 3-dimensional solid some number of times along a partial or complete ci ```kcl patternCircular3d( - solids: [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)), - instances: integer, - axis: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - center: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - arcDegrees: [number](/docs/kcl/types/number), - rotateDuplicates: [bool](/docs/kcl/types/bool), - useOriginal?: [bool](/docs/kcl/types/bool), -): [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)) + solids: [Solid], + instances: number, + axis: [number], + center: Point3d, + arcDegrees: number, + rotateDuplicates: bool, + useOriginal?: bool, +): [Solid] ``` @@ -25,17 +25,17 @@ patternCircular3d( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`[Solid]`](/docs/kcl/types/Solid) | Which solid(s) to pattern | Yes | -| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | -| `axis` | [`[number]`](/docs/kcl/types/number) | The axis around which to make the pattern. This is a 3D vector | Yes | -| `center` | [`[number]`](/docs/kcl/types/number) | The center about which to make the pattern. This is a 3D vector. | Yes | -| `arcDegrees` | [`number`](/docs/kcl/types/number) | The arc angle (in degrees) to place the repetitions. Must be greater than 0. | Yes | -| `rotateDuplicates` | [`bool`](/docs/kcl/types/bool) | Whether or not to rotate the duplicates as they are copied. | Yes | -| `useOriginal` | [`bool`](/docs/kcl/types/bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | +| `solids` | [`[Solid]`](/docs/kcl/types/std-types-Solid) | Which solid(s) to pattern | Yes | +| `instances` | [`number`](/docs/kcl/types/std-types-number) | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `axis` | [`[number]`](/docs/kcl/types/std-types-number) | The axis around which to make the pattern. This is a 3D vector | Yes | +| `center` | [`Point3d`](/docs/kcl/types/std-types-Point3d) | The center about which to make the pattern. This is a 3D vector. | Yes | +| `arcDegrees` | [`number`](/docs/kcl/types/std-types-number) | The arc angle (in degrees) to place the repetitions. Must be greater than 0. | Yes | +| `rotateDuplicates` | [`bool`](/docs/kcl/types/std-types-bool) | Whether or not to rotate the duplicates as they are copied. | Yes | +| `useOriginal` | [`bool`](/docs/kcl/types/std-types-bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns -[`[Solid]`](/docs/kcl/types/Solid) +[`[Solid]`](/docs/kcl/types/std-types-Solid) ### Examples diff --git a/docs/kcl/patternLinear2d.md b/docs/kcl/patternLinear2d.md index ac9fc71ad..5a8916700 100644 --- a/docs/kcl/patternLinear2d.md +++ b/docs/kcl/patternLinear2d.md @@ -10,12 +10,12 @@ Repeat a 2-dimensional sketch along some dimension, with a dynamic amount of dis ```kcl patternLinear2d( - sketches: [[[Sketch](/docs/kcl/types/Sketch)]](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)), - instances: integer, - distance: [number](/docs/kcl/types/number), - axis: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - useOriginal?: [bool](/docs/kcl/types/bool), -): [[[Sketch](/docs/kcl/types/Sketch)]](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)) + sketches: [Sketch], + instances: number, + distance: number, + axis: Point2d, + useOriginal?: bool, +): [Sketch] ``` @@ -23,15 +23,15 @@ patternLinear2d( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketches` | [`[Sketch]`](/docs/kcl/types/Sketch) | The sketch(es) to duplicate | Yes | -| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | -| `distance` | [`number`](/docs/kcl/types/number) | Distance between each repetition. Also known as 'spacing'. | Yes | -| `axis` | [`[number]`](/docs/kcl/types/number) | The axis of the pattern. A 2D vector. | Yes | -| `useOriginal` | [`bool`](/docs/kcl/types/bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | +| `sketches` | [`[Sketch]`](/docs/kcl/types/std-types-Sketch) | The sketch(es) to duplicate | Yes | +| `instances` | [`number`](/docs/kcl/types/std-types-number) | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `distance` | [`number`](/docs/kcl/types/std-types-number) | Distance between each repetition. Also known as 'spacing'. | Yes | +| `axis` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | The axis of the pattern. A 2D vector. | Yes | +| `useOriginal` | [`bool`](/docs/kcl/types/std-types-bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns -[`[Sketch]`](/docs/kcl/types/Sketch) +[`[Sketch]`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/patternLinear3d.md b/docs/kcl/patternLinear3d.md index f6c556eae..6aca53d0f 100644 --- a/docs/kcl/patternLinear3d.md +++ b/docs/kcl/patternLinear3d.md @@ -10,12 +10,12 @@ Repeat a 3-dimensional solid along a linear path, with a dynamic amount of dista ```kcl patternLinear3d( - solids: [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)), - instances: integer, - distance: [number](/docs/kcl/types/number), - axis: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - useOriginal?: [bool](/docs/kcl/types/bool), -): [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)) + solids: [Solid], + instances: number, + distance: number, + axis: Point3d, + useOriginal?: bool, +): [Solid] ``` @@ -23,15 +23,15 @@ patternLinear3d( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`[Solid]`](/docs/kcl/types/Solid) | The solid(s) to duplicate | Yes | -| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | -| `distance` | [`number`](/docs/kcl/types/number) | Distance between each repetition. Also known as 'spacing'. | Yes | -| `axis` | [`[number]`](/docs/kcl/types/number) | The axis of the pattern. A 2D vector. | Yes | -| `useOriginal` | [`bool`](/docs/kcl/types/bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | +| `solids` | [`[Solid]`](/docs/kcl/types/std-types-Solid) | The solid(s) to duplicate | Yes | +| `instances` | [`number`](/docs/kcl/types/std-types-number) | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `distance` | [`number`](/docs/kcl/types/std-types-number) | Distance between each repetition. Also known as 'spacing'. | Yes | +| `axis` | [`Point3d`](/docs/kcl/types/std-types-Point3d) | The axis of the pattern. A 2D vector. | Yes | +| `useOriginal` | [`bool`](/docs/kcl/types/std-types-bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns -[`[Solid]`](/docs/kcl/types/Solid) +[`[Solid]`](/docs/kcl/types/std-types-Solid) ### Examples diff --git a/docs/kcl/patternTransform.md b/docs/kcl/patternTransform.md index 943e3ee60..7702b50a7 100644 --- a/docs/kcl/patternTransform.md +++ b/docs/kcl/patternTransform.md @@ -36,11 +36,11 @@ The transform function returns a transform object. All properties of the object ```kcl patternTransform( - solids: [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)), - instances: integer, + solids: [Solid], + instances: number, transform: FunctionSource, - useOriginal?: [bool](/docs/kcl/types/bool), -): [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)) + useOriginal?: bool, +): [Solid] ``` @@ -48,21 +48,21 @@ patternTransform( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`[Solid]`](/docs/kcl/types/Solid) | The solid(s) to duplicate | Yes | -| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `solids` | [`[Solid]`](/docs/kcl/types/std-types-Solid) | The solid(s) to duplicate | Yes | +| `instances` | [`number`](/docs/kcl/types/std-types-number) | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | | `transform` | `FunctionSource` | How each replica should be transformed. The transform function takes a single parameter: an integer representing which number replication the transform is for. E.g. the first replica to be transformed will be passed the argument `1`. This simplifies your math: the transform function can rely on id `0` being the original instance passed into the `patternTransform`. See the examples. | Yes | -| `useOriginal` | [`bool`](/docs/kcl/types/bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | +| `useOriginal` | [`bool`](/docs/kcl/types/std-types-bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns -[`[Solid]`](/docs/kcl/types/Solid) +[`[Solid]`](/docs/kcl/types/std-types-Solid) ### Examples ```kcl // Each instance will be shifted along the X axis. -fn transform(id) { +fn transform(@id) { return { translate = [4 * id, 0, 0] } } @@ -79,7 +79,7 @@ sketch001 = startSketchOn(XZ) // Each instance will be shifted along the X axis, // with a gap between the original (at x = 0) and the first replica // (at x = 8). This is because `id` starts at 1. -fn transform(id) { +fn transform(@id) { return { translate = [4 * (1 + id), 0, 0] } } @@ -112,7 +112,7 @@ fn cube(length, center) { } width = 20 -fn transform(i) { +fn transform(@i) { return { // Move down each time. translate = [0, 0, -i * width], @@ -127,7 +127,7 @@ fn transform(i) { } } -myCubes = cube(width, [100, 0]) +myCubes = cube(length = width, center = [100, 0]) |> patternTransform(instances = 25, transform = transform) ``` @@ -154,7 +154,7 @@ fn cube(length, center) { } width = 20 -fn transform(i) { +fn transform(@i) { return { translate = [0, 0, -i * width], rotation = { @@ -164,7 +164,7 @@ fn transform(i) { } } } -myCubes = cube(width, [100, 100]) +myCubes = cube(length = width, center = [100, 100]) |> patternTransform(instances = 4, transform = transform) ``` @@ -177,7 +177,7 @@ h = 10 // layer height t = 0.005 // taper factor [0-1) // Defines how to modify each layer of the vase. // Each replica is shifted up the Z axis, and has a smoothly-varying radius -fn transform(replicaId) { +fn transform(@replicaId) { scale = r * abs(1 - (t * replicaId)) * (5 + cos((replicaId / 8): number(rad))) return { translate = [0, 0, replicaId * 10], @@ -200,7 +200,7 @@ vase = layer() ![Rendered example of patternTransform 4](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAOi4klEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qr/Vtdcc82DAc6cOfNggGuuuebBAGfOnHkQD3DNNdc8GOCaa655MM/lzJkzD+b5uOaaax7Mv+C+++67lRfi7Nmzt/IA9913360803333XcrwNmzZ5/BM9133323Apw9e/ZWgPvuu+9Wrrrqqquuuuqqq67674Ie9KAHcdVVV1111VVXXXXVf5xrrrnmwQBnzpx58DXXXPPgM2fOPAjgmmuuefA111zzYIAzZ848+JprrnkwL8Rf/uVfArBarbjfpUuXuN/e3h7Pz6VLl5DEv9WxY8d4fnZ2drjfzs4OAMeOHWO9XgPwsi/7srwg9913360809mzZ2+97777bgW47777bj179uwz7rvvvlsBzp49e+t99913K1ddddVVV1111VVX/UdBD3rQg7jqqquuuuqqq6666kV3zTXXPPjMmTMPfrEXe7HXArjmmmsefM011zz4zJkzD77mmmsezHP5y7/8S1arFQCXLl1ib28PgEuXLrG3t8d/BEn8V5LEi2pnZ4f77ezscOzYMQB2dnaYzWa87Mu+LA9033333Qpw9uzZW++7775bAf7hH/7hd+67775bz549e+t99913K1ddddVVV111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ylN4mZd5GR7/+Mezv7/PE57wBO63vb3NYx7zGF7xFV8RgDvvvJPHP/7xvP7rvz5f9VVf9d2///u//z5cddVVV1111VVX/f9C5aqrrrrqqquuuur/oVrr7/z2b/82L/uyL8uP/diPcenSJV7lVV6FS5cu8Q7v8A78wz/8A4973OPY29vj8Y9/PI9//OP54z/+Y2666Sb29va439mzZ3nsYx/LG77hG7K3t8cdd9zBHXfcwd7eHnfccQfPbW9vD0k8/vGPB+Bxj3scD7SzswPAzs4OOzs7bG9v03Ude3t77OzssLe3x/12dnYAuHjxIseOHQPgpptu4t9rd3eXzARgd3eX48ePA7C3t8f99vb22N/fZ29vj/l8zq//+q+zt7cHwJ133sm/xc7ODo9+9KMBeKVXeiUA9vb2+Ku/+ivud8cdd3D+/Hm+93u/lwfa3t7mMY95DK/4iq/InXfeCcCf/umf8qd/+qe853u+J7/9279N13W/w1VXXXXVVVddddX/P1Suuuqqq6666qqr/h+65pprHvzar/3a3HHHHbzKq7wKv/Irv8LjHvc4HvvYx7Kzs8OxY8d4h3d4B+644w4e97jHcccdd7C3t8fjHvc4AP74j/+YnZ0dbrrpJu63s7PD2bNneexjH8tNN93E3t4eAHfccQd33HEH+/v77O3tsbe3xwuyt7cHwN7eHi+qnZ0d7rezs8Nz29nZ4YXZ29vjue3v7wOwt7fHCyKJf4udnR22t7e58cYbAbjpppu48cYb2dvbY39/n6c85SkA3HnnnQDM53N+8id/kjvvvBNJPND29jaPecxjeMVXfEXuvPNO7vc93/M97O/v8zZv8zYAPPaxj731N3/zN2/lqquuuuqqq6666v8fKlddddVVV1111VX/j910003s7e3xRm/0RvzKr/wKf/zHf8zjHvc4XuVVXoWdnR3Onj3L27/927O3t8fjHvc4Hve4x7G3twfA3t4ej3vc43jc4x4HwM7ODjfddBN7e3vccccd3HTTTQA85SlP4eEPfzg7OzvcdNNN7O3tAXDHHXcAcOedd7K3twfAHXfcwb/W3t4eAJLY39/nud155538R5LEC7OzswPA9vY2N954IwA7Ozvs7Oxw4403ArC3t8edd97Jfffdx4033sj97rjjDubzOT/5kz/JnXfeyQNJAmB7e5vHPOYxPPrRjwbg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+dne3uYxj3kMN954IzfeeCN7e3v81V/9Fff70z/9U/70T/+UB9re3ub1X//12d7e5nd+53e45ppr+N7v/V5e7/Vej1tvvZVhGG7lqquuuuqqq6666v8nKlddddVVV1111VX/T73O67zOe//QD/0QH/VRH8U//MM/8Md//Me88iu/MgBnz57l7d/+7bnjjjv44z/+Y/b29tjb2+OP//iPAdjZ2eGmm24CYGdnh52dHfb29njlV35l9vb22NvbY29vjzvvvJM77riDvb09ntve3h57e3u8IDs7OwDs7Oyws7PDfffdx87ODs/P7bffzou92IvxQDs7O/xb3X777ezt7XHzzTezv78PwB133MHOzg57e3vM53P29/f5yZ/8SQDuvPNOXlSSuN/29jY7OzvceOON3Hjjjdx4443s7e2xv7/PU57yFG688UYAFosF3/M938P+/j4PtL29zWMe8xhe8RVfkd/5nd/hZV7mZVgsFvzGb/wGN954I495zGP4nu/5Hm655Rauuuqqq6666qqr/p9CD3rQg7jqqquuuuqqq676/+ibvumbnn7NNdc8+Hd+53d4mZd5GX78x3+cvb09AF75lV+ZV37lV+aP//iPeexjH8sdd9zB4x73OO644w6e287ODjfddBM33XQTOzs73HTTTQD8zd/8DadOneKmm25ib2+Pvb099vb2uPPOO9nb2+OOO+7gRSWJf62dnR1eVHt7e0jiP8vOzg4AN954Izs7O9x4443ceOONAOzt7fFXf/VXvNZrvRYAe3t7POEJT+DOO+/kzjvv5PnZ3t7mFV/xFXnMYx7D4x//eB7zmMfwp3/6p/zpn/4pANvb27zXe70Xv/3bv81rv/Zrc9999936IR/yIQ/hqquuuuqqq6666v8fKlddddVVV1111VX/z61WK/7qr/6Kt3/7t+eP//iPedzjHscf//Ef87jHPY7HPvax7OzscPbsWd7+7d+evb09Hve4x/G4xz2Ovb09APb29njc4x7H4x73OCSxs7PDTTfdxPb2Nvfb2dlhZ2eHv/mbv+Exj3kMN910EwB7e3vs7e2xt7fHnXfeCcDe3h57e3vs7e0hiX+rvb09XhSSkMS/187ODgA33ngj29vbANx0003ceOONAOzt7QHwV3/1V9x4440A7O3tsb+/z2Kx4Kd+6qe48847eUG2t7d5zGMew6Mf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7rzzTu644w729va48847eWH29vbY29vjzjvvBODxj388AJIA2NnZAWB7exuAYRg4e/Ys29vb7OzssLe3B8D+/j73297e5l9jf3+f++3t7QGwv7/P/fb29tjf3+dpT3sae3t77O/v86KQxAuyvb3Nox/9aABe8RVfEYD9/X3+6q/+ige6ePEi3/u938vzs729zWMe8xhe4RVegf39fe73jd/4jTzQ677u63LjjTfyPd/zPRw7dgyA7e1tdnd3ueaaax78Oq/zOu/9W7/1W9/NVVddddVVV1111f8t6EEPehBXXXXVVVddddVV/9d8+Id/+Hdde+217723t8crv/Ir8+M//uPccccd3HTTTdx99918xEd8BH/8x3/MH//xHyOJ++3s7PAGb/AG/OVf/iUv+7Ivy87ODo973OO48847ueOOO3hBdnZ2uOmmm7jpppt4zGMeA8Dv/u7v8tCHPpSbbrqJvb09AO68807uuOMO9vb2uPPOO3lhJPGfRRL/2SRxv+3tbQAe/ehHA3DjjTdy4403sr+/z97eHk996lN5zdd8Tfb399nb2+POO+/kCU94Avv7+7wg29vbPPrRj+YVX/EV2d/f57d+67d4ndd5HX7jN36Du+66iwd63dd9XW688UZ+8id/kmPHjnHXXXfx6Ec/mtd93dcF4M4772R3d/e3P/MzP/N1uOqqq6666qqrrvq/hcpVV1111VVXXXXV/zHXXHPNg1/ndV7nvff29vjVX/1Vbr31Vl75lV+ZH//xH+eOO+7gsY99LACPfexjeexjH8tP/MRPsLe3B8De3h4/8RM/wc7ODgA7Ozvs7Ozwyq/8yuzt7fEnf/InPO5xj+O57e/v8/jHP57HP/7x/Nqv/Ro7OzvceOON7O/vc8cdd3DTTTcB8PSnP53HPOYx3HTTTQDs7e2xt7fH/v4+d9xxBwD7+/vceeed/GeRxH+G7e1tAHZ2drjxxhsBuPHGG7nxxhsB2N/fZ29vj6c+9ans7Oxwv/39febzOT/90z/NnXfeyQuzvb3Nox/9aG688UZuvPFG7rzzTvb39wHITL7v+76PB9re3uZ1X/d12dnZYXt7m2PHjnHXXXcB8KhHPYpbb72Vs2fP8uhHP5qu6x78Yi/2Yq/9D//wD7/NVVddddVVV1111f8dVK666qqrrrrqqqv+j/nwD//w7wLY2dlhb2+P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8AqvwF133cUNN9zAn/3Zn/Hnf/7nPND29jav+7qvyziOnDx5ku///u/nfu/+7u/O0572NG699VYe/ehH86hHPQqAf/iHf/jtz/zMz3wdrrrqqquuuuqqq/7nonLVVVddddVVV131P9iLvdiLvfaLvdiLvfYdd9zBzs4OAHfccQev/MqvzM7ODo997GN53OMex97eHn/yJ3/C273d2/FXf/VXvN3bvR0/8RM/wd7eHgB7e3v8yZ/8CY9//OO56aab+N7v/V7e+q3fmsc+9rE8/vGP5/GPfzx7e3s80N7eHnt7ezz+8Y9nZ2eHG2+8EYCdnR1+53d+h5d5mZfhlV7pldjb2+POO+/kjjvuYH9/nzvvvJN/yd7eHnt7e9x55508t52dHQC2t7cZhoH77ruPruu43/7+Ptvb2+zs7PCMZzyD48ePA3Ds2DF2dna434033si/x6VLl7h06RK7u7s86EEPYn9/H4C9vT329/fZ29sDYBxH9vf3+d7v/V729/d5bpL419je3ubRj340AK/wCq8AwP7+Pn/1V3/FjTfeyN7eHovFgv39fb7v+74PSTw/29vbPOpRj+IVXuEV2N/f5/u+7/t4vdd7Pb7/+7+f/f19Hmh7e5u3equ34sKFC5w8eZLv//7v536PetSj2N7eZj6fc9ddd/HoRz8agLvuuosXe7EXe+0Xe7EXe+1/+Id/+G2uuuqqq6666qqr/meictVVV1111VVXXfU/2Id/+Id/F8DjHvc4brrpJnZ2dgD44z/+Y86cOcMrv/Irc8cdd7C/v8/e3h4/8RM/wRu8wRvwV3/1V7zd270dj3vc4/iTP/kT7re3t8fjHvc4dnZ22Nvb46abbuLGG2/kMY95DHfeeSePe9zjuPPOO3lue3t77O3t8fjHP56dnR1uvPFG9vf3AdjZ2eGv//qveexjH8uNN97I3t4e+/v73HHHHdx5553ceeed/Gvs7e0BsLe3x5133okknvCEJ/CCbG9vc7+dnR3ut729zYtCEgD7+/s80N7eHvv7+/xbSeJfsr29zfb2NjfeeCM33HADN954IwD7+/v81V/9FQD7+/s84QlPYLFY8I3f+I08kCSe2/b2No961KN4hVd4Bfb399nf3wdAEj/zMz/Dc3vUox7F677u6/I3f/M3nDlzhu///u/nftvb27zu674uv/M7v8Mdd9yBJO73xCc+kRtuuIF3f/d3/65P+ZRPeQhXXXXVVVddddVV/zOhBz3oQVx11VVXXXXVVVf9T/SO7/iOn/VO7/ROnw3wrd/6rbzjO74jEcF3fud3AvD2b//2tNY4ceIE3/Vd38X9dnZ2eMxjHsMwDLzma74mj3vc4/iTP/kT9vb2eG47Ozu80iu9Er/5m7/JS77kS/Kar/ma7O3t8fjHP54/+ZM/4UWxs7PDjTfeyE033cSNN97Izs4OP/dzP8fDH/5wdnZ2uPHGG9nb22N/f5+9vT3uvPNO9vb2uPPOO/mXSOI/kyT+M0jigba3twG48cYb2d7e5oYbbuDGG28EYH9/n729PZ761Kfymq/5muzv73PnnXeyv7/PE57wBPb393l+JHG/7e1tHvWoR/HoRz+a7e1tfvd3f5e//du/5ZVe6ZV44hOfyP7+Ps9te3ub133d12V7e5vf+q3f4lGPehS/+Zu/yQO91Vu9FeM40nUdP/uzPwvAu73bu7G9vc3Xfu3X8pEf+ZEA/NZv/dZ3f/3Xf/37cNVVV1111VVXXfU/D5Wrrrrqqquuuuqq/6He6Z3e6bN5ppMnT3L8+HEAbrrpJu644w5+9Vd/lTd8wzcE4A3e4A34tV/7NQD29vb4kz/5E17plV4JgJ2dHd7u7d6Oxz3ucfzJn/wJD7S3t8ev//qvs7Ozw2w2A+C3f/u3edmXfVne+73fmzvvvJM77riDxz/+8bwge3t77O3t8YQnPAGAnZ0dbrzxRh5oZ2eHnZ0dzp8/z2Me8xhuvPFGAPb29tjf32dvb4+9vT329/fZ29tjf3+f/f19/jNJ4j/S9vY2Ozs77OzssL29DcANN9zAjTfeCMD+/j4AT3/609nZ2QFgf3+fvb097rrrLqZp4hu/8Rv5l0gCYHt7m0c96lHs7OzwqEc9iv39ff7qr/6Kl3mZl2GxWHD8+HH+/M//nOfn5V/+5XmFV3gF7rrrLra3t9na2uI3f/M3eaC3equ3Ynt7G4Af+IEfAGB7e5vt7W0ATp06BcD+/j4v9mIv9tpcddVVV1111VVX/c+EHvSgB3HVVVddddVVV131P83rvM7rvPeHf/iHfxfP9J3f+Z288iu/Mo997GN53OMex6/+6q8CsLOzw/u+7/uyt7fH4x73OP7kT/6EB9rZ2eGVXumVOHfuHC/90i8NwK/92q9xxx13IInntrOzw4033shNN93Eb/zGb/CSL/mSvPRLvzQAd955J3fccQd33nkne3t7PJAkXpidnR1uvPFGAG688UZ2dna48cYbud/f/u3f0nUdOzs73Hjjjdxvb28PgP39ffb29gDY399nb28PgP39fQD29vYA2N/f518iiRdme3ub++3s7ACwvb0NwPb2NgA7Oztsb28DcOONN3K//f19AO68807uu+8+XvM1X5P77e/vc+edd7K/v8+dd97JXXfdxb/Wzs4Oj3rUo7jxxhu54YYb2N/f56/+6q/427/9W972bd+WO++8kz//8z/nBdne3uat3uqtAPirv/orHv7wh/Obv/mb7O/v80Cv+7qvyw033MD29jY/+7M/y1133QXA67zO63DDDTdw11138ed//ue827u9G/f7rd/6re/++q//+vfhqquuuuqqq6666n8W9KAHPYirrrrqqquuuuqq/0muueaaB3/TN33T0x/3uMdx0003sbOzw3d+53cC8L7v+77s7e3x4z/+4+zt7SGJnZ0d3ud93oe9vT3uuOMOfu3Xfo3n9tjHPpbHPOYxPO1pT+M1X/M12dvb49d+7de48847eUF2dna48cYbecxjHsNNN93E7/7u7/LQhz6Um266ib29Pe68804e97jHcdddd/FvtbOzw/b2Njs7O9x4440A7OzssL29zc7ODvf7uZ/7OY4dO8bx48c5deoU99ve3gZgZ2eH52dvb48HksRz297e5gXZ39/nfnt7ewCcP3+e3d1dAF7zNV+T++3v77O3t8f+/j77+/sA3Hnnndx11138W21vb7O9vc2NN97Iox/9aLa3t9nf3+ev/uqveM3XfE329/d5whOewJ//+Z/zwmxvb/O6r/u63HDDDfzu7/4uL/MyL8Of/dmf8cQnPpEHksRbvuVbsr29zfb2Nj/7sz/LXXfdBcD29jbv9m7vBsDP/uzPsr+/z7u927uxv7/P/v4+GxsbfOZnfubr3Hnnnb/NVVddddVVV1111f8c6EEPehBXXXXVVVddddVV/5N87ud+7m+92Iu92Gs/7nGPY2dnh5tuuokf//Ef54477uCVX/mVuf766yml8BM/8RPcb2dnh/d5n/dhb28PgJ/4iZ9gb2+PB9rZ2eGmm27iDd7gDfjd3/1dXvM1X5O9vT3+5E/+hMc//vG8MDs7O9x4443s7OzwSq/0SgD87d/+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13md1+H3f//3efVXf3UAzp49+4wP/uAPfjBXXXXVVVddddVV/z3Qgx70IK666qqrrrrqqqv+O7zO67zOe3/4h3/4dwHs7e3xq7/6q7z+678+BwcH/PiP/zgApRTe5m3ehr29PX7t136N++3s7PB2b/d2/PVf/zUv/dIvzeMe9zj+5E/+hOd27NgxXumVXonHPOYx3HHHHezs7HDnnXfyuMc9jjvvvJMXZmdnh8c85jHceOON3HTTTQDceeed3Hjjjezt7XHnnXdy55138vjHP55/DUk8t+3tbQB2dnbY3t5mZ2eH7e1tdnZ2ANje3mZnZ4cH+tu//VuOHTsGwPHjxwGICLa3t/n3unTpEgC7u7vc70EPehAPtL+/D8De3h77+/vs7+8DcOeddwJw11138aKQxAuyvb3NDTfcwPb2No9+9KPZ3t5mf3+f7e1tAPb393nCE57AE5/4RPb393lukrjf9vY2j3rUo3j5l3959vf32d7e5q677uK3fuu32N/f57k96lGP4nVe53X4m7/5G86cOcPP/uzP8kBv+ZZvyfb2Nl/91V/NNddcA8BbvMVbcMMNN/Dbv/3bvNzLvRzb29sAfOZnfubr/MM//MNvc9VVV1111VVXXfVfDz3oQQ/iqquuuuqqq6666r/D537u5/7Wi73Yi7323t4eAD/+4z/O6dOnee3Xfm1+/Md/nL29PXZ2dnjf931f9vb2eNzjHsef/MmfcL+dnR0e85jHMAwDr/mar8njHvc4/uRP/oS9vT0AJPFAb/AGb8Bv/MZv8Jqv+Zq85Eu+JHfccQePf/zjefzjH88LI4mdnR1uvPFGbrzxRh7zmMcA8Ld/+7ecOnWKG2+8kb29Pe68807uvPNO9vb2uPPOO3l+JPHvsb29DcDOzg4A29vb3G9nZweAnZ0dntv29jbPz/7+Ps9tb2+P++3v7yOJvb09APb399nf3+c/giSe2/b2No961KMAeIVXeAUA9vf3+au/+ite8zVfk/39ffb397nzzjv58z//c14YSQBsb2/z8i//8jzqUY/irrvu4jd+4zd4vdd7PX7rt36L/f19ntv29jav8zqvww033MD3fd/38Yqv+Ir81m/9Fg/08i//8rz8y788AD/4gz/I/v4+AB/0QR/E7/zO73DnnXfyFm/xFmxvb7O/v89tt93225/5mZ/5Olx11VVXXXXV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VVddddVV/1WuueaaB3/TN33T03mmxz3ucTzucY/jFV7hFThx4gTf+Z3fCcBjH/tY5vM5L/3SL82v/dqvcccdd3C/nZ0dDg8PecmXfEle+qVfmsc97nH8yZ/8CQCSuN/Ozg6Pecxj+LM/+zNe8zVfk5d8yZdkb2+PP/mTP+Hxj388L8yxY8e48cYbufHGG7nxxhvZ2dnhb//2bzl16hQ33ngje3t73Hnnndx55508/vGP54WRxItie3sbgJ2dHba3t9nZ2WF7e5udnR0Atre3AdjZ2eFv//ZvOXbsGPc7fvw4AMeOHePf69KlS9xvd3eX+126dImXfMmXBGB/fx+Avb099vf32d/fB+DOO+8E4K677uK5SeJfa3t7m+3tbW644QZuvPFGbrjhBvb39/mrv/orXvM1X5P9/X2e8IQncPfdd3PXXXfxL9ne3uZ1Xud1uOGGG/jd3/1dXvM1X5M///M/58///M95fm644Qbe8i3fkmc84xl83/d9Hy/1Ui/FXXfdxf1uuOEG3uIt3oKf/dmfRRJ33XUXAO/6ru/KhQsXePrTn87111/Pox71KADuu+++W7/+67/+ff7hH/7ht7nqqquuuuqqq676r0Hlqquuuuqqq6666r/QO77jO34WD7Czs8Pe3h6lFHZ2drjpppu48847efzjH88rvdIr8dd//de8wRu8AT/xEz/B3t4eAHt7e+zs7ND3PTs7O7zyK78yOzs7/Omf/il7e3vcb29vjz/5kz9hZ2eH5XIJwF//9V/zBm/wBrzSK70Sj3/843n84x/P3t4eDySJvb099vb2ePzjHw/Azs4ON954I6dOnQJgZ2eHW2+9lcc85jG8/uu/Pnt7e9x5553ceeed7O3tceeddwIgiRfV/v4+APv7+/xLtre3kcTOzg4A29vbPND29jbPbWdnhwfa29vjuUlif3+f++3t7QGwv78PwO///u/zbyGJf8n29jYAj3rUowB4hVd4BQD29/f5q7/6K2644Qbut1gs+P7v/3729/eRxAuzvb3Nox71KB71qEcB8Fd/9Vdsb2+zsbHBN3/zN/P8bG9v86hHPYqXf/mXB6DrOs6cOcNdd93F/ba3t3mLt3gLfud3focbbriBv/iLvwDgUY96FNvb2wD88i//Mtdffz33u+aaax78Oq/zOu/1D//wD7/NVVddddVVV1111X8N9KAHPYirrrrqqquuuuqq/yo/8RM/YYC/+7u/4yVe4iW44447+PEf/3Ee+9jHcu211/KQhzyE7/qu7wJgZ2eHxzzmMQzDwEu/9EvzEz/xE+zt7fFAj33sY3mDN3gD7rjjDnZ2dnj84x/Pn/zJn/D87Ozs8JjHPIbHPOYx/M7v/A4v8zIvw87ODnfeeSd33HEHj3/845HEv2RnZ4ft7W1uvPFGbrrpJm688UYA/vZv/5ZTp05x4403ArC3t8edd97JnXfeCcD+/j533nkn/xEk8R9NEv8ZJPHctre32d7e5oYbbmBnZ4ft7W1uuOEG9vf3Afirv/orXvM1X5P9/X329/e58847ueuuu7jrrrt4IEm8IC//8i/P9vY2j3rUo9jf3+ev/uqveJmXeRme+MQn8ud//ue8IC//8i/Py7/8y3PXXXdxww038Od//uf8xV/8BQ+0vb3Nu77ru/KMZzyDruv4uZ/7Oe73Fm/xFozjyNOf/nSe+MQn8q7v+q5sb2/zN3/zN7zUS70U9913363f8A3f8D5///d//9tcddVVV1111VVX/eejctVVV1111VVXXfVf5HVe53Xem2cqpQCws7MDwB133MFjH/tYdnZ2eKVXeiX+5E/+hL29PR7/+MfzmMc8hr/+67/m7d7u7Xjc4x7Hn/zJn3C/xz3ucdxxxx280iu9Ek972tN46Zd+aR7zmMfwJ3/yJzz+8Y/ngfb29viTP/kT/uRP/oQbb7yR/f19brrpJnZ2dtjZ2eGVXumVuPPOO7nzzjt5/OMfzwuyt7fH3t4ed955J3/6p38KwM7ODjfeeCNd1wFw4403srOzw9/8zd9w4403srOzw4033sje3h4Ad955JwB33nkn+/v77O3tsb+/z79EEv8ZJPEfbXt7m52dHW644QYAdnZ22N7e5oYbbgBgf3+fu+66i/vuu49HPepR3O8JT3gCi8WCn/mZn+Guu+7iBZHEc7vhhhu44YYbePmXf3n29/f5q7/6K37t136NN3iDN6C1xg/8wA/wgtxwww28zuu8DgC/+7u/y8Mf/nB+8Ad/kP39fR7ohhtu4C3e4i34m7/5G86cOcPP/dzPcb+Xe7mX44YbbmB/f59f/uVfBmB7exuAcRwBuOaaax782Mc+9rX+/u///re56qqrrrrqqquu+s+HHvSgB3HVVVddddVVV131X+Gbvumbnn7NNdc8GOCP//iPuemmm7jpppv48R//ce644w5uuukm+r7ntV/7tfm1X/s17rjjDu73Sq/0SgzDwEu/9EvzuMc9jj/5kz/hgSTxmMc8hld6pVfir//6r3nN13xN9vb2+LVf+zXuvPNOXpCdnR1uvPFGHvOYx3DTTTfxu7/7u7z0S780AHfeeSd33nknd955J3t7e/xr7OzsAHDjjTdy4403srOzw/b2Njs7OwD8/M//PLfccgunTp1ie3ubnZ0dAPb29tjf32dvbw+A/f199vb22N/fRxJ7e3vs7+/zH0kSL6rt7W0Atre3AdjZ2WF7exuA7e1ttre3ufHGG7nf/v4++/v7nDt3jkuXLvEar/EaAOzv77O/v8+dd94JwF133cVdd93Fi0oSANvb2zzqUY9ie3ubRz3qUezv7/NXf/VXvOZrvib7+/s88YlP5M///M95Yba3t3md13kdbrjhBn73d3+Xl3mZl+G3f/u3ueuuu3huL/dyL8fLv/zL87u/+7tcd911/NZv/Rb3u+GGG3iLt3gLfud3foe9vT3uuusuHvWoR/Har/3aPPGJT2R/f5+Xf/mXB+Ds2bPP+OAP/uAHc9VVV1111VVXXfWfDz3oQQ/iqquuuuqqq6666j/bi73Yi732537u5/4Wz/THf/zH/Nqv/Rrv+Z7vSSmFH//xHwfglV/5lVksFjzkIQ/hJ37iJ9jb2+N+r/RKr8STn/xk3uM93oM77riDX/u1X2Nvbw9J3G9nZ4fHPOYxPOYxj+Gv//qvec3XfE329vb4kz/5Ex7/+Mfzwhw7dowbb7yRxzzmMfzUT/0UL/mSL8nDHvYwbrzxRvb29rjzzjt5/OMfz5133skLI4kXZHt7G4Abb7wRgBtvvJGdnR22t7fZ2dnhfr/3e7/HsWPH6LqOnZ0ddnZ22N7e5oH29/e5397eHgD7+/s8P3t7ezw/ktje3uaBtre3ud/Ozg4A29vbPND+/j4Ae3t77O/vc/bsWQBe4zVeg/vt7++zv7/P/v4+e3t77O/vs7+/z1133cW/1fb2Njs7O9xwww3ccMMN3HDDDezv7/NXf/VX3HbbbbzVW70VT3ziE3niE5/I/v4+L8yjHvUoXv7lX57t7W1+93d/l5d5mZfhiU98In/xF3/Bc9ve3ua1X/u12d7e5qd/+qd5zGMew1/8xV9wv+3tbd7iLd6CCxcusFqt+O3f/m0A3uIt3oIbbriBz/u8z+NN3uRNePmXf3nu95mf+Zmv8w//8A+/zVVXXXXVVVddddV/LvSgBz2Iq6666qqrrrrqqv9sn/u5n/tbL/ZiL/baPNMf//Ef87jHPY7Tp0/zlm/5lvzET/wEd9xxBzs7O7zBG7wBrTVOnDjBd33Xd/FAN910E2/3dm/HHXfcwc7ODo9//OP5kz/5E57bzs4Oj3nMY/izP/szXvIlX5KXfumXBuDxj388f/Inf8Jzk8QD7ezscOONN3LjjTfymMc8hp//+Z/nlltu4SVf8iXZ29sD4M477+TOO+/k8Y9/PPeTxL/H9vY2Ozs7bG9vA7Czs8P29jY7OzsA7OzssL29zd/+7d9y7NgxAI4fP879jh07xn+US5cuAbC7uwvApUuXeMhDHgLA3t4eAPv7++zv7wOwv7/P3t4e+/v7HBwc8B9he3ub7e1tbrjhBm688UZuuOEG9vf3+au/+isAXuZlXob9/X3uuusu/vzP/5x/yfb2No961KN41KMeBcBf/dVf8Xu/93u80Ru9EX/+53+OJJ7bDTfcwFu8xVtw1113sb29zW//9m9z11138UBv8RZvwTiOdF3Hz/3czwFwww038BZv8Rb87M/+LAcHB7zcy70cj3rUo9jd3eX48eP8wz/8w29/5md+5utw1VVXXXXVVVdd9Z8LPehBD+Kqq6666qqrrrrqP9s3fdM3Pf2aa6558B133MFNN93EHXfcwY//+I/zhm/4hmxublJK4Sd+4icA2NnZ4e3e7u2433d913fxQDs7O7zBG7wBT3va03jN13xNHv/4x/Mnf/In7O3t8dx2dnbY3t7mDd7gDfid3/kdXuZlXoadnR3uvPNOHve4x3HXXXfxL9nZ2WF7e5sbb7yRm266iRtvvJGf//mf55ZbbuHBD34wOzs77O3tceedd3LnnXeyv7/PnXfeyX8kSTy37e1t7rezswPA9vY2z8/29jbPjyT29/d5oL29PR5of3+f/f19XlSS+LfY3t4G4FGPehQAj370o9ne3mZ/f5+nP/3pXLp0idd4jddgf3+fJz7xidx1113cddddvCi2t7d51KMexcu//Muzv7/PX/3VX/EyL/MyPPGJT+TP//zPAZDEA21vb/Par/3a3HDDDfzu7/4uD3/4w/m5n/s5nttbvMVbsL29DcAP/uAPcr+3eIu3YBxH1us1v/Vbv8W7vuu70lrj+PHjANx33323fv3Xf/37/MM//MNvc9VVV1111VVXXfWfBz3oQQ/iqquuuuqqq6666j/Ti73Yi732537u5/4WwOMe9zge+9jHsre3x3d+53eys7PD+77v+wLwa7/2azzucY/jfu/zPu/D/X7iJ36Cvb09HuiVXumVeOVXfmWe8YxncOLECR7/+MfzJ3/yJ7wgj3nMY7jpppv4jd/4DV7yJV+S13zN12Rvb4/HP/7x3Hnnndx55528KHZ2dtje3ubGG2/kpptu4sYbbwTgb//2bzl16hQ33ngjAHt7e9x5550A3Hnnnezv73PnnXfyryWJ/wyS+I8miRfF9vY2N9xwA9vb29x4443ccMMNAOzv77O/v89Tn/pUXuM1XoP9/X0AnvCEJ3D33Xdz11138aLa3t7mUY96FC//8i/P/v4+f/VXf8Xf/u3f8l7v9V78+Z//OU984hMBkMRze7mXezle/uVfnmc84xk86EEP4s///M/5i7/4Cx5oe3ub137t12Z7exuAH/zBH+R+N9xwA2/xFm8BwLd8y7cgiQ/8wA9kf3+fu+++m0c+8pEA/MiP/Mhn/+iP/ujncNVVV1111VVXXfWfBz3oQQ/iqquuuuqqq6666j/Th3/4h3/X67zO67w3wB//8R/zpCc9ifd8z/fkx3/8x7njjjt47GMfyxu+4Ruyt7fHT/zET7C3twfAzs4Oh4eHvORLviQv/dIvzU/8xE+wt7fH/SSxs7PDYx7zGO677z5e67VeC4DHP/7x/Mmf/AkvyM7ODo95zGN4zGMew87ODnfeeSc33ngje3t7PP7xj+fOO+/kzjvv5EW1s7MDwI033siNN97Izs4ON954Iz//8z8PwMMe9jB2dna48cYbAdjb22N/f5+9vT3uvPNOAPb397nzzjt5bpL4zyCJ/2iSuN/29jYA29vb3HDDDQDceOONbG9vs729DcD+/j533XUX9913H894xjN493d/d/b393nCE54AwF133cVdd90FgCReFNvb2zzqUY/iUY96FNvb2+zv7/Pbv/3b/O3f/i1v9EZvxJ//+Z/zQJJ4oJd7uZfj5V/+5dnf3+dnfuZneN3XfV1+7ud+jud2ww038BZv8RY84xnP4Pu+7/s4c+YM99ve3uZd3/VdAfi5n/s57r77bh75yEfy2q/92nzv934vL/ZiL8bLvdzLAfAP//APv/2Zn/mZr8NVV1111VVXXXXVfx70oAc9iKuuuuqqq6666qr/TD/xEz9hnumP//iP2dvb41GPehSlFH78x38cSbzBG7wBm5ubnDhxgu/6ru/ifjs7O7zSK70S586d46Vf+qV53OMex5/8yZ8giQfa2dnh9V//9dnZ2eF+j3/84/mTP/kTXphjx47x6Ec/mld6pVfi53/+53mZl3kZbrzxRvb29rjzzju58847efzjH8+/RBIPtL29DcCNN97IjTfeCMDOzg433ngjAD//8z/PLbfcwqlTp9je3mZnZweAvb09APb399nf3wfgzjvvBGB/fx+Avb099vf3+beSxL/F9vY299ve3mZnZ4ft7W0AdnZ22N7eZnt7m+3tbe63v7/P/v4+T33qUwF4jdd4DQD29/fZ39/nzjvvZH9/n/39fe666y6eH0m8INvb22xvb3PDDTfw8i//8gDs7+/zV3/1V7zMy7wMT3ziE7nrrru46667eG6SuN/LvdzL8fIv//Ls7++zvb3N/v4+v/3bv81dd93Fc3u5l3s5Xv7lX57f/d3f5eEPfzg/93M/xwO9xVu8BeM40nUdP//zPw/Am7/5mzOOI09/+tO54YYbeOQjHwnAfffdd+vXf/3Xv88//MM//DZXXXXVVVddddVV/znQgx70IK666qqrrrrqqqv+s7zjO77jZ73TO73TZ//N3/wNL/VSL8Udd9zBr/7qr1Jr5T3f8z35iZ/4Ce644w52dnZ4u7d7OwD29vb4iZ/4Ce63s7PDYx7zGF75lV8ZgDvuuINf//VfZ29vj+f2mMc8hic+8Yk86EEP4rVe67UAePzjH8/jH/949vb2uJ8kHmhnZ4ft7W0e85jHcOONN7Kzs8Pf/u3f8pIv+ZLs7e2xv7/PHXfcwZ133smdd97JA0niRbW9vQ3Azs4O29vb3Hjjjezs7ABw4403cr+f//mf59ixYxw7doxTp04BsLOzw/b2Ng+0v7/PA+3t7XG//f19/jW2t7d5oJ2dHQC2t7d5oP39fQD29vYAOH/+PJcuXQLgNV7jNQDY398HYH9/nzvvvBOAu+66C4C77rqLF5Ukntv29jaPetSjuOGGG7jhhhvY39/nr//6r3mN13gN9vf3eeITn8hdd93FXXfdxQsiie3tbR75yEfy8i//8uzv7/NXf/VXvMzLvAx//ud/zpOe9CSe2/b2Nq/92q/N9vY2AE984hP5i7/4Cx7oLd7iLdje3gbgh37ohwC4/vrreYu3eAu+93u/l9VqxWu/9mvzyEc+kr/5m7/hpV7qpfit3/qt7/76r//69+Gqq6666qqrrrrqPwd60IMexFVXXXXVVVddddV/lm/6pm96+jXXXPPgO+64g5tuuom9vT2+8zu/k8c+9rE86lGPopTCT/zET3C/93mf9wHgjjvu4Nd+7dd4oJtuuom7776b13zN1+TBD34wj3/84/mTP/kTnp/HPOYxPOYxj+Gv/uqveJmXeRl2dna48847edzjHsddd93Fv2RnZ4dHP/rR3HTTTdx4440A3Hnnndx4443s7e2xv7/PHXfcwV133cWdd97Jf5Tt7W0AdnZ22NnZAeDGG28EYHt7G4Bbb72Vm266ifsdP34cgGPHjvEf6dKlS9xvd3eX/f19Ll26xEu+5Euyt7fH/v4++/v7AOzv77O/vw/AXXfdxX8ESWxvb7O9vc0NN9zADTfcwA033ADAXXfdxQ033ADA/v4+T3ziE7nrrru46667+Jfs7OzwyEc+kpd/+Zdnf3+fv/qrv+JlXuZl+Iu/+Aue+MQn8vy83Mu9HC//8i/PM57xDL7v+76Pl3qpl+Kuu+7igd7iLd6C7e1tAH77t3+bu+++G4A3f/M3ZxxH1us1v/3bv827vMu7sL29zf7+Ptvb29x33323fsiHfMhDuOqqq6666qqrrvrPgR70oAdx1VVXXXXVVVdd9Z/hxV7sxV77cz/3c38L4I477uAv//Ivecu3fEt+/Md/nL29PY6OjnjP93xP/uRP/oTHPe5xAOzs7PB2b/d23O+7vuu7eKCdnR0e+9jH8kqv9Ers7e0B8Gu/9mvceeedPD87Ozu80iu9Er/xG7/BS77kS/Kar/ma7O3t8fjHP54nPOEJ7O3t8S/Z2dnhxhtv5MYbb2RnZ4ef/umf5kEPehAPe9jDeMxjHgPA3t4ed955J3feeSf7+/vceeed/FtJ4kW1vb3NA+3s7HC/7e1tHkgSL8ze3h4PtL+/D8D+/j4viCT+o2xvbwPwqEc9CknccMMN3HDDDezv77O/v89Tn/pUnvGMZ/BWb/VWPPGJT2R/f58nPvGJvCi2t7d51KMexaMe9Si2t7f53d/9Xf72b/+Wt33bt+W3f/u32d/f5/nZ3t7mtV/7tdne3mZ7e5u77rqLn/u5n+O5vcVbvAXb29sA/PZv/zZ33303AI985CN57dd+bb73e7+X1WoFwAd+4Afyu7/7uzz84Q/nhhtuAOAzP/MzX+cf/uEffpurrrrqqquuuuqq/3hUrrrqqquuuuqqq/6TXHPNNQ/mAZ7xjGewt7fHTTfdxB//8R/zYi/2Yuzs7PBKr/RK3HHHHezt7bG3t8dP/MRPcHh4yHu+53vyPu/zPvzET/wEe3t7AOzv7/Mnf/In3HHHHbzSK70ST3va03i7t3s7Hv/4x/Mnf/In7O3t8UB7e3v82q/9Gjs7O8xmM/b29tjZ2eGmm27iMY95DPv7+zz+8Y/n8Y9/PC/I3t4ee3t7PP7xjwdgZ2eH+XwOwJ133smNN97Izs4Ot956K495zGO48cYbAdjb2+POO+8E4M4772R/f58777yTF0YS/xr7+/s80P7+Ps+PJP6jSeLfYnt7G4AbbriB7e1tbrzxRm644QYA9vf3Afjrv/5rbrjhBu531113cfHiRQ4ODviBH/gBXhTb29s86lGP4oYbbuCGG25gf3+fv/qrv+JlXuZl2NjYoOs6fu7nfo7nZ3t7m0c+8pG8/Mu/PL/7u7/Ly7zMy/BzP/dz3HXXXTzQ9vY2r/3ar8329jZf8zVfw0u91Etx9913A7C9vc1rv/Zrs7+/z4kTJ7j77rt5uZd7OQD+5m/+hoc//OHc78Ve7MVe6x/+4R9+m6uuuuqqq6666qr/eOhBD3oQV1111VVXXXXVVf8ZPvdzP/e3tra2XvtBD3oQe3t7/Oqv/iqv8AqvwIkTJ/iu7/ouAPb393mP93gPTpw4wXd913dxv52dHQ4PD3nJl3xJXvqlX5rHPe5x/Omf/ikPtLOzw2Me8xhe6ZVeib/927/lwQ9+MI9//ON5/OMfz97eHs/PsWPHuPHGG9ne3uaVXumV+L3f+z0e+tCHsr29zf7+Po9//OO588472dvb418iCYDt7W0AbrzxRm688UZ2dna48cYbAfj5n/95brnlFk6dOsWNN94IwN7eHvv7++zt7bG/v8/e3h77+/vs7++zv7/PfzRJ/EeTxAuzvb3N9vY229vbbG9vA3DjjTdyww03cL/9/X2e/vSnc+nSJV7jNV4DgP39fZ74xCcCcNddd3HXXXfxr7G9vc2jHvUobrjhBm644Qb29/f5q7/6K17mZV6Gu+66i7vvvpsnPvGJvCDb29s88pGP5OVf/uV5xjOewYMe9CD+/M//nL/4i7/gud1www28xVu8Bc94xjP4vu/7Ph72sIexv7/P/d78zd+ccRz5vu/7Pq655hoA3uVd3oWnPe1p3Hbbbbz2a78229vb7O7ucuedd/72Z37mZ74OV1111VVXXXXVVf/xqFx11VVXXXXVVVf9J3mxF3ux1wbY3d0lIrjjjju45557+PAP/3Ae+9jH8rjHPY4bb7yRUgoA7/M+78N3fdd3AbC3t8fOzg593/PXf/3XvOZrviaS+JM/+RPut7e3x5/8yZ/w+Mc/nsc85jF87/d+L2/91m/NYx7zGO68804e97jHceedd3I/Sezt7bG3twfAE57wBG688UYAdnZ2+Ju/+Rse85jH8Pqv//rs7e3x+Mc/njvvvJM777yT5yaJ++3v7wPwhCc8gSc84QkAbG9vA3DjjTdy33330XUdADfeeCM/+7M/y/Hjx7nlllvY3t7mxhtv5MYbb+R++/v77O3tAbC/v8/e3h77+/sA7O/vA7C3twfA/v4+L4wk/iNsb29zv52dHba3t9ne3uZ+N954IwA33HAD99vf3wfgrrvu4r777uOpT30qv/mbv8m7v/u7s7+/z1133cV6vWYcR37mZ36Gu+66C0n8a21vb/OoRz2KG264gRtuuIH9/X3++q//mhtuuAGAjY0NfvAHf5AXZnt7m0c+8pG8/Mu/PPv7+wCcPXuWP/iDP2B/f5/n9nIv93K8/Mu/PL/7u7/Lwx/+cK655hr29/e535u/+Zuzvb0NwDXXXAPAIx/5SLa3t/mbv/kbVqsV29vb7O7ucvz4cY4fP/7aL/7iL/7af//3f//bXHXVVVddddVVV/3HQg960IO46qqrrrrqqquu+o/2Oq/zOu/94R/+4d8FsLe3x87ODj/+4z8OwNu//duzt7fHd33XdwGws7PD273d2wFwxx138Gu/9ms80Cu90ivx53/+57zne74nAL/2a7/GnXfeyXPb2dnhMY95DH/2Z3/Ga77ma/KSL/mSPP7xj+dxj3scd911Fy/Mzs4ON954IzfeeCOPecxj+Pmf/3le5mVehhtvvJG9vT3uvPNO7rzzTvb29rjrrrv499je3mZnZ4ft7W1uvPFGAHZ2dtjZ2WF7exuAn//5nwfgQQ96EAAnT54EYGdnh+3tbZ7b/v4+D7S3t8fzs7+/z/22t7d5fnZ2dgDY3t7m+dnf3wdgf3+fc+fOcenSJQAuXbrEm7/5mwOwv78PwF133cXe3h4Ad911F/v7++zv7/P8SOJFsb29zaMe9ShuuOEGbrjhBvb399nf3+epT30qL/3SL83+/j533XUXf/7nfw6AJF6Q7e1tXu7lXo5HPepRPOMZz+Dnfu7neOVXfmWe9KQnsb+/z3Pb3t7mLd7iLQD46Z/+aR772MfyF3/xFzzQm7/5m7O9vQ3Az//8z7O/vw/Au7zLu7C9vc3P/dzPsb29zWu/9mtzv/vuu+/W3/qt3/ruH/3RH/0crrrqqquuuuqqq/5joQc96EFcddVVV1111VVX/Uf78A//8O96ndd5nfcGuOOOO9jZ2eFxj3scf/zHf0ytlfd8z/fkjjvu4Nd+7dcA2NnZ4e3e7u2433d913fxQMeOHeNt3/Zt+eu//mte8zVfkz/5kz/hT/7kT3h+dnZ2eMxjHsOf/dmf8ZIv+ZK85mu+Jnt7ezz+8Y/nCU94Ant7e7wwOzs7bG9v85jHPIadnR1uvPFGfu/3fo+HPvSh3Hjjjezt7bG/v8+dd97JnXfeyZ133sm/lyTut729zc7ODtvb2wBsb2+zs7MDwPb2Nn/3d3/H9vY2x44dY2dnB4Bjx45xv2PHjvHvcenSJe536dIlAPb29rh06RIAD3nIQ9jf32dvb4/73XXXXQDs7++zv7/Pv5Yknp/t7W22t7e54YYbuOGGG7jhhhsA2N/f56//+q95jdd4Dfb393niE5/IXXfdxV133cUDSeK5bW9v88hHPpJHPepRAPzVX/0Vf/u3f8srv/Ir86QnPYn9/X2e2/b2No985CN5+Zd/eX73d3+Xhz/84fzFX/wFd999Nw/05m/+5mxvbwPw27/929x9990AvPmbvznb29t89Vd/Nddeey2v/dqvzSMf+UjuuusubrjhBgD+4R/+4Xc+8zM/87W56qqrrrrqqquu+o+FHvSgB3HVVVddddVVV131H+2bvumbnt73/YOPHz/OH//xH3P99ddz4sQJvuu7voudnR3e533eB4Bf+7Vf43GPexwAOzs7HB4e8p7v+Z4A/MRP/AR7e3tIAmBnZ4fHPOYx/Nmf/Rlv/dZvzc7ODo9//OP5kz/5E56fnZ0dHvOYx/CYxzyG3/3d3+VlXuZl2N7e5s477+TOO+/k8Y9/PC+KnZ0dbrzxRm688UZ2dna48cYb+fmf/3le5mVehhtvvBGAvb097rzzTu6880729/e58847eVFJ4t9re3ub++3s7PCC7OzscL+9vT2en/39fQD29/d5bpL4jyYJgO3tbba3t7nhhhsAuOGGG7jhhhvY399nf3+fpz71qbzGa7wG+/v7PPGJT2R/f58nPvGJvCCSeKBHPepRXH/99TzqUY9if3+fv/qrv+LhD384d911F3/xF3/BC/JyL/dyvPzLvzz7+/t8z/d8D6/yKq/CX/zFX/BA29vbvNZrvRbb29t8zdd8DQ972MPY398H4Prrr+ct3uItAPihH/oh9vf3eZd3eRee9rSnMU0TL/dyLwfA2bNnn/HBH/zBD+aqq6666qqrrrrqPxZ60IMexFVXXXXVVVddddV/tJ/4iZ/wM57xDB70oAfxq7/6qzz2sY/lpptu4id+4ie444472N/f5zVf8zV56Zd+aX7t136NO+64A4CdnR0ODw95zdd8TR784AfzJ3/yJzz+8Y/ngXZ2dnj91399nva0p/HSL/3SADz+8Y/nT/7kT3h+jh07xo033siNN97IYx7zGH7v936Pl3qplwLgzjvv5M477+Txj388LwpJbG9vc+ONN3LjjTeys7PDjTfeyM///M9zyy23cOrUKW688UYA9vb22N/fZ29vjzvvvJP9/X3uvPNOHkgS/9Ek8Z9BEv8Rtre3AbjhhhvY2dnhhhtu4IYbbgBgf3+f/f19nvrUp7K7u8tbvMVbsL+/zxOf+EQA/vzP/5wXhSQAbrjhBq6//npe/uVfnv39ff76r/+av/3bv+X1X//1ufvuu3niE5/IC/JyL/dyPOpRjwLgr/7qr3j4wx/O7/zO77C/v88DXX/99bzFW7wFz3jGM/i+7/s+Hvawh7G/vw/A9vY27/Iu78Lv/u7v8ru/+7tcc801PPKRj+S1X/u12d/f5y/+4i947dd+bZ7xjGfwoAc9iLd7u7cTV1111VVXXXXVVf+x0IMe9CCuuuqqq6666qqr/iO9zuu8znt/+Id/+HfxTH/8x3/MHXfcwSu8witw4sQJvuu7vguAV3qlV2IYBl76pV+an/iJn2Bvbw+AnZ0dHvOYxzAMAy/90i/N4x//eP7kT/6E5/aYxzyGV3qlV+Kv//qvec3XfE329vZ4/OMfz5/8yZ9wP0k80M7ODjfeeCOPecxjuPHGG/nbv/1bXvIlX5K9vT3uvPNO7rzzTh7/+Mfz3CTxgmxvbwNw4403cuONN7Kzs8ONN97ID/zAD3Ds2DEe9KAHcfLkSW688UYA9vb2ALjrrrsAuPPOO9nf3wfgzjvv5N9DEv8ZJPGi2t7eBmB7e5sbbrgBgJ2dHba3t7nhhhsA2N/fB+DpT386ly5d4hnPeAZv9VZvBcATn/hEAO666y7uuusu/jW2t7d51KMeBcDLv/zLs7+/z1//9V/z0i/90gA88YlP5C/+4i94YV7u5V6ORz3qUQBsb2+zv7/Pb//2b3P33Xfz3F7u5V6Ol3u5l+N3f/d3efjDH87P//zPc7/t7W3e5V3ehWc84xl0XcfP//zPA/Dmb/7mnD17losXL3LDDTfwyEc+kvt9/dd//fv81m/91ndz1VVXXXXVVVdd9R8HPehBD+Kqq6666qqrrrrqP9I7vuM7ftY7vdM7fTbPdMcdd/Crv/qrvP3bvz07Ozv82q/9Go973OPY2dnhDd7gDWitceLECX7iJ36Cvb09AHZ2dnjMYx7Dn//5n/Oe7/meAPzkT/4ke3t7PNDOzg433ngjT3ziE3nJl3xJXvM1X5O9vT0e//jH86d/+qe8MDs7Ozz60Y/mpptu4sYbbwRgb2+P+z3+8Y/nzjvv5K677uLfYnt7mxtvvBGAG2+8kZ2dHW688UYe6O/+7u84efIkOzs7bG9vA7C/vw/A3t4e+/v7AOzt7bG/vw/A/v4+AHt7ewDs7+8DIIn/DDs7OwBsb28DsL29zfb2Nvfb2dlhe3ub7e1ttre3ud/+/j77+/ucP3+el3iJl+B++/v77O/vs7+/z/7+PnfddRf7+/vs7+/zb7G9vc2jHvUobrjhBm644Qb29/fZ3t4GYH9/nyc+8Yk86UlPYn9/nxdke3ubRz7ykTzqUY8C4K/+6q/4vd/7Pd7ojd6Iv/iLv0ASD7S9vc1rvdZrsb29zc/8zM/wmMc8hr/4i7/gftvb27zWa70W4zjSdR0///M/D8AjH/lIXvu1X5u7776bn/u5n+Nd3uVd2N7e5n7/8A//8Nuf+Zmf+TpcddVVV1111VVX/cehctVVV1111VVXXfUf7HVe53Xem2f6nd/5HV7rtV6LnZ0d/uRP/oTZbMYrvdIrcccdd7C3t8ev/dqv8QZv8AZcvHiRt3u7t+MnfuIn2NvbY29vjz/5kz/h2LFj7O3t8bSnPY23fdu35fGPfzx/8id/wv329vbY29tjZ2eH9XrN3t4ev/u7v8trvuZr8pjHPIbHP/7x3Hnnndx55508t729Pf70T/+UP/3TP2VnZ4cbb7yRxzzmMdx44438/M//PC/zMi/DK73SK7G3t8edd97JnXfeyf7+PnfeeScviv39fZ7whCcA8IQnPIH7bW9vs7Ozw87ODgBd1wGwt7fHjTfeyPd93/dxyy23AHDs2DGOHz/Ozs4ON954IwA7Oztsb2/z3Pb393lue3t7vCh2dnZ4oO3tbZ7b/v4+99vf3+f8+fMA3Hfffdx3333cdtttALzlW74lAPv7++zv77NarfjN3/xN9vf3ueuuuwCQxL/V9vY2j3rUo7jhhhu44YYb2N/fB+Cv//qvueGGGwD48z//c570pCexv7/PC7O9vc0jH/lIXv7lX579/X3+6q/+ipd5mZdhY2OD06dP8xd/8RdI4oFe7uVejpd7uZfjb//2b9ne3ubYsWP8xV/8Bffb3t7mtV7rtRjHkZMnT/JDP/RDAGxvb/Par/3a/M3f/A233XYbANvb2/zO7/wOL/uyL8v29jZnzpx5MFddddVVV1111VX/sdCDHvQgrrrqqquuuuqqq/4jfeVXfqWPHTtGRLC3t8dNN93E4x73OH7t136NN3iDN2Bzc5NSCj/xEz8BwM7ODoeHh7zkS74kL/3SL81P/MRPsL+/z/12dnZ4zGMew5Of/GTe8i3fEoA/+ZM/4fGPfzzPz2Me8xge85jH8Nu//du83Mu9HI95zGPY29vjT//0T3n84x/Pv2RnZ4cbb7yRG2+8kZ2dHW688UZ+7/d+j4c+9KHceOON7O3tsb+/z5133smdd97JnXfeyb+WJF6Q7e1tAHZ2dtje3gZge3ubnZ0dbrvtNra3twHY3t7m2LFj7OzsAHDs2DH+I126dAmAO+64A4C9vT0A9vf3edCDHsTe3h4A+/v77O/vs7+/z/7+Pv8SSbyotre32d7e5oYbbuCGG27ghhtuAGB/f5+//uu/5jVe4zXY39/niU98IgcHBzzxiU/kRfFyL/dy3HDDDdxwww1cunSJ3/3d3+W1X/u1+Yu/+Aue+MQncj9J3O/666/ntV/7tQH4mZ/5GR7zmMfwF3/xFzzQ9ddfz1u8xVvwjGc8g+/7vu/jmmuu4X5v/uZvzjiOdF3Hz//8z/NyL/dyvNzLvRxPetKTeOQjH8nu7i6XLl3iYz/2Y8VVV1111VVXXXXVfxz0oAc9iKuuuuqqq6666qr/KNdcc82Dv+mbvunpPNOP//iP84hHPIKHPOQhfNd3fRc7OzscHh7ynu/5njzucY/jT/7kTwDY2dnhMY95DMMw8NIv/dI8/vGP50/+5E94oJ2dHd72bd+Wv/7rv+Y1X/M12dvb49d+7de48847eW6S2NnZ4dGPfjSv9EqvBMDe3h4Ad955J49//OO58847+ZdIYnt7mxtvvJEbb7yRnZ0dfuu3fovjx4/zsIc9jMc85jEA7O3tceedd7K/v8+dd97J3t4e+/v7PD+S+I8mie3tbZ7b9vY2L4r9/X0eaH9/H0n8R5PEC7K9vc329jY33HADN9xwAzfccAMA+/v77O/v89SnPpVnPOMZvNVbvRVPfOITAfjzP/9zACTxL9ne3uaRj3wkL//yL8/+/j5//dd/zd/+7d/ySq/0SjzpSU9if3+fB5IEwPb2Nq/1Wq/FDTfcwO/+7u/yMi/zMvz2b/82d999Nw/0yEc+ktd+7dfmd3/3d3n4wx/Oz//8z3O/137t1+aRj3wk3/d938dyuUQS7/zO78zTnvY0br/9dt78zd+c+33mZ37m6/zDP/zDb3PVVVddddVVV131H4PKVVddddVVV1111X+gM2fOPJjncurUKXZ2dnilV3ol/uRP/oSdnR2+93u/lw//8A8H4E/+5E/Y29vj8Y9/PI95zGP467/+a17zNV8TgD/5kz/hfnt7e/zkT/4kj3nMY9jb2+Ov//qvebu3ezse//jH87jHPY4777wTAEkA7O3t8ad/+qc84QlP4MYbb+Qxj3kM29vbjOPI277t27K3t8edd97J4x//eO68806emyQA9vf3ecITnsATnvAEALa3txnHEYA777yTG2+8kZ2dHX73d3+Xhz3sYbze670eOzs77O3tsb+/z97eHnfeeSf7+/tI4s477+Q/kiQA9vf3eW77+/v8W0jiP5okALa3t9ne3uaGG24A4IYbbuCGG24AYH9/n/39fZ761Kdyww03sL+/D8Bdd93FxYsXOTg44Ad+4Ad4IEm8INvb2zzykY/k5V/+5dnf3+ev//qvud9isaDWyl/8xV/w3CSxvb3Ny73cy/HIRz6S3/3d32V7e5vNzU1+6Id+iOf22q/92jzykY/k+77v+3ilV3olfv7nf577PfKRj+SRj3wk3/d938fx48dZrVa87Mu+LNvb2ywWC7a3t3mgF3uxF3utf/iHf/htrrrqqquuuuqqq/5joAc96EFcddVVV1111VVX/Uf58A//8O96ndd5nffmmR73uMfx+Mc/njNnzvDSL/3S/MRP/AR7e3s89rGPZblc8pZv+Zb88R//MX/yJ3/C/V7plV6JP//zP+c93/M9Afi1X/s17rzzTh5oZ2eHxzzmMfz5n/85L/mSL8lrvMZr8PjHP57HP/7x3HnnnbwgOzs7PPrRj+amm27ir/7qr7jlllt4yZd8Sfb29rjzzju58847efzjH48k/jW2t7e58cYbufHGGwF4zGMeww/8wA9w7NgxHvSgB3Hy5El2dnbY3t4GYH9/n729Pfb399nb22N/f5/9/X329vbY39/nRSWJ/2iS+PfY3t5me3ub7e1ttre3AbjxxhvZ3t5me3sbgP39ffb393nqU58KwG233cZbvuVbsr+/z1133QXAXXfdxV133cULI4kH2t7e5pGPfCQAL//yL8/+/j5//dd/zaVLl3it13otnvjEJ/KkJz2J/f19XpCdnR1e7uVejkc+8pH87u/+Lq/5mq/JX/zFX/AXf/EXPLft7W3e/M3fHICf+Zmf4aabbuJJT3oS93vkIx/Ja7/2a/N93/d9HD9+nHvuuYft7W3e+Z3fmd/93d9lb2+PRz7ykTzykY/kfv/wD//w25/5mZ/5Olx11VVXXXXVVVf9x0APetCDuOqqq6666qqrrvqP8smf/MlPf4VXeIUHA/zN3/wND3nIQ/iu7/ou3uAN3oAbbriBg4MDfuInfgKAV3qlV+KVX/mVAfjjP/5j/uRP/gQASezs7PC2b/u2/PVf/zUv/dIvzeMf/3j+5E/+hOe2s7PDYx7zGP78z/+cl3zJl+Q1XuM12Nvb40//9E95/OMfzwuzs7PDox/9aG666SZuvPFG/vZv/5YHP/jB7OzssLe3xxOe8ATuvPNO7rzzTv4ttre32dnZYXt7mxtvvJGdnR12dnbY3t4G4Od//ud50IMeRNd1bG9vc+ONN3K//f19APb29tjf3wdgb2+P/f197re/vw/A/v4+APv7+/x7SQJge3ubB9re3gZge3ub7e1t7rezs8P29jbb29tsb29zv/39fQD29/d56lOfCsBrvMZrALC/v8/+/j533XUXAHfddRd33XUX/1qSANje3uaRj3wkN9xwAzfccAP7+/v89V//Na/xGq/B/v4+T3ziE3nSk57E/v4+L8zLvdzL8ahHPYrt7W1+93d/l7/927/lVV7lVfiLv/gLnp+Xe7mX4+Ve7uX43d/9XV7mZV6G3/7t3+buu+/mfo985CN57dd+bQB++7d/myc/+ckAvPmbvzmLxYL77ruP3/md3+Gd3/mdedrTnsZLvdRLAfDkJz/51k/+5E9+CFddddVVV1111VX/MdCDHvQgrrrqqquuuuqqq/6jfPInf/LTX+EVXuHBe3t73HHHHTz2sY/l137t17jjjjs4PDzkwz/8w/njP/5j/uRP/gSAV3qlV+Ls2bO8xVu8BX/yJ3/Cn/zJn3C/nZ0dHvOYx/Bnf/ZnvOd7vicAj3/84/mTP/kTntvOzg6Pecxj+PM//3Ne8iVfkpd6qZcC4PGPfzxPeMIT2Nvb44XZ2dnhxhtv5DGPeQw33ngjAI9//ON5zGMew97eHvv7+9x5553ceeed3HnnnfxrSeJ+29vbAOzs7LC9vc2NN94IwPb2Njs7O2xvb/P8/N3f/R0nT54EYGdnB4Dt7W1ekP39fV5U29vbvDD7+/vcb39/n/Pnz/MSL/ESPD/7+/vs7++zv7/P3t4ekrjrrrvY399nf3+ff6/t7W0e9ahHccMNN3DDDTewv7/P/v4+N9xwAwD7+/s88YlP5ElPehL7+/u8MNvb2zzykY/k5V/+5dnf3+ev//qv+b3f+z3e6I3eiL/4i7/g+bn++ut5i7d4C/b39/mZn/kZHvOYx/AXf/EXPNDLvdzL8XIv93J83/d9HzfffDNPfvKTAXjZl31ZXu7lXo7v+77vY7Va8chHPpLXeq3X4u677+b6668H4Md//Mdv/aEf+qGHcNVVV1111VVXXfUfAz3oQQ/iqquuuuqqq6666j/KT/zET5hnetzjHsfm5iYnTpzgu77ru3jsYx/LcrnktV/7tfm1X/s17rjjDgBe6ZVeiT//8z/nPd/zPdnb2+Mnf/IneaCdnR1e//Vfn6c97Wm85mu+Jnt7e/zar/0ad955Jw8kiZ2dHW688UYe85jH8Fd/9Ve8zMu8DDfeeCN33nknj3/843n84x/Pv2RnZ4cbb7yRG2+8kZ2dHX77t3+bY8eO8TIv8zLceOON7O3tAXDnnXdy5513sr+/z5133skLIol/re3tbQB2dnbY3t4GYHt7G9sAbG9vc7+dnR2OHTvG9vY2/1H29/e5dOkS99vf3wdgb2+P/f19jh07BsD+/j77+/vs7++zv7/Pc5PEv8f29jY33HAD29vb3HDDDdxwww3s7++zv7/PU5/6VJ7xjGfwVm/1VjzxiU/k7rvv5q677uJfsr29zSMf+UhuuOEGbrjhBvb39/md3/kdXuu1XosnPelJ/MVf/AXPz/b2Nq/1Wq/FDTfcwO/+7u/yMi/zMvz2b/82d999N/fb3t7mtV7rtdje3uanf/qnOX78OPfccw8A119/PW/+5m/Oz/7szxIR3H333bzzO78zFy5c4NZbb+W1Xuu1uN/bvd3biauuuuqqq6666qr/GFSuuuqqq6666qqr/hOVUtjZ2eGxj30sj3vc43jsYx/LX//1X/MGb/AG/Nqv/Rp33HEHf/Inf8LOzg4AOzs7vPd7vzc/+ZM/yd7eHgB7e3v8+q//Oo95zGPY29vjb/7mb3i7t3s7Hv/4x/O4xz2OO++8E0kA7O3tsbe3x+Mf/3h2dnbY29vjxhtv5GlPexqv+IqvyCu+4ity5513cuedd/L4xz+e5yaJ/f19nvCEJ/CEJzwBgO3tbebzOXt7ewDceOONADzjGc/gMY95DDfeeCN7e3vs7++zt7fHnXfeyf7+PnfeeSeS+LfY398HYH9/n+cmiRfF9vY2/5L9/X22t7c5ODjgP5okXlTb29sAPOpRjwLghhtu4IYbbgBgf3+fW2+9lRtuuIH73XXXXbTWODw85Ad/8Ad5Udxwww1cf/31vPzLvzz7+/v89V//NTfccANPfOIT2d/f54d+6Id4fra3t3m5l3s5HvnIR/K7v/u7bG9vs7m5yQ/90A/xQNvb27z5m7859zt+/Dj33HMPANdffz1v/uZvzu/+7u9y44038pd/+Zc88pGPZHt7G4Bbb72VB7rmmmsefN99993KVVddddVVV1111b8fetCDHsRVV1111VVXXXXVf4TXeZ3Xee8P//AP/66v//qv58M//MO54447ePzjH89sNuOlX/ql+a7v+i4AHvvYxzKbzXjpl35pfuInfoK9vT0Ajh07xtu+7dvy13/917z0S780j3/84/mTP/kTHmhnZ4fHPOYx/Pmf/zmv8RqvwUu+5Evy+Mc/nsc//vHceeedPD87OzvceOONPOYxj+HGG2/kb//2b3nJl3xJ9vb2uPPOO7nzzjt5/OMfjyReFNvb2+zs7LC9vc2NN97IjTfeyM/93M9x7NgxHvSgB3Hy5EluvPFGAPb399nb22N/f58777yT/f199vb22N/f599CEv/RJPEfTRLPz/b2Ntvb29xwww0A3HDDDdxwww0A7O/vA3Drrbeyu7vLbbfdxlu+5Vuyv7/PXXfdxV133cXdd9/Ni2p7e5vt7W2uv/56Xv7lX579/X3++q//mtd4jddgf3+fJz7xifzFX/wFknh+tre3ebmXezke+chH8oxnPIMHPehB/MVf/AV/8Rd/wXN7uZd7OV7u5V6Ov/3bv+UhD3kIP/RDP4QkALa3t3nnd35nnvGMZ9D3PT//8z8PwAd8wAfwN3/zN9x+++283Mu9HNdffz2f93mfx2d8xmfwmZ/5ma/zD//wD7/NVVddddVVV1111b8fetCDHsRVV1111VVXXXXVf4STJ0++95d92Zd91/HjxwHY29vjJ37iJ3ilV3olbrrpJu644w5+7dd+jZ2dHR7zmMcwDAMv/dIvzU/8xE+wv78PwM7ODo95zGO47777eK3Xei0AfvInf5K9vT0eaGdnh8c85jH8+Z//OS/5ki/Ja7zGa3DnnXfyJ3/yJ9x55528IDs7Ozz60Y/mpptu4sYbb+Rv//ZvefCDHwzA/v4+j3/849nf3+fOO+/kX2N7e5udnR22t7e58cYb2dnZ4cYbb+R+f/d3f8fJkye58cYbAdjf3wdgb2+P/f199vb22N/fZ39/H4A777yT5yaJ/2iS+I+yvb0NwM7ODtvb22xvbwNwww03sL29zfb2NgD7+/sA3HrrrbzES7wE99vf3+euu+5if3+fu+66i7vuuosHksS/ZHt7m0c+8pHceOONXH/99ezv7/PXf/3XvMZrvAb7+/s88YlP5C/+4i+4nySe2/b2Ni/3ci/HIx/5SH7v936Pv/3bv+WVX/mV+Yu/+Aue2/b2Nq/1Wq/F9vY2P/MzP8NjHvMY/uIv/gJJAGxvb/PO7/zOPOMZz6Dve37+538egDd/8zdna2uLu+++m9/5nd/hAz7gA3igT/iET3ifpz3tad/NVVddddVVV1111b8fetCDHsRVV1111VVXXXXVf4R3fMd3/Kx3eqd3+myAvb09dnZ2eNzjHsef/MmfcHh4yId/+Ifzx3/8x/zJn/wJOzs73HTTTcxmM176pV+axz/+8fzJn/wJ97vxxht5pVd6JZ72tKfx0i/90jz+8Y/nT/7kT3huOzs7POYxj+HP//zPecmXfEle4zVeg729PR7/+Mfzp3/6p7wwOzs73HjjjTzmMY/hxhtv5Pd+7/d46EMfyo033sje3h533nknd955J094whP4t5DE9vY2N954IwA33ngj29vb7OzssL29zc///M8D8KAHPYiu69je3mZnZ4ft7W3ut7+/D8De3h77+/sA7O/vs7+/z/329va43/7+Pg+0v7/PCyKJ+21vb/Pctre3Adje3gZge3ub++3s7LC9vQ3A9vY229vb3G9/fx+A/f19nvrUpwJw22238W7v9m7s7+9z1113AbC/v89dd93F/v4++/v7vDCSeH62t7e54YYb2Nra4uVf/uUB2N/f56//+q95jdd4Dfb393niE5/Ik570JPb393kgSdxve3ubRz7ykTzykY8E4K//+q/527/9W175lV+Zv/iLv+D5ebmXezle7uVejmc84xmcPHmS3/7t3+buu+9GEgDXX389b/7mb87f/M3fcM011/DzP//zADzykY/ktV7rtfi+7/s+uq7jEY94BC/3ci/H/v4+29vbAPzIj/zIZ//oj/7o53DVVVddddVVV13170flqquuuuqqq6666j/I2bNnn8Ez7e3tsbOzw0033cSv/dqv8djHPpbf/d3f5aVf+qW58847ueOOO7jjjju46667AHjpl35pAP7kT/4EgDvvvJNf//Vf5zGPeQw/+7M/y1u+5VvymMc8hsc//vH8yZ/8Cffb39/nT//0T9nZ2aHve77hG76Bl3zJl+SlXuqleMxjHsOdd97J4x//eO68806e297eHnt7ezz+8Y9nZ2eHG2+8kb29PW688UZ2dnZ4xjOewWMe8xhe//Vfn729Pe68807uvPNO9vf3ufPOO3lhJAGwv7/PE57wBACe8IQncL/t7W0AdnZ2uO+++9je3uZ+e3t73HjjjQBsb28DsL29ze/93u9x/Phx5vM5N9xwAwA7OzsAbG9v8x9tf3+f++3v7wNw/vx5dnd3Wa1WPOpRj+KB9vf3Adjf32d/f5/9/X0WiwV33XUXAN/8zd/Mv4Uk7re9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4cYbb+TGG2/k937v93joQx/KjTfeyN7eHnfeeSd33nknT3jCE5DEi2p7e5udnR22t7e58cYb2d7e5sYbb+R+f/d3f8fJkycBuPHGGwHY398HYG9vj/39fQDuuusuAPb29tjf32d/f5/nRxL/0STxr7G9vQ3A9vY229vbbG9vA7C9vc329jbb29tsb29zv/39ffb393na057Gq7/6qwOwv78PwF133cX+/j533303d911Fy+IJJ7b9vY2W1tb3HDDDTzykY9ke3ub/f19/vqv/5rXeI3XYH9/nyc96Uk86UlPYn9/nweSBMD29jaPeMQjeLmXezn29/f567/+a/72b/+WV37lV+Yv//IveW4v+7Ivy8u93Muxv7/P9vY2f/EXf8Ff/uVfIgmA13zN1+SRj3wkP/dzP8ejHvUofvd3f5frr7+eN3uzN+Nv//Zvmc/nHBwc8LIv+7J83/d9H+/xHu/B933f93HTTTd999d//de/D1ddddVVV1111VX/MdCDHvQgrrrqqquuuuqqq/6jvNiLvdhrf+7nfu5v8Uw/93M/x2u91mvxJ3/yJ+zs7LBer3npl35pfu3Xfo0777yTV3qlV+KVXumV2NvbA+DXfu3XuPPOO5HEzs4Od955Jy/5ki/Ja77mawLw+Mc/nj/90z/lgXZ2drjxxht5zGMew4033sidd97JjTfeyJ133snjH/94nvCEJ/CCbG9vc+ONN3LjjTfyW7/1W9xyyy086EEP4kEPehA7Ozvs7+9z5513cuedd3LnnXeyv7/Pv9b29jY7Oztsb29z4403ArC9vc2NN94IwC/8wi8AcMsttwBw8uRJdnZ22N7e5oH29/cB2NvbA+Dg4ID77e3tAbC/v8/zs7+/z/Ozvb3N/SQBsL29zQNtb28DsL29DcD29jbb29s8t/39ffb39zl//jyXLl0C4NKlS7zZm70Z+/v7ANx1113s7+8DcPfdd3PXXXfxryEJgO3tba6//nq2t7e54YYbuP7669nf3+ev//qvAfj93/993uu93ou7776bv/iLv+AFkcTLvuzLsr29zSMf+Uj29/fZ3t5mf3+fJz3pSfzlX/4lz+1lX/ZlebmXezn29/f5nd/5HV7u5V6O3/md32F/fx9JbG1t8WZv9mYAbG9v87u/+7s86UlP4vrrr+fN3uzN+Nu//VvOnDnDX/7lX/Jmb/Zm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/j57e3vs7++zv7/Pc5PEfxRJ/EeSxL/G9vY229vbbG9vs7W1BcANN9zADTfcwP329/e59dZbuXTpEq/+6q8OwP7+Pk960pMAuOuuu7j77rv5l2xvb/PIRz6SG264geuvv579/X3++q//mtd4jddgf3+fJz3pSdx9993cfffdPLft7W0e8YhH8HIv93Ls7+/z13/91/z+7/8+b/RGb8Rf/uVfcr+trS1e67Vei+uvv57f+73f46Vf+qX53d/9Xe6++262trZ4szd7MwC2t7f5y7/8S+6++27e7M3ejGc84xl8//d/P+/7vu/LMAw86EEP4m/+5m+4cOHCd3/913/9+3DVVVddddVVV131nwM96EEP4qqrrrrqqquuuuo/y4u92Iu99vu93/v91rFjx/j+7/9+3vM935OdnR3+5E/+hPV6zUu/9Evz+Mc/nic84QkcHBzwki/5krzUS70Uj3/84/nTP/1TdnZ2ePSjH81f/MVf8BIv8RK8xmu8Bnt7e/zGb/wGd955J/e78cYbefSjH81jHvMY/u7v/o6XeImXYG9vjyc84Qnceeed3HnnnTy37e1tHvOYx3DjjTfysz/7s7zES7wED3nIQ7jxxhvZ39/nzjvv5M4772R/f58777yTF0YSANvb29x4440A3HDDDWxvb3PjjTcC8Au/8AvccsstnDx5EoAbb7yR++3v77O3t8f+/j6S2NvbY39/n/39fQD29/fZ39/n30IS/1EkAbC9vQ3A9vY2ANvb22xtbQGwvb3N9vY229vbbG9vA7C/vw/A/v4+T3va0wB49Vd/dQD29/e5++672d/fZ39/n/39fe6++25eFNvb2zzykY/k+uuv54YbbgBgf3+fv/7rv+a2227jLd/yLXnSk57Ek5/8ZPb393lu29vbPOIRj+CRj3wkAH/913/Na7zGa/CkJz2Ju+++myc/+cncb2tri9d6rdfi+uuv5/d+7/f4vd/7Pd74jd+Yv/zLvwTgZV/2ZXnZl31Z/vZv/5af//mf56EPfSjb29u82Zu9GX/7t3/LmTNnANje3uZrvuZr+LAP+zAuXbrEz/3cz73Pb/3Wb303V1111VVXXXXVVf850IMe9CCuuuqqq6666qqr/rNcc801D37VV33Vp0vi3d/93QHY29tjb2+PO++8k2EYeI3XeA3+5E/+hCc84Qk8+tGP5slPfjJv+ZZvCcCv//qvc+edd7Kzs8OjH/1o/uIv/oKXeImX4DVe4zXY29vjT//0T3nCE57A/ba3t3nMYx7Dox/9aH73d3+Xl3mZl+HGG29kb2+PJzzhCTz+8Y9nf38fAEncb3t7mxtvvJEbb7yR7e1t/vqv/5pbbrmFkydPcuONN7K/v8/e3h533nknd911F3feeSf3k8S/ZHt7m+3tbXZ2drjhhhsA2N7e5md/9mfZ2dnh+PHjABw7doxjx45x6tQpALa3t9ne3uaB9vf3ud/+/j4A+/v7PNDe3h4AkvjX2t7e5n7b29vcb3t7m+3tbZ7b/v4++/v7AJw/f55Lly4BcOnSJXZ3d7n99tv5sA/7MO666y729/cBuPvuu7nrrruQxItqe3ubra0tbrjhBq6//npuuOEGAPb39/mbv/kbbrvtNt7iLd6CJz3pSQD85V/+Jc/P9vY2j3jEI7jhhhu4/vrr2d/f56//+q956Zd+aZ70pCfxl3/5lwBIAmBra4vXeq3X4vrrr+f3fu/3+Nu//Vte5VVehb/8y78E4Prrr+c1X/M1AfiZn/kZbr75Zp785Cfzsi/7srzsy74sv/u7v8v111/P1tYW29vbbG1tAfB93/d9HDt2jO/5nu8RV1111VVXXXXVVf950IMe9CCuuuqqq6666qqr/jO99Vu/tV/zNV+TZzzjGbzma74mX//1X8+Hf/iH8/jHP569vT2e/OQn8+7v/u7ceeed/Pqv/zoAb/M2b8Pf/M3f8Bqv8Ro8/vGP50//9E/Z29tjZ2eHRz/60fzFX/wFL/ESL8FrvMZrsLe3xxOe8AT+9E//lAfa3t7mFV/xFXnMYx4DwJ133smNN97I3t4eT3ziE7nzzju58847eX62t7e58cYbufHGG9ne3ubGG28E4M477+TGG28EYH9/nzvvvJO77rqLvb097rrrLv4ttre3Adje3mZnZweA7e1tdnZ22N7e5pd+6Zd4zGMew/b2NgDHjh0DICLY3t4G4NixY/xnuXTpEgCXLl3ifnfccQeXLl0C4KVe6qXY399nf38fgIODA/b399nf32d/f58XRBIvyPb2NltbW9xwww1sb2/zyEc+EoD9/X329/e54YYbANjf3+cv/uIv2N7e5i//8i95Qba3t3nEIx7BDTfcwPXXX8/+/j7b29vs7+/zpCc9ibvvvpu7776b+0niZV/2ZXnEIx7B9vY2v/d7v8ff/u3f8iqv8ir85V/+JQBbW1u87Mu+LI985CP5vd/7PV76pV+a3/3d32V/f5/Xeq3XYmtri5/5mZ/hsY99LNdffz3b29v89E//NO/+7u/O7/7u7/KSL/mS/O7v/i7f8z3fI6666qqrrrrqqqv+86AHPehBXHXVVVddddVVV/1nuuaaax78qq/6qk9/j/d4D57xjGfwoAc9iK//+q/nPd/zPbnzzjv50z/9U97mbd6G/f19tre3efzjH8+f/umfsr+/z7Fjx3jzN39zTpw4weMf/3j+9E//FElsb2/zmMc8hhtvvJEbb7yRvb09AJ7whCfw+Mc/nv39fe63vb3NjTfeyI033shjHvMYfu/3fo+HPvSh3Hjjjezv7/P4xz+eu+66izvvvJMXZHt7mxtvvJEbb7yR7e1tbrzxRn7hF36BW265hZMnT3LjjTcCsL+/z97eHvv7+9x1113s7e1x11138aKQxItie3ub+21vbwOwvb3NA21vbyOJF2R/f5/t7W2en/39fe63v78PgCT29/fZ39/nP4IkALa3twF45CMfCcD111/PDTfcAMD+/j77+/s87WlPA+DVX/3V2d/f50lPehL7+/s86UlP4n6SeG7b29s84hGP4JGPfCTb29vs7+/z13/917zGa7wGd999N0960pN40pOexANtb2/zyEc+kpd92Zdlf3+fv/7rv+b3f//3eaM3eiP+8i//EoCtrS0e+chH8rIv+7I84xnP4EEPehB/+Zd/yV/+5V9y/fXX82Zv9mbs7+8D8Hu/93u8zMu8DNvb2/z0T/807/7u784znvEMHvSgB/F93/d9/OEf/uFD7rvvvlu56qqrrrrqqquu+s+DHvSgB3HVVVddddVVV131n+293uu9/FIv9VI86EEPYm9vj729PX76p3+a93zP9wTg13/917n77rt5yZd8SV7jNV6DP/mTP+FP//RP2dnZ4c477+QlX/Ilec3XfE0AnvCEJ/Cnf/qnAGxvb3PjjTfymMc8hhtvvJE777yTG2+8kTvvvJPHP/7xPOEJT+CBtre3ufHGG7npppt49KMfzS/8wi/w0i/90tx4443s7+9z5513cuedd7K/v8+dd97JC7K9vQ3ATTfdxA033MD29jY33ngjAL/wC7/ALbfcwsmTJ7nxxhsB2N/fZ29vj/39fQDuuusu9vb22N/fZ39/H0n8R5LEfyRJ/Fttb2+zvb3N9vY2W1tb7OzssLW1xQ033ADA/v4+ALfeeiuXLl3i1V/91dnf3wfgSU96EgB33XUXd999N8+PJAC2t7d5xCMewfb2No985CMBuO2223jGM57BS7/0S/OXf/mXADzpSU/iuT3ykY/k+uuv55GPfCT7+/tsb2+zv7/Pk5/8ZP7yL/+S+73sy74sL/uyL8v+/j6//du/zd/93d9xzTXXAPCyL/uyvOzLviy/93u/x+/93u/xsIc9jNd8zddke3ubn/7pn+bd3/3dOTg4YGtri2c84xn8zd/8Dd/zPd8jrrrqqquuuuqqq/5zoQc96EFcddVVV1111VVX/Wd7ndd5nfcGvuvDP/zDud8dd9zBzs4OtpHEr//6r3PjjTfy53/+57zHe7wHAI9//OP50z/9U3Z2dnj91399nva0p/FSL/VSADzhCU/gT//0T7nf9vY2r/iKr8hjHvMYfu/3fo/XeI3XYG9vj7vuuovHP/7x3HnnnQBIAmB7e5udnR1uuOEG/uIv/oKdnR0e9KAH8ZCHPIQbb7yR/f197rzzTu6880729/e58847eSBJPLft7W1uvPFGAG644Qa2t7e58cYbAfiFX/gFbrnlFgBOnjzJjTfeyP329/fZ399nf38fgL29Pfb39wHY399nf38fgP39ff4lkviPJInntr29DcD29jYA29vbbG1tAXDDDTcAcMMNN3C//f19AG699VYuXboEwKu/+quzv78PwN13383+/j533XUXd999Ny+K7e1tHvnIRwLwci/3cgDs7+/zN3/zNzzjGc/g9ttv5w3e4A24++67ufvuu3lu29vbPOIRj+DlXu7l2N/f56//+q95jdd4Df7yL/+SJz3pSRwcHACwtbXFIx/5SF72ZV+W/f19/vqv/5qXfumX5nd/93e5++67uf7663nN13xNAH7mZ36Gxz72sTz5yU/mzd7szTh//jynTp1ia2uLB/r6r/96gPf5rd/6re/mqquuuuqqq6666j8XetCDHsRVV1111VVXXXXVf7Zrrrnmwd/0Td/0dJ7p67/+6/nwD/9wHv/4x7Ozs8PTnvY0XuqlXorHP/7xPOEJT+D1X//1edrTnsZrvMZr8PjHP54//dM/ZW9vj52dHV7/9V+fv/qrv+I1X/M1AXjCE57A4x//ePb39wHY3t7mxhtv5DGPeQx/9Vd/xYMe9CBe4iVegr29PZ7whCdw1113ceedd/Lctre3ufHGG7nxxht59KMfDcDf/d3fcfLkSW688Ub29/e588472d/f58477+Suu+7iRbW9vc329jY7Oztsb2+zvb3N9vY2P/uzPwvAsWPHOHbsGMeOHePYsWOcOnUKgO3tbba3t3mg/f197re/vw/A/v4+D7S/v8+/1fb2Nvfb3t5GEltbWwBsb2/zQPv7+wDs7+8DcP78eS5dugTAbbfdhm1uv/123vM935P9/X0ODg4AuOuuu7j77rt5UW1vb7O1tcUNN9zA9ddfzw033ADA/v4+f/M3f8Orv/qrs7+/z913383+/j5/+Zd/yfOzvb3NIx7xCF7u5V4OgNtuu42//du/5bVe67V48pOfzF/+5V9yv62tLR75yEfysi/7suzv7/PXf/3XvPRLvzS/+7u/y913383W1hav9VqvxfXXX8/v/d7v8dIv/dL87u/+Ltvb27zma74mz3jGM+j7noODAx7xiEfw/d///bz7u78793u7t3s7cdVVV1111VVXXfWfDz3oQQ/iqquuuuqqq6666r/CO77jO37WK7/yK3/2M57xDF7zNV+Tr//6r+fDP/zDufPOO7njjjt4pVd6JQD+5E/+hCc84Qk8+tGP5s///M958zd/c06cOMHjH/94/uzP/gyA7e1t7rrrLl7iJV6Cl3mZl2F7e5s777yTJzzhCdx5553cb3t7m8c85jE8+tGP5nd/93d5mZd5GW688Ub29/e58847ecITnsCdd97J87O9vc2NN97IjTfeyKMf/WgAfv/3f5+HPOQh3HjjjQDs7+9z5513ctddd7G3t8ddd93Fv5Yktre32d7eZnt7G4Dt7W12dnbY3t7m93//97npppvY3t4G4NixYwAcO3aM+x07doz/LJcuXQLg0qVL3O+OO+7g0qVL7O/v8+qv/urs7++zv78PwMHBAfv7++zv77O/v8/9JPGi2N7eZmtrixtuuIHt7W0e+chHArC/vw/A3/zN3/Dqr/7q7O/vc/fdd7O/v8/dd9/N3XffzfOzvb3NIx7xCB71qEextbXF/v4+f/3Xf81Lv/RL86QnPYknP/nJHBwccL+trS0e+chH8rIv+7Ls7+/zO7/zO/zd3/0dL/mSL8ndd9/N1tYWj3zkI3nZl31ZnvGMZ/Cg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O+/kxhtvZH9/nyc84Qnceeed3HnnnTzQ9vY2Ozs73HDDDdx4443ceOON/MIv/AK33HILL/ESLwHA/v4+d955J3fddRd7e3vcddddvCi2t7cBuPHGGwG48cYb2d7e5vu+7/s4duwYx44d49ixYwDs7Oxw7NgxTp06BcD29jbb29s8t/39fR5of3+f++3v7/Oi2t7e5rltb28DsL29zXPb39/nfvv7+5w/f55Lly4BcOnSJS5dusRtt90GwHu+53ty9913A7C/v8/+/j533303L4rt7W0AHvnIRwLwci/3cgDs7+9z6623cunSJV791V+d/f19nvSkJ3H33Xdz991389y2t7d5xCMewSMf+Ui2t7fZ399ne3ub/f19nvzkJ/OkJz2Jg4MDALa2tnjkIx/Jy77sy7K/v89f//Vf8/u///u86qu+Kk9+8pPZ2tritV7rtbj++usBODg44Bd+4Rd4xCMewcu+7Mvyu7/7u7zsy74s+/v7bG9v8z3f8z182Id9GN/3fd8HwE//9E+Lq6666qqrrrrqqv866EEPehBXXXXVVVddddVV/5Ve53Ve571f4zVe47tuu+023uIt3gKAvb09AO68807+4i/+grd8y7cE4Kd+6qe48cYbeeITn8hLvuRL8lIv9VLceeed/Omf/in7+/s8+tGP5jGPeQw33ngjd955Jzs7O9xxxx084QlP4M477+R+N954I495zGN49KMfzS/8wi/w0i/90tx4443s7+9z55138oQnPIE777yT57a9vc3Ozg433HADN954Iz/7sz/LLbfcwi233MLJkye58cYbAdjf3+fOO+/krrvuYm9vj/39ffb393lBJPHctre3Adje3mZ7exuA7e1tnvGMZwCwvb0NwE033cT29jbHjh3jfseOHeM/w6VLl7jfpUuXuOOOOwA4ODhgf38fgAc96EEA7O/vc3BwwP7+Pvv7+wBI4kW1vb3N1tYWN9xwA9vb22xvb3P99dcDsL+/z9/8zd8A8Pu///u813u9F3fddRd33303d999N8/P9vY2j3jEI3jkIx/J9vY2+/v7/PVf/zUv/dIvzZOf/GTuvvtu7r77bu63tbXFy77sy/LIRz6S/f19/vqv/5rf//3f51Vf9VV58pOfzNbWFo985CN52Zd9WZ7xjGfwAz/wA7zxG78xT37yk3nN13xNtre3+emf/mle6ZVeia2tLba3t9na2gLg+7//+3mJl3gJfu/3fu99fuu3fuu7ueqqq6666qqrrvqvgx70oAdx1VVXXXXVVVdd9V/pmmuuefCLvdiLPf093uM9OHbsGPd7xjOewYkTJ/jTP/1TXvEVX5G/+Zu/4aVe6qV4/OMfzxOe8AQe85jH8Od//ue81Vu9Fdvb2zzhCU/g8Y9/PPv7+2xvb/OKr/iKPOYxj+Hv/u7veImXeAn29vZ4whOewOMf/3gODg4A2N7eZmdnh0c/+tE8+tGP5hd+4Re45ZZbeImXeAn29/e58847ufPOO9nf3+fOO+/kgSSxvb0NwI033sgNN9zAT//0T3Ps2DFuueUWbrnlFk6ePMnOzg7b29vs7+8DcOedd3LXXXcBsLe3x913381/lJ2dHR5oe3ub+21vb/OvcXBwgG0kAbC/vw/A/v4+/xaSeG7b29sAXH/99WxvbwNw/fXXc8MNNwCwv7/P/v4+T3va0wC47bbbuO2223iDN3gDAO6++27uvvtunp/t7W0e8YhHsL29zSMf+UgAbrvtNp7xjGfw0i/90jzpSU/i7rvv5p577uF+W1tbPPKRj+QRj3gE29vb/N7v/R6v8RqvwV/+5V/ypCc9iYODA7a2tnjkIx/Jy77sy3Lp0iV+7ud+jsc+9rH85V/+JS/7si/Ly77sy/KMZzyDU6dO8aQnPYmXfdmX5RnPeAanTp1ia2uL+33+538+f/VXfyWuuuqqq6666qqr/muhBz3oQVx11VVXXXXVVVf9V/vwD//w73qZl3mZ9z5+/Di/+7u/y2u+5msC8Hu/93u89Eu/NHfccQd7e3sMw8BLvdRLIYlf//VfZ29vj8c85jE8+clP5rVf+7XZ3t7mCU94Ao9//OPZ399ne3ubxzzmMTz60Y/mb/7mb3joQx/Kzs4Oe3t7POEJT+AJT3gCD7S9vc2jH/1o/uIv/oKdnR1e8iVfkpMnT3LjjTeyv7/PnXfeyZ133sn+/j533XUXz8/29jYAN954IzfccAPb29vceOONPNCdd97Jzs4O29vbAOzv77O/v8/+/j4Ad955JwD7+/vs7++zv7/Pv0QS/5Ek8e+1vb0NwPb2NjfccAMA29vbbG1tccMNN3C//f199vf3ueGGG7jf/v4++/v73H333QDcdddd3H333Uji+dne3uYRj3gEAC/3ci8HwP7+Pn/zN3/DM57xDG6//Xbe4A3egLvvvpu7774bAElsbW3xyEc+kq2tLR75yEeyv7/PX//1X/PSL/3SPPnJT+Yv//IvAdja2uKRj3wkL/uyL8v+/j4/8zM/w2Mf+1ie9KQnAfBar/VabG9v81d/9Vdcd9113H333bzma74mf/u3f8tLvuRLAvC3f/u3vORLviQAv/Vbv/XdX//1X/8+XHXVVVddddVVV/3XQg960IO46qqrrrrqqquu+q92zTXXPPhN3uRNnn78+HFe8zVfk9/93d/lNV/zNXmgP/mTP+EJT3gCBwcHvORLviSv8RqvweMf/3j+9E//FIBXfMVX5KlPfSov8zIvw/b2NnfeeSdPeMITuPPOOwF49KMfzY033shv/dZv8RIv8RK89Eu/NAB33nknd955J094whN4oO3tbW688UZuvPFGHv3oRwPwd3/3d5w8eZIbb7yR/f197rzzTu666y729va46667eGG2t7fZ3t5mZ2eHG264ge3tbSRxww03APALv/AL3HLLLQCcOnWK7e1ttre3ud/+/j4A+/v77O/vA7C3t8f+/j4Aktjf3+d++/v73G9/f59/DUkAbG9v80Db29sAbG9vA7C1tcX9tre32d7eBuCGG27ggfb39wG49dZbuXTpEgCv/uqvDsD+/j77+/vcfffdANx1113cfffdvCCSANje3uYRj3gEAC/3ci8HwP7+Pn/zN3/Dq7/6q7O/v8/dd9/N/v4+f/mXf8lzu/7667nhhht42Zd9Wfb39/nrv/5r/u7v/o7Xf/3X5+677+bJT34yAFtbWzzykY/kZV/2Zdnf3+dnf/Zned3XfV1+53d+B4BHPvKRvOzLvix/+7d/y0Mf+lD+8i//kkc84hFcf/31ANx9991cf/31/O7v/i6v+Zqvyc/+7M8C8Eu/9EsPue+++27lqquuuuqqq6666r8WetCDHsRVV1111VVXXXXVf4d3fMd3/KxXfuVX/uxLly7xki/5kvzu7/4uL/3SLw3A933f9/Ee7/EeAPzpn/4pOzs7/Nmf/Rlv/dZvzfb2Nk94whP40z/9U7a3t3nMYx7DK77iK/J3f/d3vMRLvAR7e3v86Z/+KU94whMA2NnZ4cYbb2R7e5tXfMVX5O/+7u94iZd4Cfb397nzzju58847ecITnsBz297e5sYbb+TGG2/k0Y9+NAB/93d/x8mTJ7nxxhvZ398H4M477+Suu+5ib2+Pu+66ixdEEvfb3t5me3ub7e1tAG688Ua2t7cB2N7eZnt7m/v94i/+Ijs7Oxw7doxjx45RawVge3sbgO3tbf4z7e/vc7/9/X2maeLSpUtcunQJgFd/9Vfnfvv7+wDs7+9z9913A7C/v8/+/j533303L6rt7W0e+chHAnDDDTdw/fXXA7C/v8/f/M3f8Oqv/urs7+9zcHDAXXfdxd13383dd9/NA21vb/OIRzyC7e1tHvnIR7K/v89f//Vf8xqv8Rrs7+/z5Cc/mb/8y7/kfi/7si/LIx7xCLa3t/m7v/s7fu/3fo9XfuVX5klPehIAj3zkI3nZl31ZDg4O+Omf/mke+9jHcs899/Car/maAPz0T/80r/RKr8QjHvEIfu7nfo63eIu34BnPeAYAT3va077767/+69+Hq6666qqrrrrqqv966EEPehBXXXXVVVddddVV/x2uueaaB7/Yi73Y09/zPd+Tixcv8qAHPYj7Pf7xj+fGG2/kb/7mb3iN13gN/vRP/5THP/7xPOYxj+G+++7jNV/zNZHE4x//eP70T/+U7e1tHvOYx/CKr/iK/N7v/R6v8Rqvwd7eHk94whO46667uPPOOwHY3t7m0Y9+NDfeeCM33ngjf/d3f8eDH/xgAPb397njjju46667uPPOO7mfJAC2t7e58cYbueGGG9je3ubGG2/kF37hF7jllls4efIkN954I/v7+wDceeed3HXXXQDs7e1x1113IYl/je3tbQC2t7fZ3t4GYHt7m52dHe63vb3N/ba3t9nf32d7e5vt7W3+Lfb393mg/f19APb39wHY39/nfgcHB+zv7wNw1113ASCJf43t7W22tra44YYb2N7eZmtrixtuuAGA/f19br31Vi5dusSrv/qrs7+/z5Oe9CQA7r77bu6++26e2/b2No94xCO44YYbuP7669nf3+ev//qveY3XeA329/d58pOfzF/+5V9yv62tLR75yEfysi/7suzv7/PXf/3XvPRLvzRPfvKT+cu//EsAXvZlX5aXfdmXZX9/n7/+67/m4Q9/OL/7u7/LIx7xCF72ZV+W3/u93+NlXuZl2N/f5/rrr+d+z3jGM3jQgx7E933f9/GHf/iHD7nvvvtu5aqrrrrqqquuuuq/HnrQgx7EVVddddVVV1111X+XD//wD/+ug4OD936Lt3gLLl26xLFjx/iGb/gGPuzDPgyAxz/+8TzmMY9hb28PgCc84Qk8/vGP5/DwkJd4iZfgpV7qpQB4whOewJ/+6Z+yvb3NjTfeyGMe8xj+6q/+ipd5mZfhxhtvZH9/nz/90z/lCU94Avfb3t7mxhtv5NGPfjQ/+7M/y0u8xEvwkIc8hBtvvJH9/X3uvPNO7rrrLvb29rjrrrt4btvb22xvb7Ozs8MNN9zA9vY2N954I7/wC7/ALbfcwsmTJ9nZ2WF7exuA/f199vf32d/f584772R/fx+Au+66i38NSfxHkcR/FEk8t+3tbQC2tra44YYbALjhhhvY2tpie3sbgP39ffb393na054GwKu/+quzv7/P3Xffzf7+PnfffTd33303z8/29jaPeMQjAHi5l3s5APb39/mbv/kbbrvtNt7iLd6CJz/5yfzlX/4l99va2uKRj3wk119/Pddffz37+/v89V//NQ9/+MO5++67+cu//Eu2trZ45CMfycu+7Muyv7/PX//1X/N7v/d7vPRLvzQAr/marwnA1tYWT37yk9na2mJ7e5uf/umf5t3f/d15xjOewYMe9CB+93d/l9ba93z913/9e3PVVVddddVVV1313wM96EEP4qqrrrrqqquuuuq/y5kzZx70zd/8zbf+7d/+Lb/7u7/Le7zHe3Ds2DEALl26hCSe8IQncOONN/K0pz2N13iN1+DOO+/k13/917nxxht50pOexEu8xEvwUi/1UgA84QlP4PGPfzz7+/tsb2/zSq/0Svzmb/4mL/ESL8FLv/RLA3DnnXdy55138oQnPIH7bW9vc+ONN3LjjTdy44038ru/+7vccsstnDx5khtvvJH9/X3uvPNO7rrrLvb29rjrrrt4fra3twG48cYbueGGG9je3mZnZ4ft7W1+4Rd+gWPHjnHs2DFOnTrF9vY229vbAOzv7wOwv7/P/v4+AHfeeScA+/v7AOzv73NwcMB/FEn8W21vbwOwvb3N9vY229vbAGxvb7O1tQXADTfcwP329/cBuPXWW7l06RKXLl3izd7szdjf32d/f5+7774bgLvuuou7774bSTw/29vbPOIRjwDg5V7u5QDY39/nb/7mb7jtttt4i7d4C570pCdxcHDAk570JCRxv+uvv55HPOIRPPKRj2R/f5+//uu/5u/+7u945Vd+ZZ70pCdxcHDA1tYWj3zkI3nZl31Z9vf3+eu//mt+//d/n1d91Vflnnvu4TVf8zW5/vrrATg4OOBJT3oSL/uyL8ulS5c4duwYAM94xjP4/u//ft793d+dBz3oQXzIh3zIQ+67775bueqqq6666qqrrvrvgR70oAdx1VVXXXXVVVdd9d/pwz/8w7/roQ996HsDPOhBD+IZz3gGD3rQg/iGb/gGXvIlX5LXeI3X4PGPfzz7+/v82Z/9GW/+5m/OiRMneMITnsDjH/94brzxRh7zmMdw4403cuedd7K9vc2dd97JE5/4RO688062t7e58cYbefSjH82NN97I7/3e7/Ear/Ea7O/vc+edd3LnnXfyhCc8gQfa3t7mxhtv5MYbb+TRj340v/ALv8Att9zCyZMnufHGG9nf32dvb4/9/X3uuusu7rzzTvb393l+JLG9vQ3ADTfcAMCNN97I9vY2P/uzPwvAsWPHOHbsGAA333wzAKdOnWJ7e5vt7W0eaH9/n/vt7+8DsL+/zwPt7+/zb7W9vc39tre3kcTW1hYA29vbPND+/j4A+/v7TNPEbbfdBsClS5e4dOkSly5d4tKlS7zne74nd999NwB33XUXAHfffTfPjyQAtre32dra4vrrr+eGG27g+uuvB2B/f5+/+Zu/AeClXuqlODg44K677uLJT34y+/v73G97e5tHPvKRALzsy74s+/v7/PVf/zWv8Rqvwf7+Pk9+8pP5y7/8SwC2trZ45CMfycu+7Muyv7/P7/zO7/B3f/d3vOqrvip33303j3zkI3nZl31ZnvGMZ/DzP//zvMqrvAoAL/uyL8vv/d7v8Xu/93t86qd+Ks94xjN40IMexDOe8QwAnva0p33313/9178PV1111VVXXXXVVf990IMe9CCuuuqqq6666qqr/jtdc801D36xF3uxp3/4h384e3t77Ozs8Hu/93u8xmu8BgDf8A3fwHu8x3sA8Kd/+qfs7Ozw5Cc/mdd+7ddme3ubJzzhCfzpn/4p29vbvOIrviKPecxj+Lu/+zte4iVegv39ff70T/+UJzzhCQBsb29z44038uhHP5obb7yRv/u7v+MlXuIl2N/fZ39/nzvuuIO77rqLO++8E0ncb3t7mxtvvJEbbriB3/qt3+LYsWMcO3aMl3iJl+DEiRNsb2+zv7/P3t4e+/v73HXXXezt7XH33Xfzotje3gZge3ub7e1ttre32dnZAeBv/uZvOHbsGNvb22xvb3Ps2DEAjh07BsCxY8f4z3bp0iUuXboEwKVLl9jf32dvb4/9/X1e6qVeiv39fQD29/fZ398H4O677+ZFtb29zfXXX8/29jY33HAD119/PQD7+/tcvHiR2267jdtuu43bbruNt33bt2V/f5+7776bu+++mwfa3t7mEY94BDfccAPXX389+/v7/PVf/zUv/dIvDcCTn/xk/vIv/xKAra0tHvnIR/KIRzyC7e1tbrvtNm655Rbuvvtufud3fgeARz7ykbzsy74sBwcH/PRP/zSPfexjefKTn8ybvdmbAfDTP/3TvN7rvR7XX389z3jGM3jQgx7EwcEBW1tbfN/3fR9/+Id/+JD77rvvVq666qqrrrrqqqv++6AHPehBXHXVVVddddVVV/13+/AP//DvKqW892u+5muyt7fHzs4Ov/d7v8drvMZr8PjHP54bb7yRv/mbv+E1XuM1+NM//VMe//jHc9ddd/ESL/ESvMzLvAzb29s84QlP4E//9E/Z3t7mMY95DK/4iq/I7/3e7/HSL/3SANx555084QlP4M477wRge3ubG2+8kUc/+tH87M/+LC/xEi/BQx7yEG688Ub29/e58847ueuuu3jCE57Ac9ve3ubGG29ke3ubG264gRtvvJH7/d3f/R0nT57kxhtvBGB/f5/9/X329/e588472d/fZ39/n/39fV5Ukrjf9vY299ve3gZge3ubB9re3ubf6uDggPvt7+9jm4ODAwD29/d5IEm8qLa3t9na2uKGG24A4Prrr+eGG27gfvv7+1y8eJFbbrkFgP39fQ4ODrjrrru4++67ufvuu3lu29vbXH/99WxtbfFyL/dyAOzv7/M3f/M33HbbbbzO67wOd999N3/5l3/J/ba2tnjkIx/Jy77sy7K/v89f//Vf89Iv/dI8+clP5klPehIAj3zkI3nZl31ZDg4O+O3f/m3+9m//lpd+6Zfmuuuu42Vf9mX527/9Wx760Ieyv7/P9ddfz+/+7u/ymq/5mhwcHLC1tcXv/u7vcvfdd3/2j/7oj34OV1111VVXXXXVVf+90IMe9CCuuuqqq6666qqr/rtdc801D/6mb/qmp//u7/4uf/u3f8t7vud7srOzwwM9/vGP5zd/8zd5j/d4DwCe8IQn8PjHP57Dw0NuueUWXuZlXoadnR0e//jH84QnPAGAnZ0dXuEVXoHf/u3f5iVf8iV5iZd4Cfb393nCE57AnXfeyZ133gnA9vY2N954IzfeeCOPfvSj+YVf+AVuueUWXuIlXgKA/f197rzzTu666y6e8IQn8Pxsb29z4403AnDDDTewvb3NjTfeCMDv//7vc+zYMU6dOsUNN9zA/fb399nf32d/fx+AO++8k/39fQD29/fZ398HQBL/USTxH0USANvb2wBsbW1xww03ALC9vc329jZbW1tsb28DsL+/D8Ctt97KpUuXePVXf3UA9vf3ufvuu9nf3+fuu+/m7rvv5vnZ3t7m+uuvZ2trixtuuIHrr7+e/f19br31Vi5dusRLvdRL8eQnPxmAv/zLv+R+W1tbPPKRj+RlX/ZlAfi7v/s7nvGMZ/Bar/VaPPnJT+Yv//Iv2dra4pGPfCQv+7Ivy/7+Pn/913/N7//+7/NSL/VSXHfddbzsy74sBwcHbG1t8eQnP5mtrS2uv/567ndwcMDXfM3X8O7v/u486EEP4kM+5EMect99993KVVddddVVV1111X8v9KAHPYirrrrqqquuuuqq/wk+/MM//Lse+tCHvvfx48c5duwYe3t77Ozs8A3f8A28+7u/O5K48847+c3f/E1e8iVfktd4jddgb2+P3/iN32Bvb49XfMVX5DGPeQx33nknOzs73HnnnTzhCU/gzjvvZHt7m0c/+tHceOON/NVf/RUv8zIvw4033sj+/j6Pf/zjueuuu7jzzju5387ODjfeeCOPetSjuPHGG/mFX/gFbrnlFl7iJV4CgP39fe68807uuusu9vb2uOuuu3huktje3gbghhtuAODGG29ke3ub7e1ttre3+cVf/EVsc8sttwBw6tQptre32d7e5n77+/sA7O/vA7C/vw/A/v4+APv7+9xvf3+fB9rf3+eBJPGCbG9v80Db29sAbG1tcb/t7W22t7eRxNbWFtvb2zzQ/v4++/v7nD9/nkuXLgFw6dIl3uzN3oz9/X329/c5ODhgf3+fu+66i4ODA/b395HE87O9vc0jHvEIAF7u5V4OgP39fW699VYuXbrEq7/6q7O/v8+TnvQk7r77bu6++24kAbC1tcUjH/lIHvGIR7C9vc3+/j5//dd/zUu/9Evzl3/5l9x9990cHBywtbXFy77sy/LIRz6S/f19fud3foeXe7mX46/+6q8AeM3XfE0A/uqv/orf+73f49Vf/dV5zdd8TZ7xjGfw8z//83zYh30Yly5d4tixYzzjGc/g2LFj/NVf/dV3f/3Xf/37cNVVV1111VVXXfXfDz3oQQ/iqquuuuqqq6666n+Ca6655sHf9E3f9HSAvb09dnZ2+Nu//Vte8iVfkr29Pf7mb/6G13iN1+Dxj388d955J0960pN4iZd4CV7jNV6Dvb09fuM3foO9vT1e8RVfkcc85jH83d/9HS/xEi/B/v4+j3/84/mzP/szALa3t3n0ox/NK77iKwJw5513cuONN7K/v8+dd97JXXfdxROe8ATut729zfb2Njs7OzzqUY/iZ3/2Z7nlllu45ZZbOHnyJDfeeCP7+/sA3Hnnndx1113s7+9z11138cJsb28DsL29zfb2Ntvb2+zs7LC9vQ3A9vY229vb/OIv/iI7OzsAHDt2jGPHjgFw7NgxIgKA7e1t/jPs7+8DkJlcunQJgEuXLgFw6dIl9vb2eNM3fVP29/cB2N/f5+DggP39ffb399nf3+fg4ID9/X1eEElsb2+ztbXF9ddfD8ANN9zA9ddfD8D+/j5/8zd/A8Dv//7v817v9V7cdddd3H333dx9993cb3t7m+3tba6//npe9mVfFoD9/X22t7fZ39/nyU9+MnfffTd33303W1tbPPKRj+SRj3wkW1tb/N7v/R6v8RqvwV/+5V/ypCc9CUm85mu+Jtdffz2/93u/x+/93u/xxm/8xlx//fVcf/31/N7v/R6v8RqvAcAznvEMHvSgB3FwcMDW1hYAH/IhH/KQ++6771auuuqqq6666qqr/vuhBz3oQVx11VVXXXXVVVf9T/HhH/7h33VwcPDeb/EWb8He3h47Ozv83u/9Hi/90i/N9vY2AJcuXUISd955J/v7+/z5n/85L/ESL8FrvMZrsL+/z2/8xm+wt7fHox/9aB7zmMfw13/917z0S780AHfeeSdPeMITuPPOO9ne3mZnZ4dHP/rR3Hjjjfzu7/4ut9xyCy/xEi/B/v4+e3t73HXXXdx5553cddddPND29jY33ngjN9xwA7/1W78FwC233MItt9zCqVOnuOGGGwDY399nf3+f/f197rzzTvb399nf32d/f58XhSS2t7cB2N7eBmB7exuA7e1ttre3eaDt7W0eaHt7mxfV/v4+D7S/vw/A/v4+9zs4OGB/fx+Ag4MD9vf3+dfY3t5ma2uLG264AYAbbriB66+/HoD9/X0A/uZv/gaAZzzjGdx+++28wRu8AQB33303d999Nw+0vb3NIx7xCG644Qauv/569vf3ufXWW9nd3eWlX/qlefKTn8zdd9/N3XffDcDW1haPfOQjedmXfVn29/f567/+a176pV+aJz/5yfzlX/4lW1tbvNZrvRbXX389v/d7v8ff/u3f8iqv8ioAvOzLviyXLl2ilMLW1hYAf/u3f8tLvuRLcnBwwNbWFj/3cz/H1tbWd3/913/9+3DVVVddddVVV131PwN60IMexFVXXXXVVVddddX/FNdcc82Dv+mbvunpP/dzP8cznvEM3vM935OdnR3ut7e3x/d93/fxki/5krzGa7wGe3t7/Omf/ik7Ozv8+Z//OS/xEi/Ba7zGa7C/v8+f/umfcuedd3LjjTfy6Ec/mp/5mZ/hNV7jNXiJl3gJ9vf3ufPOO3nCE57AnXfeCcD29jaPfvSjufHGG7nxxhv5/d//fR7ykIdw4403sr+/z5133sldd93F3t4ed911Fw+0vb0NwI033sgNN9zAzs4ON9xwA/f7u7/7O06dOsUNN9zA/fb399nf32d/f5+9vT329/fZ399nf3+f/f19JPEfRRL/USTx/GxvbwOwtbXF9vY229vbAFx//fVsb2+zvb0NwP7+PgC33norL/ESLwHA/v4+AE960pMAuPvuu7n77rt5btvb2zziEY/ghhtu4Prrrwdgf3+fv/mbv+HVX/3V2d/f58lPfjJ33303d999NwBbW1s88pGP5GVf9mUB+L3f+z1uu+023vIt35K//Mu/5MlPfjLXX389r/mar8n29ja/93u/x9/93d/xyq/8yjz5yU/mzd7szdja2gLg4OCA/f19rr/+eu53cHDAT//0T/Mar/EaPOhBD+JDPuRDHnLffffdylVXXXXVVVddddX/DOhBD3oQV1111VVXXXXVVf+TvOM7vuNnvfIrv/JnAzzoQQ9ib2+PnZ0dvuEbvoH3eI/34H7f933fx0u+5EvyGq/xGjz+8Y/nCU94AjfeeCOPecxj2N7eBmB/f58nPOEJ/Omf/inb29s8+tGP5sYbb+Sv/uqveJmXeRluvPFG9vf3ufPOO3nCE57AXXfdBcD29jY33ngjN9xwA9vb2/z1X/81t9xyCydPnuTGG29kf3+fvb099vf3ueuuu3jCE57A/SRxv+3tbba3t9ne3ubGG29ke3ub7e1ttre3AfjFX/xFbr75Zk6dOgXADTfcwP329/cB2N/fZ39/n/vt7++zv78PwP7+Pvfb39/nfvv7+9xPEi+q7e1tHmh7exuA7e1tALa3twHY3t5ma2sLgO3tbba3t7nf/v4+APv7+zztaU8D4NVf/dUB2N/fZ39/n7vvvhuAu+++m7vvvpvnZ3t7m62tLa6//npuuOEGrr/+egD29/f5m7/5G2677Tbe4i3egic/+ckA/OVf/iX329ra4pGPfCSPeMQj2N7e5tKlS/ze7/0er/Var8WTn/xk/vIv/5KtrS0e+chH8ohHPILt7W1+7/d+j7/7u7/jlV/5lXnyk5/My77sy/KIRzyC3/u93+P3fu/3eOM3fmNe9mVfloODA376p3+ad3/3d+fSpUscO3aMZzzjGQD8yZ/8yef8yI/8yGdz1VVXXXXVVVdd9T8HetCDHsRVV1111VVXXXXV/yRnzpx50Dd/8zff+vVf//W8xVu8BT//8z/Pa7zGa/CSL/mSAPze7/0er/Ear8HjH/94AH7rt36LN3/zN+f48ePcddddPOEJT2B7e5tXfMVX5K//+q956Zd+aQDuvPNOnvCEJ3DnnXeyvb3NjTfeyCu+4iuyvb3Nbbfdxi233ML+/j533nknd911F094whO43/b2NjfeeCM33HAD29vb/M7v/A633HILx44d4yVe4iUA2N/f56677gLgzjvvZH9/n7vuuovnZ3t7G4Dt7W22t7fZ3t5mZ2eH7e1ttre32d7e5n6/+Iu/yM7ODseOHQPg1KlTAGxvbwOwvb3Nf5b9/X0eaH9/n/Pnz3Pp0iXu9+qv/urcb39/n/39fQ4ODtjf3wfgrrvu4uDggP39fe4niQfa3t5ma2uL66+/nhtuuIHrr78egP39fS5evMhtt93Gbbfdxlu8xVvwpCc9CYC//Mu/BEASW1tbbG9vc/311/OyL/uyAFy6dIljx46xv7/Pk5/8ZJ70pCdxcHDA1tYWj3zkI3nZl31Z9vf3+eu//mte+qVfmic/+ck8+clP5hGPeAQv+7IvyzOe8Qx+7/d+j1d6pVdif3+fl33Zl+X3fu/3eI3XeA0AnvGMZ/D93//9fPiHfzhf//Vfz6d92qfxIR/yIQ+57777buWqq6666qqrrrrqfw70oAc9iKuuuuqqq6666qr/aT78wz/8uw4ODt77Ld7iLXjGM57Bgx70IH7v936Pl3qpl2JnZ4e9vT3ud+edd7K/v8+f//mf8+Zv/uacOHGCO++8kz/90z/lxhtv5NGPfjR/9Vd/xYMe9CBe4iVegv39fZ7whCfw+Mc/nv39fba3t3n0ox/NjTfeyF//9V9zyy238BIv8RLs7++zv7/PnXfeyZ133sldd93F/ba3t7nxxhu54YYb2N7e5md/9me55ZZbuOWWWzh16hTb29tsb2+zv78PwF133cWdd94JwP7+PnfddRcvjCS2t7cB2N7eZnt7m/ttb2+zvb0NwPb2Nvfb3t7mftvb2/xb7O/v80D7+/sA7O/vI4n9/X0A9vf32d/fB+Dg4ID9/X1eFNvb22xtbXHDDTcAcMMNN3D99dcDsL+/z8HBAU996lO57bbbuHTpEm/91m/NXXfdxd13383dd9/NA21vb/PIRz6S66+/nuuvv579/X3++q//GoCXfumX5slPfjJ33303d999N1tbWzzykY/kEY94BNvb21y6dInf+73f47Ve67X4y7/8S+655x4e8YhH8LIv+7JcunSJn/u5n+Oxj30sAC/7si/LwcEBW1tb3O93f/d3ec3XfE0uXbrEsWPH+L7v+z5uuumm7/76r//69+Gqq6666qqrrrrqfxb0oAc9iKuuuuqqq6666qr/aa655poHf9M3fdPTf/d3f5fXfM3X5NKlSxw7doyf//mf583f/M0B+IZv+AZe8iVfktd4jddgb2+PP/3TP2VnZ4cnP/nJvMZrvAa33HILT3jCE3jCE57A3t4ej370o3nMYx7D9vY2d955JzfeeCN33nknT3jCE3jCE56AJLa3t3n0ox/NDTfcwI033sjv//7v85CHPIQbb7yR/f197rzzTu666y729va46667eKDt7W1uvPFGbrzxRra3t9ne3mZ7e5v73XXXXdxwww3cb39/n/39ffb399nb22N/f5/9/X0kcdddd/EfQRL/ESTxL9ne3gZga2uL7e1ttre32d7eZmtrixtuuIH77e/vc3BwwPXXX8/99vf3OTg44K677uLg4IC7776b/f19Hmh7e5tHPOIR3HDDDVx//fUA7O/v8zd/8ze8+qu/Ovv7+zz5yU/mSU96EgcHB2xtbfHIRz6S66+/nuuvv579/X22t7fZ39/nyU9+Mk96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v/1bXvIlX5K//du/BeDxj3/8Z//oj/7o53DVVVddddVVV131Pxd60IMexFVXXXXVVVddddX/ZNdcc82DP/mTP/npAM94xjN4zdd8TX7v936P13iN1+B+e3t77OzscOedd/IzP/MzvMRLvASv8Rqvwf7+Pn/6p3/K9vY2j3nMY/jrv/5rXvqlXxqAO++8kyc84Qns7+9z44038qhHPYobb7yRv/u7v+PBD34w29vb7O/v84QnPIE777yTu+66C4Dt7W1uvPFGbrjhBh796EcD8Hd/93ecOnWKG264AYD9/X3uuusuAO6880729/e56667eG7b29tsb2+zs7MDwA033ADA9vY229vbbG9vA/D7v//7ABw7doxjx44BcOLECQC2t7f5z7S/vw/AxYsXuXTpEve7dOkSr/7qrw7A/v4+APv7+9x9993s7+8DsL+/zz333MPzs729zfXXX8/W1hY33HAD119/PQD7+/scHBzw1Kc+lVd/9Vdnf3+fg4MD7r77bu6++27uvvtuALa2tnjkIx/J9ddfz/XXX8/+/j5//dd/zWu8xmuwv7/Pk5/8ZP7yL/+Sra0tHvnIR/KyL/uy7O/v89d//de8zMu8DE960pN48pOfzGu+5mty/fXX83u/93v83u/9Hu/zPu/D9vY2AFtbWxwcHLC1tcXv/u7v8pqv+Zr87d/+LbfccguXLl3ii7/4ix9y33333cpVV1111VVXXXXV/1zoQQ96EFddddVVV1111VX/0334h3/4d73O67zOewP87u/+Lq/5mq8JwN7eHjs7O3zDN3wDL/mSL8lrvMZrcOedd7K/v89v/uZv8hIv8RK8xmu8Bvv7+zz+8Y9nf3+fRz/60fz2b/82L/mSL8lLvMRLsL+/zxOe8ATuvPNO9vf3ufHGG7nhhht49KMfze///u/zkIc8hBtvvJH9/X3uvPNO7rrrLvb29rjrrruQxPb2NjfccAM33ngj29vb3HDDDQD83d/9HadOneKGG24AYH9/H4C77roLgDvvvJP9/X0ODg7Y39/nBdne3gZge3ub7e1t7re9vc329jb3297e5n7b29v8W+3v73O/g4MD9vf3ud/+/j4A+/v7HBwcsL+/zwuzs7PD1tYW29vbbG1tccMNNwBw/fXXA7C/v8/Fixe57bbbePVXf3X29/cBeNKTnsTBwQFPetKTAJDE1tYWj3zkI9na2uKRj3wkAPv7+/z1X/81r/Ear8Hdd9/N3XffzV/+5V+ytbXFIx/5SB7xiEewvb3N3/3d3/GMZzyD137t1+Yv//IvOTg44DVf8zXZ2tri937v9/jbv/1b3vAN3xCARzziEfze7/0er/EarwHAwcEBW1tbAPzt3/4tL/mSL8nu7i5/9Vd/9T1f//Vf/95cddVVV1111VVX/c+GHvSgB3HVVVddddVVV131P92LvdiLvdbLv/zL//ZbvuVb8tz+9m//lpd8yZcE4Bu+4Rt48zd/c06ePMmdd97J3t4ej3nMY/jrv/5rXuM1XoP9/X0e//jH84QnPIFHP/rRPOYxj+Gv//qveehDH8qNN97I/v4+T3jCE7jzzjvZ399ne3ubRz/60Wxvb3PjjTfyd3/3d5w8eZIbb7yR/f197rrrLu6880729/e56667uN/29jY33HADN954IwDb29vccMMN/MIv/AK33HILAKdOneKGG24AYH9/H4D9/X329/cBuOuuuwDY399nf3+f/f19XhhJ/EeQxL9ke3sbgK2tLQBuuOEGALa3t9na2mJ7e5vt7W0A9vf3Abj11lu5dOkSly5d4s3e7M3Y39/n4OCAu+66i4ODA+6++2729/e53/b2No94xCO44YYbuP766wHY39/nb/7mb3j1V3919vf3efKTn8zdd9/N3XffzdbWFo985CN5xCMewfb2Nvv7+/z1X/81L/3SL82Tn/xk7rnnHq677joe+chHAvBXf/VX/O3f/i1v+IZvyP7+Pi/7si/LpUuX+Lmf+zne+q3fmq2tLZ7xjGfwoAc9iOf2fd/3fTz5yU9+nX/4h3/4ba666qqrrrrqqqv+Z0MPetCDuOqqq6666qqrrvrf4HM/93N/6/z5868N8Jqv+Zr87u/+Lq/5mq8JwO/93u/xGq/xGgA84QlP4ClPeQqv9VqvBcCdd97J3t4ej3nMY/jrv/5rXvqlXxqAO++8kyc84QkAPPrRj+bRj340AHfeeSc33ngj+/v7POEJT+DOO+/krrvuYnt7mxtvvJEbbriBRz/60QD83d/9HadOneKGG25gf38fgLvuuos777yT/f197rrrLu63vb0NwA033ADAjTfeyPb2Ntvb2/zcz/0cx44dA+CWW24B4NSpU2xvb7O9vc399vf3ud/+/j4A+/v73G9/fx+Ag4MD/rW2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N/CSL/mSvMZrvAZPeMITuPPOO7nxxht59KMfzd/93d/xEi/xEuzv7/OEJzyBJzzhCdx444086lGP4sYbb+Tv/u7veImXeAn29/fZ29vjiU98Int7e+zv77Ozs8P29jaPfvSj+Zmf+RluueUWbrnlFk6dOsUNN9zA/v4+AHfddRd33nkn+/v73HXXXdxvZ2cHgBtuuAGAG264ge3tbQBuuOEGntvf/d3fcerUKQBuuOEGnp/9/X0eaH9/n/tJwjYPJAnb3G97e5v7bW9v8/zs7+8DsL+/zzRN3HLLLTzQ/v4+AAcHB9x1110AHBwcsL+/z9133839tre3AXjEIx4BwA033MD1118PwP7+Pn/zN38DwG233cbrvM7rcPfdd3P33Xdz9913s7W1xSMf+Uiuv/56rr/+evb39/nrv/5rXuM1XoP9/X2e/OQn86QnPYlHPvKRPPKRj2Rra4u/+7u/4yVe4iV48pOfzJOf/GQe8YhH8IhHPIK//du/5fd+7/d4wzd8Qx7xiEdwcHDA1tYWAAcHB2xtbQHwcz/3c7zkS74kD3rQg/iQD/mQh9x33323ctVVV1111VVXXfW/A3rQgx7EVVddddVVV1111f8mn/u5n/tbN95442sfP36c3/3d3+U1X/M1Abh06RLHjh3jG77hG3jJl3xJXuM1XoP9/X3uvPNOfvM3f5PXeI3X4CVe4iV4whOewJ133snOzg5/9md/xku8xEvw0i/90gDceeed3HXXXdx5553ceOON3HDDDfzFX/wFt9xyCw996EO58cYb2d/f56677uLOO+/kiU98Itvb2wDccMMN3HjjjWxvb3PDDTcA8Hd/93ecOnWKG264AYD9/X329/fZ39/nrrvuYn9/n/39ffb393mg7e1tALa3t9ne3gZgmiYAtre3AbjpppsA2N7e5tixY/xnueOOO7h06RL7+/sAHBwcsL+/zy233ML+/j77+/sA3HPPPTy37e1ttra2uP766wG44YYbuP7667nf/v4+t956Ky/xEi8BwP7+PnfffTcHBwfcfffd3H333WxtbXH99dezvb3Ny77sywKwv7/PX//1X3Pbbbfxlm/5ljz5yU/mL//yL7n++uu5/vrredmXfVkODg74q7/6K/7u7/6OV37lV+bJT34yL/uyL8sjHvEInvGMZ/DzP//zvOEbviFbW1tcf/31PNDBwQFbW1sAfP/3fz9v/dZvzdbWFvfdd9+tH/IhH/IQrrrqqquuuuqqq/73oHLVVVddddVVV131v8zf//3f//aLvdiLvfb3f//38+7v/u7c79ixY/ze7/0e7/me78n29jbf8A3fwJu/+Ztz44038rqv+7rs7e0BMI4jr/d6r8f+/j4Ad955J3t7e+zs7DCOI6/7uq/L/v4+d955J094whPITMZxZH9/H4Dt7W2GYeB1X/d1ed3XfV329/e56667uPPOO3nCE57AXXfdxfb2Ntvb22xvb9P3PXfddRc33HAD29vb/M3f/A3Hjh3jUY96FDfccAMA+/v7AOzv77O/v8/+/j77+/vs7++zv7/PXXfdxXP7m7/5Gx5oe3ubB9re3uZ+tpHEA9lGEvc7ODjgfvv7+/xLVqsVAFtbW+zs7HDDDTcAcMMNN7C1tcX29jb329/f5+LFizz1qU/l+uuvB2B/f5+7776bYRj4+Z//ee6++24ksbW1xfXXX8/111/Pa77ma7K9vc3+/j633norAPv7+zz5yU9mc3OT5XLJL/zCL/DIRz6S93//92d/f5+//uu/5n62eeVXfmUe+chH8rIv+7L87d/+Ld/wDd/AG77hG/Iqr/IqPOIRj+AZz3gG3/AN38CHfdiHAfC3f/u3vORLviT3e/d3f3e+7/u+j/d4j/fgH/7hH36bq6666qqrrrrqqv9d0IMe9CCuuuqqq6666qqr/jd5sRd7sdf+3M/93N96xjOewd/+7d/yFm/xFnz/938/7/7u78799vf32d7e5glPeAJPfvKTee3Xfm0A7rzzTvb29njMYx7DX//1X/Mar/Ea7O/v84QnPIE777yTG2+8kRtuuIEbb7yRv/u7v+MlXuIl2N/f58477+Suu+7iCU94Ajs7O9xwww08+tGP5oYbbuAXfuEXuOWWWzh16hQ33HAD+/v73HXXXezv73PnnXdy1113cb/t7W1uvPFGAG644Qa2t7e54YYbAPiFX/gFjh07xrFjxzh16hQAN9xwAw+0v78PwP7+Pvv7+0jCNvv7+wAcHBxwv/39ff41tre3ud/29jb3297eBmBrawuA7e1ttre3ud/+/j4ABwcHnDt3jkuXLgHw6q/+6uzv7wNw9913s7+/z913383+/j4HBwcAbG9vs7W1xfXXX88NN9zA9ddfD8D+/j633norly5d4tVf/dW5++67ufvuu7n77rvZ399ne3ub66+/npd92ZcF4O/+7u94iZd4Cfb393nyk5/Mk5/8ZB7xiEfwsi/7shwcHPBXf/VXvMzLvAx33303+/v7vOzLviwHBwf81m/9Fo9+9KPZ2tpie3ubra0t7vf93//9vPu7vzvf//3fz2u8xmvwoAc9iA/5kA95yH333XcrV1111VVXXXXVVf97oAc96EFcddVVV1111VVX/W9yzTXXPPiTP/mTn/6gBz0IgN/93d/lNV/zNQHY399ne3sbgN/7vd/jpV/6pbnzzjvZ3t7mr/7qr3it13otAO68807uuusuHvWoR/FXf/VXvMzLvAw7Ozvs7e3xxCc+kTvvvJNHP/rR3HDDDfzVX/0VD3rQg3iJl3gJ9vf32d/f58477+Suu+5if38fgBtuuIEbb7yRRz3qUfzCL/wCt9xyC6dOneKGG24AYH9/n/39ffb397nrrrvY39/nrrvu4n7b29sAbG9vs729zQ033ADA9vY229vbbG9v83u/93scP36c+91yyy3c79ixY/xnuHTpEgCXLl0C4NKlSwDs7u7y0i/90gAcHBywv7/P/v4+AHfffTcAd999N/fb3t4G4Prrr2dra4sbbriB66+/HoD9/X0A/uZv/oZLly7xmq/5mhwcHPDkJz+Z/f197r77bra2tnjkIx/J9ddfz/XXX8/+/j633norz3jGM3it13otnvzkJ/OkJz2JG264geuvv55HPOIRHBwc8Fd/9Ve8zMu8DHfffTf7+/u87Mu+LAcHB/zVX/0VD3/4wzk4OOARj3gEf/u3f8tLvuRLAnBwcMDW1hYAP/dzP8dbvMVbAPA3f/M3fO7nfq646qqrrrrqqquu+t8FPehBD+Kqq6666qqrrrrqf5sP//AP/67XeZ3XeW+e6Xd/93d5zdd8TQB+7/d+j9d4jdcA4Od//ud5rdd6LQDuvPNOfvM3f5NbbrmF13qt1wLgCU94AnfeeSePfvSjefSjH83v/d7v8Rqv8Rrs7+9z55138oQnPIH9/X1uvPFGbrjhBh796Efze7/3ezzsYQ/jhhtuYH9/n7vuuos777yT/f197rrrLra3t7nhhhu48cYb2d7e5oYbbuAXfuEXOHbsGMeOHePUqVPccMMNAOzv77O/v8/+/j77+/vs7++zv7/P/v4++/v7PLft7W0ksb29zfb2NraRxNbWFgDb29vcb3t7m3+Ng4MD7re/v8/99vf3Adjf3wfg4OCA/f197icJgO3tbba2ttje3mZrawuAG264geuvv5777e/vc/HiRW677TZuu+023uIt3oKDgwPuvvtuAP7yL/8SgK2tLR75yEcC8LIv+7IA7O/v89d//de8xmu8Bvv7+zz5yU/mSU96EgCPfOQjedmXfVkODg74q7/6K17jNV6Dv/zLv+Tg4ICtrS1e9mVfloODA/7qr/6K3/u93+N93ud9uP766zk4OOCnf/qneeu3fmu2trZ4xjOewYMe9CAAfu7nfo63eIu34H5/8Ad/8Ntf+ZVf+TpcddVVV1111VVX/e+CHvSgB3HVVVddddVVV131v807vuM7ftYrv/Irf/axY8c4fvw4z+33fu/3eI3XeA3uvPNOdnZ2+Ou//mte4zVeg/39ff70T/+URz/60dx4443ceeed7OzscOedd3LXXXcB8KhHPYq/+qu/4kEPehAv8RIvwf7+PnfeeSdPeMITODg44IYbbuDGG2/khhtu4Hd/93e55ZZbOHXqFDfccAP7+/vcdddd7O3tcdddd3HXXXcBsL29zQ033IAkbrjhBra3t/mZn/kZbrnlFgBuueUWTp06xfb2Ntvb29xvf3+f/f199vf3Adjf3+fg4ACA/f19APb39wHY39/nRSWJf8n29jYAW1tbAGxvb7O9vc39rr/+eiSxtbXF9vY299vf3+fg4IBz585x6dIlLl26xKVLl3iLt3gL7r77bvb397n77ru5++67Adje3mZ7e5vrr7+e66+/nuuvvx6A/f19/vqv/xqAl37pl+bJT34yAH/5l3/J1tYWj3zkI3nZl31ZAG677Tb+9m//ltd+7dfmSU96Ek9+8pN5xCMewcu+7MtycHDA1tYWBwcH/OVf/iUv+7Ivy9bWFr/3e7/Ha7zGa3C/3/3d3+U1X/M1eW67u7sAfP/3f//7/NZv/dZ3c9VVV1111VVXXfW/C3rQgx7EVVddddVVV1111f82L/ZiL/ban/u5n/tbPNPv/u7v8pqv+Zp8//d/P+/+7u/O/fb397nf937v9/KSL/mSvMZrvAb7+/v82Z/9GTfccAOPfvSj+bu/+zte4iVegv39fZ7whCfwhCc8gUc/+tHccMMN/NVf/RUPetCDeImXeAn29/e56667uPPOO3niE5/I9vY2N9xwAzfeeCM33HAD29vb/N3f/R2nTp3ihhtuAGB/f5+77rqLu+66i/39ffb399nf3wdge3ub7e1ttre3ueGGG9jf3+eGG25ge3ub7e1tHujv/u7vOHbsGLVWtre32d7e5gXZ39/nX2t7e5sXZH9/H4D9/X2maeLSpUu8xEu8BA+0v78PwN13383+/j4Ad999N3fffTf3297eZmtri+uvv57t7W0e+chHArC/vw/A3/zN3/Dqr/7q7O/vc/fdd3NwcMCTnvQkAB75yEcC8LIv+7Ls7+9z8eJFnvGMZ/DSL/3SPPnJT+aee+7huuuu45GPfCRbW1vcdtttnDx5krvvvpsnP/nJvMzLvAzXX389v/d7v8fv/d7v8ZEf+ZFsbW1xcHDA1tYW9/v+7/9+3v3d352//du/5SVf8iW534d8yIc85L777ruVq6666qqrrrrqqv9d0IMe9CCuuuqqq6666qqr/re55pprHvzJn/zJTwd4xjOewWu+5mvyu7/7u7zma74mAPv7+2xvb/MN3/ANvORLviSv8RqvAcATnvAEfuM3foPXeI3X4CVf8iXZ39/nz/7sz9je3ubP/uzPeImXeAle+qVfGoA777yTu+66izvvvJNHP/rR3HDDDdx444383d/9HQ9+8IPZ3t5mf3+fu+66iyc84QncddddbG9vc8MNN3DjjTeyvb3NDTfcAMDf/d3fcerUKW644QYA9vf3Abjrrru46667ANjf3+euu+7iftvb2wBsb2+zvb0NwPb2NpkJwPb2NgDb29scO3aM7e1t/iPt7+9z6dIlDg4OsM3BwQH7+/scO3YMgIODA/b39zk4OGB/f5/7bW9vA3D99deztbXF9vY229vbXH/99QDs7+9zcHDAU5/6VF791V8dgP39fZ785CcD8Jd/+ZdsbW2xvb3N9ddfz/XXX8/111/P/v4+f/3Xf81rvMZrcPfdd3P33XfzpCc9CYBHPvKRvOzLviwHBwf81V/9FX/3d3/HK7/yK/PkJz+Z13zN1+T666/nb//2b/m93/s93vAN35CtrS2uv/56AO6++26uv/56Dg4O2NraAuBv//ZvecmXfEl+93d/lwc96EHs7u7yuZ/7ueKqq6666qqrrrrqfx/0oAc9iKuuuuqqq6666qr/jb7jO77Dx48fB+AZz3gGD3rQg/jd3/1dXvM1XxOA3/u93+OlX/ql2d7e5hu+4Rt4jdd4DR7ykIdw5513sr+/zyu8wivwe7/3e7zGa7wG+/v73Hnnndx111086lGP4sYbb+Tv/u7veImXeAn29/e58847eeITn8j+/j433HADj370o7nhhhv4+Z//eV7yJV+SW265hf39fQDuuusu7rzzTp74xCeyvb0NwA033MCNN97I9vY2N9xwAwC/8Au/wC233MKpU6e44YYbuN/+/j4Ad911FwD7+/vs7+9zcHAAwP7+Pvv7+7ww29vbPD+SeEH29/f5l2xvbwOwvb3N9vY2W1tbANxwww0AXH/99dxvf3+fg4MDnvrUpwLw6q/+6uzv73NwcMBdd90FwD333MPdd9/N1tYW29vbXH/99Vx//fVcf/317O/vk5n87d/+LS/90i/NwcEBT3rSk3jyk5/M1tYWj3zkI3nZl31ZAH7v936P13iN1+Dg4IDf/d3f5brrruORj3wkW1tb/N7v/R5/+7d/yxu+4Ruyv7/Py77sy3Lp0iW+//u/nw/7sA8D4BnPeAYPetCDAPjbv/1bXvIlX5JnPOMZPOhBD+J+b/d2byeuuuqqq6666qqr/vdBD3rQg7jqqquuuuqqq6763+hzPudzfmt7e/u1n/GMZ/Car/maXLp0iWPHjvG7v/u7vOZrviYAv/d7v8drvMZrsL+/z5133slTnvIUXuu1XguAO++8k/39fW644Qae9rSn8Rqv8Rrs7+/zhCc8gTvvvJMbb7yRG264gRtvvJG/+7u/4yVe4iXY39/nrrvu4s477+Suu+5ie3ubG264gRtvvJEbbriBX/iFX+AlXuIluOWWWwDY39/nrrvuYn9/n7vuuou77roLgO3tbba3t9ne3uaGG24AYHt7m5/5mZ/h2LFjHDt2jGPHjnHs2DFOnTrF9vY2ANvb29xvf3+f++3v7wOwv7+PJGwDsL+/zwNJ4gXZ3t7mfltbWwBsb28DsL29zQPt7+8DcHBwwLlz57h06RIAt912GwCv8zqvA8Bdd90FwN13383dd98NwPb2NltbW9xwww1cf/31XH/99QDs7+9z8eJFnvGMZ/Aar/Ea7O/v8+QnP5m7776b/f19rr/+era3t3nZl31ZAG677TZuueUWDg4OeNKTnsSTn/xkHvGIR/CyL/uyHBwc8Fd/9Ve8zMu8DE960pMAeNmXfVkODg746Z/+aV7plV6Jra0trr/+en7u536O13md12Fra4u//du/5SVf8iV5xjOewYMe9CD+5m/+huPHj3NwcPA7n/mZn/naXHXVVVddddVVV/3vgx70oAdx1VVXXXXVVVdd9b/R53zO5/zWi7/4i782wO7uLsePH2d/f5/t7W1+93d/l9d8zdfkzjvvZGdnhwsXLnDy5EnuvPNOAM6ePctLv/RLA3DnnXdy11138ahHPYq/+qu/4mVe5mW48cYbufPOO3niE5/InXfeyaMf/WhuvPFG/vIv/5IHPehBvMRLvAT7+/vs7+9z5513ctddd7G/v8/29jY33HADN954Iz/zMz/DLbfcwi233MKpU6e44YYbANjf32d/f5/9/X3uuusu9vf32d/fZ39/H4Dt7W0AbrjhBgBuuOEGALa3t/m7v/s7tre32d7e5tixYxw7doz7HTt2jH/J/v4+29vbvKguXboEwKVLl7h06RL7+/tcunSJl37pl2Z/f5/9/X0A7r77bgDuvvtu7re9vc3W1hbXX389ADfccAPXX389APv7+xwcHPDUpz6VS5cucdttt/HWb/3W3H333dx9993cfffdbG1t8chHPpLrr7+e66+/nv39fW699VZ2d3d56Zd+aZ785Cfz5Cc/mUc84hFcf/31XH/99RwcHPBXf/VXvMzLvAx33303+/v7vOzLviwHBwf81V/9FQ9/+MM5ODjgEY94BJcuXaKUAsDW1hY/93M/x1u8xVtwcHDA1tYWu7u7HD9+HIDf+q3f+p6v//qvf2+uuuqqq6666qqr/vehctVVV1111VVXXfW/1NmzZ28FeMYznsGDHvQg9vf3+Z7v+R7e673ei9d8zdcEYGdnh+3tbe68807++q//mtd4jddgf3+fu+66i6/7uq/jNV7jNXjpl35pbrzxRp7whCcwTRP7+/sAPO1pT+N1X/d12d/f56677uLP/uzP2N/fZ2Njg7vuuouf/umf5iVe4iV42MMexiu8wiuwv7/PXXfdxZ133smf/dmfAXDx4kU2Njbo+5677rqL7e1ttre32d7e5u/+7u941KMexQ033ADA/v4+AHfddRcAd911FwBPetKT2N/fZ39/nwfa3t7mftvb2wBsb29jG0kAbG1tcT9JvDD7+/vcb39/H4CDgwMA9vf3AZAEwB133MH29jZbW1tsb29z/fXXA/ByL/dyAFx//fXcb39/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Ndjf3+cJT3gCAK/wCq/AM57xDB70oAdx55138sQnPhGARz3qUdx444383d/9HS/xEi/B/v4+d911F094whPY39/nhhtu4MYbb+RRj3oUP//zP8+DHvQgXuIlXgKA/f197rrrLu666y729/e566672N7eZnt7m+3tbW644Qa2t7e54YYbuN/f/d3fcerUKba3t9ne3uZ++/v7HBwcYJv9/X329/c5ODgAYH9/n/vt7+8DsL+/D4AkXlTb29s80NbWFgDb29tsb28DsL29zfb2NgBbW1tsb29zv/39fQ4ODnjqU5/Kq7/6q7O/v8/97r77bg4ODrj77ru5++67Adja2uKRj3wkAC/7si8LwP7+Prfeeiu7u7u89Eu/NHfffTcHBwf85V/+JVtbWzzykY/kZV/2ZQH4u7/7Ox7ykIcA8KQnPYknP/nJvOzLviyPeMQjuHTpEj/3cz/HYx/7WA4ODnjZl31ZAP7qr/6K6667DoBHPOIR/O7v/i6PeMQjuP7663nGM57Bgx70IJ7bz/7sz7K9vf09X//1X//eXHXVVVddddVVV/3vgx70oAdx1VVXXXXVVVdd9b/RT/zET3h3d5fjx49zv/39fba3t7nf/v4+29vbAOzv7wPwZ3/2Z7zCK7wCf/3Xf81rvMZrsL+/z5/92Z+xvb3NK7zCK/B7v/d7vMZrvAb7+/s84QlP4IlPfCKPetSjuPHGG7nhhhv4u7/7O17iJV6C/f197rrrLu68806e+MQnsr29zQ033MCjH/1obrjhBgD+7u/+jlOnTnHDDTewv78PwF133cVdd93F/v4+d911FwDb29tsb2+zvb3NDTfcAMD29jYAN9xwA/f7/d//fY4dO8axY8eotbK9vQ3A9vY2/xn29/e538WLF7l06RKXLl3i1V/91bnf/v4+AHfffTf7+/sA3H333dx9990AbG9vA/DIRz4SgOuvv57rr78egP39ff76r/+a13iN12B/f5+DgwPuvvtu7r77bvb393nkIx8JwMu+7MsCcNttt3HLLbdwcHDAk570JJ785CfziEc8gkc+8pFsbW3xt3/7t7zkS74kf/mXf8mTn/xkXvM1X5Prr7+e3/u93+NlXuZlePKTn8wjHvEIALa2trjnnnu47rrr+JecPXv2GR/8wR/8YK666qqrrrrqqqv+90EPetCDuOqqq6666qqrrvrf6Cd+4icM8Dd/8ze81Eu9FM94xjN40IMexO/+7u/ymq/5mgD87u/+Lq/5mq/JE57wBG688Ub++q//mtd4jdfgCU94Avv7+/zpn/4pL/mSL8lrvMZr8IQnPIG77rqL7e1tHv3oR/PXf/3XvPRLvzQAd911F094whPY39/nUY96FDfeeCM33HADf/d3f8dLvMRLsL+/D8ATnvAE7rrrLu666y52dna44YYbuOGGG9je3uaGG24A4O/+7u84deoUN9xwAwD7+/vs7++zv7/PXXfdxf7+PgB3330399ve3mZra4udnR0Atra22N7eBmB7e5v7bW9vA7C9vc2/1v7+Pg+0v78PwMHBAfv7+9zv7rvvBuDg4ID9/X3ut729zdbWFtdffz0AN9xwA9dffz3329/f59Zbb+UlXuIlANjf3+fuu+/m4OCAu+++m7vvvputrS0e+chHcv3113P99dezv7/PX//1X/Mar/EaHBwc8KQnPYknP/nJADziEY/gZV/2ZTk4OOCv/uqveJmXeRme9KQn8eQnP5mXfdmX5RGPeATPeMYz+Pmf/3ne8A3fkP39fV72ZV+Wv/3bv+WhD30od999N494xCP43d/9XR7xiEdw/fXX83M/93O8xVu8Bc94xjN40IMexN/8zd/wUi/1UgB85md+5uv8wz/8w29z1VVXXXXVVVdd9b8LetCDHsRVV1111VVXXXXV/zav8zqv894f/uEf/l3PeMYzeNCDHgTA/v4+29vbAPzu7/4uL/MyL8P29jb3u/POO9nf3+fP//zPeau3eisA7rzzTvb39/nTP/1TXuM1XoOXfMmXZH9/nz/7sz8D4FGPehQ33ngjf/d3f8dLvMRLsL+/z1133cUTnvAE9vf3ueGGG3j0ox/NDTfcwM///M/zsi/7stxwww3s7++zv7/PXXfdxV133cVdd93F9vY229vbbG9vc8MNN7C9vc0NN9zAL/zCL3Ds2DGOHTvGqVOnuOGGG7jf/v4++/v77O/vI4m9vT0ODg7Y398HYH9/n/39fZ4fSfx77ezsALC1tQXA9vY2W1tbAGxvb7O9vc3111/P/fb39wG49dZbuXTpEpcuXeLN3uzN2N/f5+677+bg4IC7776bu+++m62tLba3t7n++uu5/vrruf766wHY39/nr//6r3mN13gN9vf3efKTn8yTn/xkAB7xiEfwsi/7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e5sbbriBG264ge3tbW644QYAbrvtNmqt3HDDDQDs7+9z1113AXD33Xezv7/P/v4++/v73G97exuA7e1ttre3sY0ktre32d7e5n5bW1s80Pb2Ni/I/v4+AJIA2N/fB2B/fx+Ag4MD7r77bra2tjg4OGB/f58H2t7eZmtri+3tbba3t7n++uvZ2tpie3sbgP39fS5evMgtt9wCwP7+PnfffTcHBwfcfffd3H333WxtbXH99dezvb3Ny77sywJwcHDAX/3VX/EyL/MyPOlJT+LJT34yBwcHvMzLvAzXX389119/PZcuXeLYsWPcfffd/O7v/i4Ar/mar8n111/P7/3e7/EyL/My/O7v/i4Ab/qmb8qlS5copfC7v/u7vMzLvAzb29sAPPnJT+ZlXuZleMYznsGFCxd4mZd5GZ7bM57xDB70oAcBcN999936Dd/wDe/z93//97/NVVddddVVV1111f9s6EEPehBXXXXVVVddddVV/9N9xVd8hR/84Afzgtx5551M08TJkyd5/OMfz7XXXsvJkyf5jd/4De644w7e673eC4Df+I3f4MYbb+QVXuEVAHjCE57AE57wBG688Ub+9E//lDd/8zfn5MmT3HXXXTzhCU9gf3+fRz3qUfzpn/4pL/mSL8lrvMZrsL+/z1133cUTnvAE9vf3AXjUox7FjTfeyF/+5V/yoAc9iJd4iZcAYH9/n7vuuou77rqLJz7xiQBsb2+zvb3N9vY2N9xwA9vb29xwww38/M//PA960IMAOHXqFDfccAMA+/v7ABwcHLC3twfA3XffDcD+/j4ABwcHAOzv7/NvIYkH2t7eBmBrawuA7e1ttra2ANje3mZ7e5utrS22t7e53/7+PhcvXuQZz3gGAK/xGq/B/v4+d999NwcHB9x9993cfffdAGxtbbG9vc3111/P9ddfz/XXX8/BwQF/9Vd/BcDLvMzL8KQnPYl77rmHu+++m62tLR7xiEfwsi/7sgD83u/9Hn/7t3/Lq7zKq/DkJz8ZgEc84hG87Mu+LJcuXeL7v//7edVXfVWe/OQn8zIv8zI84hGPAODuu+/m937v93iN13gNtre3+emf/mke9KAH8Rqv8Ro84xnPYBgGrr/+eqZpYrVacd111/GC7O7u8n7v937iqquuuuqqq6666n829KAHPYirrrrqqquuuuqq/8ne8R3f8bPe6Z3e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ox7F/v4+f/3Xf83DHvYwXv7lX579/X2e+MQn8sQnPpH9/X329/e56667kMT29jY33HADfd9zww038Du/8zs86EEP4oYbbuDlX/7lAdjf3+euu+7i7rvvBmB/f5+7774bgP39ffb397n77rt5Qba3t7nf9vY2ANvb2/xr7O/vIwmA/f19Dg4OeKDHPe5xvDBbW1vs7Oxw3XXXsb29zSMe8Qjud3BwwF/91V/xlKc8hZd5mZfh7rvvZnNzk+/4ju/gfpIA2Nra4hGPeATXX3891113HQcHB/zVX/0VL/MyL8OFCxf4jd/4DR7ouuuu4zVf8zXZ2tri937v9/i93/s9XuZlXoZf+qVfAmBra4uHP/zhvMzLvAwAy+WSX/qlX+J+b/Imb8LW1hbf//3fz+nTp7nnnnvY2trijd/4jXnGM56Bbe655x62trZ4+MMfzt/8zd9w9913A3Ddddexu7vLU5/6VB7+8IcD8JSnPIXn55577uHhD384BwcHbG1tcb/d3V2uueaaB7/xG7/x07/3e79XXHXVVVddddVVV/3HonLVVVddddVVV131H+xzP/dzf2uaJp6fnZ0dHmhvb49Lly6xs7PDzs4OT33qU7nxxhu58cYb+dM//VNe8RVfke3tbR796EfzhCc8gdlsRmbyeq/3enzv934vT3jCE7jxxhu5cOECb/3Wb81P//RPs7+/z7Fjx9jf3wfgPd7jPfjpn/5p9vf3+bM/+zNe4RVege///u/nrd7qrXj0ox/NE57wBP78z/+cu+66i2PHjjGOI/v7+/z1X/81r/u6r8srvMIr8MQnPpE///M/Z39/nz//8z/nz//8z7nhhhvY398H4K//+q956Zd+aV7+5V+e/f19nvjEJ3L33Xdz1113sb+/zxOf+ESe+MQnArC9vc358+fp+5677rqLG264ge3tbR71qEexvb3NDTfcAMD+/j4Ad999NwB33XUXAPv7+xwcHLC/v8/99vf3AZDEwcEBAHfffTf/WpJ4Qba2tgDY3t7m+uuvB+D6668H4Prrrwfg4OAAgK2tLe53cHDAk570JDY3N/mrv/ornvSkJ/Hctra2eOQjH8l1113H9ddfz8HBAX/1V3/Fddddx5Of/GT29/f50R/9UR7oZV7mZXjEIx7B1tYWv/d7v8fLvMzLsLW1xfXXX88999wDwHXXXcebvMmbcHBwwPd///fzYi/2Yvz1X/81AFtbW7zGa7wGW1tbAJw+fZp77rkHgFd/9Vfn0qVLzGYz/vqv/xqAV3/1Vwdgc3OTe+65h4c//OFsbW3xlKc8hXvuuYdXe7VXA+DSpUtsbW0BsLu7y8HBAQBbW1s8P8ePH2d3d5fjx4/z4R/+4d/19V//9e/DVVddddVVV1111X8cKlddddVVV1111VX/gV7ndV7nvV/sxV7stXd3d3lud955J9vb2+zs7PBABwcHAGxvb3P+/HkAHv3oR/Onf/qnPOEJT2Bzc5NXfMVX5AlPeAJ/+qd/ytu8zduwvb3NK77iK/Knf/qn/MZv/AZ7e3u813u9F2/91m/N933f97G/v89P//RPc+nSJd7jPd6Dt37rt+bP/uzPeMITnsCf//mfs729zf7+Pk996lN5jdd4DW688UZ+8zd/k/39fZ74xCdy1113ccMNN7C/v89f//Vf8xqv8Ro86lGP4olPfCJPfOIT2d/f56677uKuu+7iz//8z7nhhhu46667eNSjHsVf//Vf87CHPYyXf/mXZ39/n7vuuou7776bJz7xiQDs7+/zxCc+kSc+8YkAbG9vA3DDDTdw/fXXc9ddd7G9vQ3A7/zO7/CgBz0IgEc+8pHccMMNPND+/j4A+/v7HBwccL/9/X0ADg4O+JdsbW0BIAmAra0tALa3twG4/vrreaD9/X0ALl68yFOe8hQArr/+eg4ODtjf3+fuu+8G4J577uHuu+/m+dna2mJ7e5vrrruORz7ykWxtbXFwcMBf/dVfcf3117O/v8/W1hbf+Z3fyQNtbW3xiEc8gpd5mZcB4Pd+7/d4mZd5Gba2tvixH/sx7re1tcVrvMZrcN111/F7v/d7vMzLvAyz2Yy//uu/BuC6667jTd7kTbh06RJf8zVfw4033sj93viN35itrS2++7u/m62tLQBe+qVfmuuuu46DgwN+//d/H4CHP/zh7O7u8tSnPhWA6667DoDVasXW1hYAq9WK+x0cHHBwcMDW1hYHBwdsbW1xv+PHj/NSL/VSHD9+/L3vu+++W3/0R3/0c7jqqquuuuqqq676j0Hlqquuuuqqq6666j/INddc8+A3f/M3/y6A48ePc7+9vT12dnbY3t5mZ2eHO++8k729PQB2dnbY398HYGdnhzvvvJNnPOMZPOhBD+Kmm27izjvv5NGPfjQ33ngjj370o3nCE57Ab/zGb3Dy5Ele5mVehjvvvJO77rqLY8eOsbe3x87ODu/xHu/B933f97G/v8+xY8d40pOexGq14hVe4RXY3t7mz//8z9nf3+dnfuZnePmXf3m+4Ru+gTd/8zfnrd7qrXjCE57An//5n7O/v88Tn/hE7rrrLnZ2drjrrrv4y7/8S17rtV6LRz3qUdx111088YlP5K677mJ/f58nPvGJPPGJT+TP//zPueGGG9jf3wfgd37nd3jJl3xJXvu1X5vXfu3XZn9/n7vuuou7776bJz7xiQDs7+8D8MQnPpEnPvGJSAJge3sbgPPnzwMwm8246667ANje3ubv/u7vuOmmmwA4duwYN9xwA/9RLl26BMClS5e47bbbuHTpEg9+8IMBODg44O677wYgMzk4OOA7vuM7eGG2trbY3t7muuuu44YbbuC6664D4LbbbuOv/uqveJmXeRme/OQns7W1xXd+53fy3La2tniZl3kZHvGIR3BwcMDv/d7v8TIv8zJsbW3xYz/2Y9xva2uLhz/84bzMy7wMly5d4vu///t5sRd7MX7sx36M+730S780L/MyL8MznvEMZrMZN954I/d74zd+Y7a2tgDY2toC4LrrruOlX/ql+Zu/+RvuvvtuAB7+8Idz3XXXcXBwwD333MN1113H1tYWz3jGM7jnnnt4tVd7NQDuvfdeHujg4ACAg4MDtra2eH7e6I3e6LP/4R/+4Xf+4R/+4be56qqrrrrqqquu+vejctVVV1111VVXXfUf5MM//MO/68EPfjAvyN7eHjs7O+zt7fFAd955JwA33ngjf/qnf8rR0REAj370o/mN3/gNnvCEJzBNE6/4iq/IE57wBO68805uuOEGLly4wOu93uvx0z/90+zv7/Obv/mbvPVbvzUA7/Ee78FP//RPs7+/z5/92Z/xCq/wCmxvb/MKr/AKPPrRj+ZnfuZn2N/f58///M85duwY9913H3/7t3/La7/2a/PoRz+aJzzhCfz5n/85BwcHHBwc8LM/+7Nsb29z11138ahHPYphGHjLt3xL9vf3eeITn8hdd93FXXfdxf7+Pk984hN50pOexG//9m+zvb3NfffdR62VG264gd/5nd/hJV/yJXnt135tXvu1X5v9/X3uvvtu9vb2uPvuuzk4OGB/fx+A/f19APb39wF40pOexHN7xjOeAcDW1hY7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v/d7v8eDHvQgXvu1X5vXfu3XZn9/n7vvvpu77rqL/f197r77bl6Q/f199vf3ueeee/iXbG1tIQmAra0t7ieJF2R/fx+Ag4MDnpsk7nf+/HleFFtbW2xvb3P99deztbXFIx7xCAAODg64cOECT3nKU7j++uu5++67ueeee7j77ru55557eCBJ3G9ra4uHP/zhvMzLvAwHBwf81V/9FS/zMi9Da43v+q7v4rltb2/z8Ic/nJd+6ZfmGc94Bt/wDd/Aq73aq/HjP/7jPNB1113HG7/xG3Pp0iUODg74/d//fe69917u9/CHP5xXe7VX43d/93cppXDPPfdwv1d7tVfj0qVLzGYznvKUpyCJa6+9loc97GH87u/+Ltdccw333nsv1157LVtbWwA89alPBeDaa69la2uLe++9l83NTQBWqxXz+RyAS5cucb97772Xa6+9lgc6fvw47/iO7/jZX/d1X/c5XHXVVVddddVVV71wVK666qqrrrrqqqv+BS/2Yi/22i/90i/N8ePHeW533HEHN910E89tf38fgO3tbe68807uvPNObrzxRm688UbuvPNOfuqnfooP//AP5xVf8RX56Z/+afb391mtVmQmr/AKr8Cdd94JwJ/+6Z/yNm/zNmxvb/O6r/u6/OZv/iYAf/Znf8YrvMIrAPAKr/AKAPzZn/0ZAPv7+/zMz/wMly5d4iVf8iV5jdd4DWzz53/+5wDs7+/z53/+5xw7doz77ruPBz3oQcznc97yLd+SJz7xiTzxiU9kf38fgP39ff78z/+c7e1ttre3ueuuu3jUox7FMAy89mu/Ni/3ci/HXXfdxZOe9CTuuusuHmh/f5+/+Iu/4C/+4i/Y3t5me3ubxWJBrZUbbriB3/md3+FBD3oQj3zkI7nhhhsA2N/fZ39/n4ODA+666y729/c5ODhgf38fSbwoDg4OuN/+/j4AkvjPsLW1xfb2Ntdddx0A119/Pddffz33Ozg44K/+6q+45557eJmXeRn29/c5f/48+/v7fOd3ficvzNbWFg9/+MN5mZd5GQBuu+02HujHfuzHeG5bW1s84hGP4KVf+qW5dOkS3//938+Lv/iLs7m5yV//9V9zv62tLR7+8Ifz0i/90gCcPXuW3//930cS93upl3opXvqlXxqAUgpPecpTuN8bvdEbcd1113FwcMCv/MqvIAmAl3qplwLgxhtv5A/+4A8AePjDHw7A13/917Ozs8PDHvYwtra2ADg4OOC6664D4ODggPsdO3aMZzzjGbwwr/3ar81v/uZvvvY//MM//DZXXXXVVVddddVVLxiVq6666qqrrrrqqn/B+77v+/7W8ePHeX4kAbC3t8fFixfZ2dlhe3ubvb09AHZ2dgC48847ufHGG3n0ox/NnXfeyfb2NgA7OzvceOON3HnnnTzhCU/gxhtv5MYbb+QVXuEV+LM/+zP29/f5qZ/6KU6cOMFbvMVbsL+/z5/92Z8B8Gd/9mfs7+/TdR2v8Rqvwfb2Nr/5m78JwP7+PhHBfD7nG77hG3jP93xPHv3oR/OEJzyBP//zPwdgf3+fP//zP+eJT3wij370o3nQgx7EDTfcwKMe9Sjuuusu/vzP/5z9/X0A9vf32d/f56677uLP//zPedSjHsVdd93FX/7lX/KSL/mSvMVbvAX7+/vcdddd3H333TzxiU/kgfb399nf3+euu+7iL//yLwHY3t7m/PnzzGYz7rrrLm644QZ+53d+hwc96EEcO3aMRz7ykdxwww3c7+DggP39ffb39wG4++67Adjf3wfg4OCA/f19npsk/jW2tra4387ODltbW2xtbQGwvb3N1tYW29vbbG1tcb+DgwMuXLjAU57yFJ7ylKfwMi/zMgA8+clPZmtri7vvvpsf/dEf5V9y3XXXcf311/MyL/MyAFy6dInf+73f42Ve5mU4f/48v/Ebv8Hzs7W1xcMf/nBe5mVehoODAwCe/vSnM5/P+eu//mse6LrrruON3/iNOTg44Pu///t58Rd/cf76r/8aSdzvjd7ojbjuuuv4uZ/7Ofq+55577uF+r/Zqr8Z1113H93//93PmzBnu97CHPYzrrruOg4MD/uAP/gCAra0tHvawhwFwww03cHBwwHXXXQfAU5/6VCRx7bXXAnDvvffyQAcHB9zv4OCAra0tntvHfuzH/tb7vd/7iauuuuqqq6666qoXjMpVV1111VVXXXXVC/Hqr/7q3/XgBz+Y5+fOO+/kBbnzzjsBuPHGGwG48847AbjxxhsB2N/f50//9E95xVd8RR796Edz5513sr+/z5/92Z/x1Kc+lZd5mZfhrrvu4s4772R/f5+dnR1+7ud+jrd4i7cA4M/+7M8AeMITnsD29jZ/+7d/y3u+53vyHu/xHvzMz/wM+/v7APz5n/85x44d43u/93t5yZd8SV7jNV6DnZ0d/uzP/oz9/X0ADg4O+PM//3Oe+MQn8qhHPYp77rmHl3zJl+Td3u3deOITn8gTn/hE7rrrLu63v7/PX/zFX/AXf/EXbG9vc99991Fr5S//8i95yZd8SV77tV+bl3u5l+Pg4IAnPvGJ7O/vc9dddwEgifvt7++zv7/Pk570JO63vb3NrbfeCsCjHvUo7rrrLra3t9ne3mZra4utrS2uv/56brvtNh75yEdy/fXX84Ls7+9zP0nY5oEkYRuA7e1tXpCDgwMALly4wC233MIDHRwcsL+/z9133w3A/v4+d999N0960pOQxL9ka2uLRzziEVx//fVcd911AFy6dInf+73f42Ve5mV42tOexj333MOP/diP8fxsbW3xMi/zMjz84Q/n0qVL/PzP/zw33XQTT3nKUzg4OOCBtra2ePVXf3Wuu+46fu/3fo/f+73f45GPfCR//dd/zf22trZ4tVd7Nba2tvj+7/9+zpw5wz333MP9XuqlXoqHP/zh/NzP/RxnzpzhnnvuQRJbW1u82qu9Gs94xjN4whOewP1e9VVfFYC/+Zu/4eDgAIBrr70WgKc85SkAXHvttdxvc3MTgPPnz/NAh4eHbG1t8dyOHz/O677u6/7Wb/7mb74OV1111VVXXXXVVc8flauuuuqqq6666qoX4m3e5m3emxdgb2+PnZ0d7nd0dATAzs4Od9xxB894xjM4ceIEAHfeeSd33nknN954IzfeeCN33nknj3/845nP57zkS74kT3jCE7jzzju58847ueGGG8hMXu/1Xo/v/d7vBeCuu+7i0Y9+NL/7u7/La77mawLwZ3/2ZwDs7++zs7MDQGbyVm/1VjzhCU/gz//8zwHY39/n2LFjzOdzvuEbvoF3f/d3563e6q14whOewJ//+Z9zv/39ff78z/+c7e1t7rvvPm655RaGYeAt3/It2d/f54lPfCJ//ud/zgPt7+/zF3/xF/zFX/wF29vb3HfffdRaueGGG7j11lt5uZd7Oba3t9nf3+fuu+/mrrvuYn9/n7vvvpvnZ39/n/39fQDuvvtu7rezs4Nttre32d7eBmBjY4M77riD7e1tIoLrr7+e7e1t7re9vc2/ZH9/n+3tbR5of38fgL29Pfb39zk4OGB/f59jx45x6623cnBwwP7+PgcHB7wgknh+tra2eMQjHgHAy7zMywBwcHDAX/3VX3HddddxcHDA3/7t33LPPffwYz/2Yzw/W1tbPPzhD+cRj3gEW1tb/N3f/R0AT3/601mtVvz1X/81z+2lX/qleemXfmkuXbrE93//9/PiL/7i3HDDDRwcHAAgieuuu443eqM34tKlSwCcOXOGe+65h/s9/OEP56Vf+qX527/9W/q+55577kESAK/6qq/KpUuXmKaJe++9F4Brr72W6667jt/93d/l3LlzADzsYQ9ja2uLg4MD7rvvPgC2trYAeOpTn8rDHvYwAKZp4vk5ODhga2uLB3qzN3uz1/7N3/xNrrrqqquuuuqqq14AKlddddVVV1111VUvwOu8zuu814Mf/GCe2x133MFNN93Ec9vb2wNge3ubg4MDaq3s7Oxw4403cuedd/L4xz+eG2+8kVd8xVfkp37qpzg4OGC1WnHp0iVe7/Vej+/93u8F4AlPeAJ/+qd/yod/+Ifzeq/3evzmb/4mAE94whN49KMfze/93u/xGq/xGgD82Z/9GQD7+/v89E//NI9+9KNZrVa8xmu8BgB//ud/DsD+/j5//ud/zrFjx3jSk57EarXiNV7jNXj0ox/NE5/4RP78z/+c++3v7/Pnf/7nPPGJT+RRj3oU+/v7/PVf/zUv/dIvzaMe9SjuvvtunvjEJ3LXXXfxQPv7+/zFX/wFf/EXf8H29jbXX389fd9zww038Du/8zs86EEP4pGPfCQ33HAD+/v77O/vc3BwwF133cX+/j533303z48k9vf3ATg4OODuu+/mRbG9vc2L6uDggOcmiX8LSQBsbW1x/fXXs7W1xXXXXcf1118PwMHBAU9/+tP5vd/7PV7mZV6GJz/5yWxtbfGd3/mdSOIF2dra4uEPfzgv8zIvw8HBAX/1V3/Fy7zMyzBNE9/1Xd+FJJ7bS7/0S/PSL/3SHBwc8Hu/93s84hGPYJom/vqv/5r7SeKlXuqleOmXfmme8YxnMJvN+JVf+RUe6KVe6qV46Zd+aX7u536Ovu+55557kATAG77hG3Ldddfx/d///WQm93upl3opdnd3OXbsGLfeeisAD3vYwwD427/9WwAe9rCHAfDUpz4VgM3NTQAODg7Y2toCYHd3l1or1157Lc/Pgx/8YF78xV/8tf/+7//+t7nqqquuuuqqq656XlSuuuqqq6666qqrXoA3f/M3/27+BRcuXODGG29kZ2eHO++8E4CbbrqJP/uzP+POO+/kxhtv5BVf8RX5qZ/6KZ7whCfw+q//+tx4443cdNNN3HnnnTzhCU/g3nvv5S3e4i14hVd4Bf7sz/6M/f19dnZ2+Lmf+zne4i3egv39ff7sz/4MgCc84Qk8+tGPBuAVXuEVAPizP/szAPb393niE5/IbbfdBsBrvMZr8OhHP5qf+ZmfYX9/H4D9/X3+/M//nO3tbR72sIdxww038PIv//I86lGP4olPfCJ//ud/zv329/f58z//c574xCdyww03sL+/zw033MCtt97KW7zFW7C/v89dd93Fk570JO666y4eaH9/n/39fZ70pCcBsL29zfnz55nNZtx1113ccMMN/PVf/zUPetCDeO3Xfm0A9vf3Abj77ru56667ADg4OODuu+/m3+Lg4IB/K0m8KLa2tgC4/vrr2draYnt7m62tLa6//noADg4OuHDhAk95ylO4/vrrOTg44MlPfjIAd999N09+8pN5Yba2tnj4wx/Oy7zMywBw2223AXBwcADAj/3YjwEgiQd66Zd+aR7+8IeztbXF7/3e7/F7v/d7vOzLviy//Mu/zANtbW3x6q/+6lx33XUAXLx4kb/5m7/hgV7t1V6Nhz/84QD0fc8999zD/V7qpV6K6667ju///u/nzJkz3HvvvQA87GEP47rrruP7vu/7sA3Atddey3XXXQfAU5/6VACuvfZaAO69914Atra2ADg8POR+0zSxWq0AODw8ZGtri+f2MR/zMb/1fu/3fuKqq6666qqrrrrqeVG56qqrrrrqqquuej5e53Ve570f/OAH8/zceeed3HTTTezt7bFardjb22N7e5s777wTgO3tbQAe//jH84qv+Ipsb29zv8c//vE85jGP4RVe4RW488472d/fZ2dnh2c84xk85jGP4QlPeAL7+/vs7++zs7PD7/7u7/Kar/maAPzZn/0ZAE94whMAODo64rVe67W44YYb+Jmf+Rkksb+/z4kTJ3jGM57B3/7t3/Lmb/7mvNVbvRVPeMIT+PM//3Put7+/z8/8zM/w6Ec/mpd/+Zfnr//6r3mN13gNHvWoR/HEJz6RP//zP+d++/v7PPGJT+SJT3wi29vbPOpRj+Kuu+7iL//yL3nJl3xJ3uIt3oL9/X3uuusunvSkJ3HXXXfx3A4ODnjSk57Ek570JAC2t7fZ2tqitcZqteL666/nZ3/2Zzl27BgPetCDeOQjH8kNN9zA/fb39zk4OGB/fx+Au+++G4D9/X0ADg4O2N/f5z+CJLa2trjf9vY2W1tbbG1tAbC9vc329jbXXXcd9zs4OADg6U9/Ovfccw+/+Zu/yVu91Vuxv7/P+fPn2d/f5zu/8zt5YSQBsLW1xcMf/nBe5mVeBoCDgwN+7/d+j5d5mZfh/Pnz/Mmf/AkHBwfcTxL3e+mXfmke/vCHs7W1xe/93u/xMi/zMkjihhtu4J577uGBXvqlX5qXfumX5hnPeAbf8A3fwHXXXcfBwQEP9EZv9EZcd911fP/3fz9nzpzhnnvuAUAS1157LS/1Ui/F7/7u73LmzBnuvfdeALa2tni1V3s1nvGMZ3DNNddw7733AvBSL/VSADz1qU/lftdeey0A9957LwDXXnstAPfeey/XXnstBwcHTNPE/Q4ODrj22mt5bsePH+eVXumVPutP/uRPPoerrrrqqquuuuqq50Tlqquuuuqqq6666vl4ndd5nffiBdjZ2eF+8/mcnZ0dAPb29gDY2dnhxhtv5M477+TOO+/kxhtv5MYbb+TOO+/kT//0Tzl79iyv+ZqvyY033sidd97JnXfeyaMf/WguXLjA27zN2/C93/u9ANx5553s7OwA8OhHPxqAP/uzPwPgCU94Atvb23zv934vH/ZhH8Z7vMd78DM/8zPs7+8DsL+/z7Fjx7jvvvu47bbbeI3XeA0e/ehH85u/+ZvcddddAEjiiU98InfddRc33HAD+/v7/PVf/zWv8RqvwaMe9Sie+MQn8ud//uc80MHBAX/xF3/BX/zFX7C9vc19993HiRMn+J3f+R1e8iVfkrd4i7dgf3+fu+66i7vvvpv9/X3uvvtuntv+/j77+/vcfffdPOlJTwJge3sb25w/f57ZbMZdd92FJK6//nq2t7fZ3t7m+uuv5+/+7u945CMfydbWFtvb2zy3g4MDbHO/g4MDXpitrS3ut729zfNzcHAAwNOf/nQe8YhH8EAHBwfs7+9z9913I4n9/X3W6zU/+qM/yotia2uLRzziEQC8zMu8DACXLl3i937v93iZl3kZnvzkJ3NwcMCP/diP8fxsbW3x8Ic/nJd+6Zfm4OCAv/qrv+JlXuZl2N7e5sd//Md5bltbW7zxG78xW1tb/N7v/R7b29tsbW1xcHDA/ba2tni1V3s1tra2+P7v/37OnDnDPffcA4Akrr32Wt7ojd4IgFIK9957L/d71Vd9VS5dusQ0Tdx7770AXHvttVx33XX8zd/8DU972tMAeNjDHsbW1hb33nsvBwcHAGxtbQFwcHDAS77kS7K1tQWAJP4lb/Zmb/baf/Inf/I5XHXVVVddddVVVz0nKlddddVVV1111VXP5eabb/6uF3uxF3ttXoC9vT3ud+eddwJw00038ad/+qfceeed3Hjjjdx4443ceeedPP7xj+fGG2/kFV/xFfmpn/op9vf3mc/nALzCK7wCd955JwB/+qd/SkTw7u/+7rze670ev/EbvwHAE57wBAC6ruOlX/qlAfizP/szAPb399nZ2WF/f5/M5K3e6q144hOfyJ/92Z8BsL+/z5//+Z+zvb3N3/7t3/KSL/mSvNVbvRVPfOIT+fM//3P29/cB2N/f54lPfCJ33XUXN9xwA3fddRc33HADj3rUo3jUox7FXXfdxROf+ETuvvtuHmh/f5+/+Iu/4C/+4i/Y3t7mvvvuY7lc8qhHPYphGHi5l3s5tre32d/f5+677+auu+5if3+fu+++m+dnf3+f/f197r77bp70pCchifttb2+ztbXF9vY2APfeey8A29vbHDt2jK2tLba3tzl27BhbW1vs7++zvb0NwPb2Nv8Wd955J5cuXeLg4IC77roLgFtuuYXf/d3fZX9/n3vuuYcHksSLYmtri+uvv56trS0e8YhHsLW1xcHBAX/1V3/FwcEBAE972tM4ODjgx37sx3hBtra2eMQjHsFLv/RLc3BwwP22t7f58R//cZ7b1tYWD3/4w3npl35pnvGMZ/A93/M9PPzhD+dpT3saD3TdddfxRm/0Rly6dAmAxWLBPffcw/2uvfZa3uiN3ohnPOMZ3HHHHTz1qU/lfi/1Ui/Fddddx/d///eTmdzvpV7qpbjfwcEBAA972MPY3d3lqU99KgAPe9jDAHjqU5/KAx0eHnLttdcCcOedd/Kwhz2M5+fGG2987Vd6pVf6rD/5kz/5HK666qqrrrrqqquejcpVV1111VVXXXXVc3m3d3u31+a53HHHHdx0000AXLx4EYCdnR2e8IQnALC9vQ3A4x//eG688UZuvPFGAO68806e8Yxn8KAHPYgbb7yRO++8kyc84Qnce++9vMVbvAWPfvSjecITnsD+/j7b29v83M/9HG/xFm/B3t4ef/7nfw7AE57wBB796Efz13/917z0S780AH/2Z38GwP7+Pj/90z/Nox/9aFarFa/xGq+Bbf78z/+c++3v7xMRzOdzvuEbvoE3f/M35y3f8i154hOfyJ//+Z9zv/39fZ74xCfyxCc+ke3tbV7+5V+eRz3qUSwWC97yLd+S/f19nvjEJ/IXf/EXPLf9/X3+4i/+AoC/+Iu/4IYbbqDvex71qEfxO7/zOzzoQQ/itV/7tQHY39/n7rvv5q677mJ/f5+7776bf8n+/j77+/vcfffd/Eu2t7d5oO3tbV6Y/f197nd4eMgLc/78eZ4fSTw/W1tbbG1tcf3113Pddddx/fXXA3BwcMDTn/50/uqv/oqXeZmX4eDggK2tLX7sx36MF2Zra4uHP/zhPOIRj2Bra4tLly5xcHAAwO///u/zlKc8hee2tbXFwx/+cF76pV+aS5cu8f3f//28+Iu/OFtbW9xzzz080Eu91Evx0i/90vze7/0ej3jEI/iVX/kVHui6667jjd7ojfjbv/1bbPPUpz6V+1177bW81Eu9FL/7u7/LmTNnuPfeewF42MMexnXXXcfv/u7v8oxnPAOAa6+9lmuvvZa/+Zu/4alPfSoA1157LQD33nsvANdeey0A9957L9deey0Aq9WK+917771ce+213O/48eO8zuu8znv/yZ/8yedw1VVXXXXVVVdd9WxUrrrqqquuuuqqq57LK7zCKzyYF2B/f59z586xu7vLzs4O99vZ2UESd955J7u7u+zs7ACwv7/P0dERAI9+9KO566672N/f58Ybb+QZz3gGr/iKr8idd97J/v4++/v73Hjjjfzt3/4tj3nMY7jrrru46667AHjCE57AK7zCK7C9vc0rvMIrAPBnf/ZnAOzv7/Pnf/7nXLx4EYDXeI3X4NGPfjQ/8zM/w/7+Pvf78z//c44dO8Z9993Hgx70IF7+5V+eRz3qUTzxiU/kz//8z3mg/f19fuu3fos///M/51GPehS33HIL29vbvPzLvzyPetSjuOuuu7j77rt54hOfyHPb39/niU98Ik984hP5y7/8SwDOnz/Pk570JB75yEeyvb3NrbfeyiMf+UhuuOEGAPb399nf3+fg4IC77rqLg4MD7r77bv4tDg4OeKCDgwNeFJL4t9ra2gLg+uuvZ2tri+uuu47rr7+e+x0cHPBXf/VXXH/99RwcHLC/v880Tezv7/NjP/ZjvDBbW1s8/OEPZ3t7m4c//OEcHBywtbXFwcEBT3/603nKU57CwcEBz89Lv/RL89Iv/dIcHBzwe7/3e/ze7/0ej3rUo/ibv/kbHmhra4tXe7VX47rrrgNge3ubX/mVX+GBHv7wh/Nqr/ZqANjmb/7mb7jftddeyxu90RvxjGc8g+Vyyb333sv9Xu3VXo1nPOMZrFYr7vewhz0MgK2tLe73sIc9DIB7770XgK2tLQAODw+53zRNHBwcME0Tm5ubPLcHPehBXHXVVVddddVVVz0XKlddddVVV1111VUP8OZv/ubfxb9gY2OD48ePExHs7e3xjGc8gwc96EHceOON3HnnnRweHnLjjTfy6Ec/mic84Qn86Z/+KRsbG9x0003ceOON3HnnnTzhCU/g8Y9/PB/+4R/OK77iK/Ibv/EbADzhCU9ge3ubCxcu8Hqv93r89E//NPv7+wD82Z/9GQCr1YrXeI3XAODP/uzPkATAiRMneMYznsHf/u3f8hqv8Rq81Vu9FU94whP48z//c+63v7/Pn//5n/OkJz2J13md1+GpT30qr/Ear8GjHvUonvjEJ/Lnf/7nPND+/j5//ud/zhOf+ERuvPFGrr/+ep785CfzoAc9iNd+7dfm5V7u5bjrrru4++67eeITn8hz29/fB2B/f58nPelJ/PZv/zbb29tcf/31zGYz7rrrLm644QZ+93d/l1tuuYVjx47x2q/92txvf3+fg4MD9vf3Abj77rsB2N/f5+DggP39fR5IEv8Ztra2ANje3ua6664DYHt7m62tLa6//nrud3BwQGuNv/3bv+UpT3kKL/MyLwPAk5/8ZLa2tvjRH/1RDg4OuJ8knp+trS0e/vCHs729zcMf/nAAfu/3fo8nPOEJvPZrvza///u/z1Oe8hSen62tLR7+8Ifz0i/90hwcHPB7v/d7vMzLvAyHh4fccMMNHBwc8EAv9VIvxUu/9EvzjGc8g2/4hm/g4Q9/OPfccw8P9Gqv9mo8/OEP5/d+7/eICJ761Kdyv62tLd7ojd6IZzzjGUzTxL333sv93vAN3xCA3/u938M2ANdeey0Pe9jD+Ju/+Rue9rSnAfCwhz0MgKc+9akcHBzwsIc9DIC//du/BeDaa68FYL1eA3D8+HHuvfdetra2eKBrrrnmwW/7tm/7Wz/5kz/5Olx11VVXXXXVVVddQeWqq6666qqrrrrqAV7t1V7ttXk+Ll26xNbWFqUU9vf3eaB77rmHBz3oQdx4443ceeedPP7xj+fGG2/kMY95DE94whPY39/n6OiIBz3oQbzCK7wCd955JwA7OzsAPPrRj2Zvb48/+7M/A+AJT3gCkjh+/Dhv/dZvzU//9E+zv78PwJ/92Z/x6Ec/mt/7vd/jNV7jNbjhhhv42Z/9We63v7/PsWPHWK/X/PVf/zWv8RqvwaMf/Wh+8zd/k7vuugsASezv7/OzP/uzbG9vc9ddd/HUpz6Vl37pl+ZRj3oUT3ziE3niE5/I/v4+9zs4OOCJT3wiT3ziE9ne3ub8+fPcdddd/OVf/iUPetCDeO3Xfm1e7uVejv39fe666y7uvvtu7r77bp6f/f199vf3edKTnsT9tre3OX/+POfPn2e1WrG9vc1v/dZvcezYMY4dO8axY8c4duwYL/uyL8v29jYPtL+/z/0ODg4A2N/f54EODg54Qba2tpAEwPb2NrYB2N7eZmtri+d2cHDAhQsXuHTpEvfeey9PfepTue2223jLt3xL7r77bg4ODgC4++67efKTn8wLIokH2tra4uEPfzjXX3891113HQcHB/zVX/0Vd999Ny/zMi/D1tYWT3nKU/ixH/sxJPHctra2ePjDH85Lv/RLc3BwwO/93u/xMi/zMhweHvLjP/7jAEjifltbW7zRG70RW1tb/N7v/R7b29tsbW1xzz33cL+trS1e7dVejeuuu46f//mfp+s67r33Xu63tbXF277t23Lp0iVmsxm/8zu/w/0e9rCHcd1113FwcMDm5iYHBwcAvNRLvRQAW1tbHBwcAPCwhz0MgHvvvReAa6+9FoCtrS0Atra2uN/W1hYAz3jGM7j22mt5bm/wBm/w4J/8yZ/kqquuuuqqq6666pmoXHXVVVddddVVVz3Ti73Yi732Ix/5yAfzfFy4cIEXe7EXA2Bvb4/d3V2OHz/Ozs4OT3jCE3ilV3olHv3oR/Onf/qn3HnnnTzjGc/gQQ96EDfeeCN33nknf/qnf8rZs2d5zdd8TW688UbuvPNO9vf3+Y3f+A26ruNlXuZluOuuu7jzzjvZ39/nCU94An/6p3/Km7/5m/PWb/3W/PRP/zT7+/sAPOEJT2B7e5uXfumXZmdnh3d/93fnZ37mZ9jf3wdgf3+fP//zP2d7e5u//du/5SVf8iV5q7d6K574xCfy53/+5+zv73O//f19fvZnf5bt7W0e9rCH8Zd/+Ze81mu9Fo961KO46667eOITn8jdd9/NA+3v7/PEJz6RJz7xiWxvb3P+/Hnuuusufuu3fouXfMmX5IYbbuDlX/7l2d/f5+677+auu+5if3+fu+++mxdkf3+f/f19AJ785Cdzv4jANq01Lly4wGq14pd/+Zc5duwYW1tb3HTTTRw7dgyAY8eOsb29DcD111/Pv9elS5e4dOkSly5d4s477+TSpUvs7+/zsIc9DICDgwMODg645557APjRH/1R/jW2trZ4+MMfDsDLvMzLAHBwcMBf/dVf8Ru/8Ru81Vu9FVtbW/z1X/81T3nKU7ifJB5oa2uLl37pl+bhD384BwcH/N7v/R4v8zIvw+HhIT/+4z/O/SQBsLW1xcMe9jBe+qVfmmc84xl8z/d8Dw9/+MN52tOexgNtbW3xRm/0RgAcHBzQdR333nsv99va2uJt3/ZtecYznsH3f//3c/PNN3O/a6+9lld7tVfjGc94Bk984hM5ODgA4Nprr+Xaa6/lb//2b3nqU58KwLXXXsu1117L3/7t3/LUpz4VSVx77bUAPPWpT+WBDg8Pud9yueT5ueaaax78Yi/2Yq/9D//wD7/NVVddddVVV111FVC56qqrrrrqqquueqYXe7EXey2ey97eHjs7O1y8eJHd3V2OHz/Ozs4Oly5d4vjx42xvb7O3t8cznvEMHvSgB3HjjTdy5513cu+99/KgBz2IRz/60dx5553s7+8zjiPPeMYzeL3Xez2+93u/F4AnPOEJvMIrvAKZyeu93uvxUz/1UxwcHLC/v8/Ozg61VjKTt37rt+anf/qn2d/fB2B/f5+f/umf5q3f+q15+tOfzlu91VvxhCc8gT//8z/nfvv7+xw7doz5fM43fuM38h7v8R685Vu+JU984hP58z//cx5of3+fn/3Zn2V7e5u77rqLRz3qUSwWC97yLd+S/f19nvjEJ/IXf/EXPLf9/X2e+MQn8sQnPpHt7W3Onz9P3/cAbG9vc+utt/Lar/3aAOzv73P33Xdz1113sb+/z913381zk8QD7e/vs7+/z9133w3Ak570JAB2d3cB+Id/+Ae2t7e53/b2NgBbW1s80Pb2Ni/IwcEB99vf30cSAPv7+xwcHPDc/uqv/or7SeJFtbW1xSMe8QgAXuZlXgaAg4MDnv70pwNwcHDAk5/8ZLa2thiGgR/7sR/jBdna2uLhD384D3/4w9na2uLSpUsAPOUpT+Hee+/lx3/8x3l+XuqlXoqXfumX5uDggO///u/nxV/8xdna2uKee+7hgR7+8Ifzaq/2ajzjGc/g1KlT/Oqv/ioHBwfcb2tri7d927fl0qVLzGYzbr75Zu63tbXFq73aq3Hp0iV2d3e59957ud+rvuqr8oxnPAOAg4MDAB72sIcBsLm5iSQAtra2ALj33nt56EMfCsDf/M3f8EDPeMYzADg4OGBra4sHerEXe7HX+od/+Iff5qqrrrrqqquuugoox48f56qrrrrqqquuugrgwz/8w797c3PzOA+wXC6Zz+fs7u6yWCzY2dnhaU97GuM4cuzYMYZh4NZbb+XFXuzF2NnZYX9/nzvvvJO9vT1OnDjBNddcw7lz59jf32cYBh7+8Idz+vRpdnZ2ePrTnw7AXXfdxd/8zd/wki/5kjz2sY/lb//2bwEYhoG77rqLG2+8ka7reMxjHsPTn/50hmEAYBgGbr31Vv7sz/6M2WzGq7zKq3DjjTdy1113MQwDAMMwcNddd7GzswPA6dOnOX36NC/5ki/JbDbjrrvu4oGGYeDWW2/liU98IovFgu3tbba3t9ne3uYlXuIlOHXqFLPZjPPnz/PchmHg/Pnz3HrrrfzlX/4lT3rSkyilMAwDp06dYjabcdddd/HYxz6Wl3iJl+CRj3wkL/ESL8Hp06fp+56+75HEMAz8awzDwDiODMPAwcEBBwcHXLhwgQsXLnDhwgUuXLjA3Xffzd13383dd9/N3Xffzd13383dd9/N3XffzYULF7hw4QIXLlzg4OCAg4MDDg4OGIaBF0YSz8/W1hYnT57kEY94BNdffz0v8zIvw2u+5mvyYi/2Ymxvb7O3t8e1117LwcEBBwcH7O3t8fu///v89V//Nffccw/33HMPL8j111/PS7/0S/Pqr/7qbG1tsbW1xT333MMdd9zBL//yL3PPPfcwDAPP7aVf+qV54zd+Y7a2tviTP/kTfuzHfozrrruO22+/nQfa2tridV7ndXjsYx/L7/3e77G5ucmv/uqvMgwD97v22mt5i7d4Cy5dusRyueRXf/VXeaDXfu3Xpu97fvZnf5Z7772X+73kS74kt9xyC+v1mj/8wz8EYGtri1d91Vflb/7mb3jCE57AOI489KEP5eabb+apT30qd9xxB49+9KM5efIk9957L5J42MMexsHBAbPZjGuvvZaLFy+ytbXFA11zzTUP/oVf+IWv4aqrrrrqqquuugoox48f56qrrrrqqquuuurFXuzFXvvN3/zNP5rncvbsWY4dO8add97Jzs4OOzs7PP7xj+fo6IiXeZmXQRJPeMIT2N/f5zGPeQzb29v8zd/8DcMw8KQnPYnXeI3XAODWW29lGAbuvPNOLl26xCMf+UjOnTvH/v4+ADs7Ozz2sY9le3ub7e1tnv70pwMwDAN33XUXf/Znf8ZLvMRL8JjHPIbZbMZdd92FJIZhYLFYcOLECX7xF3+RV3zFV+TRj340fd9z1113cb9hGLjrrru49dZbueGGG3j84x/Pq7zKq/CoRz2K2WzGXXfdxQMNw8Bdd93FM57xDM6fPw/AX/7lX7K9vc0rvdIr8ahHPYpTp04xm804f/48DyQJgGEYOH/+PLfeeit/8Rd/wZOe9CRKKUhivV5z+vRpZrMZd911FzfffDMv//Ivz4u/+IvzyEc+kgc/+MFcf/31nDp1iu3tbfq+RxLDMPDcJPFvJYl/i+3tbU6ePMn111/Pgx70IB7xiEfw4i/+4rzGa7wGL/ZiL8YjHvEItre3kcRNN90EwMHBAU9+8pPJTP76r/+aP/3TP+UpT3kK99xzD8Mw8IJcd911PPzhD+dN3uRNePjDH84//MM/8Hd/93c8+MEP5k//9E/50z/9U+655x6en5d+6Zfm1V/91bnlllv4vd/7Pa6//nqe9rSnEREMw8ADXXfddbzFW7wFrTV+/Md/nL7vefzjH88DXXvttbzRG70Rz3jGM/iO7/gOzp49ywO94Ru+Iddddx3DMPD4xz+e+1177bW82qu9Gn/7t3/LU5/6VA4PDwF47dd+bba2tvjxH/9xSikAvNZrvRZ93/MXf/EXHB4e8vIv//L0fc/TnvY0+r7n5ptv5vbbb2ccR6699lrOnz/P8ePHeaDNzc3jj3vc437nvvvuu5Wrrrrqqquuuur/OypXXXXVVVddddVVwOu8zuu8F8/HhQsXuPnmmwG44447uPHGG7nxxht5whOeAMD29jYAd955J3/zN3/DS73US3HjjTdy5513sr29ze/+7u/ymq/5mjzxiU/kzjvvZH9/n/l8zoULF3i913s9vvd7vxeA/f19fuqnfor3fM/35NGPfjQAv/mbvwnA/v4+Ozs7POlJT2K1WvHSL/3SAPz5n/8593viE5/IsWPH+N7v/V5e8iVfktd4jdfgxhtv5Dd/8zfZ398HQBL7+/v87M/+LDfccAN33XUXT33qU3mN13gNHvWoR/HEJz6RP//zP+eB9vf3eeITn8gTn/hEtre3OX/+PHfddRd/+Zd/yUu+5Evy2q/92rzcy70cd999N3fddRdPfOITeUH29/fZ39/nSU96EgDb29tsbW2xvb3NbDbj7rvv5vrrr+d3f/d3Abjllls4c+YMj3zkI9ne3uZ++/v7ABwcHLC/vw/AwcEB+/v7ABwcHPBA+/v7PD+SuN/29jb329raAmBrawuA7e1ttra2ALj++ut5oIODAwCe/vSnc++99/IXf/EXvNZrvRYAT37ykwH4+7//e+655x4AJPEv2dra4uEPfzgAL/MyLwPApUuX+L3f+z1e5mVehu3tbZ761Kfy4z/+4zw/W1tbPPzhD+elX/qlOTg44K/+6q94mZd5GSTxEz/xEzy3ra0tXu3VXo3rrruO3/u93+P3fu/3uPHGG7n33nt5oJd6qZfipV7qpfjbv/1bNjc3uemmm3igN3zDN+S6664D4A//8A95oFd91VflGc94Bra59957Abj22mu59tpr+Zu/+RtuvPFGDg8PeehDH8rW1ha/+7u/y7333gvA1tYWu7u7PO1pT+MlX/Ilud/m5iYAu7u7POhBD+K5Pfaxj32tv//7v/9trrrqqquuuuqq/++oXHXVVVddddVVVwEv9mIv9to8H33fA7Czs8Of//mf80qv9ErcdNNN/Omf/inPeMYzeNCDHsSNN97InXfeydmzZwF4xVd8RX7qp36K/f19/vZv/5aXeqmX4vVe7/X43u/9XgCe8IQncOONN7K9vc3rvd7r8Ru/8RsA7O/v833f932cOHGCN3/zN2d/f58/+7M/A2B/f58/+7M/4xVe4RX467/+a17jNV4DSfzZn/0Z99vf3ycimM/nfOM3fiPv9m7vxlu91VvxxCc+kT//8z/nge666y5+9md/lkc96lF84zd+Iy/xEi/BS7/0S/OoRz2KJz7xiTzxiU/k4OCAB9rf3+eJT3wiT3ziE9ne3ua+++6j1soNN9zArbfeymu/9mvz2q/92uzv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93I88pGP5MVf/MU5deoUD37wg5nNZpw6dYrZbAZA3/cMw8C/hiT+Nba2tuj7nlOnTnH99dfzoAc9iOuvv55HPOIRvNiLvRiv+ZqvyYu92IvxYi/2Ypw6dQpJ3HXXXdxzzz383u/9Hg996EO555572N3d5cKFC1y6dInHPe5x3HPPPRwcHPDCbG9v89jHPpaXfumX5hVf8RXZ2trir/7qr/iFX/gFNjc3uXjxIn/6p3/KPffcwwNJAmBra4tXeIVX4NVf/dUppTBNE3feeSe/9Vu/xb333stze+mXfmle53Veh9YaP/7jP07f95RSeKCtrS1e9VVfla2tLX70R3+Ua665hnvvvZf7XXvttbzhG74hf/u3f8vm5iZ/+7d/y/1e8iVfkoc97GF8//d/P0972tO436u+6quytbXFpUuXuOOOOwB4rdd6Lfq+50lPehKHh4c8+tGP5uTJk/ze7/0eJ06c4KEPfSjPeMYz2N/f5+abb0YSW1tbPLdf+IVf+Bquuuqqq6666qr/z6hcddVVV1111VX/r73O67zOe/MAz3jGM3jQgx7E/v4+ANvb2+zu7vKgBz2IG2+8kcc//vEAbG9vA7C3t8fjH/94HvOYx3DjjTdy55138vjHP557772Xt3iLt+DRj340T3jCE9jf32dnZ4ff/d3f5WVe5mW46667uPPOOwH4sz/7M17xFV+RCxcu8Hqv93r85m/+JnfeeScA+/v77OzsAHDhwgXe+q3fmic84Qn8+Z//Ofe766672NnZ4Qd+4Ad4iZd4CV7jNV6DRz/60fzmb/4md999N/fb39/nz//8z3niE5/Iox71KH7+53+e13iN1+At3/It2d/f58///M954hOfyHPb39/nt3/7tzl+/DitNe666y4e9ahHsb29zaMe9She/uVfnv39fe6++26e+MQncvfdd/OC7O/vA7C/v8+TnvQkJLG1tcX+/j4XLlxgGAZWqxXf//3fD8Att9wCwC233ALAy77sy7K9vc1z29/f534HBwcA7O/vcz9J2EYSL8jW1haSsM329jZbW1s8t4ODAwAuXLjAbbfdxr333stf/uVfcunSJW677Tbe7u3ejoODA2yzv7/Per3mx37sx/jX2Nra4uEPfziPeMQj2Nra4uDggK2tLQ4ODrjnnnuQxMbGBn/913/N8yOJhz/84bzUS70UW1tb3Hbb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rd6KJzzhCfz5n/8599vf3+f48ePs7u5y11138ahHPYqXf/mX51GPehRPfOIT+fM//3MeaH9/nyc+8Yk88YlP5NGPfjRPfOITedSjHsViseAt3uIt2N/f54lPfCJ33303d911F8/t4OCAg4MD7r77bgC2t7e5/vrrmc1m3HXXXdxwww3ceuutnDp1ird4i7cAYH9/n7vvvpv9/X0ODg64++672d/f518iiefn4OCA+x0cHPD8SOLfQhL/Ftvb22xtbXHddddx/fXXc91113G/g4MD/vqv/5rrrruOg4MDnvzkJ7O5ucl3fdd3IYl/ydbWFg9/+MN5+MMfztbWFpcuXeJ+EcFP/MRP8IK81Eu9FC/90i/NwcEBv/d7v8fv//7v86hHPYobb7yR5/awhz2MV3u1V+PSpUt8wzd8A9dffz0HBwc80MMe9jBe9VVflWc84xn8wA/8ADfffDMP9IZv+IZsbm4C8Gu/9mvc79prr+Xaa6/l537u55imifs97GEPA6DWCsDm5ibXXnstz3jGM3ja057GQx/6UDY3NwE4PDxkc3MTgIODAwBOnz4NwO7uLsePH+fMmTMP5qqrrrrqqquu+v+MylVXXXXVVVdd9f/Wi73Yi702z/SMZzyDBz3oQezt7bGzswPAM57xDB70oAdx4403cs899/CgBz2Im266iT/90z/l6OgIgEc/+tHceeed3Hnnnfzcz/0cb/EWb8FjHvMYnvCEJ7C/v884jjzjGc/gFV/xFbnzzjvZ399nf3+f3/iN32B/f58P+7AP43Vf93X5zd/8TQD29/eRxHw+56//+q95jdd4DQD+7M/+jPvt7++zs7PDz//8z/MSL/ESvMZrvAY33ngjv/mbv8n+/j73Ozg44Ld+67f48z//c17ndV6Hpz71qbzGa7wGj3rUo3jiE5/In//5n/NAknjiE5/IE5/4RP7iL/6CRz7ykZw4cYK//uu/5mEPexgv//Ivz/7+Pk960pO46667uOuuu5DEc9vf32d/f58nPelJAGxvb3P99dczm8246667uOGGG9je3ubWW2/lhhtu4Prrrwdgf38fgLvvvpv9/X0ODg7Y39/n4OCA/f19/j0k8W8hiRdma2sLgOuvv56trS22trbY2tri+uuvB+Dg4ACAv/7rv+a6667j4OAAgCc/+cns7+/zXd/1Xbyotra2ePjDH87DH/5wtra2ODg44K/+6q94mZd5GZ7+9KfzN3/zN7wwL/VSL8XDH/5wtra2+L3f+z1e5mVehqOjI2688UYODg54oK2tLV71VV+V6667jt/7vd/j937v97jppps4ODgAQBIAL/mSL8lLvdRL8Xu/93vs7Oxw880380Bv+IZvyObmJj/90z/NA21ubvIGb/AGPOMZz2A+n3PvvfcC8NCHPpRrr72Wn/u5n+PSpUsAvNRLvRQArTUArr32WgCe9rSnsbm5yQty6dIljh8/DsCLvdiLvfY//MM//DZXXXXVVVddddX/R1Suuuqqq6666qr/t6655poH80y33norD3rQg7jfzs4OpRQAbrzxRu68804AHvOYx/Cnf/qn/Omf/ikbGxvceOONbG9vs7+/z87ODs94xjN4xVd8Re6880729/d5whOewI033khm8jZv8zZ87/d+LwD7+/tsb2/z8z//87z5m785AL/5m7/J/f7sz/6MV3iFV+D3fu/3eI3XeA1uvPFGfuZnfob77e/vI4kLFy7wjd/4jbzbu70bb/VWb8UTn/hE/uzP/gxJ3G9/f5+f/dmf5VGPehR33XUXT33qU3mN13gNHvWoR/HEJz6RP//zP+e57e/v8xd/8Rf8xV/8Bdvb21xzzTUA/M3f/A0PfehDebmXezn29/d50pOexF133cXdd9/NC7K/v8/+/j5PetKTuN/Ozg7XX389s9kMgK2tLba3t/mFX/gFbrnlFs6cOcPLvdzLcb/9/X0ksb+/z/7+PgAHBwfs7+8DcHBwAMD+/j4ABwcH3E8SL6qtrS3ut729zfb2NgBbW1sAbG1tsbW1xfb2NltbW9zv4OAAgKc//ence++9XH/99RwcHHBwcMDdd9/N5uYmv/RLv8Q999zDCyOJB9ra2uLhD384D3/4w9na2uLg4IC/+qu/4mVe5mV4ylOewuHhIT/+4z+OJJ6fra0tHvawh/HSL/3SHBwc8Fd/9Ve8zMu8DBHBT/zETyCJ5/ZSL/VSvNRLvRSXLl3i+7//+zlz5gw33XQT95MEwBu+4Rty7bXX8nu/93uUUvjbv/1bHugN3/ANufbaa/n+7/9+rrnmGu677z7u96qv+qpcunSJ+XzOvffey/1e9VVflWc84xnM53MuXboEwEMf+lB2d3f527/9WwCuueYaAJ72tKdx7bXXAvC3f/u3bG1t8UC33norD3rQg7jmmmsezFVXXXXVVVdd9f8Zlauuuuqqq6666v+tF3uxF3stnsve3h47Ozvs7Ozw+Mc/nptuuombbrqJP/3TP+UZz3gGD3rQg7jxxhu58847+du//Vve4i3egld8xVfkN37jN7jzzju58847+fAP/3Be8RVfkd/4jd8A4E//9E/Z39/nwz7sw3i913s9fuM3fgOAg4MDJAHw6Ec/GoDf/M3f5H5/9md/xvb2Ni/90i/N9vY27/7u787P/MzPsL+/z/3uuusudnZ2+IEf+AFe4iVegtd4jdfgUY96FL/1W7/FXXfdxQM98YlP5IlPfCKPetSj+MZv/EZe4iVegtd4jdfgUY96FE984hN50pOexP7+Ps9tf3+f3/7t3+Yv/uIvuOGGG9jf3wfgb/7mb3joQx/Ky73cy7G/v8/dd9/NXXfdxZOe9CReGEns7++zv7/Pk570JO63vb3N1tYWFy5cYDab8aQnPYnt7W2uv/56tre3Afjrv/5rjh07BsD111/PIx7xCAC2t7d5QQ4ODnhBtra2eGEODg4A2N/fZxxHLl26xL333surv/qrA3BwcADA3XffzcHBAQB7e3t813d9F/8WW1tbXHfddWxtbfHSL/3SABwcHPBXf/VXPOIRj+Cee+5BEj/+4z/OC7O1tcXDHvYwXvqlX5qDgwN+7/d+j9///d/nNV/zNfmJn/gJACTxQFtbW7zhG74hW1tb/N7v/R6///u/z4033si9997LA21tbfEGb/AGABwcHLBcLrn33nt5oDd8wzfk2muvBeCaa67hvvvu435v8AZvwLXXXsv3f//380Bv8AZvAMDv/d7vcb9XfdVXBeDnfu7niAge+tCHsrW1xTOe8QzuvfdeXuVVXgWAw8NDHvawhwFwcHDA5uYmD/RiL/Zir/UP//APv81VV1111VVXXfX/EeX48eNcddVVV1111VX/P73iK77iW0fESx8/fpwHP/jBAHzv934vr/iKrwjAn/zJn/DSL/3SAPzN3/wN6/WaRz3qUQA8/elPJzM5ceIE1157LU972tMYhoHt7W1e+qVfmtOnT7O/v8+5c+cYhoHt7W1uv/12XvVVXxWAu+++G4BhGHjCE57A3/3d3/G6r/u63HDDDTzxiU/kfsMw8PSnP50//dM/5eabb+ZlXuZl6Pueu+66i/sNw4Akaq385m/+JseO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/j4Ad911F3fffTdPfOITuZ8knp/t7W2uv/56brjhBra2tvirv/orbrnlFl7iJV4CgP39fe6++27uvvtu9vf3ufvuu/mXSOJfY2trC4Dt7W22t7d5oK2tLba3t3luW1tbPNDBwQEABwcHbG1tAXBwcMD9Dg4OANjf3wfg8PCQg4MD/rUk8cJsbW3x8Ic/HICXfumXBuDg4IALFy5w22238dIv/dI85SlP4d577+Wee+7hhZEEwNbWFi/1Ui/Fwx72MA4ODtja2uLg4ICnPvWp/M3f/A3PTRIAW1tbvOqrvirXXnstt912GydPnuQP//APuffee3luW1tbvMEbvAEAP/MzP8NLvMRL8Ld/+7c80LXXXssbvMEbcOnSJVarFb/+67/OA73+678+1157LYeHh/z0T/8093v91399rr32Wr7/+7+fiADgJV7iJXiJl3gJDg8P+Zmf+RmuueYaXv/1X5+//du/5e///u95vdd7Pa699lr++I//mFd+5Vfmgd7u7d5OXHXVVVddddVV/1+hBz3oQVx11VVXXXXVVf9/feVXfqUf9KAH8bu/+7u85mu+Jo9//OMZx5GXfMmX5Kd+6qfY3t7m9V//9dnb2+N7v/d72dvb483f/M15yEMewm/8xm9w5513sr29zXu+53sC8Kd/+qf82Z/9GQDb29u8zdu8Ddvb2+zv7/N93/d93G97e5tHP/rRrFYrXvqlX5onPOEJ/Pmf/zkPtL29zd7eHm/+5m/OiRMneMITnsCf//mfAyCJ+21vb/OoRz2KP/uzP+PN3uzNuOWWW3jiE5/IE5/4RO666y4AJPHcbrjhBh75yEfylKc8hVtuuYWXeImXYH9/nyc+8Yncfffd3H333bwotre3uf7667nhhht45CMfCcDf/d3f8eAHP5jt7W329/cBuPvuu7n77rvZ39/n7rvv5n6S+LeQxL+FJP4tJPFvIYn7bW1tcd1117G1tcV1113HddddB8DBwQEXLlzglltu4eDggHvuuYeDgwOe+tSncnBwwItia2uLhz/84bzUS70UAJcuXeL3f//3ebmXezme+tSn8tSnPpXnRxJbW1u85Eu+JA972MO4dOkSP/ADP8Crvdqr8bd/+7c8Py/1Ui/FS77kS3LbbbfxAz/wA7z8y7889957Lw/00Ic+lFd91VflGc94BvP5nF//9V/ngV7/9V+f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9loAfv3Xf517772X+73+678+1157LT//8z/PfD7nvvvuA+D1Xu/1uPbaa/n+7/9+IgKA13u91+Paa6/l67/+6zl16hSv93qvxzXXXMPf//3fc80113DNNdfw9V//9fzWb/2WuOqqq6666qqrrroCPehBD+Kqq6666qqrrrrqftdcc82DP+dzPue3rrnmmgf/+q//Osvlkrd4i7fg8Y9/PH/2Z39GRPDu7/7uPOEJT+A3fuM32N7eJiJ493d/d57whCfwm7/5mwBsb28TEbzlW74lAN/3fd/H/ba3t9nf3+fd3u3diAie8IQn8Od//uc80O7uLi/xEi/Ba7zGaxARPPGJT+TP//zPeW7b29vs7e1xyy238Jqv+ZoAPPGJT+RJT3oS+/v7PD/b29tcf/31POEJT+CWW27hJV7iJbjlllvY39/nSU96EnfddRd33303/xJJbG9vc/3113P99dfzyEc+kl/8xV/k5ptv5vTp01x//fXs7+8DcPfdd3P33XdzcHDA3Xffzb+GJP4tJPFvIYl/LUm8KLa2tgB4+MMfDsB1113HddddB8DBwQF//dd/DcBLv/RLc88993BwcMBTn/pUDg4OuJ8kXpCtrS0e9rCH8bCHPYytrS0uXbrE3/3d3/H7v//7vMmbvAl/+7d/ywuytbXFQx/6UF7qpV6Kg4MD/vqv/5rf//3f51GPehSHh4c8t5d8yZfkJV/yJTk4OOBnfuZnuO2227jlllt4oGuvvZbXf/3X59KlS/z8z/88t912G7fccgv3e/3Xf32uvfZavv/7v5/rrruO++67D4DXe73X49prr+X7v//7ue6667jvvvt4vdd7Pa699lq+//u/n1IKL/7iL85LvMRL8P3f//08/OEP55Vf+ZUBeLu3eztx1VVXXXXVVVdd9WyU48ePc9VVV1111VVXXXW/w8PD3aOjo0vXXnvtWz/iEY/gL//yLzlx4gTXXnstd911F6vVipd6qZfi9OnTADz96U+n73te6qVeitOnTwNw1113MQwDfd/zZ3/2Z7zUS70UL/VSL8XTn/50hmFgGAZ2dnb48z//c2zzKq/yKgDcdddd3G8+n2MbSTzkIQ/hhhtu4FGPehTnz59nf3+f+w3DgCRss729zQ033MD29jaPetSjOHXqFMMwsL+/zwMNw8D58+eRhG3m8zk/8zM/g21e7MVejJd4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GQDb29vs7+/zEi/xErzGa7wGf/Znf8af//mfc7/t7W329vZ4iZd4CV7jNV6D/f19fuZnfoaDgwMeaHt7m0c96lGsVite6qVeCoAnPvGJ/Pmf/zkAknig7e1tHvnIR/KoRz2Kv/mbv+HVX/3V2d/f5+677+aJT3wid999Ny/M9vY2W1tb3HDDDVx//fX89V//NS/+4i/OLbfcAsD+/j533303d999N0960pN4QSTxotja2gLg+uuvB+Av/uIvADh27BhbW1vceOONHDt2DIBjx44BcOzYMQCOHTvGf6RLly4BcOnSJQAuXboEwKVLl7jzzjvZ29vj4OAAgNd5ndfh4OCAg4MD7rnnHv4lknhhtra2uO6669jc3OThD384W1tbHBwccOHCBW677TZe+qVfmqc+9ancc8893HvvvbwgkgDY2trioQ99KC/1Ui/FwcEBf/3Xf81Lv/RL89SnPpW//du/5YEkcb+XfMmX5CVf8iU5ODjgr//6r3nEIx7BH/7hH3J4eMgDbW1t8Sqv8ipce+21/N7v/R6///u/zy233MIDvcRLvAQv+ZIvyd/93d+xubnJH//xH3O/V37lV+ahD30oP//zP898Pue+++5jc3OTV37lV2Y+n7Ner/mN3/gNrrnmGl7v9V6P3/3d32UcR17iJV6Ca665hu///u/np37qp8RVV1111VVXXXXV80IPetCDuOqqq6666qqrrnp+zpw586A3f/M3v/XN3/zN+dM//VP29/c5c+YMD3nIQ/iN3/gN9vb2eL3Xez1uvPFG9vf3+emf/mn29/fZ3t7mxIkTvPmbvzlPeMIT+M3f/E3ud+nSJV791V+d13iN12B/f5+f+ZmfYX9/n/ttb2+zv7/Pm73Zm3HixAme+MQn8ud//uc8t+3tbfb29niJl3gJXv3VX539/X2e+MQn8hd/8Rc8P9vb29xwww08/vGP55ZbbuElXuIluOWWW9jf3+dJT3oST3rSk9jf3+dfsr29zQ033MDjH/94AF78xV+cW265hVtuuQWA/f197r77bu6++2729/e5++67AZDEv5Yknp+trS0Atre3sc329jYAW1tbAGxvb/Pctra2eH4ODg4AkATA/v4+9zs4OADg4OAAgIODAw4ODnggSfxrSeK5bW1t8bCHPQyAl37plwbg4OCACxcucNttt3H77bdz22238cZv/MY8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nj3Lq7/6q7O/v88Tn/hE/uIv/oLnZ3t7m0c+8pH82Z/9GS/xEi/Bq7/6q7O/v8/dd9/NE5/4RO6++25emO3tbba2tnjUox7F9vY2f/VXf8XNN9/MS7zESwCwv7/P3Xffzd13383+/j533303DySJf42trS0kcf311wPwl3/5lwDcdNNNbG1tceONNwJw7NgxAI4dO8axY8f4z3Lp0iXud+nSJS5dusTBwQGXLl3irrvu4uDgAIDXfM3X5J577gHgnnvu4fmRxItqa2uL6667jq2tLV7qpV6K+912223cdtttvPRLvzRPfepTueeee7j33nt5IEk8t62tLR760IfyUi/1UhwcHPDXf/3X/N3f/R2v+qqvyt/+7d8iiee2ubnJwx72MF7yJV+Sg4MD/vqv/5pHPOIR/OEf/iGHh4dI4n7XXnstr/Iqr8Lm5ia/93u/x+///u9zyy23cL/NzU1e5VVehWuvvZbf+73f4/d///d50IMeBMDm5iZv9VZvxaVLl6i18jM/8zMAvMqrvAoPechDAPiN3/gNAF7v9V6PZzzjGfzcz/3c+/zWb/3Wd3PVVVddddVVV131L0MPetCDuOqqq6666qqrrnpRve7rvq7f/d3fnYjgp37qp7jjjjt4jdd4DV7jNV6DP/uzP+PP/uzP2N7e5nVf93XZ2toiIvizP/sznvCEJyCJ3d1djh07xnu8x3sA8Od//uc84QlP4H7b29u81Vu9Fbfeeisv8RIvwROf+ET+/M//nP39fR5oe3ubvb09XuIlXoKXeqmXAuCJT3wif/EXf8Hzs729zQ033MATnvAEbrnlFl78xV+cW265hf39fZ70pCdx1113cffdd/OCSAJge3ub66+/nuuvv55HPvKRANx2223ccsstAOzv73P33Xdz9913c3BwwN13382/liRemK2tLe63tbXF9vY2kgDY2toCYGtri+fn4OCAra0t7ieJ++3v7/NABwcHHBwccL+DgwMODg6QxL+WJF6Qra0tAB72sIextbXFwx/+cAAODg64cOECt9xyCwcHBxwcHHDvvffy1Kc+lYODA14QSQBsbW3x0Ic+lIc97GFsbW1x6dIl/u7v/o7f//3f5zVf8zV56lOfCoAkHmhzc5OHPexhvORLviQHBwf89V//Nb//+7/Py73cy3HvvfcCIAmAzc1NHvrQh/KSL/mS3Hbb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+Iff5qqrrrrqqquuuupfBz3oQQ/iqquuuuqqq6666t/immuuefC7vuu7Pv01XuM1eMITnsBv/uZvsr29zXu8x3sAsL+/z/d93/cBsLOzw97eHu/2bu9GRPBnf/ZnPPGJTwRge3ub/f19XuIlXoJXf/VXZ39/n9/6rd/irrvu4n7b29s86lGP4s/+7M949Vd/dV7iJV6C/f19fvu3f5u77rqL57a9vc0jH/lI/uzP/oxXf/VX5yVe4iXY39/n7rvv5olPfCJ33303L8j29jZbW1s87nGP49ixY9xyyy28+Iu/OLfccgv7+/scHBxw1113cffdd3P33Xfz/Ejihdna2mJ7e5utrS2uv/56tre3Abj++uu539/93d9x7NgxTp48ydbWFs/t4OAAgP39fQAODg54oIODA/61tre3ud/W1hYAW1tbbG1t8dwODg4AuHDhArfddhuv/uqvzv0ODg44ODjgnnvuAeDee+/lnnvu4UUhiee2tbXFwx72MK677jquvfZaAC5dusTf/d3f8fd///dcunSJl3mZl+Hee+/lhdna2uKhD30oL/VSL8XBwQF//dd/zd/93d/xaq/2avzt3/4tz8/m5iav+qqvyrXXXsttt93GL/zCL/Bqr/Zq/N3f/R0PtLm5yRu8wRuwubnJ7/3e7/H7v//7POhBD+J+11xzDa//+q/PpUuX+Pmf/3muvfZa7rvvPgBe7/Vej2uvvRaA3/iN3+C+++7j9V7v9bjmmmv4/u//fp70pCe9zj/8wz/8NlddddVVV1111VX/euhBD3oQV1111VVXXXXVVf9W11xzzYPf7M3e7Olv/uZvzhOe8AR+8zd/k+3tbfb393mP93gPAH76p3+ag4MDtre32dvb4yVe4iV4jdd4Df7sz/6MP//zP+d+29vbvNVbvRW33norL/ESL8Gf//mf88QnPpH9/X3ut729ze23386xY8d4szd7M2655Rbuuusu/uIv/oK77rqL57a9vc3111/PE5/4RF78xV+cW265hVtuuYX9/X2e9KQn8Rd/8Rf8S3Z2dnjEIx7Bn/3Zn3Hs2DFe/MVfnNOnT3P99dezv7/PwcEBd999N3fddRd33303kvi3kATA1tYWW1tbSGJra4unPvWpANx4441sb2+ztbXFLbfcwv2OHTvGf7ZLly4BcOedd3Lp0iXuvPNODg4OODg44NVf/dU5ODjg4OCAe+65hweSxL/W9vY2AA972MO49tprue666wA4ODjgr//6r9nb2+Pv/u7veOM3fmPuuece7r33XiTxgmxtbfHQhz6Uhz3sYWxtbXFwcMBf//Vf8/u///u86Zu+KX/7t3/L87O5ucmrvuqrcu2113Lp0iV+4Rd+gdtuu42bb76ZB9rc3OShD30oL/mSL8ltt93Gz//8z3Pp0iVuueUWJAHwEi/xErzES7wEt912Gz/wAz/Agx70IAA2Nzd55Vd+Za699loODw/54z/+Y+677z5e7/Vej2uuuYbv//7v50lPetLr/MM//MNvc9VVV1111VVXXfVvgx70oAdx1VVXXXXVVVdd9e9x5syZB735m7/5rW/+5m/OE57wBH7zN3+T7e1t9vf3ebd3ezcigj/7sz/jiU98Itvb29x+++28+qu/Oq/xGq/B/v4+P/MzP8P+/j4AOzs7POpRj+LlX/7l2d/fB+CJT3wif/7nf84DbW9v86hHPYqXf/mX57bbbuOWW25hf3+fv/iLv+CJT3wiz8/29jaPetSj+LM/+zNe/MVfnFd/9Vdnf3+fu+++m7vuuosnPelJPDdJPND29jbXX389119/Pdvb2/zVX/0VN998M6dPn+b6669nf38fgLvvvpu7776bg4MD7r77bv4lkvjX2t7eBmBrawuA7e1t7re/v8/111/Pv9bBwQH3Ozg4AODg4IDDw0P+tSTxotja2uJhD3sYANdddx3XXXcdAAcHB/z1X/81AC/90i/NU5/6VO655x7uvfdeHkgSz21ra4uHPvShbG1t8bCHPYyDgwP++q//mr/7u7/jVV/1VXna057G4eEhz8+1117LS77kS3Lttddy6dIlSik87WlP4+/+7u94bi/xEi/BS77kS3J4eMjm5iZ/+7d/y9/93d8BIInNzU1e+ZVfmWuvvZbf+73f4/d///d50IMeBMA111zD67/+63Pp0iVqrfzsz/4sAK/3eq/HNddcw/d///fzpCc96XX+4R/+4be56qqrrrrqqquu+rdDD3rQg7jqqquuuuqqq67697rmmmse/GZv9mZPf/M3f3PuvPNOfuZnfobt7W329/d5iZd4CV76pV+aJz7xifzZn/0ZANvb2+zv7/Ou7/quRARPeMIT+PM//3MkAbC9vc3Lv/zLc/bsWV791V+d/f19/vzP/5wnPvGJ3E8S29vbPPKRj+TP/uzPePVXf3Ve4iVegv39fZ74xCfyF3/xFzyQJAC2t7e5/vrreeQjH8kNN9zA3/3d3/ESL/ES7O/vc/fdd3PXXXfxpCc9CUn8S7a3t7n++uvZ3t7m+uuv5/rrrwfgtttu45ZbbgFgf38fgLvvvpu7776bg4MD9vf3OTg4AEAS/xaS+NeSxL+FJP61JPFAW1tbbG1tce211wJw3XXXcd111wFwcHDAhQsXuOWWWwA4ODjgqU99Kvfccw/33nsvL4wkALa2tnjoQx/K1tYWD3vYwwD4u7/7O17iJV6Cg4MDnvrUp/K3f/u3SOL5ecmXfEke+tCHsrW1xaVLl/iFX/gFXvzFX5y//du/BUAS97v22mt5lVd5FTY3N/n93/99HvGIR/BHf/RHHB4ecr+XfMmX5CVe4iW4dOkSP//zP89tt93Ggx70IAAe+tCH8sqv/Mrcdttt/MAP/AAPfvCDAXi913s9rrnmGr7/+7+fJz3pSa/zD//wD7/NVVddddVVV1111b8PetCDHsRVV1111VVXXXXVf4RrrrnmwZ/zOZ/zW9dcc82D9/f3+emf/mkA9vf3eYmXeAle4zVegz/7sz/jz//8zwHY3t5mf3+fl3iJl+DVX/3V2d/f52d/9mfZ39/nfjfccAN33nknL/ESL8Grv/qrs7+/z2/91m9x1113IYn7bW9v88hHPpJHPepRbG9vA7C/v88Tn/hEnvSkJ7G/v48kntv29jbXX389T3jCE7j55pu55ZZbeImXeAn29/c5ODjgSU96Evv7+9x99928KLa3t9ne3mZra4s//uM/5tixY9xyyy3s7Oxwyy230HUd119/PQD7+/sA3HPPPezv73NwcMDBwQH7+/scHBzwwkji30IS/1qSeFFtbW0BcP3117O5ucn29jabm5tcd9113O/g4IALFy5w2223cfvtt3PbbbcB8MZv/Mbcc8893Hvvvbyotre3eehDH8p1113Htddey8HBARcuXOC2227jD/7gD3jjN35j/vZv/5YHksT9Njc3edjDHsZLvuRLcr+DgwOe9rSn8bd/+7fcTxIAm5ubvMqrvArXXnstt912G7/wC7/AIx7xCO69917ut7m5yau8yqtw7bXX8nu/93v8/u//Pg960IO43+u93utx7bXX8nd/93f8/M//PA960IPY2trilV/5ldnc3OTw8PDWr//6r3+ff/iHf/htrrrqqquuuuqqq/790IMe9CCuuuqqq6666qqr/qNcc801D36Jl3iJp7/He7wHAD/90z/NwcEBu7u7vMRLvARv/uZvzv7+Pj/zMz/D/v4+AJcuXeLYsWO867u+KxHBE5/4RP78z/+c+21vb/OoRz2KP/uzP+PVX/3VeYmXeAme+MQn8qQnPYm77rqLB9re3uaGG27gkY98JE972tN4qZd6KQDuvvtu7rrrLp70pCfxgmxvb3P99dfzyEc+kr/+67/m5ptv5iVe4iUA2N/f5+677+ZJT3oSd999Ny+IJJ7b1tYW29vbbG1tcf311/Obv/mbHDt2jGPHjrGzs8OxY8c4ffo0119/Pfc7ODgAYH9/n4ODAwDuvvtuAA4ODgA4ODjg4OCAF5Uk/i22t7e539bWFltbW2xtbQGwtbXF1tYWW1tbbG1tcb+DgwNaa9x2221cunSJvb09Ll26xG233cYbvdEbAXDvvfdyzz33cD9JvCiuvfZarrvuOh72sIextbXFwcEBf/3Xf83e3h6v+ZqvyVOf+lT+9m//lhdEEpubm7zkS74kD3vYwzg4OOCv//qveemXfmme9rSn8bd/+7c8t62tLV7yJV+Shz70odx22238/u//Pi/+4i/O3/3d3/FAL/ESL8FLvuRLcunSJX7+53+e2267jQc96EEAbG5u8sqv/MpsbW3x0z/909x222086EEPYmtri9d7vddjmibW6/WtX//1X/8+//AP//DbXHXVVVddddVVV/3HQA960IO46qqrrrrqqquu+o90zTXXPPglXuIlnv5u7/ZuRAR/9md/xhOf+ES2t7fZ29vjzd/8zTlx4gRPeMIT+PM//3MAtre3efSjH81qteLVX/3V2d/f58///M954hOfyP22t7d51KMexcu//Mtz2223ccstt/DEJz6RJz3pSdx11108t+3tbW6//XZe/MVfnFtuuYWXeImXYH9/nyc96Uncdddd3H333bwg29vb3HDDDVx//fX85m/+Ji/+4i/OLbfcwi233MLBwQH7+/vcdddd3H333dx9990ASOJfY2tri52dHba2trj++usB2Nra4vrrr+cHf/AHOX78ODfffDMAx44do+s6tre32dra4rkdHBxwv4ODA2xzv4ODAwAk8dy2trZ4bltbWwBsbW3x/BwcHABw4cIF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bG5u8sqv/Mpce+21/N7v/R6///u/z5//+Z+Lq6666qqrrrrqqv8a6EEPehBXXXXVVVddddVV/5Ve4RVewceOHePd3/3dAXjiE5/In//5nwOwvb3NW77lW/I3f/M3vPqrvzpPfOIT+fM//3P29/e536Mf/Wge+chH8rSnPY1Xf/VXZ39/nyc+8Yn8xV/8Bc9tZ2eHRz7ykVx//fU87WlP46Ve6qUAODg44IlPfCJPetKTeCBJ3G97e5utrS3+4R/+gWPHjnHLLbdw88038xIv8RIA7O/vc/fdd3P33XdzcHDA3XffzYtKEvfb2toC4Prrrwfg+uuv5zd+4zeQxM7ODseOHQPg2LFjHDt2jJ2dHQBOnjwJwNbWFv+ZDg4OALhw4QIAt99+O/e7dOkSly5dYm9vj0uXLvGGb/iGABweHnJwcMA999zDCyKJF2Zra4uHPexhXHvttVx33XUAHBwc8Nd//dcA/MEf/AEAL/MyL8O9997LC7K1tcXDHvYwrr32Wq699loODg7467/+a176pV+apz3tafzt3/4tz21ra4uHPvShvORLviSHh4f81V/9FS/zMi/D3/7t3/K0pz2N+21ubvIqr/IqXHvttdx2222cOnWKP/qjP+K+++4D4JprruH1X//1uXTpEj//8z/Pbbfdxp//+Z+Lq6666qqrrrrqqv866EEPehBXXXXVVVddddVV/9WuueaaB7/kS77k01/iJV6CV3/1V+eJT3wif/7nf87+/j7b29s86lGP4s/+7M9413d9VyKCJz7xiTzxiU/k4OCA+z3ykY/kCU94Ai/xEi/Bq7/6q7O/v8+TnvQknvjEJ7K/vw+AJAC2t7fZ2trizjvv5NixY7z4i784L/ESL8H+/j533303d911F0960pOQxAuyvb3N9ddfz/XXX8/29jZ/9Vd/xc0338yDH/xgtre32d/f5+DggP39fe6++24ODg64++67eW6S+NfY2toCYHt7m+3tbe63tbXF1tYWAFtbW9xve3ub+21tbfGiODg44IEODg4AODg4AODg4ACAg4MDDg4OADg4OODg4AAASfxrSeJ+W1tbXHvttWxtbXHttddy3XXXAXBwcMDTn/50Ll26xEu/9Evz1Kc+FYC//du/5V9y7bXXct111/GSL/mSHBwccOHCBf7gD/6A2267jdd4jdfgaU97Gs9tc3OThz3sYbzkS74kh4eH/NVf/RW///u/z2u91mvxtKc9jfttbm7y0Ic+lJd8yZfk0qVL/P7v/z633HILf/d3fwfA5uYmr/zKr8y1117L3/3d3/HzP//z/Pmf/7m46qqrrrrqqquu+q+HHvSgB3HVVVddddVVV1313+Ud3/EdP+ud3umdPvvSpUtEBE984hP58z//c+738i//8qxWK17qpV4KgCc+8Yn8xV/8BQ+0vb3Ny73cy/GoRz2KS5cucezYMZ74xCfypCc9ibvvvpvntr29zfXXX88TnvAEbrnlFl78xV+cW265hYODA+666y7uvvtunvSkJ/Ev2d7e5vrrr+f6669ne3ub66+/nr/7u7/j2LFj3HLLLQDs7+9zcHDA/v4+d999NwcHB9xzzz38a0niX0sS/1qS+LeQxItia2sLgIc97GFI4tprr+W6667jfrfddhu33XYbr/7qr87BwQFPfepTAfibv/kbJPHCbG1t8dCHPpStrS0e9rCHAXDp0iX+7u/+jj/4gz/gTd7kTfjbv/1bnp/NzU1e8iVfkoc97GFcunSJY8eOcXh4yB/90R9x7733cr/NzU0e+tCH8pIv+ZIcHh7yV3/1Vxw7doy/+7u/434v8RIvwUu8xEtweHjIT//0T3Pbbbfx53/+5+Kqq6666qqrrrrqvwd60IMexFVXXXXVVVddddV/p2uuuebBr/3ar/1eN95442e/+qu/Ovv7+/zWb/0Wd911FwDb29vs7e3xEi/xErz6q786+/v7PPGJT+Qv/uIveKDt7W0e+chHct999/HiL/7i3HLLLezv7/OkJz2Jv/iLv+D52d7e5vrrr+eRj3wkf/VXf8Utt9zCS7zES7C/v8/BwQF33303d911F3fffTfPjyTut7W1xfb2NltbWzzhCU/ANrfccgu33HILOzs7nDhxgu3tbQAODg7Y39/n4OCAu+++m4ODAwDuvvtunh9J/GtJ4l9LEv9aknhuW1tbbG1tce211wJw3XXXcd1113G/g4MDLly4wG233cbtt9+ObW6//Xbe+I3fmHvuuYd7772X5yaJ57a1tcVDH/pQrrvuOq699loODg64cOECt912Gy/90i/N0572NP72b/+W52dzc5OHPexhPPShD2Vra4tLly7x+7//+9x888087WlP4/DwkAd6iZd4CV7yJV+Sw8ND/uqv/orf//3f5zGPeQyHh4cAbG5u8sqv/Mpce+21/P7v/z6///u/z5/92Z+Jq6666qqrrrrqqv9e6EEPehBXXXXVVVddddVV/xO8zuu8znu/4zu+42fNZrMHRwRPfOIT+fM//3Put729zeu8zuvwtKc9jVd/9Vdnf3+fJz7xifzFX/wFD7S9vc3tt9/OsWPHePEXf3Fe/dVfnf39fe6++26e+MQncvfdd/P8bG9vc8MNN/DIRz6S66+/nr/7u7/j9OnTXH/99ezv73P33Xdz991386QnPQkASfxLtra22N7eZmtriz/5kz9hZ2eHY8eOcezYMW655RZ2dnY4efIkW1tb3O/g4ACAu+++G4B77rkHgP39fQAODg44ODjghZHEv4UkXpitrS0Atra22NraYmtrC4CtrS22t7e59tpreaCDgwMuXLjAbbfdBsDtt9/ObbfdBsAbv/Ebc88993DvvffyL5EEwNbWFtdeey2bm5u81Eu9FAAHBwf89V//Na/+6q/OwcEBT33qU/nbv/1bJPH8bG5u8rCHPYyXfMmX5ODggL/+67/m7//+79nd3eXmm2/mgTY3N3noQx/KS77kS3J4eMhf/dVf8TIv8zL80R/9Effeey+S2Nzc5KEPfSgv8RIvwaVLl1iv17f+6I/+6Of81m/91ndz1VVXXXXVVVdd9d8PPehBD+Kqq6666qqrrrrqf4prrrnmwa/92q/9XjfeeONnv/qrvzr7+/s88YlP5M///M+RBMD29jav/dqvzdOe9jRe/dVfnf39fZ74xCfypCc9if39fe63s7PD9ddfzw033MBTnvIUXvzFX5xbbrmF/f19nvSkJ3HXXXdx9913cz9J3G97e5vrr7+exz/+8QDccsstvPiLvzi33HILAPv7+9x9993cfffdPPnJT+ZFJQmAra0ttre32dra4vrrr2dra4vt7W22trb4xV/8RY4dO8axY8fY2dmh6zquv/56ntvBwQH329/fB+Dg4AAASdxvf3+ff8n29jYPtLW1BcDW1hYAW1tbPLeDgwMALly4wO233w7ApUuXeNM3fVMODg44ODjgnnvuAeDee+/l4OCAg4MDJPGi2tra4tprr2Vra4vrrruOa6+9FoBLly7xd3/3d9x+++3cdtttvPEbvzF/+7d/y/0k8UCbm5s87GEP4yVf8iUBuHTpEn/3d3/HS7/0S/O3f/u3PO1pT0MS99vc3OShD30oL/mSL8nh4SF/9Vd/xcu8zMvwR3/0R9x7770ASOIlXuIleImXeAkODw/57d/+bQ4ODj77R3/0Rz+Hq6666qqrrrrqqv850IMe9CCuuuqqq6666qqr/qe55pprHvySL/mST3+Jl3gJXv3VX539/X2e+MQn8hd/8Rfcb3t7m729PV78xV+cl3qplwLg7rvv5olPfCJ33303D7S9vc0jH/lIrr/+em644QZuu+02brnlFvb393nSk57E3Xffzd13380Lsr29zfXXX88jH/lIrr/+en7/93+fW265hVtuuQWAg4MD7rrrLu6++24ODg64++67eX4k8S/Z2tpia2uL7e1tAJ72tKcBsLW1RSmF6667jhtvvJFjx45xv2PHjvGf5dKlSwBcunSJu+66i0uXLnFwcMDBwQEHBwe82qu9GoeHh+zv73PvvffyL5HEC7K1tcXDHvYwAF7qpV6K+126dIm/+7u/49Vf/dW59957ueeee7j33nu59957eX4ksbm5ycMe9jAe+tCHsrW1xcHBAVtbWxwcHPC0pz2Nv/3bv+WBJLG5uclDH/pQXvIlX5LDw0P+6q/+it///d/n5V/+5bn33nu530Mf+lBe8iVfks3NTX7/93+f3//93+cZz3jGQ+67775bueqqq6666qqrrvqfBT3oQQ/iqquuuuqqq6666n+qF3uxF3vt66+//rde4iVegld/9Vdnf3+fv/iLv+CJT3wi99ve3ublXu7leOpTn8qLv/iLc8stt7C/v89f/MVf8KQnPYnntr29zSMf+Uj+7M/+jBd/8RfnoQ99KDfccAMHBwc88YlP5O677+buu+/mBdna2mJ7e5sbbriB66+/nuuvvx6A2267jRMnTrC9vc3+/j6SuOuuu7j77rs5ODjgnnvu4V9LEi/I1tYW99va2gJge3ub57a1tcW/5PDwkAc6ODgA4ODgAICDgwOemyT+tSQBsLW1BcDDHvYwAK677jquvfZaAA4ODrhw4QK33HILBwcHHB4ecs8993Dvvfdy77338sJsbW3xsIc9jIc97GFsbm5ycHDAX//1X3P77bfzYi/2Yjz1qU/l8PCQ5/awhz2Ml3zJl2Rzc5NLly7xd3/3d9xwww387d/+LYeHh9zv2muv5VVe5VXY3Nzk93//9/m7v/s77r777tf5h3/4h9/mqquuuuqqq666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OOBfQxLPbWtri83NTa677jquu+46rr32Wu536dIljh07BsDBwQFPfepTAfjbv/1bXhBJXHvttVx77bW85Eu+JACXLl3i7/7u7/j7v/97XvVVX5WnPvWpHB4ecj9JbG5u8pIv+ZI89KEP5fDwkL/6q7/ixIkTv/1bv/Vb3/Nbv/Vb381VV1111VVXXXXV/27oQQ96EFddddVVV1111VX/V5w5c+ZBL/3SL33rLbfcwou/+Itzyy23sL+/z5Oe9CSe9KQnsb+/zwPt7OzwiEc8gj/7sz/jxV/8xbnlllu45ZZb2N/f5+677+buu+9mf3+fu+++GwBJPLetrS2uv/56rr/+en7rt36LnZ0djh07xi233MKpU6e4/vrrATg4OODg4ID9/X3uvvtuDg4OALj77rt5bpL415LEv5Yk/jUk8a+1vb3N5uYm1113HQDXXXcd1157Lfc7ODjg6U9/OpcuXeL222/ntttu443f+I259957uffee3lhtra2eOhDH8p1113HtddeC8ClS5f4u7/7O/7+7/+eV33VV+WpT30qh4eHPNDm5iYPe9jDeNjDHsbm5iaXLl3i7/7u7/iDP/gDnv70pz/47Nmzz+Cqq6666qqrrrrq/wb0oAc9iKuuuuqqq6666qr/a6655poHv/Zrv/Z7vc7rvM57P+lJT3rwS73USwGwv7/Pk570JJ70pCcBIIn7bW1t8chHPpIbbriBv/qrv+Lmm2/mJV7iJQDY39/n7rvv5u677+bJT34y/5KtrS2uv/56rr/+era3t/nZn/1Zbr75Zm655RYATp06xfXXX8/9Dg4O2N/f5+DggIODAw4ODtjf3+fg4ICDgwP+JZL415LEv5YkHmhrawuAra0ttra22NzcBOC6665ja2uLra0t7ndwcMCFCxe4/fbbAbjtttt4ndd5He69914A7rnnHu69914k8YJsbW2xubnJtddey8Me9jC2trY4ODjg6U9/OpcuXeKlX/qledrTnsZTn/pUDg8PeW4v+ZIvyebmJg972MM4PDzkr/7qr3jkIx9562/91m9994/+6I9+DlddddVVV1111VX/96AHPehBXHXVVVddddVVV/1f9mIv9mKvdcMNN/z2Lbfcws0338xLvMRLsL+/z913383dd9/Nk570JJ7b9vY2119/PY9//OMBePEXf3FuueUWbrnlFgD29/e5++67ufvuu3nyk5/MCyKJ+21tbbG1tcX29jbXX389W1tbbG9vs7W1xf3+/u//ngc/+MFsbW3xQAcHBwDs7+8DcHBwAMDBwQEHBwfc7+DggPsdHBzwwkjigba2trjf1tYWAFtbW9xva2uLra0tALa2ttja2uKBDg4OALhw4QK33HIL9zs4OODg4IB7770XgHvuuYd7772XF0QS99va2mJzc5Nrr72W6667jmuvvRaAS5cu8Xd/93fcfvvt3HbbbbzJm7wJf/u3f8vzs7m5ycMe9jBe8iVfEoDbbruNP/iDP+C2225jc3PzvX/rt37re7jqqquuuuqqq676vws96EEP4qqrrrrqqquuuur/g2uuuebBL/ZiL/batdbvuvnmm3mJl3gJbrnlFvb397n77ru5++67edKTnsRz297eBuARj3gEN9xwA3/1V3/FLbfcws7ODrfccgsABwcH3HXXXdx9990cHBxw9913AyCJf8nW1hYA29vbbG1t8ad/+qcAHDt2DIAbb7yRY8eOAXDs2DF2dnYAOHbsGMeOHeO/wqVLl7h06RIAe3t7AFy6dIlLly5x1113cenSJe73eq/3etx7770cHBxweHjIv8bW1hYPe9jDAHipl3op7nfp0iX+7u/+jkuXLvFar/VaPPWpT+Xee+/l3nvvRRLP7dprr+Xaa6/lJV/yJQG4dOkSf/d3f8cf/MEf8OAHP/izf/RHf/RzuOqqq6666qqrrvr/AT3oQQ/iqquuuuqqq6666v+bM2fOPOh1Xud13vvFX/zFX/sZz3jGa7/4i784t9xyC/v7+9x9993cfffdPOlJT+KBJAGwtbXF9vY2119/Pddffz3XX389ALfddhu33HILAPv7+0ji7rvv5u677+bg4IC7776bf4kknp+trS0Atra2ANje3gZga2uL7e1t7re1tcXBwQFbW1tsbW3xr3FwcMD9Dg4OADg4OOB+h4eHHBwcAHBwcMDBwQEvjCRekK2tLQAe9rCHAXDddddx7bXXAnBwcMCFCxe45ZZbODg4AOCpT30q9957L/feey8PJAmAzc1NHvawh7G5ucnDHvYwAC5dusTf/d3f8chHPvLW3/qt3/ru3/qt3/rus2fPPoOrrrrqqquuuuqq/1/Qgx70IK666qqrrrrqqqv+P7vmmmse/OAHP/jpx44d45ZbbuHFX/zFueWWWwA4ODjgiU98InfffTf33HMPz8/W1hYA119/PX/yJ3/CsWPHuPnmmwF48Rd/cU6ePMnW1hYABwcH7O/vc3BwwN13383BwQH7+/scHBwAIIl/LUn8a0jiX0sS/1qS2NraYnNzk+uuuw6Aa6+9luuuu477HRwccOHCBW6//XYuXbrE3//93wPwRm/0Rtx7773ce++9vCBbW1s87GEP49prr+Xaa6/l4OCACxcucNttt/EHf/AHANx6660Pue+++27lqquuuuqqq6666v8v9KAHPYirrrrqqquuuuqqq6645pprHvxiL/Zir11r/a5jx47x4i/+4pw+fZrrr7+e/f197r77bu6++24ODg64++67eUG2trbY3t5me3ub66+/nt/8zd9kZ2eHY8eOccstt7Czs8PJkyfZ2toC4ODgAID9/X0ODg44ODjg4OCA/f19AA4ODjg4OOC5SeJfSxL/WpJ4bltbWwBsbW2xtbXF5uYmW1tbbG1tsbW1xdbWFvc7ODjgwoUL3H777QDcdttt3H777bzRG70RAPfccw/33XcfL8zW1hYPfehDue6667j22msBODg44K//+q/Z29vj7/7u73jwgx/82T/6oz/6OVx11VVXXXXVVVdddT/0oAc9iKuuuuqqq6666qqrntc111zz4Bd7sRd7rRd7sRd77WuuuebBL/ZiL/baf/d3f8dLvMRLALC/v8/dd9/NwcEBd999N3fffTf3k8Tzs7W1xfb2NltbW1x//fVsbW2xvb3N1tYWAH//938PwM7ODrfccgvP7eDgAID9/X0ODg6QBMD+/j4ABwcHPNDBwQHPTRLPz9bWFvfb2triftvb22xubgKwtbXF1tYWz+3g4IDWGpcuXeL222/n1V7t1QA4ODjg4OCAe++9F4B77rmHe++9l+dHEg+0tbXFQx/6UK677jquvfZaAA4ODnj605/OS7zES3Dffffd+lu/9Vvf/Q//8A+//Q//8A+/w1VXXXXVVVddddVVzw960IMexFVXXXXVVVddddVV/7JrrrnmwS/2Yi/22kdHR9917Ngxbr75Zm655RZOnTrF9ddfz/7+PgB3330399xzDwcHB9x99928KLa2tpDE1tYWAE984hMBOHbsGABbW1vccMMNHD9+nJ2dHY4dO8b9jh07xn+mS5cuAXDp0iXud9ttt3F4eMilS5e46667uN9rv/Zrc++993J4eMjBwQEvqu3tbR760IcCcN1113HttdcCcHBwwNOf/nQuXbrE3//933Pp0iU2Nzff57d+67e+m6uuuuqqq6666qqrXhToQQ96EFddddVVV1111VVX/etdc801D36xF3ux136xF3ux17rmmmse/IxnPOO1jx07xs0338wtt9wCwMHBAQB33303d999NwcHB+zv73NwcMADSeJFsbW1BcDW1hbb29vcb2trC4Dt7W0eaGtrixfVwcEB9zs4OOB+BwcHHB4ecr977rmHF0YSL8jW1habm5tcd911AFx77bVcd9113O+2227j9ttv57bbbuP1Xu/1bv2t3/qt7wb40R/90c/hqquuuuqqq6666qp/C/SgBz2Iq6666qqrrrrqqqv+/a655poHnzlz5sHXXHPNg1/sxV7sta655poHv9iLvdhr//3f/z0AD37wg9na2gLg4OAAgLvvvhuAe+65h/39fQ4ODjg4OOBFIYl/DUn8a0niX2t7e5vNzU22trbY2tpia2uLzc1NrrvuOu53cHDArbfeyqVLl3i1V3s17rvvvlv/4R/+4bfvu+++W//hH/7hd/7hH/7ht7nqqquuuuqqq6666j8CetCDHsRVV1111VVXXXXVVf85rrnmmgcDvNiLvdhrHx0dfdfOzg6SuPnmmzl27BjHjh1jZ2eHW265hQc6ODhgf3+fg4MDAA4ODjg4OGB/fx+Aw8NDAA4ODnhRSeJfSxIAW1tbAGxtbQGwtbXF5uYmAFtbW2xtbXHdddfxQAcHB7TWuP3227l06RKXLl3i0qVL3H777QA86EEP+ux/+Id/+J1/+Id/+G2uuuqqq6666qqrrvrPgh70oAdx1VVXXXXVVVddddV/rWuuuebBAC/2Yi/22oBf7MVe7LWvueaaB//+7//+a998880AHDt2jGPHjrGzs0PXdWxvb7O1tcVzOzg44IEODg6438HBAS+Kra0tHmhrawuAra0tnp+DgwMALly4wN7eHpcuXQLgtttuA+AlX/Ilf/u+++679b777rv17Nmzz7jvvvtu/Yd/+Iff5qqrrrrqqquuuuqq/2roQQ96EFddddVVV1111VVX/c9y5syZB11zzTUPueaaax4McO+99z7ommuuefDDH/7wBwNcc801D374wx/+YIBjx47xn+nSpUucPXv21kuXLnHffffdeunSJc6ePXvrfffdd+uLv/iLc/bs2Wfcd999t953331PP3v27DO46qqrrrrqqquuuup/EvSgBz2Iq6666qqrrrrqqqv+97rmmmsezAOcOXPmQYAArrnmmgdzhQHxnAwI4L777ruVKwzo7NmztwLcd999t3LVVVddddVVV1111f9m6EEPehBXXXXVVVddddVVV1111VVXXXXVVVddddX/SVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9V/CN14alPszDNqQAAAABJRU5ErkJggg==) ```kcl -fn transform(i) { +fn transform(@i) { // Transform functions can return multiple transforms. They'll be applied in order. return [ { translate = [30 * i, 0, 0] }, diff --git a/docs/kcl/patternTransform2d.md b/docs/kcl/patternTransform2d.md index 0b4cb79b1..87e03a22d 100644 --- a/docs/kcl/patternTransform2d.md +++ b/docs/kcl/patternTransform2d.md @@ -10,11 +10,11 @@ Just like patternTransform, but works on 2D sketches not 3D solids. ```kcl patternTransform2d( - sketches: [[[Sketch](/docs/kcl/types/Sketch)]](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)), - instances: integer, + sketches: [Sketch], + instances: number, transform: FunctionSource, - useOriginal?: [bool](/docs/kcl/types/bool), -): [[[Sketch](/docs/kcl/types/Sketch)]](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)) + useOriginal?: bool, +): [Sketch] ``` @@ -22,21 +22,21 @@ patternTransform2d( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketches` | [`[Sketch]`](/docs/kcl/types/Sketch) | The sketch(es) to duplicate | Yes | -| `instances` | `integer` | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | +| `sketches` | [`[Sketch]`](/docs/kcl/types/std-types-Sketch) | The sketch(es) to duplicate | Yes | +| `instances` | [`number`](/docs/kcl/types/std-types-number) | The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect. | Yes | | `transform` | `FunctionSource` | How each replica should be transformed. The transform function takes a single parameter: an integer representing which number replication the transform is for. E.g. the first replica to be transformed will be passed the argument `1`. This simplifies your math: the transform function can rely on id `0` being the original instance passed into the `patternTransform`. See the examples. | Yes | -| `useOriginal` | [`bool`](/docs/kcl/types/bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | +| `useOriginal` | [`bool`](/docs/kcl/types/std-types-bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false. | No | ### Returns -[`[Sketch]`](/docs/kcl/types/Sketch) +[`[Sketch]`](/docs/kcl/types/std-types-Sketch) ### Examples ```kcl // Each instance will be shifted along the X axis. -fn transform(id) { +fn transform(@id) { return { translate = [4 * id, 0] } } diff --git a/docs/kcl/pi.md b/docs/kcl/pi.md deleted file mode 100644 index 9f96bbd79..000000000 --- a/docs/kcl/pi.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: "pi" -excerpt: "Return the value of `pi`. Archimedes’ constant (π)." -layout: manual ---- - -**WARNING:** This function is deprecated. - -Return the value of `pi`. Archimedes’ constant (π). - -**DEPRECATED** use the constant PI - -```js -pi(): number -``` - -### Tags - -* `math` - - - -### Returns - -[`number`](/docs/kcl/types/number) - - -### Examples - -```js -circumference = 70 - -exampleSketch = startSketchOn(XZ) - |> circle(center = [0, 0], radius = circumference / (2 * pi())) - -example = extrude(exampleSketch, length = 5) -``` - -![Rendered example of pi 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAE8jklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXfV/3jXXXPNgno/77rvvVq666qqrrrrqqquu+r+MylVXXXXVVVddddVV/6Ndc801Dz5z5syDAa655poHnzlz5kEA11xzzYOvueaaB/NMZ86ceTDANddc82D+He67775beaazZ8/eCnDffffdCnDffffdevbs2WcA3HfffbeePXv21vvuu+9Wrrrqqquuuuqqq676nwo96EEP4qqrrrrqqquuuuqq/x7XXHPNgwFe7MVe7LXPnDnzIIAXf/EXf22AF3uxF3ttXoDd3V0Adnd32d3d5X4XL17kue3u7vKiOH78OAAnTpzgfsePHwfg+PHjABw/fpzn57777rsV4OzZs7fed999t/7DP/zD7wDcd999t/7DP/zDb3PVVVddddVVV1111X8X9KAHPYirrrrqqquuuuqqq/5zXXPNNQ8+c+bMg1/sxV7stQBe/MVf/LVf7MVe7LV5Lru7u+zu7rK7u8vFixcBuPXWWwHY3d1ld3cXAEn8e9nm3+L48eMAHD9+nOPHjwPw4Ac/GIDjx49z4sQJjh8/zgPdd999t549e/bW++6779Z/+Id/+J377rvv1rNnz95633333cpVV1111VVXXXXVVf+Z0IMe9CCuuuqqq6666qqrrvqPc8011zz4xV7sxV77zJkzD3rxF3/x136xF3ux1+YBdnd32d3d5elPfzoAt956K7u7u+zu7nI/Sfx3s82/lm3ud/z4cY4fP86JEyd48IMfzPHjxzlx4gTHjx/nfvfdd9+tZ8+evfW+++679R/+4R9+57777rv1H/7hH36bq6666qqrrrrqqqv+o6AHPehBXHXVVVddddVVV131b3PNNdc8+MyZMw9+sRd7sdd68Rd/8dd+sRd7sdfmmXZ3d9nd3eXpT386ALfeeiu33norDySJ/01s869hm+d2/PhxAB7ykIfw4Ac/mOPHj/OQhzyE+9133323nj179tb77rvv1n/4h3/4nd/6rd/6bq666qqrrrrqqquu+rdCD3rQg7jqqquuuuqqq6666kVzzTXXPPi1X/u13wvgdV7ndd77mmuueTDA7u4uu7u7PP3pT+fWW2/l1ltv5fmRxH8kSfxr2OY/km1eFLZ5YWxz/PhxHvKQh/CQhzyE48eP85CHPIT73Xfffbf+wz/8w2//wz/8w+/cd999t/7DP/zDb3PVVVddddVVV1111YsCPehBD+Kqq6666qqrrrrqqufvmmuuefCLvdiLvfaZM2ce9E7v9E6fzTPt7u7y9Kc/nd3dXW699VZuvfVWXhBJ/FtI4r+Dbf6tbPMvsc0LY5v7HT9+nIc85CE85CEP4fjx4zzkIQ8B4L777rv1H/7hH377H/7hH37nt37rt76bq6666qqrrrrq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RxLPTRLPjySemySemySemyQeSBIPJInnJokHksQDSeJ+knggSdxPEg8kiftJ4oEkcT9J3E8S95MEgCTuJ4n7SQJAEveTBIAk7icJAEncTxIAkgCQBIAkACRxP0kASAJAEgCSAJCEJAAkASAJAEkASEISAJIAmM/nXHvttdxyyy080I/8yI989m//9m9/z3333XcrV1111VVXXXXVVf+zoAc96EFcddVVV1111VVX/U91zTXXPPi1X/u13+vFX/zFX/vFXuzFXptnuvPOO3n84x/P4x//eB5IEi+IJJ4fSTw/knhuknh+JPHcJPHcJPHcJPFAknggSTw3STyQJB5IEveTxANJ4n6SeCBJ3E8S95PE/SRxP0ncTxL3k8T9JHE/SQBI4n6SAJDE/SQBIAkASdxPEgCSAJAEgCQAJAEgCQBJAEgCQBIAkgCQBIAkACQhCQBJADzoQQ/i+PHjHDt2jPvdd999t/7Wb/3Wd//oj/7o53DVVVddddVVV131Pxd60IMexFVXXXXVVVddddX/Btdcc82D3/Ed3/GzXud1Xue9eaa9vT3uvPNOHv/4x3PnnXciiRdEEs+PJJ4fSTw/knhuknhuknhuknhuknggSTyQJJ6bJB5IEveTxANJ4oEkcT9JPJAk7ieJ+0nifpK4nyTuJ4n7SeJ+kgCQxP0kcT9JAEgCQBL3kwSAJO4nCQBJAEgCQBIAkgCQBIAkACQBIAkASQBIAkASkgCQxHw+57rrruNBD3oQD/QjP/Ijn/0P//APv/MP//APv81VV1111VVXXXXV/3zoQQ96EFddddVVV1111VX/m1xzzTUPfrEXe7HXfrEXe7HXfp3XeZ334pn29vZ4whOewJ133smdd97Jc5PE8yOJ50cSz48knpsknpsknpsknpskHkgSDySJ5yaJB5LE/STxQJJ4IEncTxIPJIn7SeJ+krifJO4niftJ4n6SuJ8kACRxP0kASOJ+kgCQxP0kASAJAEkASOJ+kgCQBIAkACQBIAkASQBIAkASkgCQBMBiseC6667jwQ9+MACr1Yr5fM59991362/91m9994/+6I9+DlddddVVV1111VX/u6AHPehBXHXVVVddddVVV/1vdc011zz4tV/7td/rdV7ndd77mmuueTDPtLe3xxOe8ATuvPNO7rzzTgAk8YJI4rlJ4vmRxHOTxHOTxHOTxHOT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HkgSDySJB5LE/STxQJK4nyQeSBL3k8T9JHE/SdxPEveTxP0kASCJ+0kCYGNjg62tLTY2Ntjc3GRjY4ONjQ3OnDnDC3Lffffd+g//8A+/fd999936D//wD7/zD//wD7/NVVddddVVV1111VX/FuhBD3oQV1111VVXXXXVVVf9x7jmmmseDPBiL/Zir/1iL/Zir3XNNdc8+MyZMw++5pprHswLcHBwgG0ODg7Y398H4J577uHg4ACA/f19Dg8PeSBJPJAk7ieJB5LE/STxQJK4nyTuJ4n7SeJ+krifJDY3NwHY3NzkmmuuAWBzc5PNzU02NjbY3NzkhbnvvvtuPXv27K1///d//9sA//AP//A7//AP//DbXHXVVVddddVVV131HwU96EEP4qqrrrrqqquuuuqq/1zXXHPNgwFe7MVe7LXOnDnz4GuuuebB11xzzYPPnDnz4GuuuebBvAgODg6438HBAQcHB9zv4OAAgIODAyRxv4ODAx5IEveTxP02NzeRBMDm5iaSuN/W1hYAm5ubAGxubrK5ucmL6r777rsV4B/+4R9++7777rv17Nmzt953333P+Id/+Iff5qqrrrrqqquuuuqq/2zoQQ96EFddddVVV1111VVX/fc5c+bMgyTpzJkzD77mmmsefObMmQddc801D77mmmseDHDmzJkHX3PNNQ++7777br3mmmsezP8g9913360AZ8+evfW+++679b777rsV4B/+4R9+5+zZs7fed999t3LVVVddddVVV1111X8n9KAHPYirrrrqqquuuuqqq/7nO3PmzIMkCeDMmTMPvuaaax4MGNCZM2ceBHDNNdc8mAe45pprHswLcd999916zTXXPPi+++67lWe67777buUBzp49eyug++6771aAs2fP3nrffffdylVXXXXVVVddddVV/xugBz3oQVx11VVXXXXVVVddddVVV1111VVXXXXVVf8nUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q/hHGC1SPkIqmNIAAAAASUVORK5CYII=) - - diff --git a/docs/kcl/polygon.md b/docs/kcl/polygon.md index 9db5c25b6..c2fd2d04a 100644 --- a/docs/kcl/polygon.md +++ b/docs/kcl/polygon.md @@ -10,12 +10,12 @@ Create a regular polygon with the specified number of sides that is either inscr ```kcl polygon( - sketchSurfaceOrGroup: [[Sketch](/docs/kcl/types/Sketch)OrSurface](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)OrSurface), - radius: [number](/docs/kcl/types/number), + sketchSurfaceOrGroup: Sketch | Plane | Face, + radius: number, numSides: u64, - center: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - inscribed?: [bool](/docs/kcl/types/bool), -): [Sketch](/docs/kcl/types/Sketch) + center: Point2d, + inscribed?: bool, +): Sketch ``` @@ -23,15 +23,15 @@ polygon( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketchSurfaceOrGroup` | [`SketchOrSurface`](/docs/kcl/types/SketchOrSurface) | Plane or surface to sketch on | Yes | -| `radius` | [`number`](/docs/kcl/types/number) | The radius of the polygon | Yes | +| `sketchSurfaceOrGroup` | [`Sketch`](/docs/kcl/types/std-types-Sketch) or [`Plane`](/docs/kcl/types/std-types-Plane) or [`Face`](/docs/kcl/types/std-types-Face) | Plane or surface to sketch on | Yes | +| `radius` | [`number`](/docs/kcl/types/std-types-number) | The radius of the polygon | Yes | | `numSides` | `u64` | The number of sides in the polygon | Yes | -| `center` | [`[number]`](/docs/kcl/types/number) | The center point of the polygon | Yes | -| `inscribed` | [`bool`](/docs/kcl/types/bool) | Whether the polygon is inscribed (true, the default) or circumscribed (false) about a circle with the specified radius | No | +| `center` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | The center point of the polygon | Yes | +| `inscribed` | [`bool`](/docs/kcl/types/std-types-bool) | Whether the polygon is inscribed (true, the default) or circumscribed (false) about a circle with the specified radius | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/pop.md b/docs/kcl/pop.md index 39e0f83f3..184bf1d39 100644 --- a/docs/kcl/pop.md +++ b/docs/kcl/pop.md @@ -9,7 +9,7 @@ Remove the last element from an array. Returns a new array with the last element removed. ```kcl -pop(array: [[[KclValue](/docs/kcl/types/KclValue)]](/docs/kcl/types/[KclValue](/docs/kcl/types/KclValue))): [KclValue](/docs/kcl/types/KclValue) +pop(array: [any]): any ``` @@ -17,11 +17,11 @@ pop(array: [[[KclValue](/docs/kcl/types/KclValue)]](/docs/kcl/types/[KclValue](/ | Name | Type | Description | Required | |----------|------|-------------|----------| -| `array` | [`[KclValue]`](/docs/kcl/types/KclValue) | The array to pop from. Must not be empty. | Yes | +| `array` | [`[any]`](/docs/kcl/types/std-types-any) | The array to pop from. Must not be empty. | Yes | ### Returns -[`KclValue`](/docs/kcl/types/KclValue) - Any KCL value. +[`any`](/docs/kcl/types/std-types-any) - Any KCL value. ### Examples diff --git a/docs/kcl/profileStart.md b/docs/kcl/profileStart.md index 7d9b17c8e..997d951c8 100644 --- a/docs/kcl/profileStart.md +++ b/docs/kcl/profileStart.md @@ -9,7 +9,7 @@ Extract the provided 2-dimensional sketch's profile's origin value. ```kcl -profileStart(profile: [Sketch](/docs/kcl/types/Sketch)): [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)) +profileStart(profile: Sketch): [number] ``` @@ -17,11 +17,11 @@ profileStart(profile: [Sketch](/docs/kcl/types/Sketch)): [[[number](/docs/kcl/ty | Name | Type | Description | Required | |----------|------|-------------|----------| -| `profile` | [`Sketch`](/docs/kcl/types/Sketch) | Profile whose start is being used | Yes | +| `profile` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Profile whose start is being used | Yes | ### Returns -[`[number]`](/docs/kcl/types/number) +[`[number]`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/profileStartX.md b/docs/kcl/profileStartX.md index a0cf57202..dcff89a53 100644 --- a/docs/kcl/profileStartX.md +++ b/docs/kcl/profileStartX.md @@ -9,7 +9,7 @@ Extract the provided 2-dimensional sketch's profile's origin's 'x' value. ```kcl -profileStartX(profile: [Sketch](/docs/kcl/types/Sketch)): [number](/docs/kcl/types/number) +profileStartX(profile: Sketch): number ``` @@ -17,11 +17,11 @@ profileStartX(profile: [Sketch](/docs/kcl/types/Sketch)): [number](/docs/kcl/typ | Name | Type | Description | Required | |----------|------|-------------|----------| -| `profile` | [`Sketch`](/docs/kcl/types/Sketch) | Profile whose start is being used | Yes | +| `profile` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Profile whose start is being used | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/profileStartY.md b/docs/kcl/profileStartY.md index 86bd57fa8..7c02b8243 100644 --- a/docs/kcl/profileStartY.md +++ b/docs/kcl/profileStartY.md @@ -9,7 +9,7 @@ Extract the provided 2-dimensional sketch's profile's origin's 'y' value. ```kcl -profileStartY(profile: [Sketch](/docs/kcl/types/Sketch)): [number](/docs/kcl/types/number) +profileStartY(profile: Sketch): number ``` @@ -17,11 +17,11 @@ profileStartY(profile: [Sketch](/docs/kcl/types/Sketch)): [number](/docs/kcl/typ | Name | Type | Description | Required | |----------|------|-------------|----------| -| `profile` | [`Sketch`](/docs/kcl/types/Sketch) | Profile whose start is being used | Yes | +| `profile` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Profile whose start is being used | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/push.md b/docs/kcl/push.md index 442a78cc5..19a1c64e0 100644 --- a/docs/kcl/push.md +++ b/docs/kcl/push.md @@ -10,9 +10,9 @@ Returns a new array with the element appended. ```kcl push( - array: [[[KclValue](/docs/kcl/types/KclValue)]](/docs/kcl/types/[KclValue](/docs/kcl/types/KclValue)), - item: [KclValue](/docs/kcl/types/KclValue), -): [KclValue](/docs/kcl/types/KclValue) + array: [any], + item: any, +): any ``` @@ -20,12 +20,12 @@ push( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `array` | [`[KclValue]`](/docs/kcl/types/KclValue) | The array which you're adding a new item to. | Yes | -| `item` | [`KclValue`](/docs/kcl/types/KclValue) | The new item to add to the array | Yes | +| `array` | [`[any]`](/docs/kcl/types/std-types-any) | The array which you're adding a new item to. | Yes | +| `item` | [`any`](/docs/kcl/types/std-types-any) | The new item to add to the array | Yes | ### Returns -[`KclValue`](/docs/kcl/types/KclValue) - Any KCL value. +[`any`](/docs/kcl/types/std-types-any) - Any KCL value. ### Examples diff --git a/docs/kcl/reduce.md b/docs/kcl/reduce.md index 64f131f36..b7dd42e1e 100644 --- a/docs/kcl/reduce.md +++ b/docs/kcl/reduce.md @@ -10,10 +10,10 @@ Take a starting value. Then, for each element of an array, calculate the next va ```kcl reduce( - array: [[[KclValue](/docs/kcl/types/KclValue)]](/docs/kcl/types/[KclValue](/docs/kcl/types/KclValue)), - initial: [KclValue](/docs/kcl/types/KclValue), + array: [any], + initial: any, f: FunctionSource, -): [KclValue](/docs/kcl/types/KclValue) +): any ``` @@ -21,13 +21,13 @@ reduce( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `array` | [`[KclValue]`](/docs/kcl/types/KclValue) | Each element of this array gets run through the function `f`, combined with the previous output from `f`, and then used for the next run. | Yes | -| `initial` | [`KclValue`](/docs/kcl/types/KclValue) | The first time `f` is run, it will be called with the first item of `array` and this initial starting value. | Yes | +| `array` | [`[any]`](/docs/kcl/types/std-types-any) | Each element of this array gets run through the function `f`, combined with the previous output from `f`, and then used for the next run. | Yes | +| `initial` | [`any`](/docs/kcl/types/std-types-any) | The first time `f` is run, it will be called with the first item of `array` and this initial starting value. | Yes | | `f` | `FunctionSource` | Run once per item in the input `array`. This function takes an item from the array, and the previous output from `f` (or `initial` on the very first run). The final time `f` is run, its output is returned as the final output from `reduce`. | Yes | ### Returns -[`KclValue`](/docs/kcl/types/KclValue) - Any KCL value. +[`any`](/docs/kcl/types/std-types-any) - Any KCL value. ### Examples @@ -41,7 +41,7 @@ fn add(a, b) { // This function adds an array of numbers. // It uses the `reduce` function, to call the `add` function on every // element of the `arr` parameter. The starting value is 0. -fn sum(arr) { +fn sum(@arr) { return reduce(arr, initial = 0, f = add) } @@ -91,7 +91,7 @@ assert( ```kcl // Declare a function that sketches a decagon. -fn decagon(radius) { +fn decagon(@radius) { // Each side of the decagon is turned this many radians from the previous angle. stepAngle = (1 / 10 * TAU): number(rad) diff --git a/docs/kcl/rotate.md b/docs/kcl/rotate.md index 922db39bd..e5f7be9a5 100644 --- a/docs/kcl/rotate.md +++ b/docs/kcl/rotate.md @@ -28,14 +28,14 @@ When rotating a part around an axis, you specify the axis of rotation and the an ```kcl rotate( - objects: [[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry), - roll?: [number](/docs/kcl/types/number), - pitch?: [number](/docs/kcl/types/number), - yaw?: [number](/docs/kcl/types/number), - axis?: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - angle?: [number](/docs/kcl/types/number), - global?: [bool](/docs/kcl/types/bool), -): [[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry) + objects: [Solid] | [Sketch] | ImportedGeometry, + roll?: number, + pitch?: number, + yaw?: number, + axis?: [number], + angle?: number, + global?: bool, +): [Solid] | [Sketch] | ImportedGeometry ``` @@ -43,17 +43,17 @@ rotate( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `objects` | [`SolidOrSketchOrImportedGeometry`](/docs/kcl/types/SolidOrSketchOrImportedGeometry) | The solid, sketch, or set of solids or sketches to rotate. | Yes | -| `roll` | [`number`](/docs/kcl/types/number) | The roll angle in degrees. Must be between -360 and 360. Default is 0 if not given. | No | -| `pitch` | [`number`](/docs/kcl/types/number) | The pitch angle in degrees. Must be between -360 and 360. Default is 0 if not given. | No | -| `yaw` | [`number`](/docs/kcl/types/number) | The yaw angle in degrees. Must be between -360 and 360. Default is 0 if not given. | No | -| `axis` | [`[number]`](/docs/kcl/types/number) | The axis to rotate around. Must be used with `angle`. | No | -| `angle` | [`number`](/docs/kcl/types/number) | The angle to rotate in degrees. Must be used with `axis`. Must be between -360 and 360. | No | -| `global` | [`bool`](/docs/kcl/types/bool) | If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move. | No | +| `objects` | [`[Solid]`](/docs/kcl/types/std-types-Solid) or [`[Sketch]`](/docs/kcl/types/std-types-Sketch) or [`ImportedGeometry`](/docs/kcl/types#ImportedGeometry) | The solid, sketch, or set of solids or sketches to rotate. | Yes | +| `roll` | [`number`](/docs/kcl/types/std-types-number) | The roll angle in degrees. Must be between -360 and 360. Default is 0 if not given. | No | +| `pitch` | [`number`](/docs/kcl/types/std-types-number) | The pitch angle in degrees. Must be between -360 and 360. Default is 0 if not given. | No | +| `yaw` | [`number`](/docs/kcl/types/std-types-number) | The yaw angle in degrees. Must be between -360 and 360. Default is 0 if not given. | No | +| `axis` | [`[number]`](/docs/kcl/types/std-types-number) | The axis to rotate around. Must be used with `angle`. | No | +| `angle` | [`number`](/docs/kcl/types/std-types-number) | The angle to rotate in degrees. Must be used with `axis`. Must be between -360 and 360. | No | +| `global` | [`bool`](/docs/kcl/types/std-types-bool) | If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move. | No | ### Returns -[`SolidOrSketchOrImportedGeometry`](/docs/kcl/types/SolidOrSketchOrImportedGeometry) - Data for a solid, sketch, or an imported geometry. +[`[Solid]`](/docs/kcl/types/std-types-Solid) or [`[Sketch]`](/docs/kcl/types/std-types-Sketch) or [`ImportedGeometry`](/docs/kcl/types#ImportedGeometry) - Data for a solid, sketch, or an imported geometry. ### Examples diff --git a/docs/kcl/scale.md b/docs/kcl/scale.md index 70671ef43..901a7424a 100644 --- a/docs/kcl/scale.md +++ b/docs/kcl/scale.md @@ -16,12 +16,12 @@ If you want to apply the transform in global space, set `global` to `true`. The ```kcl scale( - objects: [[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry), - x?: [number](/docs/kcl/types/number), - y?: [number](/docs/kcl/types/number), - z?: [number](/docs/kcl/types/number), - global?: [bool](/docs/kcl/types/bool), -): [[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry) + objects: [Solid] | [Sketch] | ImportedGeometry, + x?: number, + y?: number, + z?: number, + global?: bool, +): [Solid] | [Sketch] | ImportedGeometry ``` @@ -29,15 +29,15 @@ scale( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `objects` | [`SolidOrSketchOrImportedGeometry`](/docs/kcl/types/SolidOrSketchOrImportedGeometry) | The solid, sketch, or set of solids or sketches to scale. | Yes | -| `x` | [`number`](/docs/kcl/types/number) | The scale factor for the x axis. Default is 1 if not provided. | No | -| `y` | [`number`](/docs/kcl/types/number) | The scale factor for the y axis. Default is 1 if not provided. | No | -| `z` | [`number`](/docs/kcl/types/number) | The scale factor for the z axis. Default is 1 if not provided. | No | -| `global` | [`bool`](/docs/kcl/types/bool) | If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move. | No | +| `objects` | [`[Solid]`](/docs/kcl/types/std-types-Solid) or [`[Sketch]`](/docs/kcl/types/std-types-Sketch) or [`ImportedGeometry`](/docs/kcl/types#ImportedGeometry) | The solid, sketch, or set of solids or sketches to scale. | Yes | +| `x` | [`number`](/docs/kcl/types/std-types-number) | The scale factor for the x axis. Default is 1 if not provided. | No | +| `y` | [`number`](/docs/kcl/types/std-types-number) | The scale factor for the y axis. Default is 1 if not provided. | No | +| `z` | [`number`](/docs/kcl/types/std-types-number) | The scale factor for the z axis. Default is 1 if not provided. | No | +| `global` | [`bool`](/docs/kcl/types/std-types-bool) | If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move. | No | ### Returns -[`SolidOrSketchOrImportedGeometry`](/docs/kcl/types/SolidOrSketchOrImportedGeometry) - Data for a solid, sketch, or an imported geometry. +[`[Solid]`](/docs/kcl/types/std-types-Solid) or [`[Sketch]`](/docs/kcl/types/std-types-Sketch) or [`ImportedGeometry`](/docs/kcl/types#ImportedGeometry) - Data for a solid, sketch, or an imported geometry. ### Examples diff --git a/docs/kcl/segAng.md b/docs/kcl/segAng.md index c70a1a886..e9aef8b9b 100644 --- a/docs/kcl/segAng.md +++ b/docs/kcl/segAng.md @@ -9,7 +9,7 @@ Compute the angle (in degrees) of the provided line segment. ```kcl -segAng(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/kcl/types/number) +segAng(tag: TagIdentifier): number ``` @@ -17,11 +17,11 @@ segAng(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/kcl | Name | Type | Description | Required | |----------|------|-------------|----------| -| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The line segment being queried by its tag | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/segEnd.md b/docs/kcl/segEnd.md index f4c396042..29323fccd 100644 --- a/docs/kcl/segEnd.md +++ b/docs/kcl/segEnd.md @@ -9,7 +9,7 @@ Compute the ending point of the provided line segment. ```kcl -segEnd(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)) +segEnd(tag: TagIdentifier): Point2d ``` @@ -17,11 +17,11 @@ segEnd(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [[[number](/docs/k | Name | Type | Description | Required | |----------|------|-------------|----------| -| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The line segment being queried by its tag | Yes | ### Returns -[`[number]`](/docs/kcl/types/number) +[`Point2d`](/docs/kcl/types/std-types-Point2d) ### Examples @@ -44,10 +44,10 @@ fn cylinder(radius, tag) { |> extrude(length = radius) } -cylinder(1, line1) -cylinder(2, line2) -cylinder(3, line3) -cylinder(4, line4) +cylinder(radius = 1, tag = line1) +cylinder(radius = 2, tag = line2) +cylinder(radius = 3, tag = line3) +cylinder(radius = 4, tag = line4) ``` ![Rendered example of segEnd 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAEJnElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVf8G11xzzYNf7MVe7LW56qqrrnqAf/iHf/jt++6771auuuqqq6666qr/KahcddVVV1111VVX/Su92Iu92Gu/0zu9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gCQkIQlJAEhCEpKQhCQkIQlJSEISkpCEJCICSUQEkogIIoKIICKICCKCiKCUQimFiKCUQimFWiulFGqt1FoppVBrpdZKrZVaK7VWaq2UUqi1UkqhlEIphYggIogIJBERAEhib2+PYRhYr9fc77777rv1R3/0Rz/7t37rt76Hq6666qqrrrrqqquuuuo/A3rQgx7EVVddddVVV/1Pcs011zz4tV/7td/rdV7ndd77mmuueTDA7u4uP/MzP8MznvEMACQhCQBJ3E8SAJIAkMT9JAEgiftJ4n6SuJ8kJCEJSUhCEpKQhCQkIQlJAEhCEpKQhCQAJCEJSQBIQhKSkASAJCQhCUkASEISkpCEJCQhCUlIQhKSkIQkIgJJRASSiAgiAklEBKUUIoKIoJRCRFBKoZRCKYVaK6UUaq3UWimlUGul1kqtlVortVZqrZRSqLVSSqGUQimFiCAiiAgigszk6OiI/f197nfffffd+lu/9Vvf/du//dvfc999993KVVddddVVV1111VVXXfWfCT3oQQ/iqquuuuqqq/4nuuaaax782q/92u/1Tu/0Tp/NM+3u7vI7v/M7/O3f/i0AkgCQBIAkACQBIIn7SeJ+kgCQxP0kcT9JSEISkpCEJCQhCUlIQhIAkpCEJCQhCQBJSEISkgCQhCQkIQkASUhCEgCSkIQkJCEJSUhCEpKQhCQkIQlJRASSiAgkERFEBJKICCKCUgoRQSmFiKCUQimFUgq1Vkop1FoppVBrpdZKrZVaK7VWaq3UWimlUGullEIphVIKEQHAarVitVrRWuN+9913362/9Vu/9d0/+qM/+jlcddVVV1111VVXXXXVVf9V0IMe9CCuuuqqq6666n+yM2fOPOh1Xud13vt1Xud13vuaa655MMClS5f467/+a2677Tae8YxnIAkASQBI4n6SAJDE/SRxP0ncTxIAkpCEJCQhCUlIQhKSAJCEJCQhCUlIAkASkpCEJAAkIQlJSAJAEpKQhCQAJCEJSUhCEpKQhCQkIQlJSEISkogIJCGJiCAikEREEBFEBKUUIoKIoJRCKYVSCqUUSinUWqm1Ukqh1kqtlVortVZqrdRaqbVSa6WUQikFSUzTxDAMZCb3u++++279rd/6re/+7d/+7e+57777buWqq6666qqrrrrqqquu+q+GHvSgB3HVVVddddVV/xtcc801D36xF3ux136d13md93qxF3ux1+aZdnd3+b3f+z3+9m//FkncTxIAkrifJAAkcT9J3E8SAJKQhCQkIQlJSEISAJKQhCQkIQlJSAJAEpKQhCQAJCEJSUgCQBKSkASAJCQhCUlIQhKSAJCEJCICSUhCEpKICCQhiYggIpBERBARRAQRQSmFiKCUQimFUgqlFEop1FqptVJKodZKrZVaK7VWaq3UWqm1UkoBoLWGbe5333333fpbv/Vb3/0P//APv/0P//APv8NVV1111VVXXXXVVVdd9d8JPehBD+Kqq6666qqr/rc5c+bMg17ndV7nvd/pnd7ps3mmS5cu8YxnPIPbbruNv/3bv0USAJK4nyTuJ4n7SeJ+kgCQhCQkIQlJSEISkpCEJCQhCUlIAkASkpCEJAAkIQlJSAJAEpKQhCQAJCEJSUhCEpIAkIQkJCGJiEASkpCEJCICSUQEkogIIoKIICKICEopRASlFEoplFIopVBKodZKKYVaK7VWaq3UWum6jr7viQgigge67777bv2t3/qt7z579uwzfuu3fuu7ueqqq6666qqrrrrqqqv+p0APetCDuOqqq6666qr/ra655poHv9iLvdhrv9iLvdhrvc7rvM5780yXLl3i0qVL3HbbbTzjGc/g9ttvB0AS95PE/SRxP0kASEISkpCEJCQhCUlIQhKSkIQkACQhCUlIQhIAkpCEJCQBIAlJSAJAEpKQhCQkIQkASUhCEpKQhCQiAklIQhIRgSQiAklEBBFBRBARRASlFCKCUgqlFEoplFIopVBrpZTCbDZjY2ODWivz+ZyI4IHuu+++W3/rt37ru//hH/7hd/7hH/7ht7nqqquuuuqqq6666qqr/idCD3rQg7jqqquuuuqq/wvOnDnzoBd/8Rd/ndd5ndd5rxd7sRd7bR7g0qVL3Hbbbdx2223s7e1x2223IYn7SeJ+kgCQhCQkIQlJSEISkpCEJCQhCQBJSEISkpAEgCQkIQlJAEhCEpKQBIAkJCEJSUgCQBKSkIQkJCEJSUQEkpCEJCICSUQEkogIIoKIICKICEopRASlFEoplFKYz+ecOHGCiGB7e5taKw9033333Xr27Nlb//7v//63f/u3f/t77rvvvlu56qqrrrrqqquuuuqqq/6nQw960IO46qqrrrrqqv9rrrnmmge/2Iu92Gu/2Iu92Gu9zuu8znvzXC5dusRtt93G7bffzqVLl7j99tuRxP0kIQlJSEISkpCEJCQhCUlIAkASkpCEJCQhCQBJSEISkgCQhCQkIQkASUhCEpKQBIAkJCEJSUhCEpKICCQhCUlEBJKICCQREUQEEUFEEBEsFguOHz/OfD5ne3ubra0tnts//MM//DbA3//93//2P/zDP/zOP/zDP/w2V1111VVXXXXVVVddddX/NuhBD3oQV1111VVXXfV/3TXXXPPgF3uxF3vtF3uxF3ut13md13lvgPvuu+/Wa6655sE806VLl7j99tu5/fbb2dvbY29vj/39fSQhCUlIQhKSkASAJCQhCUlIQhKSAJCEJCQhCQBJSEISkgCQhCQkIQlJAEhCEpKQhCQkIQlJSCIikIQkIgJJbG5uAnDq1CkWiwWLxYL5fM6xY8d4fu67775b/+Ef/uG377vvvlv/4R/+4Xf+4R/+4be56qqrrrrqqquuuuqqq/63Qw960IO46qqrrrrqqv9vrrnmmge/2Iu92Gu/2Iu92Gtdc801D36xF3ux1+b52NvbA+COO+4A4M4770QS+/v77O3tcXBwgCQkIQlJSEISAJKQhCQkIQkASUhCEpIAkIQkJCEJSQBIQhKSkIQkJLG5uYkkNjY2OH36NJLY2NhgY2ODkydP8sLcd999t/7DP/zDb9933323/sM//MPv/MM//MNvc9VVV1111VVXXXXVVVf9X4Qe9KAHcdVVV1111VX/3505c+ZBkvRiL/Zir/1iL/Zir3XNNdc8+MyZMw++5pprHsy/YH9/H4D9/X329/eRBMD+/j6SODg4QBL3k4QkACRxP0lIYnNzE0ncb2tri83NTQA2NzfZ2NjgRXXffffdevbs2Vv//u///rcB/uEf/uF3/uEf/uG3ueqqq6666qqrrrrqqqv+v0APetCDuOqqq6666qqrnr9rrrnmwQAv9mIv9toAL/ZiL/Za11xzzYMBzpw58+Brrrnmwfw3ue+++24FOHv27K333Xffrffdd9+tZ8+evfW+++57xj/8wz/8NlddddVVV1111VVXXXXVVYAe9KAHcdVVV1111VVX/dudOXPmQZJ05syZB19zzTUP5gqfOXPmwQDXXHPNg/lXuO+++27lAc6ePfuM++677+mAzp49e+t99913K1ddddVVV1111VVXXXXVVS8a9KAHPYirrrrqqquuuuqqq6666qqrrrrqqquuuur/JCpXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9V/CPjE+ru3OrUigAAAABJRU5ErkJggg==) diff --git a/docs/kcl/segEndX.md b/docs/kcl/segEndX.md index 8ae1ed0a4..c150680dd 100644 --- a/docs/kcl/segEndX.md +++ b/docs/kcl/segEndX.md @@ -9,7 +9,7 @@ Compute the ending point of the provided line segment along the 'x' axis. ```kcl -segEndX(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/kcl/types/number) +segEndX(tag: TagIdentifier): number ``` @@ -17,11 +17,11 @@ segEndX(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/kc | Name | Type | Description | Required | |----------|------|-------------|----------| -| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The line segment being queried by its tag | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/segEndY.md b/docs/kcl/segEndY.md index d02209c00..14b828d93 100644 --- a/docs/kcl/segEndY.md +++ b/docs/kcl/segEndY.md @@ -9,7 +9,7 @@ Compute the ending point of the provided line segment along the 'y' axis. ```kcl -segEndY(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/kcl/types/number) +segEndY(tag: TagIdentifier): number ``` @@ -17,11 +17,11 @@ segEndY(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/kc | Name | Type | Description | Required | |----------|------|-------------|----------| -| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The line segment being queried by its tag | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/segLen.md b/docs/kcl/segLen.md index fc3736075..da9fcb62a 100644 --- a/docs/kcl/segLen.md +++ b/docs/kcl/segLen.md @@ -9,7 +9,7 @@ Compute the length of the provided line segment. ```kcl -segLen(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/kcl/types/number) +segLen(tag: TagIdentifier): number ``` @@ -17,11 +17,11 @@ segLen(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/kcl | Name | Type | Description | Required | |----------|------|-------------|----------| -| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The line segment being queried by its tag | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/segStart.md b/docs/kcl/segStart.md index f981f7c2c..86e1e50d5 100644 --- a/docs/kcl/segStart.md +++ b/docs/kcl/segStart.md @@ -9,7 +9,7 @@ Compute the starting point of the provided line segment. ```kcl -segStart(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)) +segStart(tag: TagIdentifier): Point2d ``` @@ -17,11 +17,11 @@ segStart(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [[[number](/docs | Name | Type | Description | Required | |----------|------|-------------|----------| -| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The line segment being queried by its tag | Yes | ### Returns -[`[number]`](/docs/kcl/types/number) +[`Point2d`](/docs/kcl/types/std-types-Point2d) ### Examples @@ -44,10 +44,10 @@ fn cylinder(radius, tag) { |> extrude(length = radius) } -cylinder(1, line1) -cylinder(2, line2) -cylinder(3, line3) -cylinder(4, line4) +cylinder(radius = 1, tag = line1) +cylinder(radius = 2, tag = line2) +cylinder(radius = 3, tag = line3) +cylinder(radius = 4, tag = line4) ``` ![Rendered example of segStart 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAD5r0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXfVcrrnmmgfzL7jvvvtu5aqrrrrqqquuuuqqq676n47KVVddddVVV131f84111zz4DNnzjwY4JprrnnwmTNnHgRwzTXXPPiaa655MM905syZBwNcc801D+bf6b777ruVZzp79uytAPfdd9+tAPfdd9+tZ8+efQbAfffdd+vZs2dvve+++27lqquuuuqqq6666qqrrvrPhh70oAdx1VVXXXXVVVf973HNNdc8GODFXuzFXvvMmTMPAnjxF3/x1wZ4sRd7sdfmP8CFCxf4l5w8eZJ/r/vuu+/Ws2fP3nrffffdCvAP//APv3Pffffd+g//8A+/zVVXXXXVVVddddVVV131HwE96EEP4qqrrrrqqquu+p/nmmuuefCZM2ce/GIv9mKvBfDiL/7ir/1iL/Zir82L4MKFC1y4cAGACxcucOHCBQAuXrwIwIULFwC4cOECABcuXODf6+TJk9zv5MmTAJw8eRKAEydOcPLkSU6ePAnAyZMnOXnyJC/Mfffdd+vZs2dvve+++279h3/4h9+57777bv2Hf/iH3+aqq6666qqrrrrqqquu+tdAD3rQg7jqqquuuuqqq/57XXPNNQ9+7dd+7fcCePEXf/HXfrEXe7HX5gW4cOECAE95ylO4cOECAE996lMBeMpTnsJ/BUn8Rzh58iQnTpzg5MmTnDx5kpMnT3LixAke/vCH8/zcd999twL8wz/8w2//wz/8w+/81m/91ndz1VVXXXXVVVddddVVV70w6EEPehBXXXXVVVddddV/nWuuuebBZ86cefCLvdiLvdaLv/iLv/aLvdiLvTbPx4ULF7hw4QJPfepTAXjKU57CU5/6VP6/OHnyJCdOnODkyZM8/OEP58SJEzz84Q/nud133323/tZv/dZ3nz179hm/9Vu/9d1cddVVV1111VVXXXXVVQ+EHvSgB3HVVVddddVVV/3nueaaax78Yi/2Yq995syZB73O67zOe19zzTUP5rlcuHCBpz71qVy4cIGnPOUpPPWpT+W/ysmTJ/nf4sSJE5w8eZKTJ0/yCq/wCpw8eZIHuu+++249e/bsrX//93//2//wD//wO2fPnr2Vq6666j/FfffddytXXXXVVVddddX/BuhBD3oQV1111VVXXXXVf6xrrrnm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uupFQ3DVVVddddVV/4/dd999t/7Wb/3Wd7/SK70Sb/iGb4htnh/b2MY2tgGwzQtjG9s8N9vYxja2AbDN/SQhiYggIogIIoLrr7+eF3uxFwPgH/7hH377Mz/zM1+Hq6666qr/Jj/6oz/6Offdd9+tD33oQ3nd131dACQhiX+JJO4niecmCQBJ3E8Sz48k7icJSQBIAkASkpCEJCRxP0ncTxIAkvifwjYAtrmfbWzz2q/92g/iqquuuuqqq140BFddddVVV131/9yP/uiPfg7AG77hG/L6r//6ANjmRWEb29jGNraxjW3uZxvb2MY2trGNbWxjm/tJQhKSkEREUErhhhtu4NprrwXgR37kRz77Mz/zM1+Hq6666qr/Rvfdd9+tX//1X//eAC/zMi/Dgx/8YB5IEgCSeH4kcT9JAEjiuUnifpKQhCQkIQkASUhCEgCSkIQkJAEgCUkASEISkpCEJB5IEpK4nyT+u9gGwDa2sU1mcs0113DVVVddddVVLyKCq6666qqrrvp/7r777rv167/+698H4OVe7uV4ndd5HR7INgC2sY1tbPOisA2AbWxjG9tkJraxjW0eSBIRAUBEcPz4cebzOffdd9+tn/mZn/k6P/qjP/o5XHXVVVf9D/AP//APv/P1X//173P8+HHe4i3egmPHjgEgCQBJ3E8SknggSTw3SQBI4n6SeEEkASAJAElIAkASAJK4nyQAJPFAkpCEJO4niQeSxH8W27wobAPwD//wD7/NVVddddVVV71oKMePH+eqq6666qqr/r+79dZb/xrg5V/+5V/7oQ99KA9+8IO59dZbWa/XSEISkiilEBFEBJKICCKCiCAiiAgigohAEhFBKYVSCrVWaq10XUff98xmM2azGX3f03UdpRQkMU0T+/v7HBwccL/f+q3f+u7P+qzPep2zZ8/eylVXXXXV/yBHR0e7D3nIQ176lltuefAjH/lInvrUpzKOIxFBRCCJiEASkogIIgJJSCIikEREIAlJSEISEYEkJBERRAQRQUQQEUQEkogIJBERSCIiiAgigoggIogIIoKIQBKSkIQkJPFAtrGNbWxjG9vYxja2sY1tbGMb29jGNraxjW0AbANgGwDbANgGwDa2AbCNbTIT29jGNq01WmtM08RjH/tYzp49+z3/8A//8NtcddVVV1111b+Mcvz4ca666qqrrrrqKviHf/iH3/mHf/iH33mxF3ux177pppuOP/rRj2Y+n7O3t8d6vQYgIogIIoKIQBIRQUQgCUlIIiKICCKCiCAiKKVQa6XrOvq+p+97ZrMZs9mMrusYx5FLly5x7tw5hmEA4L777rv1S77kS97mF37hF76Gq6666qr/gQ4PD3f/4R/+4Xce8pCHvPTNN9/84Ec84hE87WlPYxxHJBERSEISkpCEJCICSUhCEpKICCQREUhCEhGBJCQhCUlIQhKSiAgkERFIIiKICCQREUQEkogIIgJJRASSAJAEgCQAbGMb29gGwDa2sY1tbGMb29jGNraxjW1sYxvbANgGwDYAtgGwDYBtbANgG9vYxja2yUwyk9Ya0zTxBm/wBkzT9Iw//dM//Wmuuuqqq6666l9GOX78OFddddVVV1111RVnz5699c/+7M9+5vDwcPflX/7lX/vBD34wj3zkI7n22muZz+ecO3eOiCAiiAgiAklIIiKICCICSUQEkiilUEqhlEKtla7r6PuexWJB3/cA7O7ucnh4yDAMAPzWb/3Wd3/pl37p2/zoj/7o55w9e/ZWrrrqqqv+Bzs8PNz9h3/4h995xVd8xbc+efLk8Yc97GE87WlPY5omJCEJSUhCEpKQhCQkERFIQhKSkEREIAlJRASSkIQkJBERRASSiAgkERFEBJKICCKCiCAikIQkIgJJSEISAJJ4fmxjG9vYxja2sY1tbGMb29jGNraxjW1sA2AbANsA2AbANgC2sQ2AbWxjG9tkJrZprZGZbG5u8iZv8iZ813d918ecPXv2Vq666qqrrrrqX4Ye9KAHcdVVV1111VVXPa8zZ8486J3e6Z0++3Ve53XemwfY29vjzjvv5O677+bo6IijoyOWyyWlFEoplFIopVBKodbK9vY229vbbG1tsbW1xbFjx9jc3OS53Xfffbf+1m/91nf/6I/+6Odw1VVXXfW/0DXXXPPgd3zHd/ys13md13nvvb09fuu3fot77rmHUgoRQUQQEUgiIogIJBERRASSiAgkERFEBJKICCKCiCAiiAgigoiglEJEUEqhlEJEUEqhlEIphYiglEJEEBFEBJKQhCQAbAOQmdgmM8lMMpPWGq01MpPWGq01MpPWGq01MpPMJDPJTDKTzCQzsU1mkpnYJjOxTWZim8zENplJZmKbzKS1RmbSWqO1xjRNTNPEMAy84zu+Iw9+8IN5u7d7O3HVVVddddVVLxr0oAc9iKuuuuqqq6666gW75pprHvxiL/Zir/06r/M67/ViL/Zirw1w33333XrNNdc8mH+H++6779azZ8/e+vd///e//du//dvfc999993KVVddddX/cmfOnHnQ67zO67z3O73TO332/v4+T3rSk/irv/orIoKIICKICCQREUQEkogIJBERRASSiAgiAklEBBFBRBARlFKICCKCUgoRQSmFUgqlFEopRASlFCKCUgoRgSQiAkk8kG1sk5lkJplJZtJao7VGZtJao7VGZtJaIzNprZGZZCaZSWaSmWQmtslMMhPbZCa2yUxsk5nYJjPJTDIT27TWyExaa7TWmKaJcRy57rrreJd3eRd+5Ed+5LN/9Ed/9HO46qqrrrrqqhcNetCDHsRVV1111VVXXfWiOXPmzIOuueaah1xzzTUPfrEXe7HXuuaaax585syZB19zzTUP5gW47777bgX4rd/6re8GOHv27DP+4R/+4bfvu+++W7nqqquu+j/ommuuefBrv/Zrv9c7vdM7fTbAk5/8ZH7v936PiCAiiAgiAklEBBGBJCICSUQEEYEkIoKIICKICCKCiCAiiAhKKUQEpRRKKZRSiAhKKZRSKKUQEZRSkEREIAlJSALANraxjW0yk9YamUlrjcyktUZrjdYamUlrjcyktUZmkplkJplJZpKZ2CYzyUxsk5nYJjOxTWZim8wkM8lMMpPMJDNprdFaY5omFosF7/d+7wfA273d24mrrrrqqquuetGhBz3oQVx11VVXXXXVVVddddVVV/1He8d3fMfPeqd3eqfPBjg4OOApT3kKf/u3f0tEEBFEBJKICCICSUQEkogIIgJJRAQRQUQQEUQEEUEphYiglEIphYiglEIphVIKpRQiglIKEUFEEBFIQhIPZBvbZCaZSWbSWqO1RmbSWqO1RmuNzKS1RmbSWiMzyUwyk8wkM8lMbJOZZCa2yUxsk5nYJjOxTWaSmWQmmUlmkpm01pimiY2NDV73dV+X2Wx269d//de/zz/8wz/8NlddddVVV131oiO46qqrrrrqqquuuuqqq676T/CjP/qjn/MhH/IhD/mHf/iH397a2uKlX/qlebVXezW2tra4nySemyTuJwlJ3E8SkpAEgCQkASAJSUhCEpKQhCQkIQlJSEISkpDECyOJ/w62sQ3A67/+63PzzTdz9uzZW//hH/7ht7nqqquuuuqqfx3K8ePHueqqq6666qqrrrrqqquu+s9weHi4+/d///e/fXh4uPviL/7ir33y5EluvvlmZrMZ9913H5KICCQREUhCEhGBJCQhiYggIpCEJCQREUgiIogIIoKIICKQREQQEUgiIogIJCEJSUgCQBIAtrmfbQBsYxvb2AbANraxjW1sYxvb2MY2tgGwDYBtAGxjGwDbANjGNraxjW1sY5u3fMu35MYbb+S+++679eM//uNfhquuuuqqq67616McP36cq6666qqrrrrqqquuuuqq/yxHR0eX/uEf/uF3fvu3f/t7Dg8Pd1/mZV7mta+55hoe8pCH0Pc9586dQxKSiAgkIYmIQBKSkIQkJBERRASSiAgigohAEhFBRBARRAQRQUQgCUlEBJKQBIAkHsg2trGNbWxjG9vYxja2sY1tbGMb29jGNraxDYBtAGwDYBsA29gGwDa2sY1tbLO5uckbvMEbcMMNN3Dffffd+iEf8iEP4aqrrrrqqqv+bSjHjx/nqquuuuqqq6666qqrrrrqP9vh4eHuP/zDP/zOP/zDP/zOi73Yi732iRMnjl9zzTU86EEPou97zp07hyQiAklIIiKICCKCiCAikIQkIoKIQBIRQUQQEUQEEUFEIImIICKICCICSQBIAkASALaxjW0AbGMb29gGwDa2sY1tbGMb29jGNraxDYBtAGwDYBsA29gGwDa2sY1trr32Wt76rd+a7e1t7rvvvls/5EM+5CFcddVVV1111b8d5fjx41x11VVXXXXVVVddddVVV/1XOXv27K1/+qd/+tO33nrr3zz4wQ9+6RMnThw/c+YMD3rQg+i6jgsXLhARSEISkpCEJCQREUQEEYEkIoKIICKICCKCiCAiiAgigoggIpCEJCQBIIn72QbANraxjW1sYxvb2MY2trGNbWxjG9vYxjYAtrENgG0AbANgG9sA2MY2tnnJl3xJXv3VXx2Af/iHf/jtj//4j38ZrrrqqquuuurfBz3oQQ/iqquuuuqqq6666qqrrrrqv8M111zz4Bd7sRd77Xd8x3f8rGuuuebBAEdHR1y4cIE777yT3d1dIoKIICKICCKCiKCUQimFUgoRQSmFUgqlFEoplFIopRARlFKICCQhCUnczzaZiW0yk8yktUZrjdYarTUyk9YarTVaa7TWyExaa2QmmUlmkplkJrbJTDIT22QmtslMbJOZZCa2yUwe/OAH88qv/MoA3Hfffbf+1m/91nf/6I/+6Odw1VVXXXXVVf9+6EEPehBXXXXVVVddddVVV1111VX/3V7ndV7nvV7ndV7nvV/sxV7stXmm5XLJXXfdxT333MMwDEQEpRQiglIKEUEphVIKpRRKKZRSKKVQSqGUQkQQEUQEEYEkHsg2tslMMpPMpLVGa43MpLVGa43WGq01Wmu01shMWmtkJplJZpKZZCa2yUwyE9tkJrbJTGyTmWQmp0+f5hVf8RXZ3NwE4L777rv167/+69/nH/7hH36bq6666qqrrvqPgR70oAdx1VVXXXXVVVddddVVV131P8U111zz4Nd+7dd+r3d6p3f6bJ5ptVqxWq2499572dvbY5omIoJSCqUUSimUUiilUEqhlEIphVIKEUFEEBFIQhKSuJ9tMhPbtNbITFprZCatNVprtNZordFao7VGa43MJDNprZGZZCaZSWZim8wkM7FNZmKbzGSxWHDzzTfzoAc9iM3NTQDuu+++W3/rt37ru3/0R3/0c7jqqquuuuqq/1joQQ96EFddddVVV1111VVXXXXVVf/TXHPNNQ9+sRd7sdd6sRd7sdd+ndd5nffmAdbrNfv7+1y4cIHDw0NKKZRSqLVSSqGUQimFiKCUQkQQEUhCEpIAsI1tbJOZZCatNTKT1hqtNVprtNZordFao7VGZtJaIzNprZGZZCaZSWZim8wkM7HNfD5nPp9z8803c8stt3C/++6779bf+q3f+u4f/dEf/Ryuuuqqq6666j8HetCDHsRVV1111VVXXXXVVVddddX/ZNdcc82DX+zFXuy1X+zFXuy1Xud1Xue9eYBhGBjHkXEcWa1WrFYrACKCUgqlFCICSUQEkngg22QmmUlmkpm01mit0VqjtUZrjdYarTVaa2QmrTUyk9YamUlmkplkJraZzWbccMMNnDx5klOnTvFA9913360/+qM/+tm/9Vu/9T1cddVVV1111X8u9KAHPYirrrrqqquuuuqqq6666qr/Lc6cOfOga6655iEv9mIv9lov/uIv/tov9mIv9to8l2maaK3RWmMcRzIT29xPEgC2sY1tMpPWGplJa43WGq01Wmu01mit0VqjtUZm0lojM+m6jsxkZ2eH2WzGiRMnOHHiBM/tvvvuu/W3fuu3vvtHf/RHP4errrrqqquu+q+DHvSgB3HVVVddddVVV1111VVXXfW/1TXXXPPgM2fOPOjFXuzFXvvFX/zFX/vFXuzFXpsXIDMByEwyE4BpmgCYpgnbZCaZSWaSmdgmMymlYJuu6+j7Htvs7Ozwgtx33323/uiP/ujnnDlz5kE/+qM/+jlcddVVV1111X8P9KAHPYirrrrqqquuuuqqq6666qr/S6655poHv9iLvdhrAXqxF3ux17rmmmse/GIv9mKvzQPcd999t15zzTUP5j/Afffdd+s//MM//PZ999136z/8wz/89j/8wz/8DlddddVVV131PwN60IMexFVXXXXVVVddddVVV1111f8HZ86ceZAknTlz5sHXXHPNgwHOnDnzoGuuuebBvBD33XffrTzT2bNnn3HffffdCvAP//APv81VV1111VVX/c+GHvSgB3HVVVddddVVV1111VVXXXXVVVddddVVV/2fROWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9V/CN59xkLxTcq7wAAAABJRU5ErkJggg==) diff --git a/docs/kcl/segStartX.md b/docs/kcl/segStartX.md index 15373381a..ccc7ff055 100644 --- a/docs/kcl/segStartX.md +++ b/docs/kcl/segStartX.md @@ -9,7 +9,7 @@ Compute the starting point of the provided line segment along the 'x' axis. ```kcl -segStartX(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/kcl/types/number) +segStartX(tag: TagIdentifier): number ``` @@ -17,11 +17,11 @@ segStartX(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/ | Name | Type | Description | Required | |----------|------|-------------|----------| -| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The line segment being queried by its tag | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/segStartY.md b/docs/kcl/segStartY.md index 579eec013..7cf9b259f 100644 --- a/docs/kcl/segStartY.md +++ b/docs/kcl/segStartY.md @@ -9,7 +9,7 @@ Compute the starting point of the provided line segment along the 'y' axis. ```kcl -segStartY(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/kcl/types/number) +segStartY(tag: TagIdentifier): number ``` @@ -17,11 +17,11 @@ segStartY(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/ | Name | Type | Description | Required | |----------|------|-------------|----------| -| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The line segment being queried by its tag | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/settings/project.md b/docs/kcl/settings-project.md similarity index 100% rename from docs/kcl/settings/project.md rename to docs/kcl/settings-project.md diff --git a/docs/kcl/settings/user.md b/docs/kcl/settings-user.md similarity index 100% rename from docs/kcl/settings/user.md rename to docs/kcl/settings-user.md diff --git a/docs/kcl/settings.md b/docs/kcl/settings.md index 4aaaeb783..fef877621 100644 --- a/docs/kcl/settings.md +++ b/docs/kcl/settings.md @@ -8,16 +8,16 @@ layout: manual There are three levels of settings available in Zoo Design Studio: -1. [User Settings](/docs/kcl/settings/user): Global settings that apply to all projects, stored in `user.toml` -2. [Project Settings](/docs/kcl/settings/project): Settings specific to a project, stored in `project.toml` +1. [User Settings](/docs/kcl/settings-user): Global settings that apply to all projects, stored in `user.toml` +2. [Project Settings](/docs/kcl/settings-project): Settings specific to a project, stored in `project.toml` 3. Per-file Settings: Settings that apply to a single KCL file, specified using the `@settings` attribute ## Configuration Files Zoo Design Studio uses TOML files for configuration: -* **User Settings**: `user.toml` - See [complete documentation](/docs/kcl/settings/user) -* **Project Settings**: `project.toml` - See [complete documentation](/docs/kcl/settings/project) +* **User Settings**: `user.toml` - See [complete documentation](/docs/kcl/settings-user) +* **Project Settings**: `project.toml` - See [complete documentation](/docs/kcl/settings-project) ## Per-file settings @@ -25,7 +25,7 @@ Settings which affect a single file are configured using the settings attribute. This must be at the top of the KCL file (comments before the attribute are permitted). For example: -```js +```kcl // The settings attribute. @settings(defaultLengthUnit = in) diff --git a/docs/kcl/startProfile.md b/docs/kcl/startProfile.md index fbf1aa4f4..41fb9074e 100644 --- a/docs/kcl/startProfile.md +++ b/docs/kcl/startProfile.md @@ -10,10 +10,10 @@ Start a new profile at a given point. ```kcl startProfile( - sketchSurface: [[Sketch](/docs/kcl/types/Sketch)Surface](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)Surface), - at: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketchSurface: Plane | Face, + at: Point2d, + tag?: TagDeclarator, +): Sketch ``` @@ -21,13 +21,13 @@ startProfile( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketchSurface` | [`SketchSurface`](/docs/kcl/types/SketchSurface) | What to start the profile on | Yes | -| `at` | [`[number]`](/docs/kcl/types/number) | Where to start the profile. An absolute point. | Yes | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Tag this first starting point | No | +| `sketchSurface` | [`Plane`](/docs/kcl/types/std-types-Plane) or [`Face`](/docs/kcl/types/std-types-Face) | What to start the profile on | Yes | +| `at` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | Where to start the profile. An absolute point. | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Tag this first starting point | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/startSketchOn.md b/docs/kcl/startSketchOn.md index caf341b63..7069fabc2 100644 --- a/docs/kcl/startSketchOn.md +++ b/docs/kcl/startSketchOn.md @@ -17,10 +17,10 @@ This is important to understand because if you were to then sketch on the result The point is if you want to export the result of a sketch on a face, you only need to export the final Solid that was created from the sketch on the face, since it will include all the parent faces and Solids. ```kcl -start[Sketch](/docs/kcl/types/Sketch)On( - planeOr[Solid](/docs/kcl/types/Solid): [[Sketch](/docs/kcl/types/Sketch)Data](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)Data), - face?: [[Face](/docs/kcl/types/Face)Tag](/docs/kcl/types/[Face](/docs/kcl/types/Face)Tag), -): [[Sketch](/docs/kcl/types/Sketch)Surface](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)Surface) +startSketchOn( + planeOrSolid: Plane | Solid, + face?: TagIdentifier | Start | End, +): Plane | Face ``` @@ -28,12 +28,12 @@ start[Sketch](/docs/kcl/types/Sketch)On( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `planeOrSolid` | [`SketchData`](/docs/kcl/types/SketchData) | The plane or solid to sketch on | Yes | -| `face` | [`FaceTag`](/docs/kcl/types/FaceTag) | Identify a face of a solid if a solid is specified as the input argument (`plane_or_solid`) | No | +| `planeOrSolid` | [`Plane`](/docs/kcl/types/std-types-Plane) or [`Solid`](/docs/kcl/types/std-types-Solid) | The plane or solid to sketch on | Yes | +| `face` | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) or [`Start`](/docs/kcl/types#Start) or [`End`](/docs/kcl/types#End) | Identify a face of a solid if a solid is specified as the input argument (`plane_or_solid`) | No | ### Returns -[`SketchSurface`](/docs/kcl/types/SketchSurface) - A sketch type. +[`Plane`](/docs/kcl/types/std-types-Plane) or [`Face`](/docs/kcl/types/std-types-Face) - A sketch type. ### Examples diff --git a/docs/kcl/std.json b/docs/kcl/std.json index 79f357358..b33ee21e4 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -26035,7 +26035,7 @@ }, { "name": "color", - "type": "String", + "type": "string", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "String", @@ -32507,7 +32507,7 @@ "examples": [ "// Add color to an extruded solid.\nexampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(endAbsolute = [10, 0])\n |> line(endAbsolute = [0, 10])\n |> line(endAbsolute = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)\n // There are other options besides 'color', but they're optional.\n |> appearance(color = '#ff0000')", "// Add color to a revolved solid.\nsketch001 = startSketchOn(XY)\n |> circle(center = [15, 0], radius = 5)\n |> revolve(angle = 360, axis = Y)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", - "// Add color to different solids.\nfn cube(center) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\nexample0 = cube([0, 0])\nexample1 = cube([20, 0])\nexample2 = cube([40, 0])\n\nappearance(\n [example0, example1],\n color = '#ff0000',\n metalness = 50,\n roughness = 50,\n)\nappearance(\n example2,\n color = '#00ff00',\n metalness = 50,\n roughness = 50,\n)", + "// Add color to different solids.\nfn cube(center) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\nexample0 = cube(center = [0, 0])\nexample1 = cube(center = [20, 0])\nexample2 = cube(center = [40, 0])\n\nappearance(\n [example0, example1],\n color = '#ff0000',\n metalness = 50,\n roughness = 50,\n)\nappearance(\n example2,\n color = '#00ff00',\n metalness = 50,\n roughness = 50,\n)", "// You can set the appearance before or after you shell it will yield the same result.\n// This example shows setting the appearance _after_ the shell.\nfirstSketch = startSketchOn(XY)\n |> startProfile(at = [-12, 12])\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\nshell(firstSketch, faces = [END], thickness = 0.25)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)", "// You can set the appearance before or after you shell it will yield the same result.\n// This example shows setting the appearance _before_ the shell.\nfirstSketch = startSketchOn(XY)\n |> startProfile(at = [-12, 12])\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n\nshell(firstSketch, faces = [END], thickness = 0.25)", "// Setting the appearance of a 3D pattern can be done _before_ or _after_ the pattern.\n// This example shows _before_ the pattern.\nexampleSketch = startSketchOn(XZ)\n |> startProfile(at = [0, 0])\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> appearance(color = '#ff0000', metalness = 90, roughness = 90)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)", @@ -39018,7 +39018,7 @@ }, { "name": "interiorAbsolute", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Nullable_Array_size_2_of_TyF64", @@ -40627,7 +40627,7 @@ }, { "name": "endAbsolute", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Nullable_Array_size_2_of_TyF64", @@ -45676,7 +45676,7 @@ }, { "name": "error", - "type": "String", + "type": "string", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Nullable_String", @@ -45734,7 +45734,7 @@ }, { "name": "error", - "type": "String", + "type": "string", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Nullable_String", @@ -47438,7 +47438,7 @@ }, { "name": "control1", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -49047,7 +49047,7 @@ }, { "name": "control2", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -50656,7 +50656,7 @@ }, { "name": "end", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -57163,7 +57163,7 @@ }, { "name": "p1", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -58772,7 +58772,7 @@ }, { "name": "p2", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -60381,7 +60381,7 @@ }, { "name": "p3", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -90118,8 +90118,8 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Intersect two cubes using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nintersectedPart = intersect([part001, part002])", - "// Intersect two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: intersect([part001, part002])\nintersectedPart = part001 & part002" + "// Intersect two cubes using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\nintersectedPart = intersect([part001, part002])", + "// Intersect two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\n// This is the equivalent of: intersect([part001, part002])\nintersectedPart = part001 & part002" ] }, { @@ -106721,7 +106721,7 @@ }, { "name": "endAbsolute", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Nullable_Array_size_2_of_TyF64", @@ -108330,7 +108330,7 @@ }, { "name": "end", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Nullable_Array_size_2_of_TyF64", @@ -114833,7 +114833,7 @@ }, { "name": "vDegree", - "type": "NonZeroU32", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "NonZeroU32", @@ -118043,7 +118043,7 @@ }, { "name": "baseCurveIndex", - "type": "integer", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Nullable_uint32", @@ -133614,7 +133614,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "r = 10 // radius\nfn drawCircle(id) {\n return startSketchOn(XY)\n |> circle(center = [id * 2 * r, 0], radius = r)\n}\n\n// Call `drawCircle`, passing in each element of the array.\n// The outputs from each `drawCircle` form a new array,\n// which is the return value from `map`.\ncircles = map([1..3], f = drawCircle)", + "r = 10 // radius\nfn drawCircle(@id) {\n return startSketchOn(XY)\n |> circle(center = [id * 2 * r, 0], radius = r)\n}\n\n// Call `drawCircle`, passing in each element of the array.\n// The outputs from each `drawCircle` form a new array,\n// which is the return value from `map`.\ncircles = map([1..3], f = drawCircle)", "r = 10 // radius\n// Call `map`, using an anonymous function instead of a named one.\ncircles = map(\n [1..3],\n f = fn(id) {\n return startSketchOn(XY)\n |> circle(center = [id * 2 * r, 0], radius = r)\n },\n)" ] }, @@ -135234,7 +135234,7 @@ }, { "name": "instances", - "type": "integer", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "uint32", @@ -136840,7 +136840,7 @@ }, { "name": "center", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -146489,7 +146489,7 @@ }, { "name": "instances", - "type": "integer", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "uint32", @@ -149705,7 +149705,7 @@ }, { "name": "center", - "type": "[number]", + "type": "Point3d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_3_of_TyF64", @@ -159354,7 +159354,7 @@ }, { "name": "instances", - "type": "integer", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "uint32", @@ -162565,7 +162565,7 @@ }, { "name": "axis", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -169005,7 +169005,7 @@ }, { "name": "instances", - "type": "integer", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "uint32", @@ -172216,7 +172216,7 @@ }, { "name": "axis", - "type": "[number]", + "type": "Point3d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_3_of_TyF64", @@ -178658,7 +178658,7 @@ }, { "name": "instances", - "type": "integer", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "uint32", @@ -185080,12 +185080,12 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Each instance will be shifted along the X axis.\nfn transform(id) {\n return { translate = [4 * id, 0, 0] }\n}\n\n// Sketch 4 cylinders.\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 5)\n |> patternTransform(instances = 4, transform = transform)", - "// Each instance will be shifted along the X axis,\n// with a gap between the original (at x = 0) and the first replica\n// (at x = 8). This is because `id` starts at 1.\nfn transform(id) {\n return { translate = [4 * (1 + id), 0, 0] }\n}\n\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 5)\n |> patternTransform(instances = 4, transform = transform)", - "fn cube(length, center) {\n l = length / 2\n x = center[0]\n y = center[1]\n p0 = [-l + x, -l + y]\n p1 = [-l + x, l + y]\n p2 = [l + x, l + y]\n p3 = [l + x, -l + y]\n\n return startSketchOn(XY)\n |> startProfile(at = p0)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> line(endAbsolute = p0)\n |> close()\n |> extrude(length = length)\n}\n\nwidth = 20\nfn transform(i) {\n return {\n // Move down each time.\n translate = [0, 0, -i * width],\n // Make the cube longer, wider and flatter each time.\n scale = [\n pow(1.1, exp = i),\n pow(1.1, exp = i),\n pow(0.9, exp = i)\n ],\n // Turn by 15 degrees each time.\n rotation = { angle = 15 * i, origin = \"local\" }\n }\n}\n\nmyCubes = cube(width, [100, 0])\n |> patternTransform(instances = 25, transform = transform)", - "fn cube(length, center) {\n l = length / 2\n x = center[0]\n y = center[1]\n p0 = [-l + x, -l + y]\n p1 = [-l + x, l + y]\n p2 = [l + x, l + y]\n p3 = [l + x, -l + y]\n\n return startSketchOn(XY)\n |> startProfile(at = p0)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> line(endAbsolute = p0)\n |> close()\n |> extrude(length = length)\n}\n\nwidth = 20\nfn transform(i) {\n return {\n translate = [0, 0, -i * width],\n rotation = {\n angle = 90 * i,\n // Rotate around the overall scene's origin.\n origin = \"global\"\n }\n }\n}\nmyCubes = cube(width, [100, 100])\n |> patternTransform(instances = 4, transform = transform)", - "// Parameters\nr = 50 // base radius\nh = 10 // layer height\nt = 0.005 // taper factor [0-1)\n// Defines how to modify each layer of the vase.\n// Each replica is shifted up the Z axis, and has a smoothly-varying radius\nfn transform(replicaId) {\n scale = r * abs(1 - (t * replicaId)) * (5 + cos((replicaId / 8): number(rad)))\n return {\n translate = [0, 0, replicaId * 10],\n scale = [scale, scale, 0]\n }\n}\n// Each layer is just a pretty thin cylinder.\nfn layer() {\n return startSketchOn(XY)\n // or some other plane idk\n |> circle(center = [0, 0], radius = 1, tag = $tag1)\n |> extrude(length = h)\n}\n// The vase is 100 layers tall.\n// The 100 layers are replica of each other, with a slight transformation applied to each.\nvase = layer()\n |> patternTransform(instances = 100, transform = transform)", - "fn transform(i) {\n // Transform functions can return multiple transforms. They'll be applied in order.\n return [\n { translate = [30 * i, 0, 0] },\n { rotation = { angle = 45 * i } }\n ]\n}\nstartSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> polygon(\n radius = 10,\n numSides = 4,\n center = [0, 0],\n inscribed = false,\n )\n |> extrude(length = 4)\n |> patternTransform(instances = 3, transform = transform)" + "// Each instance will be shifted along the X axis.\nfn transform(@id) {\n return { translate = [4 * id, 0, 0] }\n}\n\n// Sketch 4 cylinders.\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 5)\n |> patternTransform(instances = 4, transform = transform)", + "// Each instance will be shifted along the X axis,\n// with a gap between the original (at x = 0) and the first replica\n// (at x = 8). This is because `id` starts at 1.\nfn transform(@id) {\n return { translate = [4 * (1 + id), 0, 0] }\n}\n\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 5)\n |> patternTransform(instances = 4, transform = transform)", + "fn cube(length, center) {\n l = length / 2\n x = center[0]\n y = center[1]\n p0 = [-l + x, -l + y]\n p1 = [-l + x, l + y]\n p2 = [l + x, l + y]\n p3 = [l + x, -l + y]\n\n return startSketchOn(XY)\n |> startProfile(at = p0)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> line(endAbsolute = p0)\n |> close()\n |> extrude(length = length)\n}\n\nwidth = 20\nfn transform(@i) {\n return {\n // Move down each time.\n translate = [0, 0, -i * width],\n // Make the cube longer, wider and flatter each time.\n scale = [\n pow(1.1, exp = i),\n pow(1.1, exp = i),\n pow(0.9, exp = i)\n ],\n // Turn by 15 degrees each time.\n rotation = { angle = 15 * i, origin = \"local\" }\n }\n}\n\nmyCubes = cube(length = width, center = [100, 0])\n |> patternTransform(instances = 25, transform = transform)", + "fn cube(length, center) {\n l = length / 2\n x = center[0]\n y = center[1]\n p0 = [-l + x, -l + y]\n p1 = [-l + x, l + y]\n p2 = [l + x, l + y]\n p3 = [l + x, -l + y]\n\n return startSketchOn(XY)\n |> startProfile(at = p0)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> line(endAbsolute = p0)\n |> close()\n |> extrude(length = length)\n}\n\nwidth = 20\nfn transform(@i) {\n return {\n translate = [0, 0, -i * width],\n rotation = {\n angle = 90 * i,\n // Rotate around the overall scene's origin.\n origin = \"global\"\n }\n }\n}\nmyCubes = cube(length = width, center = [100, 100])\n |> patternTransform(instances = 4, transform = transform)", + "// Parameters\nr = 50 // base radius\nh = 10 // layer height\nt = 0.005 // taper factor [0-1)\n// Defines how to modify each layer of the vase.\n// Each replica is shifted up the Z axis, and has a smoothly-varying radius\nfn transform(@replicaId) {\n scale = r * abs(1 - (t * replicaId)) * (5 + cos((replicaId / 8): number(rad)))\n return {\n translate = [0, 0, replicaId * 10],\n scale = [scale, scale, 0]\n }\n}\n// Each layer is just a pretty thin cylinder.\nfn layer() {\n return startSketchOn(XY)\n // or some other plane idk\n |> circle(center = [0, 0], radius = 1, tag = $tag1)\n |> extrude(length = h)\n}\n// The vase is 100 layers tall.\n// The 100 layers are replica of each other, with a slight transformation applied to each.\nvase = layer()\n |> patternTransform(instances = 100, transform = transform)", + "fn transform(@i) {\n // Transform functions can return multiple transforms. They'll be applied in order.\n return [\n { translate = [30 * i, 0, 0] },\n { rotation = { angle = 45 * i } }\n ]\n}\nstartSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> polygon(\n radius = 10,\n numSides = 4,\n center = [0, 0],\n inscribed = false,\n )\n |> extrude(length = 4)\n |> patternTransform(instances = 3, transform = transform)" ] }, { @@ -186704,7 +186704,7 @@ }, { "name": "instances", - "type": "integer", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "uint32", @@ -193126,7 +193126,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Each instance will be shifted along the X axis.\nfn transform(id) {\n return { translate = [4 * id, 0] }\n}\n\n// Sketch 4 circles.\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> patternTransform2d(instances = 4, transform = transform)" + "// Each instance will be shifted along the X axis.\nfn transform(@id) {\n return { translate = [4 * id, 0] }\n}\n\n// Sketch 4 circles.\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> patternTransform2d(instances = 4, transform = transform)" ] }, { @@ -197961,7 +197961,7 @@ }, { "name": "center", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -232205,9 +232205,9 @@ "unpublished": false, "deprecated": false, "examples": [ - "// This function adds two numbers.\nfn add(a, b) {\n return a + b\n}\n\n// This function adds an array of numbers.\n// It uses the `reduce` function, to call the `add` function on every\n// element of the `arr` parameter. The starting value is 0.\nfn sum(arr) {\n return reduce(arr, initial = 0, f = add)\n}\n\n/* The above is basically like this pseudo-code:\nfn sum(arr):\n sumSoFar = 0\n for i in arr:\n sumSoFar = add(sumSoFar, i)\n return sumSoFar */\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum([1, 2, 3]),\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)", + "// This function adds two numbers.\nfn add(a, b) {\n return a + b\n}\n\n// This function adds an array of numbers.\n// It uses the `reduce` function, to call the `add` function on every\n// element of the `arr` parameter. The starting value is 0.\nfn sum(@arr) {\n return reduce(arr, initial = 0, f = add)\n}\n\n/* The above is basically like this pseudo-code:\nfn sum(arr):\n sumSoFar = 0\n for i in arr:\n sumSoFar = add(sumSoFar, i)\n return sumSoFar */\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum([1, 2, 3]),\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)", "// This example works just like the previous example above, but it uses\n// an anonymous `add` function as its parameter, instead of declaring a\n// named function outside.\narr = [1, 2, 3]\nsum = reduce(\n arr,\n initial = 0,\n f = fn(i, result_so_far) {\n return i + result_so_far\n },\n)\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum,\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)", - "// Declare a function that sketches a decagon.\nfn decagon(radius) {\n // Each side of the decagon is turned this many radians from the previous angle.\n stepAngle = (1 / 10 * TAU): number(rad)\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn(XY)\n |> startProfile(at = [cos(0) * radius, sin(0) * radius])\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce(\n [1..10],\n initial = startOfDecagonSketch,\n f = fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n },\n )\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = ((1/10) * TAU): number(rad)\n plane = startSketchOn(XY)\n startOfDecagonSketch = startProfile(plane, at = [(cos(0)*radius), (sin(0) * radius)])\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()" + "// Declare a function that sketches a decagon.\nfn decagon(@radius) {\n // Each side of the decagon is turned this many radians from the previous angle.\n stepAngle = (1 / 10 * TAU): number(rad)\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn(XY)\n |> startProfile(at = [cos(0) * radius, sin(0) * radius])\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce(\n [1..10],\n initial = startOfDecagonSketch,\n f = fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n },\n )\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = ((1/10) * TAU): number(rad)\n plane = startSketchOn(XY)\n startOfDecagonSketch = startProfile(plane, at = [(cos(0)*radius), (sin(0) * radius)])\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()" ] }, { @@ -255081,7 +255081,7 @@ ], "returnValue": { "name": "", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -255105,7 +255105,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "w = 15\ncube = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> circle(radius = radius, center = segEnd(tag))\n |> extrude(length = radius)\n}\n\ncylinder(1, line1)\ncylinder(2, line2)\ncylinder(3, line3)\ncylinder(4, line4)" + "w = 15\ncube = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> circle(radius = radius, center = segEnd(tag))\n |> extrude(length = radius)\n}\n\ncylinder(radius = 1, tag = line1)\ncylinder(radius = 2, tag = line2)\ncylinder(radius = 3, tag = line3)\ncylinder(radius = 4, tag = line4)" ] }, { @@ -255283,7 +255283,7 @@ ], "returnValue": { "name": "", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -255307,7 +255307,7 @@ "unpublished": false, "deprecated": false, "examples": [ - "w = 15\ncube = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> circle(radius = radius, center = segStart(tag))\n |> extrude(length = radius)\n}\n\ncylinder(1, line1)\ncylinder(2, line2)\ncylinder(3, line3)\ncylinder(4, line4)" + "w = 15\ncube = startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfile(at = [0, 0])\n |> circle(radius = radius, center = segStart(tag))\n |> extrude(length = radius)\n}\n\ncylinder(radius = 1, tag = line1)\ncylinder(radius = 2, tag = line2)\ncylinder(radius = 3, tag = line3)\ncylinder(radius = 4, tag = line4)" ] }, { @@ -257147,7 +257147,7 @@ }, { "name": "at", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Array_size_2_of_TyF64", @@ -273775,8 +273775,8 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Subtract a cylinder from a cube using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nsubtractedPart = subtract([part001], tools = [part002])", - "// Subtract a cylinder from a cube using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: subtract([part001], tools=[part002])\nsubtractedPart = part001 - part002" + "// Subtract a cylinder from a cube using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\nsubtractedPart = subtract([part001], tools = [part002])", + "// Subtract a cylinder from a cube using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\n// This is the equivalent of: subtract([part001], tools=[part002])\nsubtractedPart = part001 - part002" ] }, { @@ -291976,7 +291976,7 @@ }, { "name": "endAbsolute", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Nullable_Array_size_2_of_TyF64", @@ -293585,7 +293585,7 @@ }, { "name": "end", - "type": "[number]", + "type": "Point2d", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "title": "Nullable_Array_size_2_of_TyF64", @@ -311484,7 +311484,7 @@ "// Move a pipe.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfile(at = [0.05, 0.05])\n |> line(end = [0, 7])\n |> tangentialArc(angle = 90, radius = 5)\n |> line(end = [-3, 0])\n |> tangentialArc(angle = -90, radius = 5)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> subtract2d(tool = pipeHole)\n |> sweep(path = sweepPath)\n |> translate(x = 1.0, y = 1.0, z = 2.5)", "// Move an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\n// Circle so you actually see the move.\nstartSketchOn(XY)\n |> circle(center = [-10, -10], radius = 10)\n |> extrude(length = 10)\n\ncube\n |> translate(x = 10.0, y = 10.0, z = 2.5)", "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfile(sketch001, at = [-200, 23.86])\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfile(sketch002, at = [0, 0])\n |> yLine(length = 231.81)\n |> tangentialArc(radius = 80, angle = -90)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Move the sweeps.\ntranslate(\n parts,\n x = 1.0,\n y = 1.0,\n z = 2.5,\n)", - "// Move a sketch.\n\n\nfn square(length) {\n l = length / 2\n p0 = [-l, -l]\n p1 = [-l, l]\n p2 = [l, l]\n p3 = [l, -l]\n\n return startSketchOn(XY)\n |> startProfile(at = p0)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> close()\n}\n\nsquare(10)\n |> translate(x = 5, y = 5)\n |> extrude(length = 10)", + "// Move a sketch.\n\n\nfn square(@length) {\n l = length / 2\n p0 = [-l, -l]\n p1 = [-l, l]\n p2 = [l, l]\n p3 = [l, -l]\n\n return startSketchOn(XY)\n |> startProfile(at = p0)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> close()\n}\n\nsquare(10)\n |> translate(x = 5, y = 5)\n |> extrude(length = 10)", "// Translate and rotate a sketch to create a loft.\nsketch001 = startSketchOn(XY)\n\nfn square() {\n return startProfile(sketch001, at = [-10, 10])\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n}\n\nprofile001 = square()\n\nprofile002 = square()\n |> translate(z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([profile001, profile002])" ] }, @@ -316320,9 +316320,9 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Union two cubes using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nunionedPart = union([part001, part002])", - "// Union two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: union([part001, part002])\nunionedPart = part001 + part002", - "// Union two cubes using the more programmer-friendly operator.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n // This is the equivalent of: union([part001, part002])\n // Programmers will understand `|` as a union operation, but mechanical engineers\n// will understand `+`, we made both work.\nunionedPart = part001 | part002" + "// Union two cubes using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\nunionedPart = union([part001, part002])", + "// Union two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\n// This is the equivalent of: union([part001, part002])\nunionedPart = part001 + part002", + "// Union two cubes using the more programmer-friendly operator.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [center[0] - size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\n // This is the equivalent of: union([part001, part002])\n // Programmers will understand `|` as a union operation, but mechanical engineers\n// will understand `+`, we made both work.\nunionedPart = part001 | part002" ] }, { diff --git a/docs/kcl/subtract.md b/docs/kcl/subtract.md index aa1125b3a..e569afba5 100644 --- a/docs/kcl/subtract.md +++ b/docs/kcl/subtract.md @@ -10,10 +10,10 @@ Performs a boolean subtraction operation, removing the volume of one or more too ```kcl subtract( - solids: [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)), - tools: [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)), - tolerance?: [number](/docs/kcl/types/number), -): [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)) + solids: [Solid], + tools: [Solid], + tolerance?: number, +): [Solid] ``` @@ -21,13 +21,13 @@ subtract( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`[Solid]`](/docs/kcl/types/Solid) | The solids to use as the base to subtract from. | Yes | -| `tools` | [`[Solid]`](/docs/kcl/types/Solid) | The solids to subtract. | Yes | -| `tolerance` | [`number`](/docs/kcl/types/number) | The tolerance to use for the subtraction operation. | No | +| `solids` | [`[Solid]`](/docs/kcl/types/std-types-Solid) | The solids to use as the base to subtract from. | Yes | +| `tools` | [`[Solid]`](/docs/kcl/types/std-types-Solid) | The solids to subtract. | Yes | +| `tolerance` | [`number`](/docs/kcl/types/std-types-number) | The tolerance to use for the subtraction operation. | No | ### Returns -[`[Solid]`](/docs/kcl/types/Solid) +[`[Solid]`](/docs/kcl/types/std-types-Solid) ### Examples @@ -46,8 +46,8 @@ fn cube(center, size) { |> extrude(length = 10) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(center = [0, 0], size = 10) +part002 = cube(center = [7, 3], size = 5) |> translate(z = 1) subtractedPart = subtract([part001], tools = [part002]) @@ -71,8 +71,8 @@ fn cube(center, size) { |> extrude(length = 10) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(center = [0, 0], size = 10) +part002 = cube(center = [7, 3], size = 5) |> translate(z = 1) // This is the equivalent of: subtract([part001], tools=[part002]) diff --git a/docs/kcl/subtract2d.md b/docs/kcl/subtract2d.md index 50d014889..aa3f33f0e 100644 --- a/docs/kcl/subtract2d.md +++ b/docs/kcl/subtract2d.md @@ -10,9 +10,9 @@ Use a 2-dimensional sketch to cut a hole in another 2-dimensional sketch. ```kcl subtract2d( - sketch: [Sketch](/docs/kcl/types/Sketch), - tool: [[[Sketch](/docs/kcl/types/Sketch)]](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)), -): [Sketch](/docs/kcl/types/Sketch) + sketch: Sketch, + tool: [Sketch], +): Sketch ``` @@ -20,12 +20,12 @@ subtract2d( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes | -| `tool` | [`[Sketch]`](/docs/kcl/types/Sketch) | The shape(s) which should be cut out of the sketch. | Yes | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Which sketch should this path be added to? | Yes | +| `tool` | [`[Sketch]`](/docs/kcl/types/std-types-Sketch) | The shape(s) which should be cut out of the sketch. | Yes | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/sweep.md b/docs/kcl/sweep.md index 701e986c9..dc2a9b13a 100644 --- a/docs/kcl/sweep.md +++ b/docs/kcl/sweep.md @@ -12,13 +12,13 @@ You can provide more than one sketch to sweep, and they will all be swept along ```kcl sweep( - sketches: [[[Sketch](/docs/kcl/types/Sketch)]](/docs/kcl/types/[Sketch](/docs/kcl/types/Sketch)), - path: Sweep[Path](/docs/kcl/types/Path), - sectional?: [bool](/docs/kcl/types/bool), - tolerance?: [number](/docs/kcl/types/number), - tagStart?: [TagDeclarator](/docs/kcl/types#tag-declaration), - tagEnd?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)) + sketches: [Sketch], + path: Sketch | Helix, + sectional?: bool, + tolerance?: number, + tagStart?: TagDeclarator, + tagEnd?: TagDeclarator, +): [Solid] ``` @@ -26,16 +26,16 @@ sweep( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketches` | [`[Sketch]`](/docs/kcl/types/Sketch) | The sketch or set of sketches that should be swept in space | Yes | -| `path` | [`SweepPath`](/docs/kcl/types/SweepPath) | The path to sweep the sketch along | Yes | -| `sectional` | [`bool`](/docs/kcl/types/bool) | If true, the sweep will be broken up into sub-sweeps (extrusions, revolves, sweeps) based on the trajectory path components. | No | -| `tolerance` | [`number`](/docs/kcl/types/number) | Tolerance for this operation | No | -| `tagStart` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the start of the sweep, i.e. the original sketch | No | -| `tagEnd` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | A named tag for the face at the end of the sweep | No | +| `sketches` | [`[Sketch]`](/docs/kcl/types/std-types-Sketch) | The sketch or set of sketches that should be swept in space | Yes | +| `path` | [`Sketch`](/docs/kcl/types/std-types-Sketch) or [`Helix`](/docs/kcl/types/std-types-Helix) | The path to sweep the sketch along | Yes | +| `sectional` | [`bool`](/docs/kcl/types/std-types-bool) | If true, the sweep will be broken up into sub-sweeps (extrusions, revolves, sweeps) based on the trajectory path components. | No | +| `tolerance` | [`number`](/docs/kcl/types/std-types-number) | Tolerance for this operation | No | +| `tagStart` | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | A named tag for the face at the start of the sweep, i.e. the original sketch | No | +| `tagEnd` | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | A named tag for the face at the end of the sweep | No | ### Returns -[`[Solid]`](/docs/kcl/types/Solid) +[`[Solid]`](/docs/kcl/types/std-types-Solid) ### Examples diff --git a/docs/kcl/tangentToEnd.md b/docs/kcl/tangentToEnd.md index f480ea1e4..e8aa077e6 100644 --- a/docs/kcl/tangentToEnd.md +++ b/docs/kcl/tangentToEnd.md @@ -9,7 +9,7 @@ Returns the angle coming out of the end of the segment in degrees. ```kcl -tangentToEnd(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/docs/kcl/types/number) +tangentToEnd(tag: TagIdentifier): number ``` @@ -17,11 +17,11 @@ tangentToEnd(tag: [TagIdentifier](/docs/kcl/types#tag-identifier)): [number](/do | Name | Type | Description | Required | |----------|------|-------------|----------| -| `tag` | [`TagIdentifier`](/docs/kcl/types#tag-identifier) | The line segment being queried by its tag | Yes | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagIdentifier`](/docs/kcl/types#TagIdentifier) | The line segment being queried by its tag | Yes | ### Returns -[`number`](/docs/kcl/types/number) +[`number`](/docs/kcl/types/std-types-number) ### Examples diff --git a/docs/kcl/tangentialArc.md b/docs/kcl/tangentialArc.md index 7e36393ed..f11113ef9 100644 --- a/docs/kcl/tangentialArc.md +++ b/docs/kcl/tangentialArc.md @@ -10,13 +10,13 @@ When using radius and angle, draw a curved line segment along part of an imagina ```kcl tangentialArc( - sketch: [Sketch](/docs/kcl/types/Sketch), - endAbsolute?: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - end?: [[[number](/docs/kcl/types/number)]](/docs/kcl/types/[number](/docs/kcl/types/number)), - radius?: [number](/docs/kcl/types/number), - angle?: [number](/docs/kcl/types/number), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketch: Sketch, + endAbsolute?: Point2d, + end?: Point2d, + radius?: number, + angle?: number, + tag?: TagDeclarator, +): Sketch ``` @@ -24,16 +24,16 @@ tangentialArc( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes | -| `endAbsolute` | [`[number]`](/docs/kcl/types/number) | Which absolute point should this arc go to? Incompatible with `end`, `radius`, and `offset`. | No | -| `end` | [`[number]`](/docs/kcl/types/number) | How far away (along the X and Y axes) should this arc go? Incompatible with `endAbsolute`, `radius`, and `offset`. | No | -| `radius` | [`number`](/docs/kcl/types/number) | Radius of the imaginary circle. `angle` must be given. Incompatible with `end` and `endAbsolute`. | No | -| `angle` | [`number`](/docs/kcl/types/number) | Offset of the arc in degrees. `radius` must be given. Incompatible with `end` and `endAbsolute`. | No | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this arc | No | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Which sketch should this path be added to? | Yes | +| `endAbsolute` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | Which absolute point should this arc go to? Incompatible with `end`, `radius`, and `offset`. | No | +| `end` | [`Point2d`](/docs/kcl/types/std-types-Point2d) | How far away (along the X and Y axes) should this arc go? Incompatible with `endAbsolute`, `radius`, and `offset`. | No | +| `radius` | [`number`](/docs/kcl/types/std-types-number) | Radius of the imaginary circle. `angle` must be given. Incompatible with `end` and `endAbsolute`. | No | +| `angle` | [`number`](/docs/kcl/types/std-types-number) | Offset of the arc in degrees. `radius` must be given. Incompatible with `end` and `endAbsolute`. | No | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Create a new tag which refers to this arc | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/tau.md b/docs/kcl/tau.md deleted file mode 100644 index 60a25f16d..000000000 --- a/docs/kcl/tau.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: "tau" -excerpt: "Return the value of `tau`. The full circle constant (τ). Equal to 2π." -layout: manual ---- - -**WARNING:** This function is deprecated. - -Return the value of `tau`. The full circle constant (τ). Equal to 2π. - -**DEPRECATED** use the constant TAU - -```js -tau(): number -``` - -### Tags - -* `math` - - - -### Returns - -[`number`](/docs/kcl/types/number) - - -### Examples - -```js -exampleSketch = startSketchOn(XZ) - |> startProfile(at = [0, 0]) - |> angledLine(angle = 50, length = 10 * tau()) - |> yLine(endAbsolute = 0) - |> close() - -example = extrude(exampleSketch, length = 5) -``` - -![Rendered example of tau 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAD0XUlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666v+oF3uxF3vtF3uxF3uta6655sFf//Vf/z5cddVVV1111f8/6EEPehBXXXXVVVddddVVV1111VX/11xzzTUP/qZv+qan80z33XffrR/yIR/yEK666qqrrrrq/xeCq6666qqrrrrqqquuuuqq/2OuueaaB3/TN33T05/+9KfzlV/5lezu7nLNNdc8+Ju+6ZuezlVXXXXVVVf9/0Jw1VVXXXXVVVddddVVV131f8g111zz4A//8A//rqc//el813d9F7u7u3znd34nu7u7XHPNNQ/+pm/6pqdz1VVXXXXVVf9/EFx11VVXXXXVVVddddVVV/0f8uEf/uHftbGx8drf9V3fxf12d3f5ru/6LnZ3d7nmmmse/E3f9E1P56qrrrrqqqv+fyC46qqrrrrqqquuuuqqq676P+JzP/dzf+vGG2987e/6ru/igSSxu7vLd33Xd7G7u8s111zz4G/6pm96OlddddVVV131fx/BVVddddVVV1111VVXXXXV/wGf+7mf+1s33njja3/lV34l95OEJO63u7vLd3/3d7O7u8s111zz4G/6pm96OlddddVVV131fxvBVVddddVVV1111VVXXXXV/3Kf+7mf+1s33njja//kT/4k95PEc5PE7u4u3/3d383u7i7XXHPNg7/pm77p6Vx11VVXXXXV/10EV1111VVXXXXVVVddddVV/4t9+Id/+He92Iu92Gv/5E/+JLfeeisAknhukrjf7u4u3/M938Pu7i7XXHPNg7/pm77p6Vx11VVXXXXV/00EV1111VVXXXXVVVddddVV/0u9zuu8znu/zuu8znt/53d+J7feeisAknggSUjigSSxu7vL93zP97C7u8s111zz4G/6pm96OlddddVVV131fw/BVVddddVVV1111VVXXXXV/0Iv9mIv9tof/uEf/l3f+Z3fya233gqAJB5IEs9NEvfb3d3le77ne7jfNddc82Cuuuqqq6666v8Wgquuuuqqq6666qqrrrrqqv9lXuzFXuy1P/dzP/e3vvM7v5Nbb70VSUjigSTx3CTxQJJ47dd+bQCuueaaB7/2a7/2e3HVVVddddVV/7dQueqqq6666qqrrrrqqquu+l/kxV7sxV77cz/3c3/rp37qp7j11luRxHOTxANJ4rlJ4rVe67V4qZd6Ke539uzZZ3DVVVddddVV/7cQXHXVVVddddVVV1111VVX/S/xYi/2Yq/9uZ/7ub/1W7/1W/zVX/0VknggSUjigSTx3CTxUi/1UrzWa70WAEdHR1x11VVXXXXV/1EEV1111VVXXXXVVVddddVV/wtcc801D/7cz/3c3/qrv/orfuu3fgtJPJAknpsknpskHvSgB/FWb/VWAPzBH/wB9/uHf/iH3+aqq6666qqr/m+hctVVV1111VVXXXXVVVdd9T/cNddc8+DP+ZzP+a2nP/3p/NRP/RSSeCBJPDdJPJAkAB70oAfxXu/1XgD81V/9FefPn+eqq6666qqr/g+jctVVV1111VVXXXXVVVdd9T/ch3/4h3/X4eHhg7/7u78bSTyQJB5IEs9NEgAPetCDeK/3ei8AnvjEJ3L77bdjm42NDQDuu+++W7nqqquuuuqq/1uoXHXVVVddddVVV1111VVX/Q/2uZ/7ub+1sbHx2t/93d/Nc5PEA0niuUkC4EEPehDv9V7vBcDtt9/OE5/4RGxz1VVXXXXVVf/HEVx11VVXXXXVVVddddVVV/0P9bmf+7m/deONN772d3/3d/NAkpDEA0niuUkC4Pjx47zXe70XAOfOneOv/uqvsA3AxsYGAPfdd9+tXHXVVVddddX/PVSuuuqqq6666qqrrrrqqqv+B/rcz/3c37rxxhtf+6u+6qt4IEk8N0k8kCTud/z4cT7yIz8SgHPnzvGHf/iH2OZ+p0+fBuDs2bO3ctVVV1111VX/91C56qqrrrrqqquuuuqqq676H+bDP/zDv+vGG2987Z/6qZ/igSTxQJJ4bpK43/Hjx3nLt3xLAM6dO8cf/uEfYpsHsg3AfffddytXXXXVVVdd9X8PwVVXXXXVVVddddVVV1111f8g7/iO7/hZr/M6r/PeP/VTP8Wtt97K/STxQJJ4bpJ4oLd8y7fkwQ9+MOfOneMP//APsc0D2WZjYwOA++6771auuuqqq6666v8eKlddddVVV1111VVXXXXVVf9DvM7rvM57v9M7vdNnf9d3fRe33norAJJ4bpJ4IEk8t/d6r/fiQQ96EEdHR/zhH/4htnkg2wBsbGwAcPbs2Wdw1VVXXXXVVf/3ULnqqquuuuqqq6666qqrrvof4MVe7MVe+8M//MO/67u+67u49dZbAZDEc5PEA0niub3Xe70XD3rQgzg6OuLXf/3Xsc0D2eaqq6666qqr/p+gctVVV1111VVXXXXVVVdd9d/sxV7sxV77cz/3c3/rp37qp7j11lsBkMQDSeK5SeK5vdd7vRcPetCDODo64q/+6q+wzQPZ5oE2NjYAuO+++27lqquuuuqqq/7voXLVVVddddVVV1111VVXXfXf6MVe7MVe+3M/93N/67d+67f467/+awAk8UCSeG6SeCBJvOVbviUPetCDAPirv/orzp07xwPZ5rltbGwAcPbs2Vu56qqrrrrqqv97qFx11VVXXXXVVVddddVVV/03ueaaax78uZ/7ub/113/91/z2b/82AJJ4IEk8N0k8kCTe8i3fkpd6qZcC4A/+4A84d+4cD2Sb52abjY0Nrrrqqquuuur/MCpXXXXVVVddddVVV1111VX/Da655poHf9M3fdPTb731Vn7qp34KAEk8kCQeSBLPTRIv9VIvxUu91EsB8Ad/8AecO3eOB7LNc7PNA9133323ctVVV1111VX/91C56qqrrrrqqquuuuqqq676L3bNNdc8+MM//MO/69Zbb+W7vuu7kMRzk8QDSeK5SeJBD3oQb/mWbwnAH/zBH3Du3DkeyDbPzTYAGxsbANx33323ctVVV1111VX/N1G56qqrrrrqqquuuuqqq676L/bhH/7h37W5ufna3/Vd34UkHkgSz00SDyQJgAc96EG853u+JwB/9Vd/xblz5/iX2OZ+GxsbAJw9e/ZWrrrqqquuuur/JoKrrrrqqquuuuqqq6666qr/Qp/7uZ/7WzfeeONrf9d3fReSeCBJPDdJPJAkAB70oAfxnu/5ngA88YlP5LbbbuOBbGObB7LNA21sbABw33333cpVV1111VVX/d9E5aqrrrrqqquuuuqqq6666r/I537u5/7WjTfe+Npf9VVfhSQeSBIPJInnJgmABz3oQbzne74nALfffjtPeMITeCDbPDfbPJBtrrrqqquuuur/ASpXXXXVVVddddVVV1111VX/BT73cz/3t2688cbX/qmf+ikk8UCSeCBJPDdJABw/fpz3fM/3BODcuXP85V/+JQ9km+dmmweyDcDGxgYA9913361cddVVV1111f9NBFddddVVV1111VVXXXXVVf/JPvzDP/y7XuzFXuy1f/qnf5pnPOMZPJAkHkgSDyQJSQAcP36cj/iIjwDg3Llz/MEf/AEPZJvnZpsHss39NjY2ADh79uwzuOqqq6666qr/m6hcddVVV1111VVXXXXVVVf9J3rHd3zHz3qd13md9/7u7/5ubr31Vu4niecmiQeSxP2OHz/OW77lWwJw7tw5/uAP/oAHss1zs80D2eaqq6666qqr/p+hctVVV1111VVXXXXVVVdd9Z/kxV7sxV77nd7pnT77u7/7u7n11lu5nySemyQeSBIP9JZv+ZY86EEP4ty5c/zBH/wBD2Sb52abB7LNcztz5gwA//AP//DbXHXVVVddddX/TVSuuuqqq6666qqrrrrqqqv+E7zYi73Ya3/u537ub333d383t956K/eTxANJ4rlJ4oHe8z3fkwc96EEcHR3xB3/wBzyQbZ6bbR7INs/NNlddddVVV131/wCVq6666qqrrrrqqquuuuqq/2Av9mIv9tqf+7mf+1s//dM/za233sr9JPFAknhuknig93zP9+RBD3oQR0dH/Nqv/RoPZJvnZpsHss1zsw3AxsYGAPfdd9+tXHXVVVddddX/TVSuuuqqq6666qqrrrrqqqv+A73Yi73Ya3/u537ub/32b/82f/3Xf839JPFAknggSTy393zP9+RBD3oQR0dH/NVf/RUPZJvnZpsHss1zs81VV1111VVX/T9C5aqrrrrqqquuuuqqq6666j/INddc8+DP/dzP/a2//uu/5rd/+7e5nyQeSBIPJInn9p7v+Z486EEPAuCv/uqvOHfuHPezzXOzzQPZ5rnZ5n5nzpwB4B/+4R9+m6uuuuqqq676v4vKVVddddVVV1111VVXXXXVf4BrrrnmwZ/zOZ/zW7feeis//dM/DYAknpskHkgSDySJt3iLt+BBD3oQAH/wB3/AuXPnuJ9tnpttHsg2z802D7RYLAC47777buWqq6666qqr/u+ictVVV1111VVXXXXVVVdd9e90zTXXPPjDP/zDv+vo6OjB3/3d3w2AJB5IEs9NEg8kidd8zdfkpV7qpQD4gz/4A86dO8f9bPNAtnlutnlutnkg21x11VVXXXXV/xNUrrrqqquuuuqqq6666qqr/p0+/MM//Ls2Nzdf+7u/+7sBkMQDSeKBJPHcJPGSL/mSvOZrviYAf/AHf8C5c+e4n20eyDbPzTbPzTYPZBuAzc1NAO67775bueqqq6666qr/uwiuuuqqq6666qqrrrrqqqv+HT73cz/3t2688cbX/u7v/m4AJPFAknggSTw3STzoQQ/iLd/yLQH4q7/6K86dO8f9bPNAtnlutnlutnkg29xvY2MDgLNnzz6Dq6666qqrrvq/i8pVV1111VVXXXXVVVddddW/0ed+7uf+1o033vjaX/3VXw2AJB5IEg8kiQeSBMCDHvQg3uM93gOAv/qrv+K2227jfrZ5INs8N9s8N9s8kG2uuuqqq6666v8hKlddddVVV1111VVXXXXVVf8GH/7hH/5dN95442v/9E//NACSeCBJPJAkHkgSAA960IN4j/d4DwBuu+02brvtNgBs89xs89xs80C2eW62eW6bm5sA3Hfffbdy1VVXXXXVVf93EVx11VVXXXXVVVddddVVV/0rveM7vuNnvc7rvM57//RP/zTPeMYzkMT9JCGJB5LEA0kC4Pjx47zHe7wHALfddht/9Vd/BYBtnpttnpttHsg2z802z802GxsbAJw9e/ZWrrrqqquuuur/LipXXXXVVVddddVVV1111VX/Cq/zOq/z3u/0Tu/02d/93d/NM57xDB5IEg8kiecmCYDjx4/z4R/+4QCcO3eOv/qrvwLANs/NNs/NNg9km+dmm+dmG4DNzU0A7rvvvlu56qqrrrrqqv+7qFx11VVXXXXVVVddddVVV72IXuzFXuy1P/zDP/y7vvu7v5tnPOMZPJAkHkgSz00SAMePH+fd3/3dATh37hx/8Ad/AIBtnpttHsg2z802z802z802V1111VVXXfX/DJWrrrrqqquuuuqqq6666qoXwYu92Iu99ud+7uf+1nd/93fzjGc8gweSxANJ4oEkcb/jx4/zFm/xFhw/fpxz587xB3/wBwDY5rnZ5oFs89xs89xs89xsc7/NzU0A7rvvvlu56qqrrrrqqv/bqFx11VVXXXXVVVddddVVV/0LXuzFXuy1P/dzP/e3fvqnf5pnPOMZPJAkHkgSDySJB3qLt3gLHvSgB3F0dMQf/MEfAGCbB7LNc7PNc7PNc7PNc7PNA21sbABw9uzZW7nqqquuuuqq/9uoXHXVVVddddVVV1111VVXvRDXXHPNgz/3cz/3t/76r/+av/mbv+GBJPFAknggSTzQe7zHe/CgBz2Io6Mjfu3Xfg3bPDfbPDfbPDfbPDfbPDfbPLeNjQ0A7rvvvlu56qqrrrrqqv/bqFx11VVXXXXVVVddddVVV70A11xzzYO/6Zu+6em33norP/MzP8MDSeKBJPFAknig93iP9+BBD3oQR0dH/NVf/RW2eW62eW62eW62eW62eW62eW62ueqqq6666qr/R6hcddVVV1111VVXXXXVVVc9H9dcc82DP/zDP/y7br31Vr7ne76H+0nigSTx3CTxQO/xHu/Bgx70IAD+6q/+irNnz/LcbPPcbPPcbPPcbPPcbPPcbAOwubkJwH333XcrV1111VVXXfV/G5Wrrrrqqquuuuqqq6666qrn48M//MO/a3Nz87W/53u+h/tJ4oEk8UCSeG5v+ZZvyYMe9CAA/uAP/oCzZ8/y3Gzz3GzzQLZ5brZ5brZ5brZ5oM3NTQDOnj37DK666qqrrrrq/zYqV1111VVXXXXVVVddddVVz+VzP/dzf2tzc/O1v+d7vof7SeKBJPFAknhur/mar8lLvuRLAvD7v//7nDt3jgeyzXOzzXOzzXOzzXOzzXOzzXPb2NgA4L777ruVq6666qqrrvq/jeCqq6666qqrrrrqqquuuuoBPvdzP/e3brzxxtf+nu/5Hu4niQeSxANJ4rm91Eu9FK/5mq8JwO///u9z7tw5Hsg2z802z802z802z802z802z802m5ubAJw9e/ZWrrrqqquuuur/NipXXXXVVVddddVVV1111VXP9Lmf+7m/deONN77293zP93A/STyQJB5IEg8kiQc96EG8xVu8BQC///u/z7lz53gg2zw32zw32zw32zw32zw32zw321x11VVXXXXV/zMEV1111VVXXXXVVVddddVVwId/+Id/14u92Iu99s/8zM+wu7sLgCQeSBIPJIkHksSDHvQg3v3d3x2Av/zLv+TcuXM8kG2em22em22em22em22em22em23ut7m5CcB99913K1ddddVVV131fxuVq6666qqrrrrqqquuuur/vXd8x3f8rNd5ndd57+/5nu/h1ltvBUAS95PEA0niuUniQQ96EO/+7u8OwBOe8ARuu+027meb52ab58c2z802z802z802z80299vc3ATgvvvuu5Wrrrrqqquu+r+PylVXXXXVVVddddVVV131/9rrvM7rvPc7vdM7ffb3fM/3cOuttyKJB5LEA0niuUniQQ96EO/+7u8OwG233cYTnvAE7meb52ab52ab52ab58c2z802z802D7S5uQnA2bNnb+Wqq6666qqr/u+jctVVV1111VVXXXXVVVf9v/ViL/Zir/3hH/7h3/U93/M93HrrrUjigSTxQJJ4bpI4duwY7/7u7w7AuXPn+Mu//EvuZ5vnZpvnZpvnZpvnZpvnxzbPzTbPbWNjA4D77rvvVq666qqrrrrq/z4qV1111VVXXXXVVVddddX/Sy/2Yi/22p/7uZ/7Wz/zMz/DrbfeiiQeSBIPJIkHkgTAsWPHeI/3eA8Azp07x+///u9zP9s8N9s8N9s8N9s8N9s8P7Z5brZ5bra56qqrrrrqqv9nqFx11VVXXXXVVVddddVV/++82Iu92Gt/7ud+7m/99m//Nn/913+NJB5IEg8kiQeSBMCxY8d4i7d4C44dO8a5c+f4/d//fQBs89xs8/zY5rnZ5rnZ5rnZ5vmxzXOzDcDm5iYA9913361cddVVV1111f99VK666qqrrrrqqquuuuqq/1euueaaB3/u537ub/31X/81v/M7v4MkHkgSDySJB5LE/d7iLd6CBz3oQRwdHfH7v//7ANjmudnmudnm+bHNc7PNc7PNc7PN82Ob+21ubgJw9uzZZ3DVVVddddVV//dRueqqq6666qqrrrrqqqv+37jmmmse/E3f9E1Pv/XWW/mZn/kZJPFAknggSTyQJO737u/+7jzoQQ/i6OiIX/3VXwXANs/NNs/NNs/NNs+PbZ6bbZ6bbZ4f21x11VVXXXXV/2NUrrrqqquuuuqqq6666qr/F6655poHf/iHf/h33XrrrXzP93wPkrifJB5IEs9NEvd793d/dx70oAdxdHTE7//+72Ob58c2z802z802z802z49tnpttnh/bPLdrrrkGgPvuu+9Wrrrqqquuuur/PipXXXXVVVddddVVV1111f8LH/7hH/5dm5ubr/093/M9SOJ+knggSTyQJB7o3d/93XnQgx7E0dERf/mXf8nh4SHPzTbPj22em22em22eH9s8N9s8N9s8P7a539mzZ2/lqquuuuqqq/7vI7jqqquuuuqqq6666qqr/s/73M/93N+68cYbX/t7v/d7kcT9JPFAknggSTzQW7zFW/CgBz0IgL/8y7/k7NmzPDfbPDfb2Oa52ea52ea52cY2z802z802z49tADY3NwG47777buWqq6666qqr/u+jctVVV1111VVXXXXVVVf9n/a5n/u5v3XjjTe+9td+7dfyQJJ4IEk8kCQe6DVf8zV5yZd8SQB+7/d+j3PnzvHcbPPcbPPcbPP82Oa52eb5sc1zs83zY5urrrrqqquu+n+KylVXXXXVVVddddVVV131f9bnfu7n/taNN9742j/zMz/DA0nigSTxQJJ4oJd6qZfiNV7jNQD4vd/7Pc6dO8cD2eb5sc1zs83zY5vnZpvnZpvnxzbPzTYPtLm5CcB99913K1ddddVVV131/wPBVVddddVVV1111VVXXfV/0od/+Id/14u92Iu99s/8zM/wjGc8g/tJ4oEk8UCSeKAHPehBvPmbvzkAv/d7v8e5c+d4INs8N9vY5rnZ5rnZxjbPzTbPzTbPj22em22e2+bmJgBnz569lauuuuqqq676/4HKVVddddVVV1111VVXXfV/zuu8zuu89+u8zuu89/d8z/fwjGc8g/tJ4oEk8UCSeKAHPehBvPu7vzsAf/EXf8G5c+d4INs8N9s8P7Z5brZ5fmzz3Gzz/Njmudnm+dnc3ATgvvvuu5Wrrrrqqquu+v+BylVXXXXVVVddddVVV131f8qLvdiLvfaHf/iHf9f3fM/38IxnPIP7SeJ+knhuknigBz3oQbz7u787AI9//OO57bbbuJ9tnh/bPDfbPD+2eW62eX5s89xs8/zY5vmxzebmJlddddVVV131/wyVq6666qqrrrrqqquuuur/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BsA2ALaxDYBtAGxjm/vZxjYAtgGwDYBtbHM/2wDYBsA297MNgG0AbPNAtgGwDYBtnpttAGwDYJvnxzb3s839bPP82OZ+tnkg27wwtnkg2zyQbf4ltnlutnl+bPOvYZvnxzYviG3+PWzzL7ENwPHjx7nqqquuuuqqq/7LULnqqquuuuqqq/5LnD179tZrrrnmwQCv9EqvxCu90itx1VVXXfX/1X333XfrfffddytXXXXVVVddddV/NvSgBz2Iq6666qqrrrrqP9+LvdiLvdY7vdM7fTZXXXXVVVfx9V//9e9z33333cpVV1111VVXXfWfDT3oQQ/iqquuuuqqq6666qqrrrrqqquuuuqqq676P4nKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q/iHwFexKM0GIBbJQAAAABJRU5ErkJggg==) - - diff --git a/docs/kcl/translate.md b/docs/kcl/translate.md index cb8b5bcdf..870d5c69c 100644 --- a/docs/kcl/translate.md +++ b/docs/kcl/translate.md @@ -12,12 +12,12 @@ Translate is really useful for sketches if you want to move a sketch and then ro ```kcl translate( - objects: [[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry), - x?: [number](/docs/kcl/types/number), - y?: [number](/docs/kcl/types/number), - z?: [number](/docs/kcl/types/number), - global?: [bool](/docs/kcl/types/bool), -): [[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)Or[Sketch](/docs/kcl/types/Sketch)OrImportedGeometry) + objects: [Solid] | [Sketch] | ImportedGeometry, + x?: number, + y?: number, + z?: number, + global?: bool, +): [Solid] | [Sketch] | ImportedGeometry ``` @@ -25,15 +25,15 @@ translate( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `objects` | [`SolidOrSketchOrImportedGeometry`](/docs/kcl/types/SolidOrSketchOrImportedGeometry) | The solid, sketch, or set of solids or sketches to move. | Yes | -| `x` | [`number`](/docs/kcl/types/number) | The amount to move the solid or sketch along the x axis. Defaults to 0 if not provided. | No | -| `y` | [`number`](/docs/kcl/types/number) | The amount to move the solid or sketch along the y axis. Defaults to 0 if not provided. | No | -| `z` | [`number`](/docs/kcl/types/number) | The amount to move the solid or sketch along the z axis. Defaults to 0 if not provided. | No | -| `global` | [`bool`](/docs/kcl/types/bool) | If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move. | No | +| `objects` | [`[Solid]`](/docs/kcl/types/std-types-Solid) or [`[Sketch]`](/docs/kcl/types/std-types-Sketch) or [`ImportedGeometry`](/docs/kcl/types#ImportedGeometry) | The solid, sketch, or set of solids or sketches to move. | Yes | +| `x` | [`number`](/docs/kcl/types/std-types-number) | The amount to move the solid or sketch along the x axis. Defaults to 0 if not provided. | No | +| `y` | [`number`](/docs/kcl/types/std-types-number) | The amount to move the solid or sketch along the y axis. Defaults to 0 if not provided. | No | +| `z` | [`number`](/docs/kcl/types/std-types-number) | The amount to move the solid or sketch along the z axis. Defaults to 0 if not provided. | No | +| `global` | [`bool`](/docs/kcl/types/std-types-bool) | If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move. | No | ### Returns -[`SolidOrSketchOrImportedGeometry`](/docs/kcl/types/SolidOrSketchOrImportedGeometry) - Data for a solid, sketch, or an imported geometry. +[`[Solid]`](/docs/kcl/types/std-types-Solid) or [`[Sketch]`](/docs/kcl/types/std-types-Sketch) or [`ImportedGeometry`](/docs/kcl/types#ImportedGeometry) - Data for a solid, sketch, or an imported geometry. ### Examples @@ -117,7 +117,7 @@ translate( // Move a sketch. -fn square(length) { +fn square(@length) { l = length / 2 p0 = [-l, -l] p1 = [-l, l] diff --git a/docs/kcl/types.md b/docs/kcl/types.md index cf454d512..7cea7be5a 100644 --- a/docs/kcl/types.md +++ b/docs/kcl/types.md @@ -9,10 +9,6 @@ layout: manual All these types can be nested in various forms where nesting applies. Like arrays can hold objects and vice versa. -## Boolean - -`true` or `false` work when defining values. - ## Constant declaration Constants are defined with a name and a value, like so: @@ -23,7 +19,7 @@ myBool = false Currently you cannot redeclare a constant. -## Array +## Arrays An array is defined with `[]` braces. What is inside the brackets can be of any type. For example, the following is completely valid: @@ -36,7 +32,7 @@ If you want to get a value from an array you can use the index like so: `myArray[0]`. -## Object +## Objects An object is defined with `{}` braces. Here is an example object: @@ -47,6 +43,15 @@ myObj = { a = 0, b = "thing" } We support two different ways of getting properties from objects, you can call `myObj.a` or `myObj["a"]` both work. +## `ImportedGeometry` + +Using `import` you can import geometry defined using other CAD software. In KCL, +these objects have type `ImportedGeometry` and can mostly be treated like any +other solid (they can be rotated, scaled, etc.), although there is no access to +their internal components. See the [modules and imports docs](modules) for more +detail on importing geometry. + + ## Binary expressions You can also do math! Let's show an example below: @@ -176,7 +181,7 @@ Check the docs page for each function and look at its examples to see. Tags are used to give a name (tag) to a specific path. -### Tag Declaration +### `TagDeclarator` The syntax for declaring a tag is `$myTag` you would use it in the following way: @@ -199,7 +204,7 @@ startSketchOn(XZ) |> close() ``` -### Tag Identifier +### `TagIdentifier` As per the example above you can use the tag identifier to get a reference to the tagged object. The syntax for this is `myTag`. @@ -207,6 +212,16 @@ tagged object. The syntax for this is `myTag`. In the example above we use the tag identifier to get the angle of the segment `segAng(rectangleSegmentA001, %)`. +### `Start` + +There is a special tag, `START` (with type `Start`, although under the cover, it's a string) +for identifying the face of a solid which was the start of an extrusion (i.e., the surface which +is extruded). + +### `End` + +There is a special tag, `END` (with type `End`, although under the cover, it's a string) +for identifying the face of a solid which was finishes an extrusion. ### Tag Scope @@ -234,8 +249,8 @@ fn rect(origin) { |> close() } -rect([0, 0]) -rect([20, 0]) +rect(origin = [0, 0]) +rect(origin = [20, 0]) ``` Those tags would only be available in the `rect` function and not globally. @@ -264,8 +279,8 @@ fn rect(origin) { |> close() } -rect([0, 0]) -myRect = rect([20, 0]) +rect(origin = [0, 0]) +myRect = rect(origin = [20, 0]) myRect |> extrude(length = 10) diff --git a/docs/kcl/types/ArtifactId.md b/docs/kcl/types/ArtifactId.md deleted file mode 100644 index 6447248f1..000000000 --- a/docs/kcl/types/ArtifactId.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "ArtifactId" -excerpt: "" -layout: manual ---- - - -**Type:** [`string`](/docs/kcl/types/string) (`uuid`) - - - - - - - diff --git a/docs/kcl/types/BasePath.md b/docs/kcl/types/BasePath.md deleted file mode 100644 index 9d616b105..000000000 --- a/docs/kcl/types/BasePath.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "BasePath" -excerpt: "A base path." -layout: manual ---- - -A base path. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `from` |`[number, number]`| The from point. | No | -| `to` |`[number, number]`| The to point. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | -| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | - - diff --git a/docs/kcl/types/EdgeCut.md b/docs/kcl/types/EdgeCut.md deleted file mode 100644 index 8046401eb..000000000 --- a/docs/kcl/types/EdgeCut.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "EdgeCut" -excerpt: "A fillet or a chamfer." -layout: manual ---- - -A fillet or a chamfer. - - - - - -**This schema accepts exactly one of the following:** - -A fillet. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `fillet`| | No | -| `id` |[`string`](/docs/kcl/types/string)| The id of the engine command that called this fillet. | No | -| `radius` |`TyF64`| | No | -| `edgeId` |[`string`](/docs/kcl/types/string)| The engine id of the edge to fillet. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| | No | - - ----- -A chamfer. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `chamfer`| | No | -| `id` |[`string`](/docs/kcl/types/string)| The id of the engine command that called this chamfer. | No | -| `length` |`TyF64`| | No | -| `edgeId` |[`string`](/docs/kcl/types/string)| The engine id of the edge to chamfer. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| | No | - - ----- - - - - diff --git a/docs/kcl/types/ExtrudeSurface.md b/docs/kcl/types/ExtrudeSurface.md deleted file mode 100644 index 991ec8e8a..000000000 --- a/docs/kcl/types/ExtrudeSurface.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: "ExtrudeSurface" -excerpt: "An extrude surface." -layout: manual ---- - -An extrude surface. - - - - - -**This schema accepts exactly one of the following:** - -An extrude plane. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `extrudePlane`| | No | -| `faceId` |[`string`](/docs/kcl/types/string)| The face id for the extrude plane. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag. | No | -| `id` |[`string`](/docs/kcl/types/string)| The id of the geometry. | No | -| `sourceRange` |`[, `integer`, `integer`, `integer`]`| The source range. | No | - - ----- -An extruded arc. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `extrudeArc`| | No | -| `faceId` |[`string`](/docs/kcl/types/string)| The face id for the extrude plane. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag. | No | -| `id` |[`string`](/docs/kcl/types/string)| The id of the geometry. | No | -| `sourceRange` |`[, `integer`, `integer`, `integer`]`| The source range. | No | - - ----- -Geometry metadata. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `chamfer`| | No | -| `faceId` |[`string`](/docs/kcl/types/string)| The id for the chamfer surface. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag. | No | -| `id` |[`string`](/docs/kcl/types/string)| The id of the geometry. | No | -| `sourceRange` |`[, `integer`, `integer`, `integer`]`| The source range. | No | - - ----- -Geometry metadata. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `fillet`| | No | -| `faceId` |[`string`](/docs/kcl/types/string)| The id for the fillet surface. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag. | No | -| `id` |[`string`](/docs/kcl/types/string)| The id of the geometry. | No | -| `sourceRange` |`[, `integer`, `integer`, `integer`]`| The source range. | No | - - ----- - - - - diff --git a/docs/kcl/types/FaceTag.md b/docs/kcl/types/FaceTag.md deleted file mode 100644 index e9dad7cdd..000000000 --- a/docs/kcl/types/FaceTag.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: "FaceTag" -excerpt: "A tag for a face." -layout: manual ---- - -A tag for a face. - - - - -**This schema accepts any of the following:** - - -[`StartOrEnd`](/docs/kcl/types/StartOrEnd) - - - - - - - - ----- -A tag for the face. - -[`TagIdentifier`](/docs/kcl/types#tag-identifier) - - - - - - - - ----- - - - - - diff --git a/docs/kcl/types/GeoMeta.md b/docs/kcl/types/GeoMeta.md deleted file mode 100644 index 35b8f4c9e..000000000 --- a/docs/kcl/types/GeoMeta.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "GeoMeta" -excerpt: "Geometry metadata." -layout: manual ---- - -Geometry metadata. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `id` |[`string`](/docs/kcl/types/string)| The id of the geometry. | No | -| `sourceRange` |`[, `integer`, `integer`, `integer`]`| The source range. | No | - - diff --git a/docs/kcl/types/GeometryWithImportedGeometry.md b/docs/kcl/types/GeometryWithImportedGeometry.md deleted file mode 100644 index 3e73a32c8..000000000 --- a/docs/kcl/types/GeometryWithImportedGeometry.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: "GeometryWithImportedGeometry" -excerpt: "A geometry including an imported geometry." -layout: manual ---- - -A geometry including an imported geometry. - - - - - -**This schema accepts exactly one of the following:** - - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: [`Sketch`](/docs/kcl/types/Sketch)| | No | -| `id` |[`string`](/docs/kcl/types/string)| The id of the sketch (this will change when the engine's reference to it changes). | No | -| `paths` |`[` [`Path`](/docs/kcl/types/Path) `]`| The paths in the sketch. | No | -| `on` |[`SketchSurface`](/docs/kcl/types/SketchSurface)| What the sketch is on (can be a plane or a face). | No | -| `start` |[`BasePath`](/docs/kcl/types/BasePath)| The starting path. | No | -| `tags` |`object`| Tag identifiers that have been declared in this sketch. | No | -| `artifactId` |[`string`](/docs/kcl/types/string)| The original id of the sketch. This stays the same even if the sketch is is sketched on face etc. | No | -| `originalId` |[`string`](/docs/kcl/types/string)| | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: [`Solid`](/docs/kcl/types/Solid)| | No | -| `id` |[`string`](/docs/kcl/types/string)| The id of the solid. | No | -| `artifactId` |[`string`](/docs/kcl/types/string)| The artifact ID of the solid. Unlike `id`, this doesn't change. | No | -| `value` |`[` [`ExtrudeSurface`](/docs/kcl/types/ExtrudeSurface) `]`| The extrude surfaces. | No | -| `sketch` |[`Sketch`](/docs/kcl/types/Sketch)| The sketch. | No | -| `height` |[`number`](/docs/kcl/types/number)| The height of the solid. | No | -| `startCapId` |[`string`](/docs/kcl/types/string)| The id of the extrusion start cap | No | -| `endCapId` |[`string`](/docs/kcl/types/string)| The id of the extrusion end cap | No | -| `edgeCuts` |`[` [`EdgeCut`](/docs/kcl/types/EdgeCut) `]`| Chamfers or fillets on this solid. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| The units of the solid. | No | -| `sectional` |`boolean`| Is this a sectional solid? | No | - - ----- -Data for an imported geometry. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `ImportedGeometry`| | No | -| `id` |[`string`](/docs/kcl/types/string)| The ID of the imported geometry. | No | -| `value` |`[` [`string`](/docs/kcl/types/string) `]`| The original file paths. | No | - - ----- - - - - diff --git a/docs/kcl/types/KclNone.md b/docs/kcl/types/KclNone.md deleted file mode 100644 index 1e7c7f8a4..000000000 --- a/docs/kcl/types/KclNone.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "KclNone" -excerpt: "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application)." -layout: manual ---- - -KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application). - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | - - diff --git a/docs/kcl/types/KclValue.md b/docs/kcl/types/KclValue.md deleted file mode 100644 index d999068a5..000000000 --- a/docs/kcl/types/KclValue.md +++ /dev/null @@ -1,326 +0,0 @@ ---- -title: "KclValue" -excerpt: "Any KCL value." -layout: manual ---- - -Any KCL value. - - - - - -**This schema accepts exactly one of the following:** - - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Uuid`| | No | -| `value` |[`string`](/docs/kcl/types/string)| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Bool`| | No | -| `value` |`boolean`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Number`| | No | -| `value` |[`number`](/docs/kcl/types/number)| | No | -| `ty` |[`NumericType`](/docs/kcl/types/NumericType)| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `String`| | No | -| `value` |[`string`](/docs/kcl/types/string)| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `MixedArray`| | No | -| `value` |`[` [`KclValue`](/docs/kcl/types/KclValue) `]`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `HomArray`| | No | -| `value` |`[` [`KclValue`](/docs/kcl/types/KclValue) `]`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Object`| | No | -| `value` |`object`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: [`TagIdentifier`](/docs/kcl/types#tag-identifier)| | No | -| `value` |[`string`](/docs/kcl/types/string)| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: [`TagDeclarator`](/docs/kcl/types#tag-declaration)| | No | -| `value` |[`string`](/docs/kcl/types/string)| | No | -| `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`| | No | -| `start` |`integer`| | No | -| `end` |`integer`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: [`Plane`](/docs/kcl/types/Plane)| | No | -| `value` |[`Plane`](/docs/kcl/types/Plane)| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: [`Face`](/docs/kcl/types/Face)| | No | -| `value` |[`Face`](/docs/kcl/types/Face)| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: [`Sketch`](/docs/kcl/types/Sketch)| | No | -| `value` |[`Sketch`](/docs/kcl/types/Sketch)| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: [`Solid`](/docs/kcl/types/Solid)| | No | -| `value` |[`Solid`](/docs/kcl/types/Solid)| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: [`Helix`](/docs/kcl/types/Helix)| | No | -| `value` |[`Helix`](/docs/kcl/types/Helix)| | No | - - ----- -Data for an imported geometry. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `ImportedGeometry`| | No | -| `id` |[`string`](/docs/kcl/types/string)| The ID of the imported geometry. | No | -| `value` |`[` [`string`](/docs/kcl/types/string) `]`| The original file paths. | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Function`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Module`| | No | -| `value` |`integer`| Identifier of a source file. Uses a u32 to keep the size small. | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Type`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: [`KclNone`](/docs/kcl/types/KclNone)| | No | -| `value` |[`KclNone`](/docs/kcl/types/KclNone)| KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application). | No | - - ----- - - - - diff --git a/docs/kcl/types/ModuleId.md b/docs/kcl/types/ModuleId.md deleted file mode 100644 index 9ed25fcfe..000000000 --- a/docs/kcl/types/ModuleId.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "ModuleId" -excerpt: "Identifier of a source file. Uses a u32 to keep the size small." -layout: manual ---- - -Identifier of a source file. Uses a u32 to keep the size small. - -**Type:** `integer` (`uint32`) - - - - - - - diff --git a/docs/kcl/types/NumericType.md b/docs/kcl/types/NumericType.md deleted file mode 100644 index ad7be7a57..000000000 --- a/docs/kcl/types/NumericType.md +++ /dev/null @@ -1,282 +0,0 @@ ---- -title: "NumericType" -excerpt: "" -layout: manual ---- - - - - - - -**This schema accepts exactly one of the following:** - - -**Type:** `object` - - - -**This schema accepts exactly one of the following:** - - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Count`| | No | - - ----- -A unit of length. - -**Type:** `object` - - - -**This schema accepts exactly one of the following:** - - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Mm`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Cm`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `M`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Inches`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Feet`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Yards`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Unknown`| | No | - - ----- - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Length`| | No | - - ----- -A unit of angle. - -**Type:** `object` - - - -**This schema accepts exactly one of the following:** - - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Degrees`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Radians`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Unknown`| | No | - - ----- - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Angle`| | No | - - ----- - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Known`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Default`| | No | -| `len` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `angle` |[`UnitAngle`](/docs/kcl/types/UnitAngle)| A unit of angle. | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Unknown`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Any`| | No | - - ----- - - - - diff --git a/docs/kcl/types/Path.md b/docs/kcl/types/Path.md deleted file mode 100644 index 859c07fad..000000000 --- a/docs/kcl/types/Path.md +++ /dev/null @@ -1,247 +0,0 @@ ---- -title: "Path" -excerpt: "A path." -layout: manual ---- - -A path. - - - - - -**This schema accepts exactly one of the following:** - -A path that goes to a point. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `ToPoint`| | No | -| `from` |`[number, number]`| The from point. | No | -| `to` |`[number, number]`| The to point. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | -| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | - - ----- -A arc that is tangential to the last path segment that goes to a point - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `TangentialArcTo`| | No | -| `center` |`[number, number]`| the arc's center | No | -| `ccw` |`boolean`| arc's direction | No | -| `from` |`[number, number]`| The from point. | No | -| `to` |`[number, number]`| The to point. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | -| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | - - ----- -A arc that is tangential to the last path segment - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `TangentialArc`| | No | -| `center` |`[number, number]`| the arc's center | No | -| `ccw` |`boolean`| arc's direction | No | -| `from` |`[number, number]`| The from point. | No | -| `to` |`[number, number]`| The to point. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | -| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | - - ----- -a complete arc - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Circle`| | No | -| `center` |`[number, number]`| the arc's center | No | -| `radius` |[`number`](/docs/kcl/types/number)| the arc's radius | No | -| `ccw` |`boolean`| arc's direction This is used to compute the tangential angle. | No | -| `from` |`[number, number]`| The from point. | No | -| `to` |`[number, number]`| The to point. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | -| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | - - ----- -A base path. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `CircleThreePoint`| | No | -| `p1` |`[number, number]`| Point 1 of the circle | No | -| `p2` |`[number, number]`| Point 2 of the circle | No | -| `p3` |`[number, number]`| Point 3 of the circle | No | -| `from` |`[number, number]`| The from point. | No | -| `to` |`[number, number]`| The to point. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | -| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | - - ----- -A base path. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `ArcThreePoint`| | No | -| `p1` |`[number, number]`| Point 1 of the arc (base on the end of previous segment) | No | -| `p2` |`[number, number]`| Point 2 of the arc (interiorAbsolute kwarg) | No | -| `p3` |`[number, number]`| Point 3 of the arc (endAbsolute kwarg) | No | -| `from` |`[number, number]`| The from point. | No | -| `to` |`[number, number]`| The to point. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | -| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | - - ----- -A path that is horizontal. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Horizontal`| | No | -| `x` |[`number`](/docs/kcl/types/number)| The x coordinate. | No | -| `from` |`[number, number]`| The from point. | No | -| `to` |`[number, number]`| The to point. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | -| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | - - ----- -An angled line to. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `AngledLineTo`| | No | -| `x` |[`number`](/docs/kcl/types/number)| The x coordinate. | No | -| `y` |[`number`](/docs/kcl/types/number)| The y coordinate. | No | -| `from` |`[number, number]`| The from point. | No | -| `to` |`[number, number]`| The to point. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | -| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | - - ----- -A base path. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Base`| | No | -| `from` |`[number, number]`| The from point. | No | -| `to` |`[number, number]`| The to point. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | -| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | - - ----- -A circular arc, not necessarily tangential to the current point. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Arc`| | No | -| `center` |`[number, number]`| Center of the circle that this arc is drawn on. | No | -| `radius` |[`number`](/docs/kcl/types/number)| Radius of the circle that this arc is drawn on. | No | -| `ccw` |`boolean`| True if the arc is counterclockwise. | No | -| `from` |`[number, number]`| The from point. | No | -| `to` |`[number, number]`| The to point. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | -| `tag` |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| The tag of the path. | No | -| `__geoMeta` |[`GeoMeta`](/docs/kcl/types/GeoMeta)| Metadata. | No | - - ----- - - - - diff --git a/docs/kcl/types/PlaneData.md b/docs/kcl/types/PlaneData.md deleted file mode 100644 index 205ee2865..000000000 --- a/docs/kcl/types/PlaneData.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: "PlaneData" -excerpt: "Orientation data that can be used to construct a plane, not a plane in itself." -layout: manual ---- - -Orientation data that can be used to construct a plane, not a plane in itself. - - - - - -**This schema accepts exactly one of the following:** - -The XY plane. - -**enum:** `XY` - - - - - - - - ----- -The opposite side of the XY plane. - -**enum:** `-XY` - - - - - - - - ----- -The XZ plane. - -**enum:** `XZ` - - - - - - - - ----- -The opposite side of the XZ plane. - -**enum:** `-XZ` - - - - - - - - ----- -The YZ plane. - -**enum:** `YZ` - - - - - - - - ----- -The opposite side of the YZ plane. - -**enum:** `-YZ` - - - - - - - - ----- -A defined plane. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `plane` |[`PlaneInfo`](/docs/kcl/types/PlaneInfo)| | No | - - ----- - - - - diff --git a/docs/kcl/types/PlaneInfo.md b/docs/kcl/types/PlaneInfo.md deleted file mode 100644 index b71c72ecd..000000000 --- a/docs/kcl/types/PlaneInfo.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "PlaneInfo" -excerpt: "" -layout: manual ---- - - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `origin` |[`Point3d`](/docs/kcl/types/Point3d)| Origin of the plane. | No | -| `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane's X axis be? | No | -| `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane's Y axis be? | No | - - diff --git a/docs/kcl/types/PlaneType.md b/docs/kcl/types/PlaneType.md deleted file mode 100644 index e2ccc50de..000000000 --- a/docs/kcl/types/PlaneType.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "PlaneType" -excerpt: "Type for a plane." -layout: manual ---- - -Type for a plane. - - - - - -**This schema accepts exactly one of the following:** - - -**enum:** `XY`, `XZ`, `YZ` - - - - - - - - ----- -A custom plane. - -**enum:** `Custom` - - - - - - - - ----- -A custom plane which has not been sent to the engine. It must be sent before it is used. - -**enum:** `Uninit` - - - - - - - - ----- - - - - diff --git a/docs/kcl/types/Point2d.md b/docs/kcl/types/Point2d.md deleted file mode 100644 index 74ca70469..000000000 --- a/docs/kcl/types/Point2d.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "std::types::Point2d" -excerpt: "A point in two dimensional space." -layout: manual ---- - -A point in two dimensional space. - -```kcl -type [Point2d](/docs/kcl/types/Point2d) = [[number](/docs/kcl/types/number)(Length); 2] -``` - -[`Point2d`](/docs/kcl/types/Point2d) is an alias for a two-element array of [number](/docs/kcl/types/number)s. To write a value -with type [`Point2d`](/docs/kcl/types/Point2d), use an array, e.g., `[0, 0]` or `[5.0, 3.14]`. - - - diff --git a/docs/kcl/types/Point3d.md b/docs/kcl/types/Point3d.md deleted file mode 100644 index af4efdcfd..000000000 --- a/docs/kcl/types/Point3d.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "std::types::Point3d" -excerpt: "A point in three dimensional space." -layout: manual ---- - -A point in three dimensional space. - -```kcl -type [Point3d](/docs/kcl/types/Point3d) = [[number](/docs/kcl/types/number)(Length); 3] -``` - -[`Point3d`](/docs/kcl/types/Point3d) is an alias for a three-element array of [number](/docs/kcl/types/number)s. To write a value -with type [`Point3d`](/docs/kcl/types/Point3d), use an array, e.g., `[0, 0, 0]` or `[5.0, 3.14, 6.8]`. - - - diff --git a/docs/kcl/types/SketchData.md b/docs/kcl/types/SketchData.md deleted file mode 100644 index a727c58a9..000000000 --- a/docs/kcl/types/SketchData.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "SketchData" -excerpt: "Data for start sketch on. You can start a sketch on a plane or an solid." -layout: manual ---- - -Data for start sketch on. You can start a sketch on a plane or an solid. - - - - -**This schema accepts any of the following:** - -Orientation data that can be used to construct a plane, not a plane in itself. - -[`PlaneData`](/docs/kcl/types/PlaneData) - - - - - - - - ----- - -[`Plane`](/docs/kcl/types/Plane) - - - - - - - - ----- - -[`Solid`](/docs/kcl/types/Solid) - - - - - - - - ----- - - - - - diff --git a/docs/kcl/types/SketchOrSurface.md b/docs/kcl/types/SketchOrSurface.md deleted file mode 100644 index 1fc748b53..000000000 --- a/docs/kcl/types/SketchOrSurface.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: "SketchOrSurface" -excerpt: "A sketch surface or a sketch." -layout: manual ---- - -A sketch surface or a sketch. - - - - -**This schema accepts any of the following:** - -A sketch type. - -[`SketchSurface`](/docs/kcl/types/SketchSurface) - - - - - - - - ----- - -[`Sketch`](/docs/kcl/types/Sketch) - - - - - - - - ----- - - - - - diff --git a/docs/kcl/types/SketchSurface.md b/docs/kcl/types/SketchSurface.md deleted file mode 100644 index 534081971..000000000 --- a/docs/kcl/types/SketchSurface.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: "SketchSurface" -excerpt: "A sketch type." -layout: manual ---- - -A sketch type. - - - - - -**This schema accepts exactly one of the following:** - - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `plane`| | No | -| `id` |[`string`](/docs/kcl/types/string)| The id of the plane. | No | -| `artifactId` |[`string`](/docs/kcl/types/string)| The artifact ID. | No | -| `value` |[`PlaneType`](/docs/kcl/types/PlaneType)| Type for a plane. | No | -| `origin` |[`Point3d`](/docs/kcl/types/Point3d)| Origin of the plane. | No | -| `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane's X axis be? | No | -| `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane's Y axis be? | No | - - ----- -A face. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `face`| | No | -| `id` |[`string`](/docs/kcl/types/string)| The id of the face. | No | -| `artifactId` |[`string`](/docs/kcl/types/string)| The artifact ID. | No | -| `value` |[`string`](/docs/kcl/types/string)| The tag of the face. | No | -| `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face's X axis be? | No | -| `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face's Y axis be? | No | -| `solid` |[`Solid`](/docs/kcl/types/Solid)| The solid the face is on. | No | -| `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | - - ----- - - - - diff --git a/docs/kcl/types/SolidOrImportedGeometry.md b/docs/kcl/types/SolidOrImportedGeometry.md deleted file mode 100644 index 5944c7ba5..000000000 --- a/docs/kcl/types/SolidOrImportedGeometry.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "SolidOrImportedGeometry" -excerpt: "Data for a solid or an imported geometry." -layout: manual ---- - -Data for a solid or an imported geometry. - - - - - -**This schema accepts exactly one of the following:** - -Data for an imported geometry. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `importedGeometry`| | No | -| `id` |[`string`](/docs/kcl/types/string)| The ID of the imported geometry. | No | -| `value` |`[` [`string`](/docs/kcl/types/string) `]`| The original file paths. | No | - - ----- - -**Type:** `[object, array]` - -`[` [`Solid`](/docs/kcl/types/Solid) `]` - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `solidSet`| | No | - - ----- - - - - diff --git a/docs/kcl/types/SolidOrSketchOrImportedGeometry.md b/docs/kcl/types/SolidOrSketchOrImportedGeometry.md deleted file mode 100644 index 4da6545b1..000000000 --- a/docs/kcl/types/SolidOrSketchOrImportedGeometry.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: "SolidOrSketchOrImportedGeometry" -excerpt: "Data for a solid, sketch, or an imported geometry." -layout: manual ---- - -Data for a solid, sketch, or an imported geometry. - - - - - -**This schema accepts exactly one of the following:** - -Data for an imported geometry. - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `importedGeometry`| | No | -| `id` |[`string`](/docs/kcl/types/string)| The ID of the imported geometry. | No | -| `value` |`[` [`string`](/docs/kcl/types/string) `]`| The original file paths. | No | - - ----- - -**Type:** `[object, array]` - -`[` [`Solid`](/docs/kcl/types/Solid) `]` - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `solidSet`| | No | - - ----- - -**Type:** `[object, array]` - -`[` [`Sketch`](/docs/kcl/types/Sketch) `]` - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `sketchSet`| | No | - - ----- - - - - diff --git a/docs/kcl/types/StartOrEnd.md b/docs/kcl/types/StartOrEnd.md deleted file mode 100644 index 6e8ed9329..000000000 --- a/docs/kcl/types/StartOrEnd.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: "StartOrEnd" -excerpt: "" -layout: manual ---- - - - - - - -**This schema accepts exactly one of the following:** - -The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera. - -**enum:** `start` - - - - - - - - ----- -The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera. - -**enum:** `end` - - - - - - - - ----- - - - - diff --git a/docs/kcl/types/SweepPath.md b/docs/kcl/types/SweepPath.md deleted file mode 100644 index b8e7e0865..000000000 --- a/docs/kcl/types/SweepPath.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "SweepPath" -excerpt: "A path to sweep along." -layout: manual ---- - -A path to sweep along. - - - - -**This schema accepts any of the following:** - - -[`Sketch`](/docs/kcl/types/Sketch) - - - - - - - - ----- - -[`Helix`](/docs/kcl/types/Helix) - - - - - - - - ----- - - - - - diff --git a/docs/kcl/types/UnitAngle.md b/docs/kcl/types/UnitAngle.md deleted file mode 100644 index 09a6aa892..000000000 --- a/docs/kcl/types/UnitAngle.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: "UnitAngle" -excerpt: "A unit of angle." -layout: manual ---- - -A unit of angle. - - - - - -**This schema accepts exactly one of the following:** - - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Degrees`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Radians`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Unknown`| | No | - - ----- - - - - diff --git a/docs/kcl/types/UnitLen.md b/docs/kcl/types/UnitLen.md deleted file mode 100644 index 5e00e5c39..000000000 --- a/docs/kcl/types/UnitLen.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: "UnitLen" -excerpt: "A unit of length." -layout: manual ---- - -A unit of length. - - - - - -**This schema accepts exactly one of the following:** - - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Mm`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Cm`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `M`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Inches`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Feet`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Yards`| | No | - - ----- - -**Type:** `object` - - - - - -## Properties - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -| `type` |enum: `Unknown`| | No | - - ----- - - - - diff --git a/docs/kcl/types/Axis2d.md b/docs/kcl/types/std-types-Axis2d.md similarity index 100% rename from docs/kcl/types/Axis2d.md rename to docs/kcl/types/std-types-Axis2d.md diff --git a/docs/kcl/types/Axis3d.md b/docs/kcl/types/std-types-Axis3d.md similarity index 100% rename from docs/kcl/types/Axis3d.md rename to docs/kcl/types/std-types-Axis3d.md diff --git a/docs/kcl/types/Edge.md b/docs/kcl/types/std-types-Edge.md similarity index 100% rename from docs/kcl/types/Edge.md rename to docs/kcl/types/std-types-Edge.md diff --git a/docs/kcl/types/Face.md b/docs/kcl/types/std-types-Face.md similarity index 100% rename from docs/kcl/types/Face.md rename to docs/kcl/types/std-types-Face.md diff --git a/docs/kcl/types/Helix.md b/docs/kcl/types/std-types-Helix.md similarity index 100% rename from docs/kcl/types/Helix.md rename to docs/kcl/types/std-types-Helix.md diff --git a/docs/kcl/types/Plane.md b/docs/kcl/types/std-types-Plane.md similarity index 100% rename from docs/kcl/types/Plane.md rename to docs/kcl/types/std-types-Plane.md diff --git a/docs/kcl/types/std-types-Point2d.md b/docs/kcl/types/std-types-Point2d.md new file mode 100644 index 000000000..ebeb4a3dc --- /dev/null +++ b/docs/kcl/types/std-types-Point2d.md @@ -0,0 +1,17 @@ +--- +title: "std::types::Point2d" +excerpt: "A point in two dimensional space." +layout: manual +--- + +A point in two dimensional space. + +```kcl +type Point2d = [number(Length); 2] +``` + +[`Point2d`](/docs/kcl/types/std-types-Point2d) is an alias for a two-element array of [number](/docs/kcl/types/number)s. To write a value +with type [`Point2d`](/docs/kcl/types/std-types-Point2d), use an array, e.g., `[0, 0]` or `[5.0, 3.14]`. + + + diff --git a/docs/kcl/types/std-types-Point3d.md b/docs/kcl/types/std-types-Point3d.md new file mode 100644 index 000000000..ea23e7c86 --- /dev/null +++ b/docs/kcl/types/std-types-Point3d.md @@ -0,0 +1,17 @@ +--- +title: "std::types::Point3d" +excerpt: "A point in three dimensional space." +layout: manual +--- + +A point in three dimensional space. + +```kcl +type Point3d = [number(Length); 3] +``` + +[`Point3d`](/docs/kcl/types/std-types-Point3d) is an alias for a three-element array of [number](/docs/kcl/types/number)s. To write a value +with type [`Point3d`](/docs/kcl/types/std-types-Point3d), use an array, e.g., `[0, 0, 0]` or `[5.0, 3.14, 6.8]`. + + + diff --git a/docs/kcl/types/Sketch.md b/docs/kcl/types/std-types-Sketch.md similarity index 99% rename from docs/kcl/types/Sketch.md rename to docs/kcl/types/std-types-Sketch.md index c0cd6408d..5f3368955 100644 --- a/docs/kcl/types/Sketch.md +++ b/docs/kcl/types/std-types-Sketch.md @@ -17,7 +17,7 @@ mySketch = startSketchOn(XY) |> close() ``` -The `mySketch` variable will be an executed [`Sketch`](/docs/kcl/types/Sketch) object. Executed being past +The `mySketch` variable will be an executed [`Sketch`](/docs/kcl/types/std-types-Sketch) object. Executed being past tense, because the engine has already executed the commands to create the sketch. The previous sketch commands will never be executed again, in this case. diff --git a/docs/kcl/types/Solid.md b/docs/kcl/types/std-types-Solid.md similarity index 99% rename from docs/kcl/types/Solid.md rename to docs/kcl/types/std-types-Solid.md index 888483e11..c27885419 100644 --- a/docs/kcl/types/Solid.md +++ b/docs/kcl/types/std-types-Solid.md @@ -18,7 +18,7 @@ myPart = startSketchOn(XY) |> extrude(length = 6) ``` -The `myPart` variable will be an executed [`Solid`](/docs/kcl/types/Solid) object. Executed being past +The `myPart` variable will be an executed [`Solid`](/docs/kcl/types/std-types-Solid) object. Executed being past tense, because the engine has already executed the commands to create the solid. The previous solid commands will never be executed again, in this case. diff --git a/docs/kcl/types/std-types-any.md b/docs/kcl/types/std-types-any.md new file mode 100644 index 000000000..6aba5d838 --- /dev/null +++ b/docs/kcl/types/std-types-any.md @@ -0,0 +1,12 @@ +--- +title: "any" +excerpt: "Any value." +layout: manual +--- + +Any value. + + + + + diff --git a/docs/kcl/types/bool.md b/docs/kcl/types/std-types-bool.md similarity index 100% rename from docs/kcl/types/bool.md rename to docs/kcl/types/std-types-bool.md diff --git a/docs/kcl/types/number.md b/docs/kcl/types/std-types-number.md similarity index 100% rename from docs/kcl/types/number.md rename to docs/kcl/types/std-types-number.md diff --git a/docs/kcl/types/string.md b/docs/kcl/types/std-types-string.md similarity index 100% rename from docs/kcl/types/string.md rename to docs/kcl/types/std-types-string.md diff --git a/docs/kcl/types/tag.md b/docs/kcl/types/std-types-tag.md similarity index 96% rename from docs/kcl/types/tag.md rename to docs/kcl/types/std-types-tag.md index 747bf2f5b..ad6efad64 100644 --- a/docs/kcl/types/tag.md +++ b/docs/kcl/types/std-types-tag.md @@ -62,8 +62,8 @@ fn rect(origin) { |> close() } -rect([0, 0]) -rect([20, 0]) +rect(origin = [0, 0]) +rect(origin = [20, 0]) ``` Those tags would only be available in the `rect` function and not globally. @@ -90,8 +90,8 @@ fn rect(origin) { |> close() } -rect([0, 0]) -myRect = rect([20, 0]) +rect(origin = [0, 0]) +myRect = rect(origin = [20, 0]) myRect |> extrude(length = 10) diff --git a/docs/kcl/union.md b/docs/kcl/union.md index f184bbbf0..85920bc9d 100644 --- a/docs/kcl/union.md +++ b/docs/kcl/union.md @@ -10,9 +10,9 @@ Union two or more solids into a single solid. ```kcl union( - solids: [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)), - tolerance?: [number](/docs/kcl/types/number), -): [[[Solid](/docs/kcl/types/Solid)]](/docs/kcl/types/[Solid](/docs/kcl/types/Solid)) + solids: [Solid], + tolerance?: number, +): [Solid] ``` @@ -20,12 +20,12 @@ union( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`[Solid]`](/docs/kcl/types/Solid) | The solids to union. | Yes | -| `tolerance` | [`number`](/docs/kcl/types/number) | The tolerance to use for the union operation. | No | +| `solids` | [`[Solid]`](/docs/kcl/types/std-types-Solid) | The solids to union. | Yes | +| `tolerance` | [`number`](/docs/kcl/types/std-types-number) | The tolerance to use for the union operation. | No | ### Returns -[`[Solid]`](/docs/kcl/types/Solid) +[`[Solid]`](/docs/kcl/types/std-types-Solid) ### Examples @@ -44,8 +44,8 @@ fn cube(center, size) { |> extrude(length = 10) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(center = [0, 0], size = 10) +part002 = cube(center = [7, 3], size = 5) |> translate(z = 1) unionedPart = union([part001, part002]) @@ -69,8 +69,8 @@ fn cube(center, size) { |> extrude(length = 10) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(center = [0, 0], size = 10) +part002 = cube(center = [7, 3], size = 5) |> translate(z = 1) // This is the equivalent of: union([part001, part002]) @@ -95,8 +95,8 @@ fn cube(center, size) { |> extrude(length = 10) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(center = [0, 0], size = 10) +part002 = cube(center = [7, 3], size = 5) |> translate(z = 1) // This is the equivalent of: union([part001, part002]) diff --git a/docs/kcl/xLine.md b/docs/kcl/xLine.md index fa1f8430f..e927ce01c 100644 --- a/docs/kcl/xLine.md +++ b/docs/kcl/xLine.md @@ -10,11 +10,11 @@ Draw a line relative to the current origin to a specified distance away from the ```kcl xLine( - sketch: [Sketch](/docs/kcl/types/Sketch), - length?: [number](/docs/kcl/types/number), - endAbsolute?: [number](/docs/kcl/types/number), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketch: Sketch, + length?: number, + endAbsolute?: number, + tag?: TagDeclarator, +): Sketch ``` @@ -22,14 +22,14 @@ xLine( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes | -| `length` | [`number`](/docs/kcl/types/number) | How far away along the X axis should this line go? Incompatible with `endAbsolute`. | No | -| `endAbsolute` | [`number`](/docs/kcl/types/number) | Which absolute X value should this line go to? Incompatible with `length`. | No | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Which sketch should this path be added to? | Yes | +| `length` | [`number`](/docs/kcl/types/std-types-number) | How far away along the X axis should this line go? Incompatible with `endAbsolute`. | No | +| `endAbsolute` | [`number`](/docs/kcl/types/std-types-number) | Which absolute X value should this line go to? Incompatible with `length`. | No | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Create a new tag which refers to this line | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/docs/kcl/yLine.md b/docs/kcl/yLine.md index 9ef57fb0f..5a60f5288 100644 --- a/docs/kcl/yLine.md +++ b/docs/kcl/yLine.md @@ -10,11 +10,11 @@ Draw a line relative to the current origin to a specified distance away from the ```kcl yLine( - sketch: [Sketch](/docs/kcl/types/Sketch), - length?: [number](/docs/kcl/types/number), - endAbsolute?: [number](/docs/kcl/types/number), - tag?: [TagDeclarator](/docs/kcl/types#tag-declaration), -): [Sketch](/docs/kcl/types/Sketch) + sketch: Sketch, + length?: number, + endAbsolute?: number, + tag?: TagDeclarator, +): Sketch ``` @@ -22,14 +22,14 @@ yLine( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes | -| `length` | [`number`](/docs/kcl/types/number) | How far away along the Y axis should this line go? Incompatible with `endAbsolute`. | No | -| `endAbsolute` | [`number`](/docs/kcl/types/number) | Which absolute Y value should this line go to? Incompatible with `length`. | No | -| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No | +| `sketch` | [`Sketch`](/docs/kcl/types/std-types-Sketch) | Which sketch should this path be added to? | Yes | +| `length` | [`number`](/docs/kcl/types/std-types-number) | How far away along the Y axis should this line go? Incompatible with `endAbsolute`. | No | +| `endAbsolute` | [`number`](/docs/kcl/types/std-types-number) | Which absolute Y value should this line go to? Incompatible with `length`. | No | +| [`tag`](/docs/kcl/types/std-types-tag) | [`TagDeclarator`](/docs/kcl/types#TagDeclarator) | Create a new tag which refers to this line | No | ### Returns -[`Sketch`](/docs/kcl/types/Sketch) +[`Sketch`](/docs/kcl/types/std-types-Sketch) ### Examples diff --git a/e2e/playwright/app-header-tests.spec.ts b/e2e/playwright/app-header-tests.spec.ts index 45cfa6614..96f8eb9b9 100644 --- a/e2e/playwright/app-header-tests.spec.ts +++ b/e2e/playwright/app-header-tests.spec.ts @@ -1,4 +1,6 @@ import { expect, test } from '@e2e/playwright/zoo-test' +import { join } from 'path' +import * as fsp from 'fs/promises' test.describe('Electron app header tests', () => { test( @@ -43,4 +45,33 @@ test.describe('Electron app header tests', () => { await expect(userSettingsButton).toHaveText(text) } ) + + test('Share button is disabled when imports are present', async ({ + page, + context, + homePage, + toolbar, + }) => { + const projectName = 'share-disabled-for-imports' + await context.folderSetupFn(async (dir) => { + const testDir = join(dir, projectName) + await fsp.mkdir(testDir, { recursive: true }) + + await fsp.writeFile(join(testDir, 'deps.kcl'), 'export x = 42') + await fsp.writeFile(join(testDir, 'main.kcl'), 'import x from "deps.kcl"') + }) + + await page.setBodyDimensions({ width: 1200, height: 500 }) + await homePage.openProject(projectName) + const shareButton = page.getByTestId('share-button') + + // Open deps.kcl (which has no imports) and verify share button is enabled + await toolbar.fileTreeBtn.click() + await toolbar.openFile('deps.kcl') + await expect(shareButton).not.toBeDisabled() + + // Open main.kcl (which has an import) and verify share button is disabled + await toolbar.openFile('main.kcl') + await expect(shareButton).toBeDisabled() + }) }) diff --git a/e2e/playwright/fixtures/homePageFixture.ts b/e2e/playwright/fixtures/homePageFixture.ts index 437651616..4878e5fbb 100644 --- a/e2e/playwright/fixtures/homePageFixture.ts +++ b/e2e/playwright/fixtures/homePageFixture.ts @@ -24,7 +24,6 @@ export class HomePageFixture { projectTextName!: Locator sortByDateBtn!: Locator sortByNameBtn!: Locator - tutorialBtn!: Locator constructor(page: Page) { this.page = page @@ -44,7 +43,6 @@ export class HomePageFixture { this.sortByDateBtn = this.page.getByTestId('home-sort-by-modified') this.sortByNameBtn = this.page.getByTestId('home-sort-by-name') - this.tutorialBtn = this.page.getByTestId('home-tutorial-button') } private _serialiseSortBy = async (): Promise< diff --git a/e2e/playwright/fixtures/toolbarFixture.ts b/e2e/playwright/fixtures/toolbarFixture.ts index ae51d659a..ed7bffe79 100644 --- a/e2e/playwright/fixtures/toolbarFixture.ts +++ b/e2e/playwright/fixtures/toolbarFixture.ts @@ -17,8 +17,6 @@ type LengthUnitLabel = (typeof baseUnitLabels)[keyof typeof baseUnitLabels] export class ToolbarFixture { public page: Page - projectName!: Locator - fileName!: Locator extrudeButton!: Locator loftButton!: Locator sweepButton!: Locator @@ -55,8 +53,6 @@ export class ToolbarFixture { constructor(page: Page) { this.page = page - this.projectName = page.getByTestId('app-header-project-name') - this.fileName = page.getByTestId('app-header-file-name') this.extrudeButton = page.getByTestId('extrude') this.loftButton = page.getByTestId('loft') this.sweepButton = page.getByTestId('sweep') diff --git a/e2e/playwright/native-file-menu.spec.ts b/e2e/playwright/native-file-menu.spec.ts index 5c6dc4d72..1097f8ecf 100644 --- a/e2e/playwright/native-file-menu.spec.ts +++ b/e2e/playwright/native-file-menu.spec.ts @@ -446,11 +446,11 @@ test.describe( // Core dump and refresh magic number timeout await page.waitForTimeout(7000) const actual = page.getByText( - 'No Projects found, ready to make your first one?' + 'No projects found, ready to make your first one?' ) await expect(actual).toBeVisible() }) - test('Home.Help.Replay onboarding tutorial', async ({ + test('Home.Help.Reset onboarding', async ({ tronApp, cmdBar, page, @@ -464,7 +464,7 @@ test.describe( await tronApp.electron.evaluate(async ({ app }) => { if (!app || !app.applicationMenu) return false const menu = app.applicationMenu.getMenuItemById( - 'Help.Replay onboarding tutorial' + 'Help.Reset onboarding' ) if (!menu) { return false @@ -2339,7 +2339,7 @@ test.describe( await scene.connectionEstablished() await expect(toolbar.startSketchBtn).toBeVisible() }) - test('Modeling.Help.Replay onboarding tutorial', async ({ + test('Modeling.Help.Reset onboarding', async ({ tronApp, cmdBar, page, @@ -2358,7 +2358,7 @@ test.describe( await tronApp.electron.evaluate(async ({ app }) => { if (!app || !app.applicationMenu) fail() const menu = app.applicationMenu.getMenuItemById( - 'Help.Replay onboarding tutorial' + 'Help.Reset onboarding' ) if (!menu) fail() menu.click() diff --git a/e2e/playwright/onboarding-tests.spec.ts b/e2e/playwright/onboarding-tests.spec.ts index 6febaffc8..a2e776c56 100644 --- a/e2e/playwright/onboarding-tests.spec.ts +++ b/e2e/playwright/onboarding-tests.spec.ts @@ -1,175 +1,560 @@ +import { join } from 'path' +import { bracket } from '@e2e/playwright/fixtures/bracket' +import { onboardingPaths } from '@src/routes/Onboarding/paths' +import fsp from 'fs/promises' + +import { expectPixelColor } from '@e2e/playwright/fixtures/sceneFixture' +import { + TEST_SETTINGS_KEY, + TEST_SETTINGS_ONBOARDING_EXPORT, + TEST_SETTINGS_ONBOARDING_START, + TEST_SETTINGS_ONBOARDING_USER_MENU, +} from '@e2e/playwright/storageStates' +import { + createProject, + executorInputPath, + getUtils, + settingsToToml, +} from '@e2e/playwright/test-utils' import { expect, test } from '@e2e/playwright/zoo-test' +// Because our default test settings have the onboardingStatus set to 'dismissed', +// we must set it to empty for the tests where we want to see the onboarding immediately. + test.describe('Onboarding tests', () => { - test('Desktop onboarding flow works', async ({ + test('Onboarding code is shown in the editor', async ({ page, homePage, - toolbar, - editor, - scene, tronApp, }) => { if (!tronApp) { fail() } - - // Because our default test settings have the onboardingStatus set to 'dismissed', - // we must set it to empty for the tests where we want to see the onboarding UI. await tronApp.cleanProjectDir({ app: { onboarding_status: '', }, }) - const bracketComment = '// Shelf Bracket' - const tutorialWelcomHeading = page.getByText( - 'Welcome to Design Studio! This' - ) - const nextButton = page.getByTestId('onboarding-next') - const prevButton = page.getByTestId('onboarding-prev') - const userMenuButton = toolbar.userSidebarButton - const userMenuSettingsButton = page.getByRole('button', { - name: 'User settings', - }) - const settingsHeading = page.getByRole('heading', { - name: 'Settings', - exact: true, - }) - const restartOnboardingSettingsButton = page.getByRole('button', { + const u = await getUtils(page) + await page.setBodyDimensions({ width: 1200, height: 500 }) + await homePage.goToModelingScene() + + // Test that the onboarding pane loaded + await expect(page.getByText('Welcome to Design Studio! This')).toBeVisible() + + // Test that the onboarding pane loaded + await expect(page.getByText('Welcome to Design Studio! This')).toBeVisible() + + // *and* that the code is shown in the editor + await expect(page.locator('.cm-content')).toContainText('// Shelf Bracket') + + // Make sure the model loaded + const XYPlanePoint = { x: 774, y: 116 } as const + const modelColor: [number, number, number] = [45, 45, 45] + await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y) + expect(await u.getGreatestPixDiff(XYPlanePoint, modelColor)).toBeLessThan(8) + }) + + test( + 'Desktop: fresh onboarding executes and loads', + { + tag: '@electron', + }, + async ({ page, tronApp, scene }) => { + if (!tronApp) { + fail() + } + await tronApp.cleanProjectDir({ + app: { + onboarding_status: '', + }, + }) + + const viewportSize = { width: 1200, height: 500 } + await page.setBodyDimensions(viewportSize) + + await test.step(`Create a project and open to the onboarding`, async () => { + await createProject({ name: 'project-link', page }) + await test.step(`Ensure the engine connection works by testing the sketch button`, async () => { + await scene.connectionEstablished() + }) + }) + + await test.step(`Ensure we see the onboarding stuff`, async () => { + // Test that the onboarding pane loaded + await expect( + page.getByText('Welcome to Design Studio! This') + ).toBeVisible() + + // *and* that the code is shown in the editor + await expect(page.locator('.cm-content')).toContainText( + '// Shelf Bracket' + ) + + // TODO: jess make less shit + // Make sure the model loaded + //const XYPlanePoint = { x: 986, y: 522 } as const + //const modelColor: [number, number, number] = [76, 76, 76] + //await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y) + + //await expectPixelColor(page, modelColor, XYPlanePoint, 8) + }) + } + ) + + test('Code resets after confirmation', async ({ + page, + homePage, + tronApp, + scene, + }) => { + if (!tronApp) { + fail() + } + await tronApp.cleanProjectDir() + + const initialCode = `sketch001 = startSketchOn(XZ)` + + // Load the page up with some code so we see the confirmation warning + // when we go to replay onboarding + await page.addInitScript((code) => { + localStorage.setItem('persistCode', code) + }, initialCode) + + await page.setBodyDimensions({ width: 1200, height: 500 }) + await homePage.goToModelingScene() + await scene.connectionEstablished() + + // Replay the onboarding + await page.getByRole('link', { name: 'Settings' }).last().click() + const replayButton = page.getByRole('button', { name: 'Replay onboarding', }) - const helpMenuButton = page.getByRole('button', { - name: 'Help and resources', + await expect(replayButton).toBeVisible() + await replayButton.click() + + // Ensure we see the warning, and that the code has not yet updated + await expect(page.getByText('Would you like to create')).toBeVisible() + await expect(page.locator('.cm-content')).toHaveText(initialCode) + + const nextButton = page.getByTestId('onboarding-next') + await nextButton.hover() + await nextButton.click() + + // Ensure we see the introduction and that the code has been reset + await expect(page.getByText('Welcome to Design Studio!')).toBeVisible() + await expect(page.locator('.cm-content')).toContainText('// Shelf Bracket') + + // There used to be old code here that checked if we stored the reset + // code into localStorage but that isn't the case on desktop. It gets + // saved to the file system, which we have other tests for. + }) + + test('Click through each onboarding step and back', async ({ + context, + page, + homePage, + tronApp, + }) => { + if (!tronApp) { + fail() + } + await tronApp.cleanProjectDir({ + app: { + onboarding_status: '', + }, }) - const helpMenuRestartOnboardingButton = page.getByRole('button', { - name: 'Replay onboarding tutorial', - }) - const postDismissToast = page.getByText( - 'Click the question mark in the lower-right corner if you ever want to redo the tutorial!' + // Override beforeEach test setup + await context.addInitScript( + async ({ settingsKey, settings }) => { + // Give no initial code, so that the onboarding start is shown immediately + localStorage.setItem('persistCode', '') + localStorage.setItem(settingsKey, settings) + }, + { + settingsKey: TEST_SETTINGS_KEY, + settings: settingsToToml({ + settings: TEST_SETTINGS_ONBOARDING_START, + }), + } ) - await test.step('Test initial home page view, showing a tutorial button', async () => { - await expect(homePage.tutorialBtn).toBeVisible() - await homePage.expectState({ - projectCards: [], - sortBy: 'last-modified-desc', - }) + await page.setBodyDimensions({ width: 1200, height: 1080 }) + await homePage.goToModelingScene() + + // Test that the onboarding pane loaded + await expect(page.getByText('Welcome to Design Studio! This')).toBeVisible() + + const nextButton = page.getByTestId('onboarding-next') + const prevButton = page.getByTestId('onboarding-prev') + + while ((await nextButton.innerText()) !== 'Finish') { + await nextButton.hover() + await nextButton.click() + } + + while ((await prevButton.innerText()) !== 'Dismiss') { + await prevButton.hover() + await prevButton.click() + } + + // Dismiss the onboarding + await prevButton.hover() + await prevButton.click() + + // Test that the onboarding pane is gone + await expect(page.getByTestId('onboarding-content')).not.toBeVisible() + await expect.poll(() => page.url()).not.toContain('/onboarding') + }) + + test('Onboarding redirects and code updating', async ({ + context, + page, + homePage, + tronApp, + }) => { + if (!tronApp) { + fail() + } + await tronApp.cleanProjectDir({ + app: { + onboarding_status: '/export', + }, }) - await test.step('Create a blank project and verify no onboarding chrome is shown', async () => { - await homePage.goToModelingScene() - await expect(toolbar.projectName).toContainText('testDefault') - await expect(tutorialWelcomHeading).not.toBeVisible() - await editor.expectEditor.toContain('@settings(defaultLengthUnit = in)', { - shouldNormalise: true, - }) - await scene.connectionEstablished() - await expect(toolbar.startSketchBtn).toBeEnabled({ timeout: 15_000 }) + const originalCode = 'sigmaAllow = 15000' + + // Override beforeEach test setup + await context.addInitScript( + async ({ settingsKey, settings, code }) => { + // Give some initial code, so we can test that it's cleared + localStorage.setItem('persistCode', code) + localStorage.setItem(settingsKey, settings) + }, + { + settingsKey: TEST_SETTINGS_KEY, + settings: settingsToToml({ + settings: TEST_SETTINGS_ONBOARDING_EXPORT, + }), + code: originalCode, + } + ) + + await page.setBodyDimensions({ width: 1200, height: 500 }) + await homePage.goToModelingScene() + + // Test that the redirect happened + await expect.poll(() => page.url()).toContain('/onboarding/export') + + // Test that you come back to this page when you refresh + await page.reload() + await expect.poll(() => page.url()).toContain('/onboarding/export') + + // Test that the code changes when you advance to the next step + await page.getByTestId('onboarding-next').hover() + await page.getByTestId('onboarding-next').click() + + // Test that the onboarding pane loaded + const title = page.locator('[data-testid="onboarding-content"]') + await expect(title).toBeAttached() + + await expect(page.locator('.cm-content')).not.toHaveText(originalCode) + + // Test that the code is not empty when you click on the next step + await page.locator('[data-testid="onboarding-next"]').hover() + await page.locator('[data-testid="onboarding-next"]').click() + await expect(page.locator('.cm-content')).toHaveText(/.+/) + }) + + test('Onboarding code gets reset to demo on Interactive Numbers step', async ({ + page, + homePage, + tronApp, + editor, + toolbar, + }) => { + if (!tronApp) { + fail() + } + await tronApp.cleanProjectDir({ + app: { + onboarding_status: '/parametric-modeling', + }, }) - await test.step('Go home and verify we still see the tutorial button, then begin it.', async () => { - await toolbar.logoLink.click() - await expect(homePage.tutorialBtn).toBeVisible() - await homePage.expectState({ - projectCards: [ - { - title: 'testDefault', - fileCount: 1, - }, - ], - sortBy: 'last-modified-desc', - }) - await homePage.tutorialBtn.click() + const badCode = `// This is bad code we shouldn't see` + + await page.setBodyDimensions({ width: 1200, height: 1080 }) + await homePage.goToModelingScene() + + await expect + .poll(() => page.url()) + .toContain(onboardingPaths.PARAMETRIC_MODELING) + + // Check the code got reset on load + await toolbar.openPane('code') + await editor.expectEditor.toContain(bracket, { + shouldNormalise: true, + timeout: 10_000, }) - // This is web-only. - // TODO: write a new test just for the onboarding in browser - // await test.step('Ensure the onboarding request toast appears', async () => { - // await expect(page.getByTestId('onboarding-toast')).toBeVisible() - // await page.getByTestId('onboarding-next').click() - // }) - - await test.step('Ensure we see the welcome screen in a new project', async () => { - await expect(toolbar.projectName).toContainText('Tutorial Project 00') - await expect(tutorialWelcomHeading).toBeVisible() - await editor.expectEditor.toContain(bracketComment) - await scene.connectionEstablished() - await expect(toolbar.startSketchBtn).toBeEnabled({ timeout: 15_000 }) + // Mess with the code again + await editor.replaceCode('', badCode) + await editor.expectEditor.toContain(badCode, { + shouldNormalise: true, + timeout: 10_000, }) - await test.step('Test the clicking through the onboarding flow', async () => { - await test.step('Going forward', async () => { - while ((await nextButton.innerText()) !== 'Finish') { - await nextButton.hover() - await nextButton.click() - } - }) - - await test.step('Going backward', async () => { - while ((await prevButton.innerText()) !== 'Dismiss') { - await prevButton.hover() - await prevButton.click() - } - }) - - // Dismiss the onboarding - await test.step('Dismiss the onboarding', async () => { - await prevButton.hover() - await prevButton.click() - await expect(page.getByTestId('onboarding-content')).not.toBeVisible() - await expect(postDismissToast).toBeVisible() - await expect.poll(() => page.url()).not.toContain('/onboarding') - }) + // Click to the next step + await page.locator('[data-testid="onboarding-next"]').hover() + await page.locator('[data-testid="onboarding-next"]').click() + await page.waitForURL('**' + onboardingPaths.INTERACTIVE_NUMBERS, { + waitUntil: 'domcontentloaded', }) - await test.step('Resetting onboarding from inside project should always make a new one', async () => { - await test.step('Reset onboarding from settings', async () => { - await userMenuButton.click() - await userMenuSettingsButton.click() - await expect(settingsHeading).toBeVisible() - await expect(restartOnboardingSettingsButton).toBeVisible() - await restartOnboardingSettingsButton.click() - }) - - await test.step('Makes a new project', async () => { - await expect(toolbar.projectName).toContainText('Tutorial Project 01') - await expect(tutorialWelcomHeading).toBeVisible() - await editor.expectEditor.toContain(bracketComment) - await scene.connectionEstablished() - await expect(toolbar.startSketchBtn).toBeEnabled({ timeout: 15_000 }) - }) - - await test.step('Dismiss the onboarding', async () => { - await postDismissToast.waitFor({ state: 'detached' }) - await page.keyboard.press('Escape') - await expect(postDismissToast).toBeVisible() - await expect(page.getByTestId('onboarding-content')).not.toBeVisible() - await expect.poll(() => page.url()).not.toContain('/onboarding') - }) - }) - - await test.step('Resetting onboarding from home help menu makes a new project', async () => { - await test.step('Go home and reset onboarding from lower-right help menu', async () => { - await toolbar.logoLink.click() - await expect(homePage.tutorialBtn).not.toBeVisible() - await expect( - homePage.projectCard.getByText('Tutorial Project 00') - ).toBeVisible() - await expect( - homePage.projectCard.getByText('Tutorial Project 01') - ).toBeVisible() - - await helpMenuButton.click() - await helpMenuRestartOnboardingButton.click() - }) - - await test.step('Makes a new project', async () => { - await expect(toolbar.projectName).toContainText('Tutorial Project 02') - await expect(tutorialWelcomHeading).toBeVisible() - await editor.expectEditor.toContain(bracketComment) - await scene.connectionEstablished() - await expect(toolbar.startSketchBtn).toBeEnabled({ timeout: 15_000 }) - }) + // Check that the code has been reset + await editor.expectEditor.toContain(bracket, { + shouldNormalise: true, + timeout: 10_000, }) }) + + // (lee) The two avatar tests are weird because even on main, we don't have + // anything to do with the avatar inside the onboarding test. Due to the + // low impact of an avatar not showing I'm changing this to fixme. + test('Avatar text updates depending on image load success', async ({ + context, + page, + toolbar, + homePage, + tronApp, + }) => { + if (!tronApp) { + fail() + } + + await tronApp.cleanProjectDir({ + app: { + onboarding_status: '', + }, + }) + + // Override beforeEach test setup + await context.addInitScript( + async ({ settingsKey, settings }) => { + localStorage.setItem(settingsKey, settings) + }, + { + settingsKey: TEST_SETTINGS_KEY, + settings: settingsToToml({ + settings: TEST_SETTINGS_ONBOARDING_USER_MENU, + }), + } + ) + + await page.setBodyDimensions({ width: 1200, height: 500 }) + await homePage.goToModelingScene() + + // Test that the text in this step is correct + const avatarLocator = toolbar.userSidebarButton.locator('img') + const onboardingOverlayLocator = page + .getByTestId('onboarding-content') + .locator('div') + .nth(1) + + // Expect the avatar to be visible and for the text to reference it + await expect(avatarLocator).toBeVisible() + await expect(onboardingOverlayLocator).toBeVisible() + await expect(onboardingOverlayLocator).toContainText('your avatar') + + // This is to force the avatar to 404. + // For our test image (only triggers locally. on CI, it's Kurt's / + // gravatar image ) + await page.route('/cat.jpg', async (route) => { + await route.fulfill({ + status: 404, + contentType: 'text/plain', + body: 'Not Found!', + }) + }) + + // 404 the CI avatar image + await page.route('https://lh3.googleusercontent.com/**', async (route) => { + await route.fulfill({ + status: 404, + contentType: 'text/plain', + body: 'Not Found!', + }) + }) + + await page.reload({ waitUntil: 'domcontentloaded' }) + + // Now expect the text to be different + await expect(avatarLocator).not.toBeVisible() + await expect(onboardingOverlayLocator).toBeVisible() + await expect(onboardingOverlayLocator).toContainText('the menu button') + }) + + test("Avatar text doesn't mention avatar when no avatar", async ({ + context, + page, + toolbar, + homePage, + tronApp, + }) => { + if (!tronApp) { + fail() + } + + await tronApp.cleanProjectDir({ + app: { + onboarding_status: '', + }, + }) + // Override beforeEach test setup + await context.addInitScript( + async ({ settingsKey, settings }) => { + localStorage.setItem(settingsKey, settings) + localStorage.setItem('FORCE_NO_IMAGE', 'FORCE_NO_IMAGE') + }, + { + settingsKey: TEST_SETTINGS_KEY, + settings: settingsToToml({ + settings: TEST_SETTINGS_ONBOARDING_USER_MENU, + }), + } + ) + + await page.setBodyDimensions({ width: 1200, height: 500 }) + await homePage.goToModelingScene() + + // Test that the text in this step is correct + const sidebar = toolbar.userSidebarButton + const avatar = sidebar.locator('img') + const onboardingOverlayLocator = page + .getByTestId('onboarding-content') + .locator('div') + .nth(1) + + // Expect the avatar to be visible and for the text to reference it + await expect(avatar).not.toBeVisible() + await expect(onboardingOverlayLocator).toBeVisible() + await expect(onboardingOverlayLocator).toContainText('the menu button') + + // Test we mention what else is in this menu for https://github.com/KittyCAD/modeling-app/issues/2939 + // which doesn't deserver its own full test spun up + const userMenuFeatures = [ + 'manage your account', + 'report a bug', + 'request a feature', + 'sign out', + ] + for (const feature of userMenuFeatures) { + await expect(onboardingOverlayLocator).toContainText(feature) + } + }) +}) + +test('Restarting onboarding on desktop takes one attempt', async ({ + context, + page, + toolbar, + tronApp, +}) => { + if (!tronApp) { + fail() + } + + await tronApp.cleanProjectDir({ + app: { + onboarding_status: 'dismissed', + }, + }) + + await context.folderSetupFn(async (dir) => { + const routerTemplateDir = join(dir, 'router-template-slate') + await fsp.mkdir(routerTemplateDir, { recursive: true }) + await fsp.copyFile( + executorInputPath('router-template-slate.kcl'), + join(routerTemplateDir, 'main.kcl') + ) + }) + + // Our constants + const u = await getUtils(page) + const projectCard = page.getByText('router-template-slate') + const helpMenuButton = page.getByRole('button', { + name: 'Help and resources', + }) + const restartOnboardingButton = page.getByRole('button', { + name: 'Reset onboarding', + }) + const nextButton = page.getByTestId('onboarding-next') + + const tutorialProjectIndicator = page + .getByTestId('project-sidebar-toggle') + .filter({ hasText: 'Tutorial Project 00' }) + const tutorialModalText = page.getByText('Welcome to Design Studio!') + const tutorialDismissButton = page.getByRole('button', { name: 'Dismiss' }) + const userMenuButton = toolbar.userSidebarButton + const userMenuSettingsButton = page.getByRole('button', { + name: 'User settings', + }) + const settingsHeading = page.getByRole('heading', { + name: 'Settings', + exact: true, + }) + const restartOnboardingSettingsButton = page.getByRole('button', { + name: 'Replay onboarding', + }) + + await test.step('Navigate into project', async () => { + await expect(page.getByRole('heading', { name: 'Projects' })).toBeVisible() + await expect(projectCard).toBeVisible() + await projectCard.click() + await u.waitForPageLoad() + }) + + await test.step('Restart the onboarding from help menu', async () => { + await helpMenuButton.click() + await restartOnboardingButton.click() + + await nextButton.hover() + await nextButton.click() + }) + + await test.step('Confirm that the onboarding has restarted', async () => { + await expect(tutorialProjectIndicator).toBeVisible() + await expect(tutorialModalText).toBeVisible() + // Make sure the model loaded + const XYPlanePoint = { x: 988, y: 523 } as const + const modelColor: [number, number, number] = [76, 76, 76] + + await page.mouse.move(XYPlanePoint.x, XYPlanePoint.y) + await expectPixelColor(page, modelColor, XYPlanePoint, 8) + await tutorialDismissButton.click() + // Make sure model still there. + await expectPixelColor(page, modelColor, XYPlanePoint, 8) + }) + + await test.step('Clear code and restart onboarding from settings', async () => { + await u.openKclCodePanel() + await expect(u.codeLocator).toContainText('// Shelf Bracket') + await u.codeLocator.selectText() + await u.codeLocator.fill('') + + await test.step('Navigate to settings', async () => { + await userMenuButton.click() + await userMenuSettingsButton.click() + await expect(settingsHeading).toBeVisible() + await expect(restartOnboardingSettingsButton).toBeVisible() + }) + + await restartOnboardingSettingsButton.click() + // Since the code is empty, we should not see the confirmation dialog + await expect(nextButton).not.toBeVisible() + await expect(tutorialProjectIndicator).toBeVisible() + await expect(tutorialModalText).toBeVisible() + }) }) diff --git a/e2e/playwright/point-click.spec.ts b/e2e/playwright/point-click.spec.ts index de622bcfc..4b071f155 100644 --- a/e2e/playwright/point-click.spec.ts +++ b/e2e/playwright/point-click.spec.ts @@ -3342,7 +3342,7 @@ profile001 = startProfile(sketch001, at = [-20, 20]) const testPoint = { x: 590, y: 400 } const extrudeColor: [number, number, number] = [100, 100, 100] const sketchColor: [number, number, number] = [140, 140, 140] - const defaultPlaneColor: [number, number, number] = [50, 50, 100] + const defaultPlaneColor: [number, number, number] = [88, 44, 45] const deleteOperation = async (operationButton: Locator) => { if (shouldUseKeyboard) { @@ -3386,7 +3386,11 @@ profile001 = startProfile(sketch001, at = [-20, 20]) ) await deleteOperation(operationButton) await editor.expectEditor.toContain('') - await scene.expectPixelColor(defaultPlaneColor, testPoint, 20) + // Cannot use test point anymore because the camera's position has been + // reset and the rest of the test doesn't need to change just to check + // if the scene is cleared. + // Check that the scene is cleared + await scene.expectPixelColor(defaultPlaneColor, { x: 574, y: 342 }, 20) }) }) }) diff --git a/e2e/playwright/projects.spec.ts b/e2e/playwright/projects.spec.ts index 7e13e459d..4ba3da0a6 100644 --- a/e2e/playwright/projects.spec.ts +++ b/e2e/playwright/projects.spec.ts @@ -837,7 +837,7 @@ test.describe(`Project management commands`, () => { name: 'Submit command', }) const toastMessage = page.getByText(`Successfully deleted`) - const noProjectsMessage = page.getByText('No Projects found') + const noProjectsMessage = page.getByText('No projects found') await test.step(`Setup`, async () => { await page.setBodyDimensions({ width: 1200, height: 500 }) @@ -949,7 +949,7 @@ test.describe(`Project management commands`, () => { name: 'Submit command', }) const toastMessage = page.getByText(`Successfully deleted`) - const noProjectsMessage = page.getByText('No Projects found') + const noProjectsMessage = page.getByText('No projects found') await test.step(`Setup`, async () => { await page.setBodyDimensions({ width: 1200, height: 500 }) @@ -1265,7 +1265,7 @@ test( }) await test.step('Check that the home page is empty', async () => { - await expect(page.getByText('No Projects found')).toBeVisible() + await expect(page.getByText('No projects found')).toBeVisible() }) await test.step('Check we can still create a project', async () => { @@ -1434,8 +1434,8 @@ test( // Constants and locators const projectLinks = page.getByTestId('project-link') - // expect to see text "No Projects found" - await expect(page.getByText('No Projects found')).toBeVisible() + // expect to see text "No projects found" + await expect(page.getByText('No projects found')).toBeVisible() await createProject({ name: 'project-000', page, returnHome: true }) await expect(projectLinks.getByText('project-000')).toBeVisible() @@ -1693,7 +1693,7 @@ test( await homePage.projectsLoaded() - await expect(page.getByText('No Projects found')).toBeVisible() + await expect(page.getByText('No projects found')).toBeVisible() await createProject({ name: 'project-000', page, returnHome: true }) await expect( page.getByTestId('project-link').filter({ hasText: 'project-000' }) diff --git a/e2e/playwright/prompt-to-edit-snapshot-tests.spec.ts b/e2e/playwright/prompt-to-edit-snapshot-tests.spec.ts index a03aa0f60..9d4e328de 100644 --- a/e2e/playwright/prompt-to-edit-snapshot-tests.spec.ts +++ b/e2e/playwright/prompt-to-edit-snapshot-tests.spec.ts @@ -62,7 +62,8 @@ extrude(sketch003, length = 20) test.describe('edit with AI example snapshots', () => { test( `change colour`, - { tag: '@snapshot' }, + // TODO this is more of a snapshot, but atm it needs to be manually run locally to update the files + { tag: ['@electron'] }, async ({ context, homePage, cmdBar, editor, page, scene }) => { const project = 'test-dir' await context.folderSetupFn(async (dir) => { diff --git a/e2e/playwright/prompt-to-edit.spec.ts b/e2e/playwright/prompt-to-edit.spec.ts index 4f38c5652..42276d07c 100644 --- a/e2e/playwright/prompt-to-edit.spec.ts +++ b/e2e/playwright/prompt-to-edit.spec.ts @@ -1,4 +1,6 @@ import { expect, test } from '@e2e/playwright/zoo-test' +import * as fsp from 'fs/promises' +import * as path from 'path' /* eslint-disable jest/no-conditional-expect */ @@ -50,23 +52,20 @@ test.describe('Prompt-to-edit tests', () => { page, scene, }) => { - await context.addInitScript((file) => { - localStorage.setItem('persistCode', file) - }, file) - await homePage.goToModelingScene() + await context.folderSetupFn(async (dir) => { + const projectDir = path.join(dir, 'test-project') + await fsp.mkdir(projectDir, { recursive: true }) + await fsp.writeFile(path.join(projectDir, 'main.kcl'), file) + }) + await homePage.openProject('test-project') await scene.settled(cmdBar) const body1CapCoords = { x: 571, y: 311 } - const greenCheckCoords = { x: 565, y: 305 } - const body2WallCoords = { x: 609, y: 153 } const [clickBody1Cap] = scene.makeMouseHelpers( body1CapCoords.x, body1CapCoords.y ) const yellow: [number, number, number] = [179, 179, 131] - const green: [number, number, number] = [128, 194, 88] - const notGreen: [number, number, number] = [132, 132, 132] - const body2NotGreen: [number, number, number] = [88, 88, 88] const submittingToast = page.getByText( 'Submitting to Text-to-CAD API...' ) @@ -103,32 +102,21 @@ test.describe('Prompt-to-edit tests', () => { }) await test.step('verify initial change', async () => { - await scene.expectPixelColor(green, greenCheckCoords, 20) - await scene.expectPixelColor(body2NotGreen, body2WallCoords, 15) await editor.expectEditor.toContain('appearance(') }) if (!shouldReject) { - await test.step('check accept works and can be "undo"ed', async () => { + await test.step('check accept works', async () => { await acceptBtn.click() await expect(successToast).not.toBeVisible() - await scene.expectPixelColor(green, greenCheckCoords, 15) await editor.expectEditor.toContain('appearance(') - - // ctrl-z works after accepting - await page.keyboard.down('ControlOrMeta') - await page.keyboard.press('KeyZ') - await page.keyboard.up('ControlOrMeta') - await editor.expectEditor.not.toContain('appearance(') - await scene.expectPixelColor(notGreen, greenCheckCoords, 15) }) } else { await test.step('check reject works', async () => { await rejectBtn.click() await expect(successToast).not.toBeVisible() - await scene.expectPixelColor(notGreen, greenCheckCoords, 15) await editor.expectEditor.not.toContain('appearance(') }) } diff --git a/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json b/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json index 738afc212..f390db271 100644 --- a/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json +++ b/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json @@ -31,7 +31,7 @@ } ], "project_name": "test-dir", - "kcl_version": "0.2.64", + "kcl_version": "0.2.65", "files": { "b.kcl": "sketch003 = startSketchOn(XY)\n |> startProfile(at = [52.92, 157.81])\n |> angledLine(angle = 0, length = 176.4, tag = $rectangleSegmentA001)\n |> angledLine(\n angle = segAng(rectangleSegmentA001) - 90,\n length = 53.4,\n tag = $rectangleSegmentB001,\n )\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude(sketch003, length = 20)", "main.kcl": "import \"b.kcl\" as b\nsketch001 = startSketchOn(XZ)\nprofile001 = startProfile(sketch001, at = [57.81, 250.51])\n |> line(end = [121.13, 56.63], tag = $seg02)\n |> line(end = [83.37, -34.61], tag = $seg01)\n |> line(end = [19.66, -116.4])\n |> line(end = [-221.8, -41.69])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude001 = extrude(profile001, length = 200)\nsketch002 = startSketchOn(XZ)\n |> startProfile(at = [-73.64, -42.89])\n |> xLine(length = 173.71)\n |> line(end = [-22.12, -94.4])\n |> xLine(length = -156.98)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude002 = extrude(sketch002, length = 50)\nb" diff --git a/e2e/playwright/storageStates.ts b/e2e/playwright/storageStates.ts index 48d9fc5e5..345bdfdb1 100644 --- a/e2e/playwright/storageStates.ts +++ b/e2e/playwright/storageStates.ts @@ -1,7 +1,7 @@ import type { SaveSettingsPayload } from '@src/lib/settings/settingsTypes' import { Themes } from '@src/lib/theme' import type { DeepPartial } from '@src/lib/types' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { onboardingPaths } from '@src/routes/Onboarding/paths' import type { Settings } from '@rust/kcl-lib/bindings/Settings' @@ -31,15 +31,12 @@ export const TEST_SETTINGS: DeepPartial = { export const TEST_SETTINGS_ONBOARDING_USER_MENU: DeepPartial = { ...TEST_SETTINGS, - app: { - ...TEST_SETTINGS.app, - onboarding_status: ONBOARDING_SUBPATHS.USER_MENU, - }, + app: { ...TEST_SETTINGS.app, onboarding_status: onboardingPaths.USER_MENU }, } export const TEST_SETTINGS_ONBOARDING_EXPORT: DeepPartial = { ...TEST_SETTINGS, - app: { ...TEST_SETTINGS.app, onboarding_status: ONBOARDING_SUBPATHS.EXPORT }, + app: { ...TEST_SETTINGS.app, onboarding_status: onboardingPaths.EXPORT }, } export const TEST_SETTINGS_ONBOARDING_PARAMETRIC_MODELING: DeepPartial = @@ -47,7 +44,7 @@ export const TEST_SETTINGS_ONBOARDING_PARAMETRIC_MODELING: DeepPartial ...TEST_SETTINGS, app: { ...TEST_SETTINGS.app, - onboarding_status: ONBOARDING_SUBPATHS.PARAMETRIC_MODELING, + onboarding_status: onboardingPaths.PARAMETRIC_MODELING, }, } diff --git a/e2e/playwright/test-utils.ts b/e2e/playwright/test-utils.ts index 9f4201e09..9ef93263f 100644 --- a/e2e/playwright/test-utils.ts +++ b/e2e/playwright/test-utils.ts @@ -5,7 +5,7 @@ import type { BrowserContext, Locator, Page, TestInfo } from '@playwright/test' import { expect } from '@playwright/test' import type { EngineCommand } from '@src/lang/std/artifactGraph' import type { Configuration } from '@src/lang/wasm' -import { COOKIE_NAME, IS_PLAYWRIGHT_KEY } from '@src/lib/constants' +import { COOKIE_NAME } from '@src/lib/constants' import { reportRejection } from '@src/lib/trap' import type { DeepPartial } from '@src/lib/types' import { isArray } from '@src/lib/utils' @@ -19,6 +19,7 @@ import type { ProjectConfiguration } from '@rust/kcl-lib/bindings/ProjectConfigu import { isErrorWhitelisted } from '@e2e/playwright/lib/console-error-whitelist' import { secrets } from '@e2e/playwright/secrets' import { TEST_SETTINGS, TEST_SETTINGS_KEY } from '@e2e/playwright/storageStates' +import { IS_PLAYWRIGHT_KEY } from '@src/lib/constants' import { test } from '@e2e/playwright/zoo-test' const toNormalizedCode = (text: string) => { diff --git a/flake.lock b/flake.lock index 5f2194b0b..5efd040d0 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1743800763, - "narHash": "sha256-YFKV+fxEpMgP5VsUcM6Il28lI0NlpM7+oB1XxbBAYCw=", + "lastModified": 1745925850, + "narHash": "sha256-cyAAMal0aPrlb1NgzMxZqeN1mAJ2pJseDhm2m6Um8T0=", "owner": "nix-community", "repo": "naersk", - "rev": "ed0232117731a4c19d3ee93aa0c382a8fe754b01", + "rev": "38bc60bbc157ae266d4a0c96671c6c742ee17a5f", "type": "github" }, "original": { @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1744316434, - "narHash": "sha256-lzFCg/1C39pyY2hMB2gcuHV79ozpOz/Vu15hdjiFOfI=", + "lastModified": 1745998881, + "narHash": "sha256-vonyYAKJSlsX4n9GCsS0pHxR6yCrfqBIuGvANlkwG6U=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d19cf9dfc633816a437204555afeb9e722386b76", + "rev": "423d2df5b04b4ee7688c3d71396e872afa236a89", "type": "github" }, "original": { @@ -36,11 +36,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1744316434, - "narHash": "sha256-lzFCg/1C39pyY2hMB2gcuHV79ozpOz/Vu15hdjiFOfI=", + "lastModified": 1745998881, + "narHash": "sha256-vonyYAKJSlsX4n9GCsS0pHxR6yCrfqBIuGvANlkwG6U=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d19cf9dfc633816a437204555afeb9e722386b76", + "rev": "423d2df5b04b4ee7688c3d71396e872afa236a89", "type": "github" }, "original": { @@ -52,11 +52,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1736320768, - "narHash": "sha256-nIYdTAiKIGnFNugbomgBJR+Xv5F1ZQU+HfaBqJKroC0=", + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4bc9c909d9ac828a039f288cf872d16d38185db8", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", "type": "github" }, "original": { @@ -78,11 +78,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1744338850, - "narHash": "sha256-pwMIVmsb8fjjT92n5XFDqCsplcX70qVMMT7NulumPXs=", + "lastModified": 1745980514, + "narHash": "sha256-CITAeiuXGjDvT5iZBXr6vKVWQwsUQLJUMFO91bfJFC4=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "5e64aecc018e6f775572609e7d7485fdba6985a7", + "rev": "7fbdae44b0f40ea432e46fd152ad8be0f8f41ad6", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 2dc022cde..e07cbc790 100644 --- a/flake.nix +++ b/flake.nix @@ -71,7 +71,7 @@ TARGET_CC = "${pkgs.stdenv.cc}/bin/${pkgs.stdenv.cc.targetPrefix}cc"; LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; - ELECTRON_OVERRIDE_DIST_PATH = "${pkgs.electron}/bin/"; + ELECTRON_OVERRIDE_DIST_PATH = if pkgs.stdenv.isDarwin then "${pkgs.electron}/Applications" else "${pkgs.electron}/bin"; PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS = true; PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH = "${pkgs.playwright-driver.browsers}/chromium-1091/chrome-linux/chrome"; PLAYWRIGHT_BROWSERS_PATH = "${pkgs.playwright-driver.browsers}"; diff --git a/known-circular.txt b/known-circular.txt index 45ea02e96..fd905ec04 100644 --- a/known-circular.txt +++ b/known-circular.txt @@ -11,3 +11,4 @@ 6) src/lib/singletons.ts -> src/lang/codeManager.ts 7) src/lib/singletons.ts -> src/clientSideScene/sceneEntities.ts -> src/clientSideScene/segments.ts -> src/components/Toolbar/angleLengthInfo.ts 8) src/lib/singletons.ts -> src/clientSideScene/sceneEntities.ts -> src/clientSideScene/segments.ts + 9) src/routes/Onboarding/index.tsx -> src/routes/Onboarding/Camera.tsx -> src/routes/Onboarding/utils.tsx diff --git a/package-lock.json b/package-lock.json index bf254901d..f466a9116 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "@kittycad/lib": "2.0.28", "@lezer/highlight": "^1.2.1", "@lezer/lr": "^1.4.1", + "@million/lint": "^1.0.14", "@react-hook/resize-observer": "^2.0.1", "@replit/codemirror-interact": "^6.3.1", "@ts-stack/markdown": "^1.5.0", @@ -170,7 +171,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -180,6 +180,43 @@ "node": ">=6.0.0" } }, + "node_modules/@antfu/ni": { + "version": "0.21.12", + "resolved": "https://registry.npmjs.org/@antfu/ni/-/ni-0.21.12.tgz", + "integrity": "sha512-2aDL3WUv8hMJb2L3r/PIQWsTLyq7RQr3v9xD16fiz6O8ys1xEyLhhTOv8gxtZvJiTzjTF5pHoArvRdesGL1DMQ==", + "license": "MIT", + "bin": { + "na": "bin/na.mjs", + "nci": "bin/nci.mjs", + "ni": "bin/ni.mjs", + "nlx": "bin/nlx.mjs", + "nr": "bin/nr.mjs", + "nu": "bin/nu.mjs", + "nun": "bin/nun.mjs" + } + }, + "node_modules/@axiomhq/js": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@axiomhq/js/-/js-1.0.0-rc.3.tgz", + "integrity": "sha512-Zm10TczcMLounWqC42nMkXQ7XKLqjzLrd5ia022oBKDUZqAFVg2y9d1quQVNV4FlXyg9MKDdfMjpKQRmzEGaog==", + "license": "MIT", + "dependencies": { + "fetch-retry": "^6.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@axiomhq/js/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@azure/abort-controller": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", @@ -365,7 +402,6 @@ "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", @@ -380,7 +416,6 @@ "version": "7.26.8", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -421,7 +456,6 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.27.0", @@ -451,7 +485,6 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.26.8", @@ -539,7 +572,6 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", @@ -553,7 +585,6 @@ "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", @@ -644,7 +675,6 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -654,7 +684,6 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -664,7 +693,6 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -689,7 +717,6 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.0", @@ -703,7 +730,6 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.0" @@ -1881,7 +1907,6 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", @@ -1896,7 +1921,6 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", @@ -1915,7 +1939,6 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -2089,6 +2112,42 @@ "node": ">=14.21.3" } }, + "node_modules/@clack/core": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.5.tgz", + "integrity": "sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.7.0.tgz", + "integrity": "sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==", + "bundleDependencies": [ + "is-unicode-supported" + ], + "license": "MIT", + "dependencies": { + "@clack/core": "^0.3.3", + "is-unicode-supported": "*", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts/node_modules/is-unicode-supported": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@codemirror/autocomplete": { "version": "6.18.6", "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz", @@ -3847,6 +3906,18 @@ "tailwindcss": "^3.0 || ^4.0" } }, + "node_modules/@hono/node-server": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.14.1.tgz", + "integrity": "sha512-vmbuM+HPinjWzPe7FFPWMMQMsbKE9gDPhaH0FFdqbGpkT5lp++tcWDTxwBl5EgS5y6JVgIaCdjeHRfQ4XRBRjQ==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -4005,7 +4076,6 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -4029,7 +4099,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -4045,7 +4114,6 @@ "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -4179,6 +4247,634 @@ "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", "license": "MIT" }, + "node_modules/@million/install": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@million/install/-/install-1.0.14.tgz", + "integrity": "sha512-xZvj4AEHc5hyn8RCiLl9dYNqggj2fa0lgNvUkCiJyhRJPNE2hZrUa/Ka0Weu82VpBaO//zujG0YErk7osjNXPA==", + "dependencies": { + "@antfu/ni": "^0.21.12", + "@axiomhq/js": "1.0.0-rc.3", + "@babel/parser": "^7.25.3", + "@babel/types": "7.26.0", + "@clack/prompts": "^0.7.0", + "ast-types": "^0.14.2", + "cli-high": "^0.4.2", + "diff": "^5.1.0", + "effect": "^3.8.4", + "nanoid": "^5.0.7", + "recast": "^0.23.9", + "xycolors": "^0.1.2" + }, + "bin": { + "install": "bin/index.js" + } + }, + "node_modules/@million/install/node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@million/install/node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@million/install/node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@million/install/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@million/lint": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@million/lint/-/lint-1.0.14.tgz", + "integrity": "sha512-u6/kglVwZRu5+GMmtkNlGLqJVkgTl0TtM+hLa9rBg7pldx+5NG5bk45NvL37uZmAr2Xfa1C6qHb7GrFwfP372g==", + "license": "UNLICENSED", + "dependencies": { + "@axiomhq/js": "1.0.0-rc.3", + "@babel/core": "7.26.0", + "@babel/types": "7.26.0", + "@hono/node-server": "^1.11.1", + "@million/install": "latest", + "@rollup/pluginutils": "^5.1.0", + "@rrweb/types": "2.0.0-alpha.16", + "babel-plugin-syntax-hermes-parser": "^0.21.1", + "ci-info": "^4.0.0", + "esbuild": "^0.20.1", + "faster-babel-types": "^0.1.0", + "hono": "^4.5.9", + "isomorphic-fetch": "^3.0.0", + "nanoid": "^5.0.7", + "ohash": "^1.1.4", + "pako": "^2.1.0", + "pathe": "^1.1.2", + "piscina": "^4.4.0", + "pretty-ms": "8.0.0", + "react-scan": "^0.0.31", + "rrweb": "2.0.0-alpha.4", + "rrweb-player": "1.0.0-alpha.4", + "semver": "^7.6.2", + "socket.io": "^4.8.1", + "socket.io-client": "^4.7.5", + "tmp": "^0.2.3", + "unplugin": "^1.6.0", + "update-notifier-cjs": "^5.1.6" + }, + "bin": { + "lint": "cli.js" + } + }, + "node_modules/@million/lint/node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@million/lint/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@million/lint/node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@million/lint/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@million/lint/node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/@million/lint/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@million/lint/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/@million/lint/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/@million/lint/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@nabla/vite-plugin-eslint": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nabla/vite-plugin-eslint/-/vite-plugin-eslint-2.0.5.tgz", @@ -4195,6 +4891,294 @@ "vite": "^4 || ^5 || ^6" } }, + "node_modules/@napi-rs/nice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz", + "integrity": "sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.0.1", + "@napi-rs/nice-android-arm64": "1.0.1", + "@napi-rs/nice-darwin-arm64": "1.0.1", + "@napi-rs/nice-darwin-x64": "1.0.1", + "@napi-rs/nice-freebsd-x64": "1.0.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", + "@napi-rs/nice-linux-arm64-gnu": "1.0.1", + "@napi-rs/nice-linux-arm64-musl": "1.0.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", + "@napi-rs/nice-linux-s390x-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-musl": "1.0.1", + "@napi-rs/nice-win32-arm64-msvc": "1.0.1", + "@napi-rs/nice-win32-ia32-msvc": "1.0.1", + "@napi-rs/nice-win32-x64-msvc": "1.0.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz", + "integrity": "sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz", + "integrity": "sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz", + "integrity": "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz", + "integrity": "sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz", + "integrity": "sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz", + "integrity": "sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz", + "integrity": "sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz", + "integrity": "sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz", + "integrity": "sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz", + "integrity": "sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz", + "integrity": "sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz", + "integrity": "sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz", + "integrity": "sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz", + "integrity": "sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz", + "integrity": "sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz", + "integrity": "sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4302,6 +5286,47 @@ "node": ">=18" } }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@react-hook/latest": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@react-hook/latest/-/latest-1.0.3.tgz", @@ -4487,7 +5512,6 @@ "version": "5.1.4", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -4510,14 +5534,12 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, "license": "MIT" }, "node_modules/@rollup/pluginutils/node_modules/picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -4806,6 +5828,15 @@ "win32" ] }, + "node_modules/@rrweb/types": { + "version": "2.0.0-alpha.16", + "resolved": "https://registry.npmjs.org/@rrweb/types/-/types-2.0.0-alpha.16.tgz", + "integrity": "sha512-E6cACNVsm+NUhn7dzocQoKyXI7BHrHRRm5Ab23yrAzEQ2caWocCEYJhqDlc4KRVJBkQfXZfyWm8+2d0uggFuZg==", + "license": "MIT", + "dependencies": { + "rrweb-snapshot": "^2.0.0-alpha.16" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -4833,6 +5864,18 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "MIT" + }, "node_modules/@swc/core": { "version": "1.11.20", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.11.20.tgz", @@ -5241,6 +6284,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@tsconfig/svelte": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-1.0.13.tgz", + "integrity": "sha512-5lYJP45Xllo4yE/RUBccBT32eBlRDbqN8r1/MIvQbKxW3aFqaYPCNgm8D5V20X4ShHcwvYWNlKg3liDh1MlBoA==", + "license": "MIT" + }, "node_modules/@tweenjs/tween.js": { "version": "23.1.3", "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", @@ -5312,6 +6361,21 @@ "@types/responselike": "^1.0.0" } }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/css-font-loading-module": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@types/css-font-loading-module/-/css-font-loading-module-0.0.7.tgz", + "integrity": "sha512-nl09VhutdjINdWyXxHWN/w9zlNCfr60JUqJbd24YXUuCwgeL0TpFSdElCwb6cxfB6ybE19Gjj4g0jsgkXxKv1Q==", + "license": "MIT" + }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -5355,7 +6419,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/fs-extra": { @@ -5522,7 +6585,6 @@ "version": "22.14.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -6886,6 +7948,12 @@ "url": "https://opencollective.com/xstate" } }, + "node_modules/@xstate/fsm": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@xstate/fsm/-/fsm-1.6.5.tgz", + "integrity": "sha512-b5o1I6aLNeYlU/3CPlj/Z91ybk1gUsKT+5NAJI+2W4UjvS5KLG28K9v5UvNoFVjHV8PajVZ00RH3vnjyQO7ZAw==", + "license": "MIT" + }, "node_modules/@xstate/inspect": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@xstate/inspect/-/inspect-0.8.0.tgz", @@ -6972,7 +8040,6 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -7080,6 +8147,15 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -7676,7 +8752,6 @@ "version": "0.16.1", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", - "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.1" @@ -7884,6 +8959,15 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.21.1.tgz", + "integrity": "sha512-tUCEa+EykZx3oJXc+PolKz2iwDscCJ2hCONMvEqjAb4jIQH5ZapDd5Brs2Nk4TQpSJ/1Ykz53ksQbevXbF0wxg==", + "license": "MIT", + "dependencies": { + "hermes-parser": "0.21.1" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -7926,6 +9010,15 @@ ], "license": "MIT" }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -8074,6 +9167,57 @@ "license": "MIT", "optional": true }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -8109,7 +9253,6 @@ "version": "4.24.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -8448,7 +9591,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -8471,7 +9613,6 @@ "version": "1.0.30001713", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001713.tgz", "integrity": "sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==", - "dev": true, "funding": [ { "type": "opencollective", @@ -8509,7 +9650,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -8661,6 +9801,18 @@ "node": ">=6" } }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", @@ -8677,6 +9829,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-high": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/cli-high/-/cli-high-0.4.3.tgz", + "integrity": "sha512-YbwZhmK0fpwVn3bsbYiYdkseXFcGvSVkX+fl0CY73PAz77Uzkr46X3Ifs4V7NgwfvCqGx+6C5zEi8SL8m9lqtg==", + "license": "MIT", + "dependencies": { + "@clack/prompts": "^0.7.0", + "sugar-high": "^0.7.1", + "xycolors": "^0.1.2", + "yargs": "^17.7.2" + }, + "bin": { + "cli-high": "bin/index.js" + }, + "funding": { + "url": "https://github.com/sponsors/xinyao27" + } + }, "node_modules/cli-spinners": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", @@ -8858,6 +10028,22 @@ "dev": true, "license": "MIT" }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, "node_modules/config-file-ts": { "version": "0.2.8-rc1", "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.8-rc1.tgz", @@ -8926,6 +10112,38 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/configstore/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -8953,7 +10171,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, "license": "MIT" }, "node_modules/cookie": { @@ -8993,6 +10210,19 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "license": "MIT" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/corser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", @@ -9096,6 +10326,15 @@ "node": ">= 8" } }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/css-line-break": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", @@ -9311,9 +10550,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">=4.0.0" } @@ -9666,6 +10903,18 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dotenv": { "version": "16.5.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", @@ -9825,6 +11074,16 @@ "dev": true, "license": "MIT" }, + "node_modules/effect": { + "version": "3.14.18", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.14.18.tgz", + "integrity": "sha512-hqXZGfps5lQzoVq14X0uajOx5SKiEvDn40lFVGjHs7+SpdnL39xUZo3NZ96Gs8uVz2nFxBYPCfQA0rOaW+5uQA==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -9907,7 +11166,6 @@ "version": "1.5.136", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.136.tgz", "integrity": "sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==", - "dev": true, "license": "ISC" }, "node_modules/electron-updater": { @@ -10077,6 +11335,133 @@ "once": "^1.4.0" } }, + "node_modules/engine.io": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "license": "MIT", + "dependencies": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", + "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -10354,6 +11739,15 @@ "node": ">=6" } }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -10807,7 +12201,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -11190,6 +12583,28 @@ "license": "MIT", "optional": true }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -11246,6 +12661,18 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "license": "MIT" }, + "node_modules/faster-babel-types": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/faster-babel-types/-/faster-babel-types-0.1.0.tgz", + "integrity": "sha512-0bEgAyXBdX330U6WbY80Q/h8k0NAPT3Z3sRlC6Fiv0kxekow9JQv2KBL55jIDFxNKcixjvByNnTZfH4axKSB9g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@babel/types": "^7" + } + }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -11335,6 +12762,12 @@ "node": "^12.20 || >= 14.13" } }, + "node_modules/fetch-retry": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-6.0.0.tgz", + "integrity": "sha512-BUFj1aMubgib37I3v4q78fYo63Po7t4HUPTpQ6/QE6yK6cIQrP+W43FYToeTEyg5m2Y7eFUtijUuAv/PDlWuag==", + "license": "MIT" + }, "node_modules/fflate": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", @@ -11717,7 +13150,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -11797,7 +13229,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -12018,7 +13449,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, "license": "MIT", "dependencies": { "ini": "2.0.0" @@ -12034,7 +13464,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -12172,7 +13601,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -12236,6 +13664,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -12259,6 +13696,30 @@ "he": "bin/he" } }, + "node_modules/hermes-estree": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.21.1.tgz", + "integrity": "sha512-ayfESdfG0wZM32uGw0CMfcW6pW6RM8htLXZI56A4rr7hIOjmKw+wd3+71wUc1uQfn90ZyY1NMCbQeMnunrIidg==", + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.21.1.tgz", + "integrity": "sha512-ANsRSBqQHzca7AXbsuwKApSQhAdljPip63MgqLebSVzNUI+A3NDzfiH9Ny4df4fA7Ndso3kPR1V/x1YEc7BYxA==", + "license": "MIT", + "dependencies": { + "hermes-estree": "0.21.1" + } + }, + "node_modules/hono": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.7.8.tgz", + "integrity": "sha512-PCibtFdxa7/Ldud9yddl1G81GjYaeMYYTq4ywSaNsYbB1Lug4mwtOMJf2WXykL0pntYwmpRJeOI3NmoDgD+Jxw==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -12571,11 +14032,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -12633,7 +14102,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -12964,6 +14432,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -12994,6 +14478,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -13021,11 +14517,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -13150,11 +14654,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -13225,6 +14734,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "license": "MIT" + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -13578,7 +15093,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -13626,7 +15140,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -13823,6 +15336,15 @@ "kill-port": "cli.js" } }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -14321,7 +15843,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -14609,7 +16130,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -14619,7 +16139,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -14804,6 +16323,12 @@ "dev": true, "license": "ISC" }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -15008,6 +16533,15 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -15050,7 +16584,6 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -15084,7 +16617,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -15206,7 +16738,6 @@ "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, "license": "MIT" }, "node_modules/nopt": { @@ -15455,6 +16986,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ohash": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.6.tgz", + "integrity": "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==", + "license": "MIT" + }, "node_modules/oidc-token-hash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.1.0.tgz", @@ -15889,6 +17426,18 @@ "node": ">=0.10.0" } }, + "node_modules/parse-ms": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", + "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse-semver": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", @@ -16093,7 +17642,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -16129,6 +17677,15 @@ "node": ">= 6" } }, + "node_modules/piscina": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.9.2.tgz", + "integrity": "sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==", + "license": "MIT", + "optionalDependencies": { + "@napi-rs/nice": "^1.0.1" + } + }, "node_modules/pixelmatch": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz", @@ -16156,7 +17713,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz", "integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "playwright-core": "1.52.0" @@ -16175,7 +17731,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz", "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==", - "dev": true, "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" @@ -16247,7 +17802,6 @@ "version": "8.5.3", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -16492,6 +18046,21 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/pretty-ms": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", + "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", + "license": "MIT", + "dependencies": { + "parse-ms": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/proc-log": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", @@ -16565,6 +18134,12 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "license": "ISC" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -16610,12 +18185,40 @@ "node": ">=6" } }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "license": "MIT", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/pure-color": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==", "license": "MIT" }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/qs": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", @@ -16719,9 +18322,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "optional": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -16736,17 +18337,13 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">=0.10.0" } @@ -16922,6 +18519,33 @@ "react-dom": ">=16.8" } }, + "node_modules/react-scan": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/react-scan/-/react-scan-0.0.31.tgz", + "integrity": "sha512-reHgQnASWVXwHe0Ibk/EbsEPZhKrmNRf8EUNDmjMi1lzXec+Cj9litKxD0TG2ghAwg5V4sT0wzhiOgZSIefeVg==", + "license": "MIT", + "dependencies": { + "@clack/core": "^0.3.5", + "@clack/prompts": "^0.8.2", + "kleur": "^4.1.5", + "mri": "^1.2.0", + "playwright": "^1.49.0" + }, + "bin": { + "react-scan": "bin/cli.js" + } + }, + "node_modules/react-scan/node_modules/@clack/prompts": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.8.2.tgz", + "integrity": "sha512-6b9Ab2UiZwJYA9iMyboYyW9yJvAO9V753ZhS+DHKEjZRKAxPPOb7MXXu84lsPFG+vZt6FRFniZ8rXi+zCIw4yQ==", + "license": "MIT", + "dependencies": { + "@clack/core": "0.3.5", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, "node_modules/react-textarea-autosize": { "version": "8.5.9", "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz", @@ -17105,7 +18729,6 @@ "version": "0.23.11", "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", - "dev": true, "license": "MIT", "dependencies": { "ast-types": "^0.16.1", @@ -17243,6 +18866,30 @@ "node": ">=4" } }, + "node_modules/registry-auth-token": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", + "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "license": "MIT", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", @@ -17515,6 +19162,56 @@ "typescript": "^4.5 || ^5.0" } }, + "node_modules/rrdom": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/rrdom/-/rrdom-0.1.7.tgz", + "integrity": "sha512-ZLd8f14z9pUy2Hk9y636cNv5Y2BMnNEY99wxzW9tD2BLDfe1xFxtLjB4q/xCBYo6HRe0wofzKzjm4JojmpBfFw==", + "license": "MIT", + "dependencies": { + "rrweb-snapshot": "^2.0.0-alpha.4" + } + }, + "node_modules/rrweb": { + "version": "2.0.0-alpha.4", + "resolved": "https://registry.npmjs.org/rrweb/-/rrweb-2.0.0-alpha.4.tgz", + "integrity": "sha512-wEHUILbxDPcNwkM3m4qgPgXAiBJyqCbbOHyVoNEVBJzHszWEFYyTbrZqUdeb1EfmTRC2PsumCIkVcomJ/xcOzA==", + "license": "MIT", + "dependencies": { + "@rrweb/types": "^2.0.0-alpha.4", + "@types/css-font-loading-module": "0.0.7", + "@xstate/fsm": "^1.4.0", + "base64-arraybuffer": "^1.0.1", + "fflate": "^0.4.4", + "mitt": "^3.0.0", + "rrdom": "^0.1.7", + "rrweb-snapshot": "^2.0.0-alpha.4" + } + }, + "node_modules/rrweb-player": { + "version": "1.0.0-alpha.4", + "resolved": "https://registry.npmjs.org/rrweb-player/-/rrweb-player-1.0.0-alpha.4.tgz", + "integrity": "sha512-Wlmn9GZ5Fdqa37vd3TzsYdLl/JWEvXNUrLCrYpnOwEgmY409HwVIvvA5aIo7k582LoKgdRCsB87N+f0oWAR0Kg==", + "license": "MIT", + "dependencies": { + "@tsconfig/svelte": "^1.0.0", + "rrweb": "^2.0.0-alpha.4" + } + }, + "node_modules/rrweb-snapshot": { + "version": "2.0.0-alpha.18", + "resolved": "https://registry.npmjs.org/rrweb-snapshot/-/rrweb-snapshot-2.0.0-alpha.18.tgz", + "integrity": "sha512-hBHZL/NfgQX6wO1D9mpwqFu1NJPpim+moIcKhFEjVTZVRUfCln+LOugRc4teVTCISYHN8Cw5e2iNTWCSm+SkoA==", + "license": "MIT", + "dependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/rrweb/node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==", + "license": "MIT" + }, "node_modules/run-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", @@ -17685,7 +19382,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -17699,6 +19395,18 @@ "license": "MIT", "optional": true }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "license": "MIT", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", @@ -18000,7 +19708,6 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, "license": "ISC" }, "node_modules/simple-concat": { @@ -18078,6 +19785,12 @@ "node": ">=10" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, "node_modules/sketch-helpers": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/sketch-helpers/-/sketch-helpers-0.0.4.tgz", @@ -18124,6 +19837,151 @@ "npm": ">= 3.0.0" } }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/socket.io-client": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/socks": { "version": "2.8.4", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", @@ -18171,7 +20029,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -18181,7 +20038,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -18717,6 +20573,12 @@ "dev": true, "license": "MIT" }, + "node_modules/sugar-high": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/sugar-high/-/sugar-high-0.7.5.tgz", + "integrity": "sha512-lfGxo0il0Mx4WLdXEt0WsJ8V3QkQWssXnolj5xBurzlGJW07LuwmJWKtS0B2WJ5XWz1439RHngXAmzsnLD0rFA==", + "license": "MIT" + }, "node_modules/sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", @@ -18734,7 +20596,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -19038,7 +20899,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true, "license": "MIT" }, "node_modules/tiny-typed-emitter": { @@ -19125,7 +20985,6 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, "license": "MIT", "engines": { "node": ">=14.14" @@ -19488,6 +21347,15 @@ "underscore": "^1.12.1" } }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -19597,7 +21465,6 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -19682,6 +21549,18 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -19701,11 +21580,23 @@ "node": ">= 0.8" } }, + "node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -19732,6 +21623,63 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/update-notifier-cjs": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/update-notifier-cjs/-/update-notifier-cjs-5.1.7.tgz", + "integrity": "sha512-eZWTh8F+VCEoC4UIh0pKmh8h4izj65VvLhCpJpVefUxdYe0fU3GBrC4Sbh1AoWA/miNPAb6UVlp2fUQNsfp+3g==", + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "isomorphic-fetch": "^3.0.0", + "pupa": "^2.1.1", + "registry-auth-token": "^5.0.1", + "registry-url": "^5.1.0", + "semver": "^7.3.7", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/update-notifier-cjs/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT" + }, + "node_modules/update-notifier-cjs/node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/update-notifier-cjs/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -19890,7 +21838,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -20314,6 +22261,12 @@ "node": ">=12" } }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -20483,6 +22436,18 @@ "node": ">=20.11" } }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/win-ca": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/win-ca/-/win-ca-3.5.1.tgz", @@ -20617,6 +22582,18 @@ "dev": true, "license": "ISC" }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/ws": { "version": "8.18.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", @@ -20639,6 +22616,15 @@ } } }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/xml2js": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", @@ -20673,6 +22659,14 @@ "node": ">=8.0" } }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/xstate": { "version": "5.19.2", "resolved": "https://registry.npmjs.org/xstate/-/xstate-5.19.2.tgz", @@ -20725,6 +22719,15 @@ "xterm": "^4.0.0" } }, + "node_modules/xycolors": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/xycolors/-/xycolors-0.1.2.tgz", + "integrity": "sha512-iUIDKoRUq/6Nfkiwv/PqxR6ENzgLkaaOeWwY54CtObpEwmvQHCvsgxd5xIGfEF/QU75H2quxIffOoU4tf2kKDg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/xinyao27" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -20738,7 +22741,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, "license": "ISC" }, "node_modules/yaml": { diff --git a/package.json b/package.json index ae3098221..73a2810f3 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "@kittycad/lib": "2.0.28", "@lezer/highlight": "^1.2.1", "@lezer/lr": "^1.4.1", + "@million/lint": "^1.0.14", "@react-hook/resize-observer": "^2.0.1", "@replit/codemirror-interact": "^6.3.1", "@ts-stack/markdown": "^1.5.0", diff --git a/packages/codemirror-lsp-client/src/plugin/lsp.ts b/packages/codemirror-lsp-client/src/plugin/lsp.ts index 1d7a6fa4e..f6ac9f1eb 100644 --- a/packages/codemirror-lsp-client/src/plugin/lsp.ts +++ b/packages/codemirror-lsp-client/src/plugin/lsp.ts @@ -547,19 +547,10 @@ export class LanguageServerPlugin implements PluginValue { try { // First check if rename is possible at this position - const prepareResult = await this.client - .textDocumentPrepareRename({ - textDocument: { uri: this.getDocUri() }, - position: { line, character }, - }) - .catch(() => { - // In case prepareRename is not supported, - // we fallback to the default implementation - return this.prepareRenameFallback(view, { - line, - character, - }) - }) + let prepareResult = this.prepareRenameFallback(view, { + line, + character, + }) if (!prepareResult || 'defaultBehavior' in prepareResult) { showErrorMessage(view, 'Cannot rename this symbol') diff --git a/public/kcl-samples/80-20-rail/main.kcl b/public/kcl-samples/80-20-rail/main.kcl index 89d9fde94..d75a3acc1 100644 --- a/public/kcl-samples/80-20-rail/main.kcl +++ b/public/kcl-samples/80-20-rail/main.kcl @@ -139,4 +139,4 @@ fn rail8020(originStart, railHeight, railLength) { } // Generate one adjustable rail of 80/20 -rail8020([0, 0], 1.5, 48) +rail8020(originStart = [0, 0], railHeight = 1.5, railLength = 48) diff --git a/public/kcl-samples/axial-fan/fan.kcl b/public/kcl-samples/axial-fan/fan.kcl index 7f4073bb1..91eeafad7 100644 --- a/public/kcl-samples/axial-fan/fan.kcl +++ b/public/kcl-samples/axial-fan/fan.kcl @@ -72,14 +72,14 @@ fn fanBlade(offsetHeight, startAngle: number(deg)) { } // Loft the fan blade cross sections into a single blade, then pattern them about the fan center -loft([ - fanBlade(4.5, 50), - fanBlade((fanHeight - 2 - 4) / 2, 30), - fanBlade(fanHeight - 2, 0) - ]) +crossSections = [ + fanBlade(offsetHeight = 4.5, startAngle = 50), + fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30), + fanBlade(offsetHeight = fanHeight - 2, startAngle = 0) +] +loft(crossSections) |> appearance(color = "#f3e2d8") |> patternCircular3d( - %, instances = 9, axis = [0, 0, 1], center = [0, 0, 0], diff --git a/public/kcl-samples/bench/bench-parts.kcl b/public/kcl-samples/bench/bench-parts.kcl index 129fb1954..306d7c452 100644 --- a/public/kcl-samples/bench/bench-parts.kcl +++ b/public/kcl-samples/bench/bench-parts.kcl @@ -6,7 +6,7 @@ export dividerThickness = 4 -fn dividerSketch(plane) { +fn dividerSketch(@plane) { sketch000 = startSketchOn(plane) |> startProfile(at = [-16.82, 21.2]) |> line(end = [-0.13, -1.27]) @@ -33,7 +33,7 @@ fn dividerSketch(plane) { return sketch000 } -export fn divider(plane) { +export fn divider(@plane) { right = dividerSketch(plane) |> extrude(length = dividerThickness / 2) left = dividerSketch(plane) @@ -43,7 +43,7 @@ export fn divider(plane) { return 0 } -fn connectorSketch(plane, start) { +fn connectorSketch(@plane, start) { sketch001 = startSketchOn(plane) |> startProfile(at = start) |> polygon( @@ -55,15 +55,15 @@ fn connectorSketch(plane, start) { return sketch001 } -export fn connector(plane, length) { - connectorSketch(plane, [-12, 8]) +export fn connector(@plane, length) { + connectorSketch(plane, start = [-12, 8]) |> extrude(length = length) - connectorSketch(plane, [16, 8]) + connectorSketch(plane, start = [16, 8]) |> extrude(length = length) return 0 } -fn seatSlatSketch(plane) { +fn seatSlatSketch(@plane) { sketch003 = startSketchOn(plane) |> startProfile(at = [-7, 19]) |> line(end = [-10, 0.5]) @@ -77,13 +77,13 @@ fn seatSlatSketch(plane) { return sketch003 } -export fn seatSlats(plane, length) { +export fn seatSlats(@plane, length) { seatSlatSketch(plane) |> extrude(length = length) return 0 } -fn backSlatsSketch(plane) { +fn backSlatsSketch(@plane) { sketch004 = startSketchOn(plane) |> startProfile(at = [22, 38.5]) |> angledLine(angle = 173, length = 2) @@ -97,13 +97,13 @@ fn backSlatsSketch(plane) { return sketch004 } -export fn backSlats(plane, length) { +export fn backSlats(@plane, length) { b = backSlatsSketch(plane) |> extrude(length = length) return b } -fn armRestPath(plane) { +fn armRestPath(@plane) { sketch005 = startSketchOn(plane) |> startProfile(at = [20, 33]) |> xLine(length = -20) @@ -111,7 +111,7 @@ fn armRestPath(plane) { return sketch005 } -fn armRestProfile(plane, offset) { +fn armRestProfile(@plane, offset) { sketch006 = startSketchOn(plane) |> startProfile(at = [offset, 32.4]) |> xLine(length = 1.3) @@ -124,9 +124,9 @@ fn armRestProfile(plane, offset) { return sketch006 } -export fn armRest(plane, offset) { +export fn armRest(@plane, offset) { path = armRestPath( offsetPlane(plane, offset = offset)) - profile = armRestProfile( offsetPlane(-XZ, offset = 20), -offset) + profile = armRestProfile( offsetPlane(-XZ, offset = 20), offset = -offset) sweep(profile, path = path) return 0 } diff --git a/public/kcl-samples/bench/main.kcl b/public/kcl-samples/bench/main.kcl index 6b9b482cf..bc6b25ca5 100644 --- a/public/kcl-samples/bench/main.kcl +++ b/public/kcl-samples/bench/main.kcl @@ -21,14 +21,14 @@ divider(offsetPlane(YZ, offset = benchLength / 2)) divider(offsetPlane(YZ, offset = -benchLength / 2)) // Create the connectors to join the dividers -connector(offsetPlane(YZ, offset = -benchLength / 2), benchLength) +connector(offsetPlane(YZ, offset = -benchLength / 2), length = benchLength) // Create the seat slats -seatSlats(offsetPlane(YZ, offset = -benchLength / 2 - (dividerThickness / 2)), benchLength + dividerThickness) +seatSlats(offsetPlane(YZ, offset = -benchLength / 2 - (dividerThickness / 2)), length = benchLength + dividerThickness) // Create the back slats -backSlats(offsetPlane(YZ, offset = -benchLength / 2 - (dividerThickness / 2)), benchLength + dividerThickness) +backSlats(offsetPlane(YZ, offset = -benchLength / 2 - (dividerThickness / 2)), length = benchLength + dividerThickness) // Create the arm rests -armRest(YZ, benchLength / 2) -armRest(YZ, -benchLength / 2) +armRest(YZ, offset = benchLength / 2) +armRest(YZ, offset = -benchLength / 2) diff --git a/public/kcl-samples/car-wheel-assembly/car-wheel.kcl b/public/kcl-samples/car-wheel-assembly/car-wheel.kcl index d19b8c695..66ada0459 100644 --- a/public/kcl-samples/car-wheel-assembly/car-wheel.kcl +++ b/public/kcl-samples/car-wheel-assembly/car-wheel.kcl @@ -121,8 +121,8 @@ fn spoke(spokeGap, spokeAngle, spokeThickness) { return spokePattern } -spoke(spokeGap, spokeAngle, spokeThickness) -spoke(-spokeGap, -spokeAngle, -spokeThickness) +spoke(spokeGap = spokeGap, spokeAngle = spokeAngle, spokeThickness = spokeThickness) +spoke(spokeGap = -spokeGap, spokeAngle = -spokeAngle, spokeThickness = -spokeThickness) // Define and revolve wheel exterior startSketchOn(XY) diff --git a/public/kcl-samples/car-wheel-assembly/lug-nut.kcl b/public/kcl-samples/car-wheel-assembly/lug-nut.kcl index f25f5a40b..73345c748 100644 --- a/public/kcl-samples/car-wheel-assembly/lug-nut.kcl +++ b/public/kcl-samples/car-wheel-assembly/lug-nut.kcl @@ -31,4 +31,4 @@ fn lug(plane, length, diameter) { return lugSketch } -lugNut = lug(customPlane, lugLength, lugDiameter) +lugNut = lug(plane = customPlane, length = lugLength, diameter = lugDiameter) diff --git a/public/kcl-samples/color-cube/main.kcl b/public/kcl-samples/color-cube/main.kcl index 433127289..b736af766 100644 --- a/public/kcl-samples/color-cube/main.kcl +++ b/public/kcl-samples/color-cube/main.kcl @@ -33,9 +33,9 @@ fn sketchRectangle(profile, color) { } // Sketch each side of the cube -sketchRectangle(bluePlane, '#0000FF') -sketchRectangle(yellowPlane, '#FFFF00') -sketchRectangle(greenPlane, '#00FF00') -sketchRectangle(redPlane, '#FF0000') -sketchRectangle(tealPlane, '#00FFFF') -sketchRectangle(purplePlane, '#FF00FF') +sketchRectangle(profile = bluePlane, color = '#0000FF') +sketchRectangle(profile = yellowPlane, color = '#FFFF00') +sketchRectangle(profile = greenPlane, color = '#00FF00') +sketchRectangle(profile = redPlane, color = '#FF0000') +sketchRectangle(profile = tealPlane, color = '#00FFFF') +sketchRectangle(profile = purplePlane, color = '#FF00FF') diff --git a/public/kcl-samples/cycloidal-gear/main.kcl b/public/kcl-samples/cycloidal-gear/main.kcl index a325e7a1a..19193eef6 100644 --- a/public/kcl-samples/cycloidal-gear/main.kcl +++ b/public/kcl-samples/cycloidal-gear/main.kcl @@ -7,7 +7,7 @@ // Create a function for the cycloidal gear fn cycloidalGear(gearPitch, gearHeight, holeDiameter, helixAngle: number(deg)) { // Create a function to draw the gear profile as a sketch. Rotate each profile about the gear's axis by an helix angle proportional to the total gear height - fn gearSketch(gHeight) { + fn gearSketch(@gHeight) { helixAngleP = helixAngle * gHeight / gearHeight gearProfile = startSketchOn(offsetPlane(XY, offset = gHeight)) |> startProfile(at = [ @@ -36,4 +36,9 @@ fn cycloidalGear(gearPitch, gearHeight, holeDiameter, helixAngle: number(deg)) { } // Call the cycloidal gear function -cycloidalGear(.3, 1.5, 0.297, -80) +cycloidalGear( + gearPitch = .3, + gearHeight = 1.5, + holeDiameter = 0.297, + helixAngle = -80, +) diff --git a/public/kcl-samples/dodecahedron/main.kcl b/public/kcl-samples/dodecahedron/main.kcl index 2a38fc53f..0bcef31df 100644 --- a/public/kcl-samples/dodecahedron/main.kcl +++ b/public/kcl-samples/dodecahedron/main.kcl @@ -8,7 +8,7 @@ dihedral = 116.565 // Create a face template function that makes a large thin cube -fn createFaceTemplate(dither) { +fn createFaceTemplate(@dither) { baseSketch = startSketchOn(XY) |> startProfile(at = [-1000 - dither, -1000 - dither]) |> line(endAbsolute = [1000 + dither, -1000 - dither]) @@ -62,7 +62,7 @@ dodecFaces = map( }, ) -fn calculateArrayLength(arr) { +fn calculateArrayLength(@arr) { return reduce( arr, initial = 0, @@ -72,7 +72,7 @@ fn calculateArrayLength(arr) { ) } -fn createIntersection(solids) { +fn createIntersection(@solids) { fn reduceIntersect(previous, current) { return intersect([previous, current]) } diff --git a/public/kcl-samples/enclosure/main.kcl b/public/kcl-samples/enclosure/main.kcl index 113ddfb24..35816874b 100644 --- a/public/kcl-samples/enclosure/main.kcl +++ b/public/kcl-samples/enclosure/main.kcl @@ -34,7 +34,7 @@ extrude001 = extrude(sketch001, length = height) |> shell(faces = [END], thickness = wallThickness) // Define a function to create the internal structure to secure a fastener at each corner -fn function001(originStart) { +fn function001(@originStart) { // Create a plane to sketch on shell interior plane001 = { origin = [0.0, 0.0, wallThickness], diff --git a/public/kcl-samples/exhaust-manifold/main.kcl b/public/kcl-samples/exhaust-manifold/main.kcl index a5104bf38..bb7132457 100644 --- a/public/kcl-samples/exhaust-manifold/main.kcl +++ b/public/kcl-samples/exhaust-manifold/main.kcl @@ -42,10 +42,34 @@ fn primaryTube(n, angle001, length001, length002, length003) { } // Draw a primary tube for each cylinder with specified lengths and angles -primaryTube(0, 0, 3, 6, 5) -primaryTube(1, 1, 3, 6, 5) -primaryTube(2, 24.3, 5, 5, 3) -primaryTube(3, 25.2, 5, 5, 3) +primaryTube( + n = 0, + angle001 = 0, + length001 = 3, + length002 = 6, + length003 = 5, +) +primaryTube( + n = 1, + angle001 = 1, + length001 = 3, + length002 = 6, + length003 = 5, +) +primaryTube( + n = 2, + angle001 = 24.3, + length001 = 5, + length002 = 5, + length003 = 3, +) +primaryTube( + n = 3, + angle001 = 25.2, + length001 = 5, + length002 = 5, + length003 = 3, +) // Create the mounting flange for the header flangeSketch = startSketchOn(XY) diff --git a/public/kcl-samples/focusrite-scarlett-mounting-bracket/main.kcl b/public/kcl-samples/focusrite-scarlett-mounting-bracket/main.kcl index 6f1c1189a..d5a0f402b 100644 --- a/public/kcl-samples/focusrite-scarlett-mounting-bracket/main.kcl +++ b/public/kcl-samples/focusrite-scarlett-mounting-bracket/main.kcl @@ -15,17 +15,6 @@ tabLength = 25 tabWidth = 12 tabThk = 4 -// Define a rectangular shape func -fn rectShape(pos, w, l) { - rr = startSketchOn(XY) - |> startProfile(at = [pos[0] - (w / 2), pos[1] - (l / 2)]) - |> line(endAbsolute = [pos[0] + w / 2, pos[1] - (l / 2)], tag = $edge01) - |> line(endAbsolute = [pos[0] + w / 2, pos[1] + l / 2], tag = $edge02) - |> line(endAbsolute = [pos[0] - (w / 2), pos[1] + l / 2], tag = $edge03) - |> close(tag = $edge04) - return rr -} - // Define the bracket plane bracketPlane = { origin = { x = 0, y = length / 2 + thk, z = 0 }, @@ -50,7 +39,7 @@ fn bracketSketch(w, d, t) { } // Build the body of the bracket -bs = bracketSketch(width, depth, thk) +bs = bracketSketch(w = width, d = depth, t = thk) bracketBody = bs |> extrude(length = length + 2 * thk) |> fillet( diff --git a/public/kcl-samples/food-service-spatula/main.kcl b/public/kcl-samples/food-service-spatula/main.kcl index 83aaa5401..29f42a6ec 100644 --- a/public/kcl-samples/food-service-spatula/main.kcl +++ b/public/kcl-samples/food-service-spatula/main.kcl @@ -55,13 +55,28 @@ flipperProfile = startProfile(flipperSketch, at = [-flipperLength, -32.0]) |> close() // Create a profile of the middle -slotProfile000 = slot(flipperSketch, [-25, 0], [-55, 0], flipperSlotWidth) +slotProfile000 = slot( + sketch1 = flipperSketch, + start = [-25, 0], + end = [-55, 0], + width = flipperSlotWidth, +) // Create a profile of the top slot -slotProfile001 = slot(flipperSketch, [-25, 18], [-55, 19], flipperSlotWidth) +slotProfile001 = slot( + sketch1 = flipperSketch, + start = [-25, 18], + end = [-55, 19], + width = flipperSlotWidth, +) // Create a profile of the bottom slot -slotProfile002 = slot(flipperSketch, [-25, -18], [-55, -19], flipperSlotWidth) +slotProfile002 = slot( + sketch1 = flipperSketch, + start = [-25, -18], + end = [-55, -19], + width = flipperSlotWidth, +) // Create a profile with slots for the spatula spatulaProfile = flipperProfile @@ -138,7 +153,12 @@ grip = extrude(gripProfile, length = -gripLength) holeSketch = startSketchOn(grip, face = gripEdgeTop) // Create a profile for the grip hole -gripHoleProfile = slot(holeSketch, [0, 200], [0, 210], gripSlotWidth) +gripHoleProfile = slot( + sketch1 = holeSketch, + start = [0, 200], + end = [0, 210], + width = gripSlotWidth, +) // Cut a hole in the grip extrude(gripHoleProfile, length = -gripWidth - 20) diff --git a/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl b/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl index 9be98dff7..5deff7bf3 100644 --- a/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl +++ b/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl @@ -22,7 +22,7 @@ countBinLength = 3 height = firstStep + secondStep + thirdStep // Define a function which builds the profile of the baseplate bin -fn face(plane) { +fn face(@plane) { faceSketch = startSketchOn(plane) |> startProfile(at = [0, 0]) |> yLine(length = height) @@ -84,7 +84,7 @@ basePlateCorners = patternLinear3d( |> patternLinear3d(axis = [0.0, 1.0, 0.0], instances = countBinLength, distance = binLength) // Create the center cutout for the magnet profile -fn magnetCenterCutout(plane) { +fn magnetCenterCutout(@plane) { magnetSketch = startSketchOn(plane) |> startProfile(at = [ firstStep + thirdStep, @@ -111,7 +111,7 @@ fn magnetCenterCutout(plane) { } // Create the outside profile of the magnets -fn magnetBase(plane) { +fn magnetBase(@plane) { magnetBaseSketch = startSketchOn(plane) |> startProfile(at = [0, 0]) |> xLine(length = binLength, tag = $line001) diff --git a/public/kcl-samples/gridfinity-baseplate/main.kcl b/public/kcl-samples/gridfinity-baseplate/main.kcl index 1d1281fbe..e016a10bb 100644 --- a/public/kcl-samples/gridfinity-baseplate/main.kcl +++ b/public/kcl-samples/gridfinity-baseplate/main.kcl @@ -19,7 +19,7 @@ countBinLength = 3 height = firstStep + secondStep + thirdStep // Define a function which builds the profile of the baseplate bin -fn face(plane) { +fn face(@plane) { faceSketch = startSketchOn(plane) |> startProfile(at = [0, 0]) |> yLine(length = height) diff --git a/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl b/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl index 0f63cdfa0..869e674e4 100644 --- a/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl +++ b/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl @@ -34,7 +34,7 @@ height = firstStep + secondStep + thirdStep lipHeight = lipStep1 + lipStep2 + lipStep3 + lipStep4 + lipStep5 // Define a function which builds the profile of the baseplate bin -fn face(plane) { +fn face(@plane) { faceSketch = startSketchOn(plane) |> startProfile(at = [binBaseLength + binTol, 0]) |> yLine(length = height) @@ -174,7 +174,7 @@ binTop = startSketchOn(offsetPlane(XY, offset = height)) |> shell(faces = [END], thickness = binThk) // Define a function which builds the profile of the baseplate bin -fn lipFace(plane) { +fn lipFace(@plane) { faceSketch = startSketchOn(plane) |> startProfile(at = [0, 0]) // |> yLine(length = lipHeight, tag = $line100) diff --git a/public/kcl-samples/gridfinity-bins/main.kcl b/public/kcl-samples/gridfinity-bins/main.kcl index 1fbad9966..5458b3d72 100644 --- a/public/kcl-samples/gridfinity-bins/main.kcl +++ b/public/kcl-samples/gridfinity-bins/main.kcl @@ -27,7 +27,7 @@ countBinHeight = 2 height = firstStep + secondStep + thirdStep // Define a function which builds the profile of the baseplate bin -fn face(plane) { +fn face(@plane) { faceSketch = startSketchOn(plane) |> startProfile(at = [binBaseLength + binTol, 0]) |> yLine(length = height) diff --git a/public/kcl-samples/hex-nut/main.kcl b/public/kcl-samples/hex-nut/main.kcl index 9d5432e71..fb61c1fd9 100644 --- a/public/kcl-samples/hex-nut/main.kcl +++ b/public/kcl-samples/hex-nut/main.kcl @@ -25,4 +25,4 @@ fn hexNut(start, thk, innerDia) { } // Create a hex nut -hexNut([0, 0], thickness, diameter) +hexNut(start = [0, 0], thk = thickness, innerDia = diameter) diff --git a/public/kcl-samples/keyboard/main.kcl b/public/kcl-samples/keyboard/main.kcl index b3c0bc8ad..5b46a7284 100644 --- a/public/kcl-samples/keyboard/main.kcl +++ b/public/kcl-samples/keyboard/main.kcl @@ -88,37 +88,163 @@ fn keyFn(originStart, keyWidth, keyHeight, repeats, color) { } // Build the first row of keys -keyFn([0.3, row1], 1.1, keyHeight, 0, highlightColor2) -keyFn([1.5, row1], 0.8, keyHeight, 2, highlightColor1) -keyFn([spacing * 7 + 3.5, row1], 5.2, keyHeight, 0, highlightColor2) -keyFn([spacing * 8 + 8.7, row1], 0.8, keyHeight, 0, highlightColor1) -keyFn([spacing * 8 + 9.6, row1], 0.8, keyHeight, 0, highlightColor1) -keyFn([spacing * 10 + 10.3, row1], 1.1, keyHeight, 0, highlightColor1) -keyFn([spacing * 12 + 10.3 + 1, row1], 0.8, keyHeight, 0, highlightColor2) +keyFn( + originStart = [0.3, row1], + keyWidth = 1.1, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor2, +) +keyFn( + originStart = [1.5, row1], + keyWidth = 0.8, + keyHeight = keyHeight, + repeats = 2, + color = highlightColor1, +) +keyFn( + originStart = [spacing * 7 + 3.5, row1], + keyWidth = 5.2, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor2, +) +keyFn( + originStart = [spacing * 8 + 8.7, row1], + keyWidth = 0.8, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor1, +) +keyFn( + originStart = [spacing * 8 + 9.6, row1], + keyWidth = 0.8, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor1, +) +keyFn( + originStart = [spacing * 10 + 10.3, row1], + keyWidth = 1.1, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor1, +) +keyFn( + originStart = [spacing * 12 + 10.3 + 1, row1], + keyWidth = 0.8, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor2, +) // Build the second row of keys -keyFn([spacing * 3, row2], 1.7, keyHeight, 0, highlightColor2) -keyFn([spacing * 4 + 1.7, row2], 0.8, keyHeight, 9, highlightColor1) -keyFn([spacing * 14 + 1.7 + 0.8 * 10, row2], 2.2, keyHeight, 0, highlightColor2) +keyFn( + originStart = [spacing * 3, row2], + keyWidth = 1.7, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor2, +) +keyFn( + originStart = [spacing * 4 + 1.7, row2], + keyWidth = 0.8, + keyHeight = keyHeight, + repeats = 9, + color = highlightColor1, +) +keyFn( + originStart = [spacing * 14 + 1.7 + 0.8 * 10, row2], + keyWidth = 2.2, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor2, +) // Build the third row of keys -keyFn([spacing * 3, row3], 1.1 + .1, keyHeight, 0, highlightColor1) -keyFn([spacing * 4 + 1.1 + .1, row3], 0.8, keyHeight, 10, highlightColor1) -keyFn([spacing * 3 + 11.1 + .1, row3], 1.4 + .4, keyHeight, 0, highlightColor2) +keyFn( + originStart = [spacing * 3, row3], + keyWidth = 1.1 + .1, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor1, +) +keyFn( + originStart = [spacing * 4 + 1.1 + .1, row3], + keyWidth = 0.8, + keyHeight = keyHeight, + repeats = 10, + color = highlightColor1, +) +keyFn( + originStart = [spacing * 3 + 11.1 + .1, row3], + keyWidth = 1.4 + .4, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor2, +) // Build the fourth row of keys -keyFn([spacing * 3, row4], 0.9, keyHeight, 0, highlightColor1) -keyFn([spacing * 4 + 0.9, row4], 0.8, keyHeight, 11, highlightColor1) -keyFn([spacing * 3 + 11.8, row4], 1.2, keyHeight, 0, highlightColor1) +keyFn( + originStart = [spacing * 3, row4], + keyWidth = 0.9, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor1, +) +keyFn( + originStart = [spacing * 4 + 0.9, row4], + keyWidth = 0.8, + keyHeight = keyHeight, + repeats = 11, + color = highlightColor1, +) +keyFn( + originStart = [spacing * 3 + 11.8, row4], + keyWidth = 1.2, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor1, +) // Build the fifth row of keys -keyFn([spacing * 3, row5], 0.8, keyHeight, 12, highlightColor1) -keyFn([spacing * 3 + 11.7, row5], 1.3, keyHeight, 0, highlightColor2) +keyFn( + originStart = [spacing * 3, row5], + keyWidth = 0.8, + keyHeight = keyHeight, + repeats = 12, + color = highlightColor1, +) +keyFn( + originStart = [spacing * 3 + 11.7, row5], + keyWidth = 1.3, + keyHeight = keyHeight, + repeats = 0, + color = highlightColor2, +) // Build the sixth row of keys -keyFn([spacing * 3, row6], 1.1, keyHeight * .6, 0, highlightColor2) -keyFn([spacing * 4 + 1.1, row6], 0.8, keyHeight * .6, 11, highlightColor1) -keyFn([spacing * 3 + 12, row6], 1, keyHeight * .6, 0, highlightColor2) +keyFn( + originStart = [spacing * 3, row6], + keyWidth = 1.1, + keyHeight = keyHeight * .6, + repeats = 0, + color = highlightColor2, +) +keyFn( + originStart = [spacing * 4 + 1.1, row6], + keyWidth = 0.8, + keyHeight = keyHeight * .6, + repeats = 11, + color = highlightColor1, +) +keyFn( + originStart = [spacing * 3 + 12, row6], + keyWidth = 1, + keyHeight = keyHeight * .6, + repeats = 0, + color = highlightColor2, +) // Create a plane to sketch ZOO brand letters on plane002 = { @@ -185,6 +311,6 @@ fn o(origin, scale, depth) { } // Place the Z logo on the Z key. Place the O logo on the O and P keys -z([2.3, 1.3], .4, 0.03) -o([8.71, row4 + .08], 0.4, 0.03) -o([8.71 + 0.9, row4 + .08], 0.4, 0.03) +z(origin = [2.3, 1.3], scale = .4, depth = 0.03) +o(origin = [8.71, row4 + .08], scale = 0.4, depth = 0.03) +o(origin = [8.71 + 0.9, row4 + .08], scale = 0.4, depth = 0.03) diff --git a/public/kcl-samples/kitt/main.kcl b/public/kcl-samples/kitt/main.kcl index dbc62717e..b7a5757b4 100644 --- a/public/kcl-samples/kitt/main.kcl +++ b/public/kcl-samples/kitt/main.kcl @@ -37,7 +37,15 @@ kitHeadElevation = kitBodyElevation + kitBodyHeight - kitHeadOffset - kitHeadHei kitHeadWidth = kitBodyWidth - (kitHeadOffset * 2) kitHeadDepth = 3 -kitHead = pixelBox(kitBody, END, -kitHeadWidth / 2, kitHeadElevation, kitHeadWidth, kitHeadHeight, kitHeadDepth) +kitHead = pixelBox( + kitExtrude = kitBody, + extrudeTag = END, + positionY = -kitHeadWidth / 2, + positionZ = kitHeadElevation, + width = kitHeadWidth, + height = kitHeadHeight, + depth = kitHeadDepth, +) kitFaceElevation = kitHeadElevation + 2 // 3. Kitty Face @@ -67,17 +75,49 @@ kitFace = startSketchOn(kitHead, face = END) // 3.1.1 Kitty Left Eye kitEyeDepth = 0.5 -kitEyeHeihgt = kitFaceElevation + 7 +kitEyeHeight = kitFaceElevation + 7 kitEyeOffset = 7 // 3.1.2 Kitty Right Eye -kitLeftEye1 = pixelBox(kitFace, START, -kitEyeOffset, kitEyeHeihgt, 1, 1, kitEyeDepth) +kitLeftEye1 = pixelBox( + kitExtrude = kitFace, + extrudeTag = START, + positionY = -kitEyeOffset, + positionZ = kitEyeHeight, + width = 1, + height = 1, + depth = kitEyeDepth, +) // 3.2 Kitty Nose -kitLeftEye2 = pixelBox(kitFace, START, -kitEyeOffset + 1, kitEyeHeihgt + 1, 3, 1, kitEyeDepth) -kitLeftEye3 = pixelBox(kitFace, START, -kitEyeOffset + 4, kitEyeHeihgt, 1, 1, kitEyeDepth) -kitRightEye = pixelBox(kitFace, START, kitEyeOffset - 3, kitEyeHeihgt - 1, 2, 4, kitEyeDepth) -kitNoseElevation = kitEyeHeihgt - 5 +kitLeftEye2 = pixelBox( + kitExtrude = kitFace, + extrudeTag = START, + positionY = -kitEyeOffset + 1, + positionZ = kitEyeHeight + 1, + width = 3, + height = 1, + depth = kitEyeDepth, +) +kitLeftEye3 = pixelBox( + kitExtrude = kitFace, + extrudeTag = START, + positionY = -kitEyeOffset + 4, + positionZ = kitEyeHeight, + width = 1, + height = 1, + depth = kitEyeDepth, +) +kitRightEye = pixelBox( + kitExtrude = kitFace, + extrudeTag = START, + positionY = kitEyeOffset - 3, + positionZ = kitEyeHeight - 1, + width = 2, + height = 4, + depth = kitEyeDepth, +) +kitNoseElevation = kitEyeHeight - 5 kitNose = startSketchOn(kitFace, face = START) |> startProfile(at = [-2, kitNoseElevation]) // H V |> line(end = [0, 1]) // lower-left up @@ -97,13 +137,45 @@ kitNose = startSketchOn(kitFace, face = START) // 3.3 Kitty Mouth kitMouthOffset = 4 -kitMouthHeight = kitEyeHeihgt - 3 -kitMouthUpLeft = pixelBox(kitFace, START, -kitMouthOffset, kitMouthHeight, 1, 1, kitEyeDepth) +kitMouthHeight = kitEyeHeight - 3 +kitMouthUpLeft = pixelBox( + kitExtrude = kitFace, + extrudeTag = START, + positionY = -kitMouthOffset, + positionZ = kitMouthHeight, + width = 1, + height = 1, + depth = kitEyeDepth, +) // 4. Kitty Belly -kitMouthDownLeft = pixelBox(kitFace, START, -kitMouthOffset + 1, kitMouthHeight - 1, 1, 1, kitEyeDepth) -kitMouthUpRight = pixelBox(kitFace, START, kitMouthOffset, kitMouthHeight, 1, 1, kitEyeDepth) -kitMouthDownRight = pixelBox(kitFace, START, kitMouthOffset - 1, kitMouthHeight - 1, 1, 1, kitEyeDepth) +kitMouthDownLeft = pixelBox( + kitExtrude = kitFace, + extrudeTag = START, + positionY = -kitMouthOffset + 1, + positionZ = kitMouthHeight - 1, + width = 1, + height = 1, + depth = kitEyeDepth, +) +kitMouthUpRight = pixelBox( + kitExtrude = kitFace, + extrudeTag = START, + positionY = kitMouthOffset, + positionZ = kitMouthHeight, + width = 1, + height = 1, + depth = kitEyeDepth, +) +kitMouthDownRight = pixelBox( + kitExtrude = kitFace, + extrudeTag = START, + positionY = kitMouthOffset - 1, + positionZ = kitMouthHeight - 1, + width = 1, + height = 1, + depth = kitEyeDepth, +) kitBellyElevation = kitBodyElevation + 1 kitBellyHeight = kitHeadElevation - kitBellyElevation - 1 @@ -111,7 +183,15 @@ kitBellyHeight = kitHeadElevation - kitBellyElevation - 1 // 4.1 Kitty VHS kitBellyWidth = kitHeadWidth kitBellyDepth = kitHeadDepth -kitBelly = pixelBox(kitBody, END, -kitBellyWidth / 2, kitBellyElevation, kitBellyWidth, kitBellyHeight, kitBellyDepth) +kitBelly = pixelBox( + kitExtrude = kitBody, + extrudeTag = END, + positionY = -kitBellyWidth / 2, + positionZ = kitBellyElevation, + width = kitBellyWidth, + height = kitBellyHeight, + depth = kitBellyDepth, +) kitVHSelevation = kitBellyElevation + 1 kitVHSheight = 2 @@ -119,7 +199,15 @@ kitVHSheight = 2 // 4.2 Kitty Floppy kitVHSwidth = 8 kitVHSdepth = 1 -kitVHS = pixelBox(kitBelly, END, -kitVHSwidth / 2, kitVHSelevation, kitVHSwidth, kitVHSheight, kitVHSdepth) +kitVHS = pixelBox( + kitExtrude = kitBelly, + extrudeTag = END, + positionY = -kitVHSwidth / 2, + positionZ = kitVHSelevation, + width = kitVHSwidth, + height = kitVHSheight, + depth = kitVHSdepth, +) kitFloppyElevation = kitBellyElevation + 1 kitFloppyHeight = 1 @@ -128,9 +216,33 @@ kitFloppyOffset = kitBellyWidth / 2 - 1 kitFloppyDepth = 2 // 4.3 Kitty Belly Button -kitFloppy1 = pixelBox(kitBelly, END, -kitFloppyOffset, kitFloppyElevation, kitFloppyWidth, kitFloppyHeight, -kitFloppyDepth) -kitFloppy2 = pixelBox(kitBelly, END, -kitFloppyOffset, kitFloppyElevation + 2, kitFloppyWidth, kitFloppyHeight, -kitFloppyDepth) -kitFloppy3 = pixelBox(kitBelly, END, kitFloppyOffset, kitFloppyElevation, -kitFloppyWidth, kitFloppyHeight, -kitFloppyDepth) +kitFloppy1 = pixelBox( + kitExtrude = kitBelly, + extrudeTag = END, + positionY = -kitFloppyOffset, + positionZ = kitFloppyElevation, + width = kitFloppyWidth, + height = kitFloppyHeight, + depth = -kitFloppyDepth, +) +kitFloppy2 = pixelBox( + kitExtrude = kitBelly, + extrudeTag = END, + positionY = -kitFloppyOffset, + positionZ = kitFloppyElevation + 2, + width = kitFloppyWidth, + height = kitFloppyHeight, + depth = -kitFloppyDepth, +) +kitFloppy3 = pixelBox( + kitExtrude = kitBelly, + extrudeTag = END, + positionY = kitFloppyOffset, + positionZ = kitFloppyElevation, + width = -kitFloppyWidth, + height = kitFloppyHeight, + depth = -kitFloppyDepth, +) kitBellyButtonOffset = kitHeadWidth / 2 - 3 kitBellyButtonElevation = kitHeadElevation - 1 @@ -139,18 +251,50 @@ kitBellyButtonWidth = 2 // 4.4 Kitty Buttons kitBellyButtonHeight = 1 kitBellyButtonDepth = kitHeadDepth + 1 -kitBellyButton = pixelBox(kitBody, END, -kitBellyButtonOffset, kitBellyButtonElevation, kitBellyButtonWidth, kitBellyButtonHeight, kitBellyButtonDepth) +kitBellyButton = pixelBox( + kitExtrude = kitBody, + extrudeTag = END, + positionY = -kitBellyButtonOffset, + positionZ = kitBellyButtonElevation, + width = kitBellyButtonWidth, + height = kitBellyButtonHeight, + depth = kitBellyButtonDepth, +) kitButtonWidth = 1 kitButtonHeight = 2 kitButtonDepth = kitFloppyDepth kitButtonElevation = kitFloppyElevation + 2 -kitButton1 = pixelBox(kitBelly, END, kitFloppyOffset, kitFloppyElevation + 2, -kitButtonWidth, kitButtonHeight, -kitButtonDepth) +kitButton1 = pixelBox( + kitExtrude = kitBelly, + extrudeTag = END, + positionY = kitFloppyOffset, + positionZ = kitFloppyElevation + 2, + width = -kitButtonWidth, + height = kitButtonHeight, + depth = -kitButtonDepth, +) // 5. Kitty Legs -kitButton2 = pixelBox(kitBelly, END, kitFloppyOffset - kitButtonWidth - 1, kitFloppyElevation + 2, -kitButtonWidth, kitButtonHeight, -kitButtonDepth) -kitButton3 = pixelBox(kitBelly, END, kitFloppyOffset - (2 * (kitButtonWidth + 1)), kitFloppyElevation + 2, -kitButtonWidth, kitButtonHeight, -kitButtonDepth) +kitButton2 = pixelBox( + kitExtrude = kitBelly, + extrudeTag = END, + positionY = kitFloppyOffset - kitButtonWidth - 1, + positionZ = kitFloppyElevation + 2, + width = -kitButtonWidth, + height = kitButtonHeight, + depth = -kitButtonDepth, +) +kitButton3 = pixelBox( + kitExtrude = kitBelly, + extrudeTag = END, + positionY = kitFloppyOffset - (2 * (kitButtonWidth + 1)), + positionZ = kitFloppyElevation + 2, + width = -kitButtonWidth, + height = kitButtonHeight, + depth = -kitButtonDepth, +) kitShoeWidth = 7 kitShoeLength = 10 @@ -175,14 +319,22 @@ fn kitLeg(offsetFront, offsetSide) { kitPantsFrontWidth = kitPantsWidth kitPantsHeight = kitBodyElevation - kitShoeHeight - kitPants = pixelBox(kitShoe, END, kitPantsOffsetSide, kitPantsOffsetFront, kitPantsFrontWidth, kitPantsWidth, kitPantsHeight) + kitPants = pixelBox( + kitExtrude = kitShoe, + extrudeTag = END, + positionY = kitPantsOffsetSide, + positionZ = kitPantsOffsetFront, + width = kitPantsFrontWidth, + height = kitPantsWidth, + depth = kitPantsHeight, + ) return kitShoe } kitLegOffset = 3 -kitRightLeg = kitLeg(0, kitLegOffset) -kitLeftLeg = kitLeg(0, -kitLegOffset - kitShoeWidth) +kitRightLeg = kitLeg(offsetFront = 0, offsetSide = kitLegOffset) +kitLeftLeg = kitLeg(offsetFront = 0, offsetSide = -kitLegOffset - kitShoeWidth) // 6. Kitty Ears kitEarWidth = 8 @@ -192,24 +344,56 @@ kitEarHeight = 2 fn kitEar(earOffsetFront, earOffsetSide) { kitNewEarOffsetFront = kitBodyDepth - earOffsetFront kitNewEarOffsetSide = -(kitBodyWidth / 2 - earOffsetSide) - baseVolume = pixelBox(kitBody, seg01, kitNewEarOffsetSide, kitNewEarOffsetFront, kitEarWidth, -kitEarDepth, kitEarHeight) + baseVolume = pixelBox( + kitExtrude = kitBody, + extrudeTag = seg01, + positionY = kitNewEarOffsetSide, + positionZ = kitNewEarOffsetFront, + width = kitEarWidth, + height = -kitEarDepth, + depth = kitEarHeight, + ) secondOffset = 1 - secondLevel = pixelBox(baseVolume, END, kitNewEarOffsetSide + secondOffset, kitNewEarOffsetFront - 0.01, kitEarWidth - (secondOffset * 2), -kitEarDepth + secondOffset * 2, kitEarHeight) + secondLevel = pixelBox( + kitExtrude = baseVolume, + extrudeTag = END, + positionY = kitNewEarOffsetSide + secondOffset, + positionZ = kitNewEarOffsetFront - 0.01, + width = kitEarWidth - (secondOffset * 2), + height = -kitEarDepth + secondOffset * 2, + depth = kitEarHeight, + ) thirdOffset = 2 - thirdLevel = pixelBox(secondLevel, END, kitNewEarOffsetSide + thirdOffset, kitNewEarOffsetFront - 0.02, kitEarWidth - (thirdOffset * 2), -kitEarDepth + thirdOffset * 2, kitEarHeight) + thirdLevel = pixelBox( + kitExtrude = secondLevel, + extrudeTag = END, + positionY = kitNewEarOffsetSide + thirdOffset, + positionZ = kitNewEarOffsetFront - 0.02, + width = kitEarWidth - (thirdOffset * 2), + height = -kitEarDepth + thirdOffset * 2, + depth = kitEarHeight, + ) fourthOffset = 3 - fourthLevel = pixelBox(thirdLevel, END, kitNewEarOffsetSide + fourthOffset, kitNewEarOffsetFront - 0.03, kitEarWidth - (fourthOffset * 2), -kitEarDepth + fourthOffset * 2, kitEarHeight) + fourthLevel = pixelBox( + kitExtrude = thirdLevel, + extrudeTag = END, + positionY = kitNewEarOffsetSide + fourthOffset, + positionZ = kitNewEarOffsetFront - 0.03, + width = kitEarWidth - (fourthOffset * 2), + height = -kitEarDepth + fourthOffset * 2, + depth = kitEarHeight, + ) return baseVolume } kitEarOffsetFront = 4 kitEarOffsetSide = 1 -kitRightEar = kitEar(kitEarOffsetFront, kitEarOffsetSide) -kitLeftEar = kitEar(kitEarOffsetFront, kitBodyWidth - kitEarWidth - kitEarOffsetSide) +kitRightEar = kitEar(earOffsetFront = kitEarOffsetFront, earOffsetSide = kitEarOffsetSide) +kitLeftEar = kitEar(earOffsetFront = kitEarOffsetFront, earOffsetSide = kitBodyWidth - kitEarWidth - kitEarOffsetSide) // 7. Kitty Side // 7.1 Grill @@ -228,19 +412,75 @@ grillColumnE = grillColumnA - 4 grillHoleSize = 1 grillHoleDepth = -2 -grillHoleAB = pixelBox(kitBody, seg02, grillRowA, grillColumnB, grillHoleSize, grillHoleSize, grillHoleDepth) +grillHoleAB = pixelBox( + kitExtrude = kitBody, + extrudeTag = seg02, + positionY = grillRowA, + positionZ = grillColumnB, + width = grillHoleSize, + height = grillHoleSize, + depth = grillHoleDepth, +) -grillHoleAD = pixelBox(kitBody, seg02, grillRowA, grillColumnD, grillHoleSize, grillHoleSize, grillHoleDepth) +grillHoleAD = pixelBox( + kitExtrude = kitBody, + extrudeTag = seg02, + positionY = grillRowA, + positionZ = grillColumnD, + width = grillHoleSize, + height = grillHoleSize, + depth = grillHoleDepth, +) -grillHoleBA = pixelBox(kitBody, seg02, grillRowB, grillColumnA, grillHoleSize, grillHoleSize, grillHoleDepth) +grillHoleBA = pixelBox( + kitExtrude = kitBody, + extrudeTag = seg02, + positionY = grillRowB, + positionZ = grillColumnA, + width = grillHoleSize, + height = grillHoleSize, + depth = grillHoleDepth, +) -grillHoleBC = pixelBox(kitBody, seg02, grillRowB, grillColumnC, grillHoleSize, grillHoleSize, grillHoleDepth) +grillHoleBC = pixelBox( + kitExtrude = kitBody, + extrudeTag = seg02, + positionY = grillRowB, + positionZ = grillColumnC, + width = grillHoleSize, + height = grillHoleSize, + depth = grillHoleDepth, +) -grillHoleBE = pixelBox(kitBody, seg02, grillRowB, grillColumnE, grillHoleSize, grillHoleSize, grillHoleDepth) +grillHoleBE = pixelBox( + kitExtrude = kitBody, + extrudeTag = seg02, + positionY = grillRowB, + positionZ = grillColumnE, + width = grillHoleSize, + height = grillHoleSize, + depth = grillHoleDepth, +) -grillHoleCB = pixelBox(kitBody, seg02, grillRowC, grillColumnB, grillHoleSize, grillHoleSize, grillHoleDepth) +grillHoleCB = pixelBox( + kitExtrude = kitBody, + extrudeTag = seg02, + positionY = grillRowC, + positionZ = grillColumnB, + width = grillHoleSize, + height = grillHoleSize, + depth = grillHoleDepth, +) -grillHoleCD = pixelBox(kitBody, seg02, grillRowC, grillColumnD, grillHoleSize, grillHoleSize, grillHoleDepth) +grillHoleCD = pixelBox( + kitExtrude = kitBody, + extrudeTag = seg02, + positionY = grillRowC, + positionZ = grillColumnD, + width = grillHoleSize, + height = grillHoleSize, + depth = grillHoleDepth, +) // 7.2 Kitty Vent kitVentElevation = kitBodyElevation + 1 @@ -249,8 +489,32 @@ kitVentHoleWidth = 1 kitVentHoleHeight = 4 kitVentHoleDepth = grillHoleDepth -kitVentA = pixelBox(kitBody, seg02, kitVentElevation, kitVentOffset, kitVentHoleHeight, kitVentHoleWidth, kitVentHoleDepth) +kitVentA = pixelBox( + kitExtrude = kitBody, + extrudeTag = seg02, + positionY = kitVentElevation, + positionZ = kitVentOffset, + width = kitVentHoleHeight, + height = kitVentHoleWidth, + depth = kitVentHoleDepth, +) -kitVentB = pixelBox(kitBody, seg02, kitVentElevation, kitVentOffset + 2, kitVentHoleHeight, kitVentHoleWidth, kitVentHoleDepth) +kitVentB = pixelBox( + kitExtrude = kitBody, + extrudeTag = seg02, + positionY = kitVentElevation, + positionZ = kitVentOffset + 2, + width = kitVentHoleHeight, + height = kitVentHoleWidth, + depth = kitVentHoleDepth, +) -kitVentC = pixelBox(kitBody, seg02, kitVentElevation, kitVentOffset + 4, kitVentHoleHeight, kitVentHoleWidth, kitVentHoleDepth) +kitVentC = pixelBox( + kitExtrude = kitBody, + extrudeTag = seg02, + positionY = kitVentElevation, + positionZ = kitVentOffset + 4, + width = kitVentHoleHeight, + height = kitVentHoleWidth, + depth = kitVentHoleDepth, +) diff --git a/public/kcl-samples/makeup-mirror/main.kcl b/public/kcl-samples/makeup-mirror/main.kcl index a2586ab97..e88b25e15 100644 --- a/public/kcl-samples/makeup-mirror/main.kcl +++ b/public/kcl-samples/makeup-mirror/main.kcl @@ -29,15 +29,15 @@ fn hingeFn(x, y, z) { return hingeBody } -hingePartA1 = hingeFn(0, 0, 0) -hingePartA2 = hingeFn(0, 0, hingeHeight + hingeGap) -hingePartA3 = hingeFn(0, 0, hingeHeight * 2 + hingeGap * 2) +hingePartA1 = hingeFn(x = 0, y = 0, z = 0) +hingePartA2 = hingeFn(x = 0, y = 0, z = hingeHeight + hingeGap) +hingePartA3 = hingeFn(x = 0, y = 0, z = hingeHeight * 2 + hingeGap * 2) -hingePartB2 = hingeFn(armLength, 0, hingeHeight + hingeGap) -hingePartB3 = hingeFn(armLength, 0, hingeHeight * 2 + hingeGap * 2) +hingePartB2 = hingeFn(x = armLength, y = 0, z = hingeHeight + hingeGap) +hingePartB3 = hingeFn(x = armLength, y = 0, z = hingeHeight * 2 + hingeGap * 2) -hingePartC2 = hingeFn(armLength, -armLength, hingeHeight * 2 + hingeGap * 2) -hingePartC3 = hingeFn(armLength, -armLength, hingeHeight * 3 + hingeGap * 3) +hingePartC2 = hingeFn(x = armLength, y = -armLength, z = hingeHeight * 2 + hingeGap * 2) +hingePartC3 = hingeFn(x = armLength, y = -armLength, z = hingeHeight * 3 + hingeGap * 3) // Add a function to create the arm fn armFn(plane, offset, altitude) { @@ -47,8 +47,8 @@ fn armFn(plane, offset, altitude) { return armBody } -armPartA = armFn(YZ, 0, hingeHeight * 1.5 + hingeGap) -armPartB = armFn(XZ, armLength, hingeHeight * 2.5 + hingeGap * 2) +armPartA = armFn(plane = YZ, offset = 0, altitude = hingeHeight * 1.5 + hingeGap) +armPartB = armFn(plane = XZ, offset = armLength, altitude = hingeHeight * 2.5 + hingeGap * 2) // Add a function to create the mirror fn mirrorFn(plane, offsetX, offsetY, altitude, radius, tiefe, gestellR, gestellD) { @@ -72,4 +72,13 @@ fn mirrorFn(plane, offsetX, offsetY, altitude, radius, tiefe, gestellR, gestellD return armBody } -mirror = mirrorFn(XZ, armLength, armLength, hingeHeight * 4 + hingeGap * 3 + mirrorRadius + archToMirrorGap + archThickness, mirrorRadius, mirrorThickness, archRadius, archThickness) +mirror = mirrorFn( + plane = XZ, + offsetX = armLength, + offsetY = armLength, + altitude = hingeHeight * 4 + hingeGap * 3 + mirrorRadius + archToMirrorGap + archThickness, + radius = mirrorRadius, + tiefe = mirrorThickness, + gestellR = archRadius, + gestellD = archThickness, +) diff --git a/public/kcl-samples/mounting-plate/main.kcl b/public/kcl-samples/mounting-plate/main.kcl index b4a323481..601a87c44 100644 --- a/public/kcl-samples/mounting-plate/main.kcl +++ b/public/kcl-samples/mounting-plate/main.kcl @@ -27,7 +27,7 @@ holeRadius = .25 holeIndex = .75 // Create the mounting plate extrusion, holes, and fillets -rs = rectShape([0, 0], plateWidth, plateLength) +rs = rectShape(pos = [0, 0], w = plateWidth, l = plateLength) part = rs |> subtract2d(tool = circle( center = [ diff --git a/public/kcl-samples/walkie-talkie/case.kcl b/public/kcl-samples/walkie-talkie/case.kcl index 84c658978..8b1b562a9 100644 --- a/public/kcl-samples/walkie-talkie/case.kcl +++ b/public/kcl-samples/walkie-talkie/case.kcl @@ -62,10 +62,10 @@ case = startSketchOn(XZ) |> subtract2d(tool = squareHolePatternSketch) // Create the Zoo logo - |> subtract2d(tool = zLogo(startSketchOn(XZ), [-.30, -1.825], .20)) - |> subtract2d(tool = oLogo(startSketchOn(XZ), [-.075, -1.825], .20)) - |> subtract2d(tool = oLogo2(startSketchOn(XZ), [-.075, -1.825], .20)) - |> subtract2d(tool = oLogo(startSketchOn(XZ), [.175, -1.825], .20)) - |> subtract2d(tool = oLogo2(startSketchOn(XZ), [.175, -1.825], .20)) + |> subtract2d(tool = zLogo(surface = startSketchOn(XZ), origin = [-.30, -1.825], scale = .20)) + |> subtract2d(tool = oLogo(surface = startSketchOn(XZ), origin = [-.075, -1.825], scale = .20)) + |> subtract2d(tool = oLogo2(surface = startSketchOn(XZ), origin = [-.075, -1.825], scale = .20)) + |> subtract2d(tool = oLogo(surface = startSketchOn(XZ), origin = [.175, -1.825], scale = .20)) + |> subtract2d(tool = oLogo2(surface = startSketchOn(XZ), origin = [.175, -1.825], scale = .20)) extrude(case, length = -0.0625) |> appearance(color = '#D0FF01', metalness = 0, roughness = 50) diff --git a/public/zma-logomark-outlined.png b/public/zma-logomark-outlined.png index 311f4f6c5d8f14305ab04d86bf546a144dc2a070..1da0517f9714a1985daf0317e79d847c5f86d7a0 100644 GIT binary patch literal 9172 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 >6EcL` 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 literal 11467 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 diff --git a/rust/Cargo.lock b/rust/Cargo.lock index b3c589952..f34af57fd 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -713,6 +713,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "csscolorparser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46f9a16a848a7fb95dd47ce387ac1ee9a6df879ba784b815537fcd388a1a8288" +dependencies = [ + "phf", +] + [[package]] name = "darling" version = "0.20.10" @@ -1899,6 +1908,7 @@ dependencies = [ "console_error_panic_hook", "convert_case", "criterion", + "csscolorparser", "dashmap 6.1.0", "dhat", "expectorate", @@ -2064,9 +2074,9 @@ dependencies = [ [[package]] name = "kittycad-modeling-cmds" -version = "0.2.114" +version = "0.2.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681ce29b9da92aa6f8bfc003ccb79a9f1a84368e064d68684327b3181dfe16ec" +checksum = "e95dfcade93787f8a7529ad7b9b81f038823e273e7684297085ef720962b7497" dependencies = [ "anyhow", "chrono", @@ -2630,6 +2640,48 @@ dependencies = [ "sha2", ] +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + [[package]] name = "phonenumber" version = "0.3.7+8.13.52" @@ -3575,6 +3627,12 @@ version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + [[package]] name = "slab" version = "0.4.9" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index cff411851..d403ce4d3 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -36,7 +36,7 @@ dashmap = { version = "6.1.0" } http = "1" indexmap = "2.9.0" kittycad = { version = "0.3.36", default-features = false, features = ["js", "requests"] } -kittycad-modeling-cmds = { version = "0.2.114", features = ["ts-rs", "websocket"] } +kittycad-modeling-cmds = { version = "0.2.115", features = ["ts-rs", "websocket"] } lazy_static = "1.5.0" miette = "7.5.0" pyo3 = { version = "0.24.1" } diff --git a/rust/kcl-derive-docs/src/lib.rs b/rust/kcl-derive-docs/src/lib.rs index 0a0a5abd8..b1cb159c4 100644 --- a/rust/kcl-derive-docs/src/lib.rs +++ b/rust/kcl-derive-docs/src/lib.rs @@ -792,15 +792,21 @@ fn rust_type_to_openapi_type(t: &str) -> String { if t.starts_with("Option<") { t = t.replace("Option<", "").replace('>', ""); } + + if t == "[TyF64;2]" { + return "Point2d".to_owned(); + } + if t == "[TyF64;3]" { + return "Point3d".to_owned(); + } + if let Some((inner_type, _length)) = parse_array_type(&t) { t = format!("[{inner_type}]") } - if t == "f64" || t == "TyF64" { + if t == "f64" || t == "TyF64" || t == "u32" || t == "NonZeroU32" { return "number".to_string(); - } else if t == "u32" { - return "integer".to_string(); - } else if t == "str" { + } else if t == "str" || t == "String" { return "string".to_string(); } else { return t.replace("f64", "number").replace("TyF64", "number").to_string(); diff --git a/rust/kcl-lib/Cargo.toml b/rust/kcl-lib/Cargo.toml index bafd947da..9ad253667 100644 --- a/rust/kcl-lib/Cargo.toml +++ b/rust/kcl-lib/Cargo.toml @@ -31,6 +31,7 @@ clap = { version = "4.5.36", default-features = false, optional = true, features "derive", ] } convert_case = "0.8.0" +csscolorparser = "0.7.0" dashmap = { workspace = true } dhat = { version = "0.3", optional = true } fnv = "1.0.7" diff --git a/rust/kcl-lib/e2e/executor/inputs/cube.kcl b/rust/kcl-lib/e2e/executor/inputs/cube.kcl index 236ccb38f..d42b5a9d7 100644 --- a/rust/kcl-lib/e2e/executor/inputs/cube.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/cube.kcl @@ -17,4 +17,4 @@ fn cube(length, center) { |> extrude(length = length) } -myCube = cube(40, [0,0]) +myCube = cube(length=40, center=[0,0]) diff --git a/rust/kcl-lib/e2e/executor/inputs/extrude-inside-fn-with-tags.kcl b/rust/kcl-lib/e2e/executor/inputs/extrude-inside-fn-with-tags.kcl index 8a6e4aa51..f2e0bde2a 100644 --- a/rust/kcl-lib/e2e/executor/inputs/extrude-inside-fn-with-tags.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/extrude-inside-fn-with-tags.kcl @@ -48,7 +48,7 @@ fn bracketSketch(w, d, t) { } // build the body of the bracket -bs = bracketSketch(width, depth, thk) +bs = bracketSketch(w = width, d = depth, t = thk) bracketBody = bs |> fillet( radius = radius, diff --git a/rust/kcl-lib/e2e/executor/inputs/fillet-and-shell.kcl b/rust/kcl-lib/e2e/executor/inputs/fillet-and-shell.kcl index 5049b7673..eac52902c 100644 --- a/rust/kcl-lib/e2e/executor/inputs/fillet-and-shell.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/fillet-and-shell.kcl @@ -40,9 +40,9 @@ miniHdmiHole = startSketchOn(XY) case = startSketchOn(XY) |> startProfile(at = [0, 0]) - |> line(endAbsolute = [caseWidth, 0], $edge1) - |> line(endAbsolute = [caseWidth, caseLength], $edge2) - |> line(endAbsolute = [0, caseLength], $edge3) + |> line(endAbsolute = [caseWidth, 0], tag = $edge1) + |> line(endAbsolute = [caseWidth, caseLength], tag = $edge2) + |> line(endAbsolute = [0, caseLength], tag = $edge3) |> close(tag = $edge4) |> extrude(length = caseHeight) |> fillet( @@ -65,15 +65,15 @@ fn m25Screw(x, y, height) { return screw } -m25Screw(border + rpizWidth / 2 - (widthBetweenScrews / 2), 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), screwHeight) +m25Screw(x = border + rpizWidth / 2 - (widthBetweenScrews / 2), y = 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), height = screwHeight) -m25Screw(border + rpizWidth / 2 - (widthBetweenScrews / 2), 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, screwHeight) +m25Screw(x = border + rpizWidth / 2 - (widthBetweenScrews / 2), y = 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, height = screwHeight) -m25Screw(border + rpizWidth / 2 + widthBetweenScrews / 2, 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, screwHeight) +m25Screw(x = border + rpizWidth / 2 + widthBetweenScrews / 2, y = 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, height = screwHeight) -m25Screw(border + rpizWidth / 2 + widthBetweenScrews / 2, 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), screwHeight) +m25Screw(x = border + rpizWidth / 2 + widthBetweenScrews / 2, y = 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), height = screwHeight) shell( - faces = ['end'], + faces = [END], thickness = caseThickness ) diff --git a/rust/kcl-lib/e2e/executor/inputs/focusrite_scarlett_mounting_braket.kcl b/rust/kcl-lib/e2e/executor/inputs/focusrite_scarlett_mounting_braket.kcl index 831ec4ffc..ed867dd74 100644 --- a/rust/kcl-lib/e2e/executor/inputs/focusrite_scarlett_mounting_braket.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/focusrite_scarlett_mounting_braket.kcl @@ -48,7 +48,7 @@ fn bracketSketch(w, d, t) { } // build the body of the bracket -bs = bracketSketch(width, depth, thk) +bs = bracketSketch(w = width, d = depth, t = thk) bracketBody = bs |> extrude(length = length + 2 * thk) |> fillet( diff --git a/rust/kcl-lib/e2e/executor/inputs/function_sketch.kcl b/rust/kcl-lib/e2e/executor/inputs/function_sketch.kcl index 10d18389d..b3db288fa 100644 --- a/rust/kcl-lib/e2e/executor/inputs/function_sketch.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/function_sketch.kcl @@ -10,4 +10,4 @@ fn box(h, l, w) { return myBox } -fnBox = box(3, 6, 10) +fnBox = box(h = 3, l = 6, w = 10) diff --git a/rust/kcl-lib/e2e/executor/inputs/function_sketch_with_position.kcl b/rust/kcl-lib/e2e/executor/inputs/function_sketch_with_position.kcl index e1ff9664f..c1b2325bb 100644 --- a/rust/kcl-lib/e2e/executor/inputs/function_sketch_with_position.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/function_sketch_with_position.kcl @@ -10,4 +10,4 @@ fn box(p, h, l, w) { return myBox } -thing = box([0,0], 3, 6, 10) +thing = box(p = [0,0], h = 3, l = 6, w = 10) diff --git a/rust/kcl-lib/e2e/executor/inputs/global-tags.kcl b/rust/kcl-lib/e2e/executor/inputs/global-tags.kcl index 819d53f69..5fc1a34cf 100644 --- a/rust/kcl-lib/e2e/executor/inputs/global-tags.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/global-tags.kcl @@ -48,7 +48,7 @@ fn bracketSketch(w, d, t) { } // build the body of the bracket -bs = bracketSketch(width, depth, thk) +bs = bracketSketch(w = width, d = depth, t = thk) bracketBody = bs |> extrude(length = length + 2 * thk) |> fillet( diff --git a/rust/kcl-lib/e2e/executor/inputs/lsystem.kcl b/rust/kcl-lib/e2e/executor/inputs/lsystem.kcl index 0748ced2d..aefc82a5d 100644 --- a/rust/kcl-lib/e2e/executor/inputs/lsystem.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/lsystem.kcl @@ -3,14 +3,14 @@ // Comparators -fn cond(bools) { +fn cond(@bools) { return fn(a, b) { x = min([max([-1, a-b]), 1]) + 1 return bools[x] } } -fn Not(b) { return if b { false } else { true } } +fn Not(@b) { return if b { false } else { true } } fn And(a, b) { return if a { if b { true } else { false } } else { false }} fn Or(a, b) { return if a { true } else { if b { true } else { false }}} @@ -18,14 +18,14 @@ Eq = cond([false, true, false]) Lt = cond([true, false, false]) Gt = cond([false, false, true]) -fn Lte(a, b) { return Not(Gt(a, b)) } -fn Gte(a, b) { return Not(Lt(a, b)) } +fn Lte(a, b) { return Not(Gt(a = a, b = b)) } +fn Gte(a, b) { return Not(Lt(a = a, b = b)) } // L-system // Note: it was most concise to encode productions directly in axioms. // Change them as you need. -fn setSketch(state, q) { +fn setSketch(@state, q) { return { depthMax = state.depthMax, depth = state.depth + 1, @@ -37,7 +37,7 @@ fn setSketch(state, q) { } } -fn setDepth(state, q) { +fn setDepth(@state, q) { return { depthMax = state.depthMax, depth = q, @@ -49,7 +49,7 @@ fn setDepth(state, q) { } } -fn setAngle(state, q) { +fn setAngle(@state, q) { return { depthMax = state.depthMax, depth = state.depth, @@ -61,7 +61,7 @@ fn setAngle(state, q) { } } -fn setLength(state, q) { +fn setLength(@state, q) { return { depthMax = state.depthMax, depth = state.depth, @@ -73,31 +73,31 @@ fn setLength(state, q) { } } -fn Gt2(state) { return setLength(state, state.currentLength * state.factor) } -fn Lt2(state) { return setLength(state, state.currentLength / state.factor) } -fn Add(state) { return setAngle(state, rem(state.currentAngle - state.angle, divisor = 360)) } -fn Sub(state) { return setAngle(state, rem(state.currentAngle + state.angle, divisor = 360)) } +fn Gt2(@state) { return setLength(state, q = state.currentLength * state.factor) } +fn Lt2(@state) { return setLength(state, q = state.currentLength / state.factor) } +fn Add(@state) { return setAngle(state, q = rem(state.currentAngle - state.angle, divisor = 360)) } +fn Sub(@state) { return setAngle(state, q = rem(state.currentAngle + state.angle, divisor = 360)) } // Only necessary to get around recursion limitations... -fn F(state, F) { - return if Lt(state.depth, state.depthMax) { - stateNext = state |> setDepth(%, state.depth + 1) +fn F(@state, F) { + return if Lt(a = state.depth, b = state.depthMax) { + stateNext = state |> setDepth(%, q = state.depth + 1) // Produce // Note:if you need [ and ], just save state to a variable. stateNext - |> F(%, F) |> Sub(%) |> F(%, F) + |> F(%, F = F) |> Sub(%) |> F(%, F = F) |> Add(%) |> Add(%) - |> F(%, F) |> Sub(%) |> F(%, F) - |> setDepth(%, stateNext.depth - 1) + |> F(%, F = F) |> Sub(%) |> F(%, F = F) + |> setDepth(%, q = stateNext.depth - 1) } else { // Pass onto the next instruction - state |> setSketch(%, angledLine(state.q, angle = state.currentAngle, length = state.currentLength)) + state |> setSketch(%, q = angledLine(state.q, angle = state.currentAngle, length = state.currentLength)) } } -fn LSystem(args, axioms) { +fn LSystem(@args, axioms) { myThing = startSketchOn(XY) |> startProfile(at = [0, 0]) return axioms({ @@ -115,7 +115,8 @@ LSystem({ iterations = 1, factor = 1.36, angle = 60, -}, fn(q) { - result = q |> F(%, F) |> Add(%) |> Add(%) |> F(%, F) |> Add(%) |> Add(%) |> F(%, F) +}, axioms = fn(@q) { + result = q |> F(%, F = F) |> Add(%) |> Add(%) |> F(%, F = F) |> Add(%) |> Add(%) |> F(%, F = F) return result.q }) + diff --git a/rust/kcl-lib/e2e/executor/inputs/member_expression_sketch.kcl b/rust/kcl-lib/e2e/executor/inputs/member_expression_sketch.kcl index f251c5ba7..72ba39c2e 100644 --- a/rust/kcl-lib/e2e/executor/inputs/member_expression_sketch.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/member_expression_sketch.kcl @@ -9,8 +9,8 @@ fn square(pos, scale) { return sg } -sq = square([0,0], 10) -cb = square([3,3], 4) +sq = square(pos = [0,0], scale = 10) +cb = square(pos = [3,3], scale = 4) |> extrude(length = 10) // pt1 = sq.paths[0] diff --git a/rust/kcl-lib/e2e/executor/inputs/negative_args.kcl b/rust/kcl-lib/e2e/executor/inputs/negative_args.kcl index ce660f60a..7066a271c 100644 --- a/rust/kcl-lib/e2e/executor/inputs/negative_args.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/negative_args.kcl @@ -13,7 +13,7 @@ fn box(sk1, sk2, scale) { return boxSketch } -box(0, 0, 5) -box(10, 23, 8) -thing = box(-12, -15, 10) -box(-20, -5, 10) +box(sk1 = 0, sk2 = 0, scale = 5) +box(sk1 = 10, sk2 = 23, scale = 8) +thing = box(sk1 = -12, sk2 = -15, scale = 10) +box(sk1 = -20, sk2 = -5, scale = 10) diff --git a/rust/kcl-lib/e2e/executor/inputs/no_visuals/identity.kcl b/rust/kcl-lib/e2e/executor/inputs/no_visuals/identity.kcl index 01c9f74b0..266179666 100644 --- a/rust/kcl-lib/e2e/executor/inputs/no_visuals/identity.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/no_visuals/identity.kcl @@ -1,3 +1,3 @@ -export fn identity(x) { +export fn identity(@x) { return x } diff --git a/rust/kcl-lib/e2e/executor/inputs/no_visuals/numbers.kcl b/rust/kcl-lib/e2e/executor/inputs/no_visuals/numbers.kcl index 6f26c0049..d00dcd6cd 100644 --- a/rust/kcl-lib/e2e/executor/inputs/no_visuals/numbers.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/no_visuals/numbers.kcl @@ -1,7 +1,7 @@ -export fn increment(x) { +export fn increment(@x) { return x + 1 } -export fn decrement(x) { +export fn decrement(@x) { return x - 1 } diff --git a/rust/kcl-lib/e2e/executor/inputs/no_visuals/pipe_substitution_inside_function_called_from_pipeline.kcl b/rust/kcl-lib/e2e/executor/inputs/no_visuals/pipe_substitution_inside_function_called_from_pipeline.kcl index b56efda1f..5b31ef8db 100644 --- a/rust/kcl-lib/e2e/executor/inputs/no_visuals/pipe_substitution_inside_function_called_from_pipeline.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/no_visuals/pipe_substitution_inside_function_called_from_pipeline.kcl @@ -1,5 +1,5 @@ // Make sure pipe value doesn't leak into the function call. -fn f(ignored) { +fn f(@ignored) { return % } diff --git a/rust/kcl-lib/e2e/executor/inputs/pattern_vase.kcl b/rust/kcl-lib/e2e/executor/inputs/pattern_vase.kcl index 4fd999134..2f776041f 100644 --- a/rust/kcl-lib/e2e/executor/inputs/pattern_vase.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/pattern_vase.kcl @@ -4,7 +4,7 @@ h = 10 // layer height t = 0.005 // taper factor [0-1) // Defines how to modify each layer of the vase. // Each replica is shifted up the Z axis, and has a smoothly-varying radius -fn transform(replicaId) { +fn transform(@replicaId) { scale = r * abs(1 - (t * replicaId)) * (5 + cos((replicaId / 8): number(rad))) return { translate = [0, 0, replicaId * 10], diff --git a/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl b/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl index 4e62c28d1..695d26ef4 100644 --- a/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl @@ -10,7 +10,7 @@ p = startSketchOn(XY) |> angledLine(angle = 300, length = triangleLen, tag = $c) |> extrude(length = triangleHeight) -fn circl(x, face) { +fn circl(@x, face) { return startSketchOn(p, face = face) |> startProfile(at = [x + radius, triangleHeight/2]) |> arc( @@ -22,7 +22,7 @@ return startSketchOn(p, face = face) |> close() } -c1 = circl(-200,c) +c1 = circl(-200, face = c) plumbus1 = c1 |> extrude(length = plumbusLen) @@ -30,7 +30,7 @@ plumbus1 = radius = 5, tags = [c1.tags.arc_tag, getOppositeEdge(c1.tags.arc_tag)] ) -c2 = circl(200, a) +c2 = circl(200, face = a) plumbus0 = c2 |> extrude(length = plumbusLen) diff --git a/rust/kcl-lib/e2e/executor/inputs/pipe_as_arg.kcl b/rust/kcl-lib/e2e/executor/inputs/pipe_as_arg.kcl index c474adc9d..7bec20674 100644 --- a/rust/kcl-lib/e2e/executor/inputs/pipe_as_arg.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/pipe_as_arg.kcl @@ -17,7 +17,7 @@ fn cube(length, center) { |> extrude(length = length) } -fn double(x) { return x * 2} +fn double(@x) { return x * 2} fn width() { return 200 } -myCube = cube(200 |> double(%), [0,0]) +myCube = cube(length = 200 |> double(), center = [0,0]) diff --git a/rust/kcl-lib/e2e/executor/inputs/riddle.kcl b/rust/kcl-lib/e2e/executor/inputs/riddle.kcl index cf25ccc22..e7e12d850 100644 --- a/rust/kcl-lib/e2e/executor/inputs/riddle.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/riddle.kcl @@ -1,11 +1,11 @@ ANSWER = 41803 -fn m(s) { +fn m(@s) { return (ANSWER * s + 12345) % 214748 } -fn p(xs, ys) { - ox = 35 - (m(xs) % 70) - oy = 35 - (m(ys) % 70) +fn p(x, y) { + ox = 35 - (m(x) % 70) + oy = 35 - (m(y) % 70) r = startSketchOn(XZ) |> startProfile(at = [ox, oy]) |> line(end = [1, 0]) @@ -15,2640 +15,2640 @@ fn p(xs, ys) { |> extrude(length = 1) return r } -p(177533, 177533) -p(133828, 31489) -p(144509, 138041) -p(87312, 57981) -p(160197, 14025) -p(76508, 129013) -p(212949, 43329) -p(155560, 70405) -p(23301, 60893) -p(64504, 75837) -p(32297, 166861) -p(113668, 168121) -p(84273, 151141) -p(156140, 172777) -p(172545, 179961) -p(23840, 102521) -p(14437, 158125) -p(175384, 118925) -p(74857, 149881) -p(188160, 98057) -p(7481, 153469) -p(53632, 172685) -p(71397, 109897) -p(161504, 66717) -p(59133, 126201) -p(107904, 151817) -p(70065, 208005) -p(88948, 18197) -p(117193, 119701) -p(143744, 134645) -p(192365, 65941) -p(77044, 11013) -p(9317, 54293) -p(83804, 116305) -p(87401, 139301) -p(162664, 3545) -p(53985, 72733) -p(4748, 151041) -p(109849, 31589) -p(66428, 19649) -p(211705, 141629) -p(195360, 39449) -p(62425, 42361) -p(164956, 112325) -p(169429, 128821) -p(158808, 2769) -p(127569, 108153) -p(129956, 174721) -p(91825, 71181) -p(147196, 149005) -p(103533, 49053) -p(86320, 136389) -p(26261, 148421) -p(205548, 114361) -p(69701, 7909) -p(80524, 44689) -p(35217, 156281) -p(120084, 149297) -p(173561, 146193) -p(152268, 196165) -p(28745, 13733) -p(122832, 155021) -p(42297, 30521) -p(155600, 68853) -p(51093, 184325) -p(173616, 137457) -p(61057, 197425) -p(116036, 138817) -p(65681, 162981) -p(162981, 12040) -p(12040, 12040) -p(62221, 143240) -p(148348, 201848) -p(202309, 83656) -p(7412, 49112) -p(15573, 212236) -p(167400, 74052) -p(40189, 102872) -p(68092, 162356) -p(24629, 139260) -p(129196, 186712) -p(64189, 21068) -p(156816, 24948) -p(176817, 102096) -p(131844, 161480) -p(58493, 185744) -p(130844, 93844) -p(95141, 164876) -p(83260, 68812) -p(53089, 93068) -p(115736, 49888) -p(187745, 132760) -p(36420, 153328) -p(48461, 91224) -p(0, 6416) -p(115581, 15828) -p(24708, 57164) -p(144561, 117716) -p(88332, 184384) -p(136277, 92584) -p(184272, 38924) -p(193985, 91616) -p(91664, 188848) -p(191425, 13108) -p(84064, 127420) -p(109881, 202624) -p(169908, 194380) -p(34253, 124024) -p(89624, 60952) -p(134657, 194672) -p(107056, 38240) -p(144713, 155080) -p(111972, 123732) -p(11353, 112768) -p(145224, 170508) -p(140961, 196224) -p(26800, 76572) -p(156649, 116748) -p(187372, 159252) -p(18433, 104424) -p(42264, 100544) -p(161141, 44548) -p(206324, 173320) -p(174017, 16020) -p(108476, 71040) -p(169521, 209708) -p(37796, 163132) -p(108545, 106168) -p(63188, 211844) -p(214089, 61728) -p(205804, 71816) -p(85093, 48628) -p(11400, 160704) -p(72637, 9228) -p(24176, 197484) -p(43785, 151292) -p(33164, 159152) -p(183489, 3112) -p(214121, 34269) -p(88704, 137617) -p(137617, 137617) -p(48980, 164985) -p(71017, 72601) -p(84560, 78325) -p(71369, 46885) -p(155752, 53193) -p(146157, 26409) -p(35976, 131309) -p(116913, 197201) -p(152000, 94045) -p(25273, 161681) -p(139352, 169641) -p(40669, 118985) -p(127480, 154505) -p(206281, 152077) -p(163544, 102973) -p(168209, 22045) -p(192524, 59017) -p(102677, 79877) -p(88952, 62221) -p(181145, 8845) -p(171692, 49021) -p(177717, 35045) -p(20860, 183033) -p(128581, 129173) -p(53628, 166829) -p(115257, 81821) -p(90568, 20685) -p(135501, 191477) -p(81700, 82497) -p(112473, 123549) -p(78564, 67553) -p(210449, 149265) -p(107060, 9237) -p(204301, 76581) -p(108096, 157801) -p(119553, 135481) -p(64876, 20785) -p(194725, 25341) -p(30492, 93661) -p(200901, 193221) -p(8916, 161973) -p(130321, 208649) -p(176472, 7393) -p(111657, 70565) -p(62512, 2345) -p(34961, 62413) -p(172328, 188173) -p(119353, 144509) -p(100872, 122965) -p(148141, 154989) -p(152080, 12049) -p(100557, 126361) -p(39964, 205837) -p(10569, 69789) -p(6356, 120153) -p(93893, 57949) -p(166920, 9429) -p(163533, 196033) -p(158544, 40677) -p(15221, 51833) -p(18092, 106369) -p(127657, 101521) -p(166240, 35437) -p(59021, 70857) -p(194928, 96281) -p(139625, 133637) -p(16937, 95364) -p(159252, 42380) -p(132377, 98568) -p(39633, 208124) -p(92476, 48980) -p(201849, 104100) -p(17693, 174356) -p(173300, 148348) -p(175445, 189592) -p(63969, 125836) -p(68876, 174548) -p(160685, 164168) -p(138041, 212497) -p(117716, 56749) -p(154989, 12793) -p(111733, 146513) -p(9020, 144085) -p(142073, 106921) -p(134525, 76549) -p(864, 63449) -p(41917, 39285) -p(158097, 110025) -p(116036, 89065) -p(65681, 25117) -p(196457, 214592) -p(143240, 87472) -p(90165, 15664) -p(102705, 4792) -p(94128, 72820) -p(176033, 71460) -p(127249, 46228) -p(156028, 140356) -p(115861, 31576) -p(9725, 28472) -p(85372, 204696) -p(212793, 193048) -p(78557, 96017) -p(71816, 165013) -p(150041, 82725) -p(213533, 213533) -p(184088, 112513) -p(70561, 62833) -p(30344, 104169) -p(36469, 66713) -p(65540, 153173) -p(197809, 118629) -p(141488, 198105) -p(208065, 90101) -p(21612, 110769) -p(208417, 158029) -p(31084, 52061) -p(170637, 202569) -p(17468, 92329) -p(176329, 201017) -p(110081, 206157) -p(177092, 34105) -p(185253, 190537) -p(200544, 148709) -p(132525, 188693) -p(75812, 127849) -p(15749, 48181) -p(199116, 15573) -p(71905, 86705) -p(198085, 18385) -p(143316, 183645) -p(106445, 93789) -p(31684, 63025) -p(150953, 154725) -p(6712, 108441) -p(85905, 145121) -p(152432, 139689) -p(22017, 32553) -p(131732, 70885) -p(210341, 193541) -p(169156, 50993) -p(99877, 57785) -p(14052, 205189) -p(54137, 125421) -p(165081, 118821) -p(30936, 121441) -p(161845, 208001) -p(177533, 105972) -p(203500, 197188) -p(144509, 207284) -p(212949, 198356) -p(198356, 198356) -p(103261, 97144) -p(64504, 106264) -p(208229, 11844) -p(189748, 151972) -p(134637, 59104) -p(29504, 150804) -p(145861, 99764) -p(9380, 165456) -p(153589, 184864) -p(81256, 76084) -p(185773, 58812) -p(118096, 115000) -p(2725, 104128) -p(138225, 60656) -p(49780, 65796) -p(11457, 154784) -p(30044, 91612) -p(178909, 165072) -p(161404, 206600) -p(11093, 121692) -p(40164, 30184) -p(162537, 61624) -p(162473, 147116) -p(107796, 34940) -p(1161, 114416) -p(2864, 53864) -p(82349, 131104) -p(209328, 15532) -p(204197, 92388) -p(149036, 182536) -p(68309, 173900) -p(176172, 169436) -p(87001, 9032) -p(179536, 19512) -p(121029, 46004) -p(202308, 170796) -p(188633, 164780) -p(20689, 65120) -p(154268, 167400) -p(144381, 154300) -p(195097, 211173) -p(102872, 11753) -p(67553, 172649) -p(142309, 79389) -p(194376, 129269) -p(129269, 129269) -p(66832, 113549) -p(182121, 124905) -p(141036, 199917) -p(25665, 8649) -p(168756, 195353) -p(61629, 175461) -p(63048, 123545) -p(93913, 184681) -p(155008, 75901) -p(139681, 137905) -p(173892, 214569) -p(110829, 190113) -p(4989, 166049) -p(120228, 138297) -p(166137, 170413) -p(91664, 178373) -p(142813, 143921) -p(84064, 3509) -p(144713, 33589) -p(177280, 188369) -p(186117, 114909) -p(156649, 108893) -p(53068, 73765) -p(18433, 59113) -p(42264, 45429) -p(161141, 67457) -p(168184, 91229) -p(153541, 103069) -p(108476, 7581) -p(169521, 38245) -p(21200, 46881) -p(22085, 54841) -p(113452, 190889) -p(88037, 131697) -p(209876, 141009) -p(41713, 196905) -p(201569, 183513) -p(68684, 105789) -p(23761, 70561) -p(57013, 30344) -p(56972, 52664) -p(100745, 115452) -p(202569, 140000) -p(206600, 149220) -p(62117, 121952) -p(50017, 181144) -p(76952, 80416) -p(191949, 120300) -p(39725, 149120) -p(46676, 193176) -p(5441, 150964) -p(41304, 16568) -p(73237, 212876) -p(95808, 180560) -p(64876, 66832) -p(194725, 189296) -p(41748, 99048) -p(124437, 132140) -p(59472, 80808) -p(116445, 135728) -p(124433, 39272) -p(190084, 145340) -p(64817, 65280) -p(189249, 75176) -p(192604, 200552) -p(43949, 43252) -p(10501, 9484) -p(196388, 50820) -p(205901, 110888) -p(151817, 184549) -p(155080, 159901) -p(70857, 154469) -p(164237, 86833) -p(115000, 8617) -p(67457, 45105) -p(1689, 109637) -p(26396, 20457) -p(97045, 115553) -p(56321, 127101) -p(184568, 126425) -p(11649, 27441) -p(205880, 115653) -p(108073, 44813) -p(76108, 112741) -p(23832, 156797) -p(210153, 116913) -p(122776, 208713) -p(30401, 101485) -p(31528, 29385) -p(190097, 83145) -p(77657, 162037) -p(80044, 36177) -p(59577, 3085) -p(85609, 19973) -p(45492, 115261) -p(164569, 18613) -p(165081, 186101) -p(30936, 193961) -p(161845, 169897) -p(177533, 158500) -p(15828, 22644) -p(19717, 187128) -p(212949, 49720) -p(168952, 122696) -p(103261, 175096) -p(155209, 18180) -p(54440, 12556) -p(123345, 166944) -p(126869, 69320) -p(61328, 206052) -p(61821, 42828) -p(29948, 104840) -p(361, 107460) -p(112788, 93292) -p(44984, 53216) -p(59453, 191300) -p(162952, 193144) -p(161017, 207796) -p(205424, 19540) -p(48225, 106684) -p(72033, 11388) -p(17648, 51856) -p(56957, 152968) -p(129765, 208672) -p(211428, 204984) -p(56273, 3044) -p(36217, 94360) -p(109828, 3528) -p(36669, 125800) -p(204125, 60793) -p(12432, 108145) -p(129173, 30613) -p(183645, 119401) -p(112088, 64189) -p(36401, 207029) -p(95141, 25665) -p(203880, 65349) -p(53089, 43129) -p(48461, 37697) -p(0, 141) -p(115581, 31289) -p(24708, 203049) -p(144561, 151233) -p(117060, 127553) -p(91664, 128137) -p(117873, 84273) -p(139468, 7517) -p(144713, 212461) -p(86740, 119985) -p(30077, 34009) -p(90757, 203533) -p(2220, 171417) -p(180973, 117173) -p(35929, 183933) -p(169216, 197809) -p(45793, 188881) -p(143445, 145601) -p(130980, 16637) -p(54717, 21393) -p(13733, 17664) -p(119560, 38040) -p(197201, 135856) -p(201985, 195632) -p(114416, 135472) -p(2049, 161964) -p(173933, 176324) -p(121592, 35228) -p(143529, 182340) -p(207897, 58516) -p(20184, 14560) -p(180789, 38332) -p(160, 100344) -p(25301, 23388) -p(157328, 52892) -p(1516, 130232) -p(190557, 113344) -p(131608, 80060) -p(142193, 188164) -p(72964, 166328) -p(96261, 49880) -p(58641, 16404) -p(52000, 112860) -p(116441, 211644) -p(180029, 67836) -p(105368, 82488) -p(49573, 202816) -p(59021, 53568) -p(70236, 154104) -p(71697, 5340) -p(119701, 64641) -p(170508, 23497) -p(133637, 75413) -p(184521, 201273) -p(60656, 79293) -p(202145, 201757) -p(68649, 100929) -p(200000, 6025) -p(152357, 11657) -p(62045, 90841) -p(95288, 100153) -p(99569, 194281) -p(201124, 37081) -p(170761, 153913) -p(153932, 191277) -p(184532, 56005) -p(158917, 40669) -p(125884, 136449) -p(41949, 124609) -p(114884, 149841) -p(175445, 187197) -p(9829, 160613) -p(163108, 147513) -p(156617, 214273) -p(99877, 173129) -p(126812, 184385) -p(130893, 66385) -p(165081, 54161) -p(30936, 78417) -p(127493, 82205) -p(138041, 157176) -p(117716, 1812) -p(154989, 37332) -p(207709, 50332) -p(106264, 83908) -p(193025, 11224) -p(66221, 100504) -p(118096, 37232) -p(2725, 92936) -p(21969, 139028) -p(64432, 53728) -p(45709, 59844) -p(144529, 20252) -p(111880, 78476) -p(4077, 46260) -p(37420, 48104) -p(111857, 35680) -p(83380, 66636) -p(145885, 196668) -p(193004, 110400) -p(87529, 35872) -p(13129, 77700) -p(205424, 62756) -p(81801, 153488) -p(11965, 208024) -p(188340, 192304) -p(86069, 201132) -p(209333, 45576) -p(211428, 209476) -p(210077, 212680) -p(17293, 104192) -p(51504, 103508) -p(203089, 122432) -p(61377, 116617) -p(212236, 62665) -p(81821, 110993) -p(183645, 65477) -p(24752, 41997) -p(36401, 27053) -p(95141, 150485) -p(203880, 156501) -p(159833, 150777) -p(151517, 30741) -p(39008, 115649) -p(192821, 199881) -p(152581, 32001) -p(52688, 140781) -p(193985, 20161) -p(91664, 49465) -p(191425, 127097) -p(201480, 12493) -p(30889, 203469) -p(169908, 179789) -p(100337, 24333) -p(51461, 74113) -p(129344, 14629) -p(78989, 106621) -p(157909, 190853) -p(137492, 162617) -p(59769, 113029) -p(68437, 2697) -p(211528, 32969) -p(56173, 162325) -p(43785, 60045) -p(104196, 152137) -p(134193, 68197) -p(148421, 31084) -p(68904, 69708) -p(137617, 184020) -p(201017, 184312) -p(155752, 120656) -p(110637, 210320) -p(71269, 93388) -p(20572, 77084) -p(102677, 57576) -p(177717, 81156) -p(20860, 60588) -p(54737, 43216) -p(83685, 99596) -p(166808, 140064) -p(28825, 63400) -p(165024, 80672) -p(75177, 214008) -p(171884, 161024) -p(11389, 87080) -p(87520, 1780) -p(73845, 67572) -p(124437, 91252) -p(59472, 68056) -p(31437, 193140) -p(124433, 208376) -p(46760, 66896) -p(64817, 131036) -p(64941, 48556) -p(195708, 55056) -p(6101, 99012) -p(82793, 96784) -p(128168, 79412) -p(205901, 23616) -p(151817, 185773) -p(155080, 102225) -p(70857, 83109) -p(51185, 172481) -p(115000, 172189) -p(67457, 52053) -p(40824, 196353) -p(105073, 180825) -p(203140, 59621) -p(165885, 180049) -p(173604, 1689) -p(79293, 38177) -p(80220, 7513) -p(130009, 133857) -p(115416, 27889) -p(27889, 27889) -p(47064, 122309) -p(57845, 66513) -p(75437, 93005) -p(177092, 207609) -p(185253, 72337) -p(169077, 19353) -p(108192, 36817) -p(34841, 71269) -p(18181, 35749) -p(137692, 153557) -p(57833, 118137) -p(108932, 125321) -p(182693, 18285) -p(56984, 213625) -p(115701, 181701) -p(131572, 133473) -p(71905, 10425) -p(198085, 75733) -p(143316, 79805) -p(79953, 89509) -p(202668, 42157) -p(150953, 105813) -p(6712, 63309) -p(85905, 25561) -p(81984, 63017) -p(22017, 138905) -p(131732, 30125) -p(210341, 146181) -p(12632, 95141) -p(146453, 212265) -p(45492, 74081) -p(62581, 21197) -p(75809, 127841) -p(167660, 21873) -p(42293, 155985) -p(57981, 62492) -p(117716, 88208) -p(154989, 70352) -p(207709, 52596) -p(106264, 76368) -p(81333, 98012) -p(200552, 146532) -p(24337, 133916) -p(57872, 188160) -p(75445, 147016) -p(65408, 209604) -p(185261, 54440) -p(103900, 118096) -p(190853, 126540) -p(138120, 58612) -p(180825, 151380) -p(151380, 151380) -p(63377, 8440) -p(59909, 105872) -p(49780, 194760) -p(11457, 70744) -p(133465, 88792) -p(86556, 3884) -p(117129, 155844) -p(177809, 38620) -p(181356, 200000) -p(63757, 17468) -p(20436, 160408) -p(166681, 144588) -p(174692, 122076) -p(186541, 97912) -p(146132, 204364) -p(77529, 80448) -p(206721, 156428) -p(49572, 211548) -p(93153, 176320) -p(134064, 120040) -p(82349, 137504) -p(209328, 192524) -p(204197, 78896) -p(164464, 136728) -p(6297, 148084) -p(18196, 72680) -p(43045, 140900) -p(12340, 171080) -p(197401, 20280) -p(173196, 39788) -p(91693, 121592) -p(185949, 168268) -p(54224, 55408) -p(1249, 13296) -p(104465, 14173) -p(120920, 92681) -p(76581, 30185) -p(19745, 92197) -p(113640, 51053) -p(113549, 208353) -p(49852, 93649) -p(182121, 164489) -p(211484, 132565) -p(25665, 202821) -p(168756, 53089) -p(83465, 158181) -p(130292, 86957) -p(93913, 20097) -p(155008, 23201) -p(139681, 16701) -p(173892, 110829) -p(110829, 110829) -p(4989, 154593) -p(120228, 213977) -p(166137, 193793) -p(68641, 104421) -p(81992, 40765) -p(193985, 154785) -p(30889, 182153) -p(169908, 149837) -p(34253, 7481) -p(89624, 120141) -p(134657, 14565) -p(107056, 114225) -p(144713, 198549) -p(177280, 203789) -p(186117, 15533) -p(141997, 106073) -p(2220, 43869) -p(180973, 210389) -p(144152, 8257) -p(208501, 155661) -p(196136, 63377) -p(17201, 99573) -p(172716, 97045) -p(95577, 22133) -p(55944, 83169) -p(74969, 143821) -p(45816, 94233) -p(113361, 181085) -p(4348, 66189) -p(41521, 116453) -p(176245, 186809) -p(104196, 49401) -p(134193, 152357) -p(114361, 22384) -p(147704, 24128) -p(78325, 145624) -p(177717, 174928) -p(15328, 70128) -p(128581, 181336) -p(106973, 166584) -p(480, 77988) -p(118097, 203848) -p(110365, 56252) -p(115564, 25196) -p(106937, 2492) -p(5853, 111272) -p(95960, 115736) -p(116445, 13356) -p(197397, 124080) -p(154660, 62460) -p(205901, 192008) -p(151817, 15793) -p(155080, 5213) -p(70857, 97889) -p(182665, 41801) -p(82288, 211425) -p(180889, 143789) -p(128125, 196965) -p(6596, 125833) -p(107233, 125349) -p(183633, 93809) -p(142832, 40633) -p(198253, 76345) -p(179457, 202497) -p(202220, 111181) -p(137113, 82945) -p(206225, 187745) -p(30544, 178817) -p(153601, 191725) -p(59825, 136956) -p(133828, 211576) -p(144509, 64464) -p(197317, 205268) -p(170108, 67376) -p(46585, 72424) -p(66121, 47000) -p(77044, 184408) -p(9317, 122396) -p(40693, 207696) -p(81604, 99300) -p(181365, 201872) -p(145105, 199736) -p(162628, 104932) -p(80249, 126960) -p(73965, 148888) -p(124480, 54760) -p(159133, 35160) -p(208489, 51273) -p(51924, 85725) -p(62221, 177717) -p(148348, 200621) -p(202309, 160253) -p(7412, 129681) -p(15573, 83589) -p(171088, 78057) -p(120441, 56421) -p(102836, 127937) -p(32197, 211485) -p(172768, 94845) -p(119401, 3437) -p(181756, 85625) -p(122281, 125025) -p(131844, 207897) -p(58493, 140261) -p(130844, 102705) -p(131529, 7217) -p(185348, 106493) -p(161677, 35069) -p(13356, 201397) -p(178817, 12365) -p(36420, 48461) -p(48461, 48461) -p(49296, 151517) -p(115581, 169373) -p(121840, 80777) -p(137469, 206345) -p(117636, 101445) -p(44961, 5765) -p(58312, 80193) -p(43469, 178009) -p(169288, 53701) -p(201997, 197317) -p(15836, 142881) -p(127829, 207021) -p(53552, 87277) -p(184177, 150549) -p(209560, 154913) -p(133873, 63405) -p(148000, 181213) -p(68925, 111733) -p(134384, 32741) -p(35701, 20901) -p(138908, 18765) -p(152409, 64373) -p(189048, 138225) -p(187213, 116581) -p(124968, 21969) -p(41713, 59909) -p(77192, 179369) -p(154249, 15369) -p(122668, 56321) -p(116953, 182665) -p(37628, 182181) -p(209397, 118525) -p(149005, 130324) -p(151292, 173312) -p(35729, 191068) -p(13076, 131776) -p(184069, 190192) -p(6636, 92476) -p(158029, 13776) -p(206600, 206304) -p(62117, 95288) -p(121952, 85100) -p(205993, 177092) -p(160928, 56380) -p(204601, 52108) -p(17664, 155456) -p(105493, 26200) -p(6860, 147888) -p(133113, 135272) -p(93388, 9704) -p(168209, 27168) -p(192524, 14260) -p(198649, 59192) -p(51496, 65500) -p(82945, 111300) -p(171692, 20860) -p(200621, 15328) -p(15328, 15328) -p(128581, 22028) -p(79628, 56472) -p(194725, 203584) -p(41748, 129640) -p(48065, 94128) -p(52296, 149924) -p(31437, 202032) -p(90588, 18240) -p(79149, 105284) -p(173912, 208440) -p(17497, 31824) -p(24248, 39008) -p(145845, 40752) -p(38768, 211060) -p(95641, 162924) -p(6812, 140804) -p(68049, 152736) -p(145832, 144976) -p(10569, 75788) -p(188112, 213872) -p(105341, 177192) -p(166920, 138084) -p(163533, 88496) -p(158544, 182240) -p(15221, 54920) -p(18092, 52692) -p(127657, 107904) -p(166240, 170108) -p(59021, 124208) -p(70236, 78792) -p(71697, 63172) -p(86317, 155365) -p(170508, 55413) -p(133637, 142073) -p(42380, 207281) -p(42097, 213005) -p(164036, 61821) -p(184521, 49397) -p(60656, 45709) -p(202145, 11457) -p(197740, 57549) -p(150005, 164101) -p(92032, 11649) -p(142013, 123049) -p(180496, 210869) -p(177593, 33777) -p(48104, 185061) -p(144277, 120429) -p(107648, 180889) -p(66513, 196217) -p(15624, 105585) -p(186809, 94713) -p(13164, 5149) -p(109437, 37949) -p(10412, 99569) -p(75437, 8837) -p(177092, 101313) -p(101313, 101313) -p(22472, 210193) -p(182693, 128581) -p(133256, 170601) -p(119097, 199421) -p(117504, 179045) -p(84421, 51241) -p(76520, 73077) -p(1709, 117617) -p(64356, 128873) -p(196725, 118877) -p(15996, 4373) -p(201641, 180789) -p(164144, 95881) -p(90985, 177977) -p(144896, 188065) -p(37969, 93937) -p(193576, 199713) -p(23861, 90933) -p(111740, 107037) -p(63905, 16405) -p(180120, 136833) -p(86093, 115581) -p(98476, 187581) -p(1153, 166137) -p(2664, 8253) -p(144737, 207473) -p(36400, 62981) -p(102393, 205245) -p(114192, 64049) -p(51029, 89089) -p(60893, 86136) -p(188848, 177160) -p(120153, 106320) -p(212461, 57508) -p(99660, 88948) -p(167597, 39360) -p(103900, 134656) -p(192505, 212964) -p(82324, 19276) -p(59909, 200448) -p(49780, 183660) -p(11457, 133104) -p(44761, 185796) -p(26764, 6660) -p(74033, 45668) -p(140752, 113404) -p(196365, 94288) -p(195648, 123784) -p(64937, 70608) -p(177948, 99912) -p(54233, 7436) -p(121929, 44317) -p(102872, 16757) -p(67553, 114965) -p(112709, 147081) -p(113344, 150769) -p(61629, 99729) -p(63048, 111953) -p(206573, 50433) -p(107164, 167173) -p(97565, 62273) -p(140804, 15305) -p(60945, 131653) -p(17201, 191913) -p(173492, 105161) -p(151373, 70425) -p(93984, 61205) -p(131541, 197545) -p(171384, 171637) -p(200209, 126805) -p(37628, 200749) -p(186593, 25685) -p(149005, 76108) -p(159152, 78920) -p(119469, 194300) -p(204601, 51360) -p(17664, 209728) -p(56973, 90760) -p(107004, 143644) -p(133113, 52428) -p(93388, 81540) -p(198385, 166356) -p(74036, 61456) -p(143233, 192456) -p(18753, 136952) -p(145832, 93572) -p(124881, 74940) -p(93592, 97360) -p(146877, 63200) -p(56104, 86296) -p(82793, 29724) -p(128168, 49616) -p(202605, 78144) -p(109897, 94457) -p(38240, 212357) -p(63673, 101149) -p(163392, 33513) -p(138653, 38561) -p(203436, 41373) -p(59844, 164905) -p(130009, 144529) -p(140156, 181109) -p(9476, 80481) -p(211425, 154425) -p(23804, 48165) -p(39633, 100765) -p(92476, 109785) -p(37949, 128125) -p(168401, 168401) -p(141868, 74273) -p(208445, 190137) -p(191808, 116093) -p(202973, 76893) -p(34476, 136669) -p(183633, 169077) -p(142832, 180917) -p(198253, 209545) -p(55948, 110469) -p(202101, 30601) -p(142284, 111921) -p(214001, 65053) -p(129536, 207117) -p(43277, 124729) -p(65748, 98629) -p(148921, 42149) -p(183424, 50401) -p(32825, 200517) -p(56364, 70777) -p(9405, 83685) -p(29356, 2657) -p(69149, 135501) -p(118404, 98821) -p(212760, 112989) -p(161721, 106973) -p(72308, 157237) -p(157613, 92321) -p(46556, 84945) -p(2509, 6637) -p(140853, 181460) -p(150516, 43660) -p(7393, 128960) -p(10264, 23092) -p(191637, 29592) -p(112604, 111204) -p(150868, 25904) -p(46653, 127216) -p(204980, 105672) -p(72940, 87524) -p(156497, 82768) -p(131132, 213576) -p(206345, 137696) -p(138084, 139540) -p(137609, 109260) -p(18861, 131772) -p(131772, 131772) -p(5245, 38036) -p(153476, 122844) -p(39657, 196596) -p(162856, 46672) -p(106001, 195336) -p(26676, 21732) -p(116833, 84712) -p(135424, 65204) -p(100013, 19696) -p(131120, 113048) -p(61649, 7080) -p(95768, 49000) -p(40173, 52396) -p(152792, 191548) -p(105933, 20180) -p(36412, 88884) -p(168781, 123720) -p(120704, 111880) -p(42305, 8340) -p(38184, 185924) -p(104761, 86556) -p(47564, 26196) -p(14508, 49484) -p(130865, 118288) -p(212528, 18920) -p(8073, 37744) -p(155336, 76076) -p(171941, 174084) -p(19749, 112857) -p(65124, 114509) -p(94045, 58713) -p(27728, 139349) -p(20845, 34841) -p(126872, 27949) -p(104192, 46873) -p(75473, 214069) -p(68832, 116837) -p(89828, 102085) -p(43061, 20189) -p(181204, 76953) -p(3437, 115285) -p(143616, 118097) -p(118877, 172633) -p(57485, 57161) -p(181460, 140417) -p(140417, 140417) -p(180552, 110045) -p(35585, 6989) -p(128020, 18345) -p(168981, 85205) -p(214156, 2333) -p(95873, 155461) -p(18492, 187577) -p(184145, 84329) -p(177020, 167009) -p(121909, 91605) -p(157972, 54249) -p(96261, 5729) -p(168804, 168753) -p(97005, 18729) -p(103656, 193985) -p(104925, 16693) -p(69464, 78797) -p(157585, 100633) -p(156768, 113925) -p(44209, 199417) -p(104044, 36293) -p(165500, 88017) -p(158717, 78121) -p(160128, 17569) -p(65521, 193109) -p(83820, 146141) -p(42393, 13881) -p(141629, 198700) -p(209708, 15000) -p(33885, 41492) -p(137676, 59932) -p(109733, 175020) -p(28472, 142220) -p(12761, 4136) -p(154784, 203356) -p(111805, 203648) -p(36460, 71964) -p(100609, 173952) -p(92032, 69152) -p(68649, 28008) -p(200000, 129704) -p(203013, 22768) -p(200544, 200544) -p(72749, 186860) -p(75812, 18788) -p(28853, 50228) -p(149532, 207044) -p(84033, 39748) -p(17816, 117672) -p(187641, 94476) -p(18652, 83612) -p(77469, 170848) -p(199116, 177832) -p(93057, 189772) -p(70504, 165024) -p(47317, 98456) -p(86868, 50520) -p(208976, 101076) -p(75457, 148628) -p(6712, 144164) -p(85609, 180552) -p(45492, 182688) -p(62581, 107384) -p(104629, 107868) -p(167660, 151248) -p(42293, 204232) -p(57981, 125733) -p(117716, 213745) -p(154989, 143297) -p(111184, 196181) -p(153113, 94485) -p(197128, 55477) -p(34397, 120685) -p(97144, 38297) -p(23301, 210933) -p(64504, 191425) -p(208229, 170465) -p(189748, 176773) -p(155209, 39657) -p(54440, 11905) -p(123345, 66149) -p(203356, 97297) -p(97297, 97297) -p(98324, 102829) -p(117741, 85657) -p(23764, 101669) -p(136241, 144657) -p(6268, 80801) -p(185213, 82645) -p(28748, 185801) -p(168393, 178909) -p(20656, 205985) -p(56569, 133009) -p(204808, 183957) -p(185117, 125925) -p(199144, 121945) -p(193448, 148437) -p(199765, 82353) -p(168476, 202973) -p(71249, 72749) -p(105560, 132525) -p(190285, 114961) -p(36217, 65373) -p(131564, 47033) -p(94209, 26557) -p(61377, 160720) -p(212236, 101236) -p(81821, 77756) -p(178044, 188380) -p(100129, 171884) -p(95916, 2936) -p(183645, 97064) -p(24752, 109872) -p(194093, 126368) -p(112832, 107060) -p(136129, 17204) -p(102896, 30396) -p(95141, 131608) -p(82192, 186536) -p(202529, 128020) -p(91664, 12740) -p(191425, 84064) -p(84064, 84064) -p(61945, 139468) -p(182716, 201480) -p(13877, 115888) -p(38484, 84840) -p(134465, 80376) -p(122100, 124916) -p(44961, 125208) -p(25804, 180128) -p(162053, 19824) -p(169288, 163148) -p(201997, 42044) -p(11372, 70572) -p(5676, 162856) -p(92829, 1092) -p(75416, 75036) -p(95897, 174504) -p(6192, 68728) -p(41713, 208272) -p(112005, 99492) -p(45004, 142380) -p(29001, 131416) -p(71181, 83681) -p(20776, 186445) -p(100745, 145885) -p(140000, 65925) -p(206577, 51173) -p(193144, 197217) -p(62756, 168689) -p(9389, 54569) -p(120656, 25265) -p(81165, 186545) -p(30760, 183633) -p(117329, 30697) -p(198800, 206821) -p(76345, 50105) -p(96488, 73977) -p(45649, 7017) -p(9704, 198869) -p(75989, 136665) -p(6660, 97657) -p(26461, 122981) -p(134716, 28853) -p(207044, 6925) -p(197249, 163157) -p(18364, 172377) -p(172377, 172377) -p(89848, 56897) -p(118777, 69221) -p(119097, 198285) -p(117504, 101053) -p(149245, 11389) -p(76520, 211869) -p(1709, 2845) -p(186236, 200029) -p(64096, 96489) -p(94085, 148505) -p(208064, 14685) -p(146453, 195181) -p(76156, 118517) -p(62581, 168981) -p(162392, 68637) -p(75841, 42537) -p(197780, 124533) -p(107441, 180621) -p(95660, 174997) -p(144573, 204493) -p(14025, 110716) -p(184384, 211344) -p(12049, 182816) -p(75176, 169908) -p(88769, 197368) -p(57872, 152052) -p(103900, 181748) -p(5509, 211928) -p(152772, 26676) -p(168309, 181164) -p(182336, 4748) -p(55417, 88588) -p(140092, 81604) -p(203857, 185436) -p(86784, 184852) -p(59909, 65008) -p(49780, 170876) -p(164101, 175732) -p(205880, 190384) -p(108073, 88688) -p(138020, 204068) -p(30044, 181356) -p(75661, 36088) -p(161404, 123424) -p(197217, 98876) -p(98876, 98876) -p(40077, 114112) -p(46997, 172720) -p(141276, 67044) -p(71221, 15812) -p(195780, 91500) -p(33441, 169324) -p(88812, 142832) -p(170932, 149532) -p(87001, 166704) -p(179536, 37448) -p(121029, 144484) -p(202308, 76848) -p(118185, 177576) -p(120080, 128664) -p(157061, 105084) -p(110828, 84416) -p(85605, 32792) -p(39864, 64232) -p(144381, 46084) -p(83505, 138669) -p(162356, 99369) -p(67553, 102181) -p(72556, 180297) -p(22009, 119553) -p(13524, 121689) -p(195116, 42889) -p(41121, 175641) -p(193140, 189225) -p(21197, 74329) -p(163220, 126053) -p(214369, 137893) -p(47224, 203493) -p(191725, 73069) -p(136956, 95873) -p(169373, 75397) -p(64140, 75013) -p(192821, 98009) -p(84484, 72585) -p(68481, 213681) -p(113372, 63849) -p(16168, 151961) -p(170465, 43181) -p(80376, 100337) -p(21577, 34253) -p(170976, 61037) -p(61037, 61037) -p(51461, 66861) -p(163888, 150509) -p(166033, 16789) -p(145224, 56381) -p(199769, 60745) -p(119768, 34737) -p(146384, 210961) -p(75069, 136241) -p(174780, 148273) -p(35929, 164385) -p(169216, 87529) -p(45793, 29889) -p(27120, 43281) -p(152405, 174765) -p(179824, 33185) -p(19913, 111209) -p(78772, 128673) -p(156997, 124017) -p(156281, 26644) -p(94428, 115048) -p(96473, 64976) -p(128456, 23832) -p(208909, 150952) -p(190044, 47412) -p(125321, 76424) -p(34932, 82732) -p(10393, 23732) -p(211485, 211988) -p(175540, 159396) -p(73077, 88556) -p(55180, 214316) -p(102349, 200248) -p(213416, 64392) -p(132493, 41296) -p(114012, 63132) -p(175641, 126888) -p(126888, 126888) -p(130677, 41588) -p(197888, 70892) -p(106116, 213156) -p(190741, 111944) -p(110548, 140280) -p(126296, 35280) -p(179481, 4032) -p(59404, 185888) -p(150748, 141248) -p(52457, 169100) -p(45140, 194040) -p(59021, 91076) -p(194928, 174824) -p(9885, 170552) -p(72733, 137277) -p(173320, 100013) -p(50381, 211705) -p(196092, 168041) -p(209101, 24709) -p(28472, 103217) -p(165589, 67605) -p(17468, 111853) -p(43193, 132229) -p(110081, 87105) -p(209116, 173373) -p(21837, 210153) -p(15004, 110977) -p(80321, 184829) -p(168584, 56057) -p(28853, 125437) -p(161172, 35289) -p(142649, 118061) -p(17816, 187641) -p(187641, 187641) -p(174400, 182693) -p(70504, 149893) -p(47317, 132521) -p(86868, 205689) -p(161332, 89533) -p(75457, 79537) -p(6712, 208893) -p(123580, 94097) -p(94085, 176385) -p(153528, 155809) -p(175077, 198313) -p(167660, 67021) -p(58789, 87205) -p(57981, 108608) -p(117716, 10500) -p(154989, 29132) -p(60236, 89592) -p(153113, 166640) -p(197128, 119964) -p(182861, 13028) -p(118096, 199924) -p(2725, 91144) -p(59909, 24284) -p(136048, 94732) -p(37557, 166832) -p(205880, 69792) -p(108073, 81732) -p(138020, 43400) -p(24681, 150528) -p(114112, 128500) -p(128673, 83476) -p(26644, 68724) -p(167649, 104244) -p(104244, 104244) -p(168904, 87356) -p(194429, 149268) -p(39224, 113072) -p(108348, 45436) -p(113789, 36992) -p(122092, 163244) -p(76420, 142284) -p(60509, 116468) -p(76964, 172948) -p(172265, 118604) -p(177948, 34180) -p(54233, 105796) -p(83505, 88141) -p(102872, 15457) -p(67553, 40397) -p(133696, 107257) -p(129533, 39621) -p(73888, 156845) -p(139689, 133557) -p(153232, 11577) -p(79389, 182369) -p(66832, 101633) -p(138941, 45253) -p(45448, 15073) -p(144825, 76401) -p(52892, 85329) -p(173129, 200901) -p(195116, 124437) -p(41121, 199349) -p(169660, 5853) -p(74081, 20697) -p(59580, 170045) -p(86957, 38069) -p(47808, 124529) -p(109337, 99981) -p(101436, 142193) -p(159669, 70869) -p(211060, 148209) -p(62981, 164997) -p(186664, 208761) -p(134657, 49909) -p(107056, 144713) -p(147525, 51269) -p(25312, 204005) -p(169713, 201193) -p(93984, 104253) -p(131541, 10317) -p(45816, 146849) -p(80173, 139089) -p(113124, 13129) -p(38413, 55049) -p(114361, 192708) -p(147704, 205424) -p(78325, 207944) -p(128456, 19980) -p(132245, 80340) -p(91352, 102852) -p(34105, 141276) -p(121692, 40164) -p(142369, 81600) -p(153976, 134584) -p(116913, 210756) -p(152000, 167868) -p(83981, 31528) -p(139352, 102268) -p(136449, 41524) -p(62656, 148944) -p(56357, 125556) -p(77084, 146424) -p(185289, 173300) -p(136728, 211632) -p(101609, 114884) -p(174928, 32596) -p(37821, 199116) -p(137632, 131572) -p(198385, 175436) -p(29304, 174468) -p(81905, 2124) -p(126888, 163988) -p(130677, 109644) -p(136360, 97804) -p(413, 26188) -p(178340, 136912) -p(212801, 38220) -p(174428, 169904) -p(40909, 201736) -p(186620, 44820) -p(59021, 111972) -p(194928, 129344) -p(139625, 47056) -p(16937, 136045) -p(116748, 75301) -p(132377, 124205) -p(172412, 36193) -p(42097, 125565) -p(38176, 116737) -p(184521, 198149) -p(60656, 16785) -p(202145, 101793) -p(130104, 147885) -p(126425, 80249) -p(133176, 166709) -p(125417, 107809) -p(74528, 33381) -p(19125, 41917) -p(35872, 199025) -p(152137, 56569) -p(184020, 51037) -p(80873, 154869) -p(97912, 48225) -p(196513, 104897) -p(100792, 77529) -p(151065, 49101) -p(7308, 71221) -p(130365, 162537) -p(187572, 187285) -p(20677, 207853) -p(76424, 145073) -p(104185, 156813) -p(133256, 93057) -p(171297, 152249) -p(101876, 84613) -p(133709, 166417) -p(123580, 202421) -p(131833, 130321) -p(77256, 31437) -p(75809, 31145) -p(167660, 122753) -p(42293, 40073) -p(57981, 106116) -p(117716, 6072) -p(154989, 182488) -p(59909, 165992) -p(136048, 125332) -p(37557, 38480) -p(205880, 151340) -p(27337, 77396) -p(138020, 85156) -p(30044, 58664) -p(178909, 170940) -p(161404, 70796) -p(58956, 58956) -p(194429, 195780) -p(56688, 135328) -p(202476, 17520) -p(82349, 2868) -p(209328, 129504) -p(46505, 211208) -p(116044, 23536) -p(151665, 139500) -p(167440, 194328) -p(124845, 76520) -p(188268, 192968) -p(185949, 155996) -p(54224, 126692) -p(1249, 146968) -p(127461, 167745) -p(21068, 178125) -p(76581, 13741) -p(177133, 122429) -p(75788, 172501) -p(178753, 138049) -p(141932, 88269) -p(13461, 214713) -p(101824, 123105) -p(62360, 2485) -p(23745, 73809) -p(163148, 201997) -p(203256, 211609) -p(211609, 211609) -p(50672, 197049) -p(76224, 105933) -p(131253, 95937) -p(47856, 123981) -p(41849, 5981) -p(145540, 163573) -p(175053, 127569) -p(27120, 134169) -p(152405, 68961) -p(67648, 185117) -p(76777, 44313) -p(78772, 18013) -p(156997, 8501) -p(156281, 93660) -p(153912, 183132) -p(78325, 134420) -p(83589, 203800) -p(29304, 148004) -p(81905, 86868) -p(38976, 28452) -p(16757, 154120) -p(154808, 142280) -p(33440, 88036) -p(142037, 160812) -p(30396, 57564) -p(75160, 30488) -p(116897, 52032) -p(52032, 52032) -p(1604, 36020) -p(128441, 209916) -p(47956, 54168) -p(6721, 103656) -p(81400, 118308) -p(10569, 20400) -p(3248, 52516) -p(34697, 66684) -p(105204, 107152) -p(10501, 147420) -p(196388, 15836) -p(205901, 211468) -p(151817, 130157) -p(155080, 92117) -p(70857, 177417) -p(65837, 141997) -p(63468, 90757) -p(91229, 78433) -p(9968, 145293) -p(198425, 209925) -p(166068, 154321) -p(160937, 181589) -p(33484, 168781) -p(164493, 133261) -p(91476, 99785) -p(130009, 150049) -p(140156, 73193) -p(183929, 150925) -p(25136, 33701) -p(96561, 12349) -p(113285, 166937) -p(173312, 179937) -p(105585, 182073) -p(171021, 2937) -p(18920, 30013) -p(10485, 48161) -p(57312, 152669) -p(148437, 140829) -p(34476, 168389) -p(23248, 206721) -p(205981, 130641) -p(163244, 114337) -p(117545, 8469) -p(102268, 49129) -p(80925, 36029) -p(40608, 9829) -p(92049, 198085) -p(2344, 121329) -p(188665, 132969) -p(23656, 185953) -p(159521, 138017) -p(76485, 152769) -p(63344, 21377) -p(82469, 124141) -p(52065, 203476) -p(185744, 151852) -p(93661, 171360) -p(191505, 167380) -p(39212, 172328) -p(75901, 24248) -p(214428, 119636) -p(82369, 46760) -p(187128, 190084) -p(203049, 10856) -p(166328, 64908) -p(121797, 107504) -p(1812, 152920) -p(6477, 93144) -p(41564, 16580) -p(21097, 174948) -p(119264, 57724) -p(200201, 37732) -p(68937, 201632) -p(75788, 204836) -p(11065, 69464) -p(18861, 145836) -p(131772, 116532) -p(5245, 107896) -p(172692, 81404) -p(39657, 43072) -p(204292, 73444) -p(174824, 90716) -p(137277, 2220) -p(91144, 83632) -p(27589, 186012) -p(95768, 157676) -p(40173, 179220) -p(52256, 568) -p(204809, 91884) -p(119176, 152144) -p(14093, 205904) -p(7552, 175140) -p(150401, 134388) -p(8073, 188340) -p(155336, 17648) -p(171941, 172620) -p(140369, 56957) -p(65124, 52009) -p(161681, 178161) -p(43425, 51617) -p(138288, 112561) -p(165273, 197761) -p(181144, 113337) -p(949, 141965) -p(208672, 189801) -p(121245, 52201) -p(111792, 59577) -p(124609, 9405) -p(165520, 76657) -p(45393, 142057) -p(99596, 168457) -p(51569, 117801) -p(39788, 19209) -p(111505, 1837) -p(94845, 79953) -p(81996, 145745) -p(117617, 184661) -p(205565, 60645) -p(126148, 4557) -p(209413, 158169) -p(23544, 107513) -p(190557, 173597) -p(131608, 15813) -p(29748, 213965) -p(29565, 162925) -p(136360, 119353) -p(124529, 145845) -p(54816, 10865) -p(122753, 64817) -p(32264, 198729) -p(36737, 171269) -p(54160, 3781) -p(77073, 121781) -p(85668, 201933) -p(116433, 95289) -p(175561, 198829) -p(194928, 189417) -p(139625, 18433) -p(21009, 42264) -p(100544, 14704) -p(167797, 206840) -p(72921, 191220) -p(60656, 54588) -p(111805, 129500) -p(101741, 62448) -p(105580, 33336) -p(152357, 85152) -p(75437, 175208) -p(177092, 50608) -p(21837, 136392) -p(99136, 91752) -p(80321, 138528) -p(209728, 108348) -p(169077, 208100) -p(108192, 65452) -p(34841, 49732) -p(161332, 161332) -p(150953, 208976) -p(6712, 182192) -p(85609, 139304) -p(45492, 180348) -p(164569, 46920) -p(165081, 67688) -p(30936, 70016) -p(161845, 100872) -p(138041, 148141) -p(117716, 158621) -p(154989, 105345) -p(207709, 131061) -p(106264, 186473) -p(81333, 126305) -p(199941, 137853) -p(111496, 117185) -p(145665, 16165) -p(18765, 161141) -p(61328, 140281) -p(16213, 119221) -p(29948, 87973) -p(361, 52653) -p(112788, 80989) -p(89601, 196077) -p(117512, 2581) -p(143329, 63617) -p(91752, 14321) -p(14321, 14321) -p(42616, 113789) -p(129765, 87297) -p(211428, 83801) -p(56273, 3841) -p(49217, 78269) -p(29092, 84869) -p(203089, 149693) -p(61377, 3900) -p(212236, 84928) -p(81821, 46112) -p(84277, 118696) -p(67640, 150720) -p(211173, 192156) -p(95141, 53872) -p(83260, 130244) -p(53089, 198948) -p(151517, 126848) -p(39008, 164404) -p(187581, 21072) -p(24708, 206516) -p(68481, 45044) -p(113372, 191672) -p(136277, 191864) -p(105672, 73864) -p(18729, 87256) -p(112712, 75416) -p(38585, 189052) -p(189052, 189052) -p(191577, 47856) -p(42680, 124228) -p(203285, 138880) -p(149069, 155376) -p(60240, 131312) -p(23761, 47564) -p(193253, 112881) -p(20776, 150629) -p(35729, 85805) -p(202569, 69701) -p(167884, 29041) -p(62117, 18169) -p(168209, 124237) -p(192524, 204197) -p(198649, 46505) -p(177717, 4877) -p(20860, 140149) -p(54737, 84837) -p(44700, 53397) -p(174257, 214577) -p(90568, 185273) -p(2657, 169453) -p(38712, 140633) -p(32997, 127049) -p(50520, 68341) -p(28985, 60673) -p(2936, 212349) -p(211869, 202545) -p(87520, 171297) -p(97525, 190321) -p(64392, 72513) -p(172989, 177705) -p(110936, 62225) -p(90569, 48057) -p(207360, 181777) -p(130321, 105605) -p(176472, 24093) -p(2777, 37969) -p(9528, 65237) -p(30593, 30593) -p(187076, 117637) -p(46281, 188669) -p(162565, 120449) -p(142240, 6721) -p(128081, 159657) -p(206348, 177121) -p(54589, 116469) -p(25728, 27197) -p(10985, 67465) -p(5512, 83093) -p(122353, 2549) -p(191801, 204540) -p(194380, 198332) -p(140337, 173392) -p(28481, 134384) -p(61916, 181736) -p(146349, 22108) -p(191889, 173492) -p(148568, 172716) -p(97045, 174652) -p(182665, 91104) -p(190776, 122252) -p(185061, 57720) -p(186088, 34240) -p(52177, 190764) -p(46704, 213860) -p(128125, 80524) -p(6596, 10660) -p(107233, 172032) -p(66240, 154376) -p(202973, 117596) -p(22828, 104688) -p(183633, 135160) -p(142832, 202796) -p(198253, 23952) -p(94280, 134968) -p(202101, 39380) -p(160140, 91588) -p(141901, 116528) -p(125556, 31812) -p(172241, 149036) -p(129504, 130888) -p(181037, 164464) -p(174788, 25212) -p(202737, 140208) -p(140208, 140208) -p(91497, 207552) -p(52325, 31228) -p(33944, 48600) -p(122065, 152432) -p(173456, 99448) -p(107573, 123128) -p(119372, 110704) -p(157613, 101584) -p(126032, 19972) -p(161461, 199884) -p(115621, 127693) -p(142756, 139825) -p(70565, 116145) -p(203829, 133325) -p(141100, 46281) -p(113, 92181) -p(28181, 72773) -p(86172, 32789) -p(7481, 141185) -p(87277, 117989) -p(63172, 189705) -p(8353, 54433) -p(134656, 200961) -p(59261, 35701) -p(131128, 76845) -p(57677, 143997) -p(195336, 57245) -p(193501, 86941) -p(204424, 60057) -p(187937, 82961) -p(166060, 169521) -p(40693, 210665) -p(81604, 169713) -p(181365, 151373) -p(67788, 95577) -p(101373, 64521) -p(103760, 124105) -p(10317, 42009) -p(162628, 65689) -p(81317, 44629) -p(212860, 57537) -p(87977, 194169) -p(129956, 51905) -p(43209, 208045) -p(200368, 56469) -p(56469, 56469) -p(42913, 39581) -p(172420, 145549) -p(66269, 170973) -p(114164, 137013) -p(185881, 178157) -p(115876, 100425) -p(50285, 101593) -p(207352, 19789) -p(174461, 59381) -p(68853, 57104) -p(182832, 59340) -p(152077, 76420) -p(198297, 64288) -p(173900, 176172) -p(170897, 202372) -p(128717, 137940) -p(205624, 200920) -p(133341, 62344) -p(125025, 131732) -p(20184, 123580) -p(177977, 40416) -p(124533, 129112) -p(83448, 64964) -p(72585, 158224) -p(213156, 129788) -p(36549, 76128) -p(29132, 164432) -p(159753, 150748) -p(14836, 3736) -p(157585, 32264) -p(32848, 32848) -p(55269, 165500) -p(160128, 152884) -p(42617, 107276) -p(49276, 37796) -p(179409, 100484) -p(42361, 190541) -p(56388, 120577) -p(181381, 131541) -p(165013, 178901) -p(136152, 75069) -p(70561, 145517) -p(207609, 139985) -p(30760, 96029) -p(204273, 214221) -p(210709, 80209) -p(9704, 60509) -p(89473, 8109) -p(2845, 105925) -p(87520, 210341) -p(149733, 11213) -p(70800, 131833) -p(94097, 94085) -p(71636, 41877) -p(140929, 122905) -p(64908, 199177) -p(48513, 31013) -p(6356, 7525) -p(7525, 7525) -p(56104, 202673) -p(197397, 205485) -p(154660, 37805) -p(163497, 199469) -p(54101, 172160) -p(38240, 147904) -p(35437, 160128) -p(101357, 207580) -p(61916, 97832) -p(67457, 189048) -p(183929, 183224) -p(88792, 190116) -p(57845, 121120) -p(131233, 97732) -p(95288, 107144) -p(99569, 152268) -p(50105, 183808) -p(115080, 136064) -p(213973, 138976) -p(74972, 76964) -p(125437, 176916) -p(92112, 179536) -p(198085, 2344) -p(143316, 10396) -p(50549, 112776) -p(123580, 57656) -p(131833, 12632) -p(12632, 12632) -p(165081, 33300) -p(30936, 97440) -p(120701, 165468) -p(31489, 170325) -p(15828, 132869) -p(207973, 187597) -p(212949, 148881) -p(155560, 208657) -p(103261, 150433) -p(64504, 74061) -p(32297, 150725) -p(113668, 64941) -p(84273, 189249) -p(156140, 15645) -p(150133, 163533) -p(80512, 144417) -p(24333, 67753) -p(96784, 194005) -p(38661, 98709) -p(147016, 91433) -p(198549, 115113) -p(63405, 34861) -p(120328, 65817) -p(142073, 126753) -p(32856, 187213) -p(162121, 9145) -p(166060, 66593) -p(80869, 131993) -p(81604, 95897) -p(181365, 214089) -p(146849, 113361) -p(138564, 3613) -p(80249, 68437) -p(151340, 35637) -p(191617, 211277) -p(37864, 35929) -p(183433, 49705) -p(19392, 181973) -p(146329, 76197) -p(86320, 16421) -p(108449, 13993) -p(115200, 79885) -p(112297, 14093) -p(80524, 3805) -p(35217, 42913) -p(30105, 30105) -p(122832, 178669) -p(209693, 6133) -p(172749, 108121) -p(143404, 205161) -p(174461, 179353) -p(68853, 71984) -p(210876, 86928) -p(118985, 137484) -p(63901, 60436) -p(15532, 211428) -p(170897, 145052) -p(150964, 48988) -p(3085, 166112) -p(196832, 50924) -p(104457, 173196) -p(176324, 33944) -p(108597, 23656) -p(87888, 198620) -p(105945, 210360) -p(1780, 143792) -p(44777, 195416) -p(178648, 157476) -p(51053, 2212) -p(32641, 126812) -p(198444, 104492) -p(93937, 45492) -p(107868, 207548) -p(58873, 22204) -p(151308, 84500) -p(1393, 127588) -p(110716, 193964) -p(78409, 51508) -p(179649, 180764) -p(136912, 69172) -p(25421, 205120) -p(179576, 16864) -p(214713, 22104) -p(184976, 157376) -p(17589, 48696) -p(67720, 167472) -p(171269, 124776) -p(67204, 40736) -p(131837, 85668) -p(95016, 26084) -p(200801, 107304) -p(107600, 130984) -p(117989, 19000) -p(203901, 122156) -p(122156, 122156) -p(212313, 141464) -p(42617, 93720) -p(201628, 209876) -p(93825, 92652) -p(42361, 41713) -p(1268, 203285) -p(181381, 167381) -p(62833, 17457) -p(18344, 10273) -p(93949, 45793) -p(68968, 89749) -p(53257, 208525) -p(213912, 36765) -p(16345, 56949) -p(200872, 138461) -p(157893, 63257) -p(77700, 71993) -p(117785, 66269) -p(120656, 204937) -p(207609, 61897) -p(30760, 209693) -p(34165, 179705) -p(45649, 183201) -p(10964, 68205) -p(134597, 190285) -p(83612, 19301) -p(47033, 48797) -p(67276, 197853) -p(123465, 91693) -p(64232, 191545) -p(54145, 113621) -p(73681, 122065) -p(90136, 19493) -p(154777, 174173) -p(24412, 41621) -p(178125, 124585) -p(42328, 79853) -p(152769, 29681) -p(15996, 15029) -p(3973, 24833) -p(14412, 162333) -p(64493, 207165) -p(207876, 116241) -p(181777, 54137) -p(86932, 130893) -p(167677, 186597) -p(109289, 164569) -p(76156, 62581) -p(62581, 62581) -p(165081, 5617) -p(211040, 75097) -p(127493, 4841) -p(138041, 162292) -p(117716, 81264) -p(154989, 12468) -p(181213, 175392) -p(123140, 128624) -p(207281, 148124) -p(89601, 75832) -p(88884, 63024) -p(42601, 101356) -p(110296, 116784) -p(102829, 11400) -p(99492, 116976) -p(148113, 176268) -p(88688, 196744) -p(82873, 53612) -p(189284, 7228) -p(59453, 27120) -p(162952, 168992) -p(100753, 114164) -p(188340, 137644) -p(119645, 93104) -p(203321, 135900) -p(202796, 59236) -p(71121, 67196) -p(49217, 205572) -p(29092, 120080) -p(203089, 14212) -p(61377, 11501) -p(106268, 208301) -p(44365, 136685) -p(171509, 31785) -p(64140, 9949) -p(166137, 122809) -p(152581, 137461) -p(184272, 189861) -p(193985, 54589) -p(150372, 152989) -p(147177, 117469) -p(201480, 5877) -p(30889, 208201) -p(169908, 187049) -p(100337, 81081) -p(158520, 34697) -p(9089, 46437) -p(107056, 127657) -p(157909, 8497) -p(90716, 90785) -p(11057, 16257) -p(156353, 92921) -p(96636, 154149) -p(169713, 11017) -p(43785, 140273) -p(33164, 35181) -p(183489, 180741) -p(214121, 123928) -p(68904, 179824) -p(164985, 108792) -p(160253, 165172) -p(189032, 18936) -p(128581, 139748) -p(135501, 203796) -p(34348, 92196) -p(126349, 103360) -p(122136, 23884) -p(205401, 188268) -p(126368, 147608) -p(200029, 9524) -p(87520, 38828) -p(73845, 110344) -p(64876, 137320) -p(187449, 119372) -p(33596, 180892) -p(159461, 4376) -p(172328, 47656) -p(119353, 44552) -p(188669, 72012) -p(35308, 36400) -p(49869, 48240) -p(10885, 55032) -p(128168, 188752) -p(202605, 118012) -p(109897, 63485) -p(80068, 103853) -p(81629, 9141) -p(163392, 59021) -p(120505, 53197) -p(203436, 212149) -p(28481, 17877) -p(61916, 117921) -p(146349, 54457) -p(71488, 167025) -p(8617, 65521) -p(54960, 131121) -p(81653, 189729) -p(180596, 169937) -p(148773, 132573) -p(192688, 203121) -p(207933, 32529) -p(140740, 9725) -p(1689, 69109) -p(27464, 88617) -p(22133, 201569) -p(133976, 197981) -p(78965, 145773) -p(139576, 116953) -p(182665, 200209) -p(190776, 43785) -p(196217, 176245) -p(141640, 80173) -p(206081, 19913) -p(182460, 24377) -p(142293, 143445) -p(150404, 188469) -p(107233, 8073) -p(199184, 5261) -p(123113, 213409) -p(179352, 37377) -p(183633, 172749) -p(142832, 67849) -p(198253, 152565) -p(94280, 73965) -p(202101, 61057) -p(116468, 77361) -p(17885, 47181) -p(173300, 122093) -p(201837, 36217) -p(65748, 49217) -p(84097, 17293) -p(183424, 196329) -p(33217, 64937) -p(159036, 172265) -p(142057, 3317) -p(29356, 91529) -p(15681, 147225) -p(153824, 157997) -p(127049, 176629) -p(107016, 185949) -p(159817, 213893) -p(150072, 38837) -p(133193, 135485) -p(67944, 76485) -p(158485, 66297) -p(52384, 35341) -p(24833, 2641) -p(15280, 157613) -p(163953, 115109) -p(43968, 141601) -p(141601, 141601) -p(126032, 150429) -p(57045, 137913) -p(4029, 87024) -p(150516, 204148) -p(7393, 177656) -p(198520, 72080) -p(156701, 73148) -p(194892, 30544) -p(191505, 119916) -p(39212, 30936) -p(184681, 211040) -p(214428, 187360) -p(126517, 68876) -p(202072, 167660) -p(203049, 165624) -p(154488, 95660) -p(123641, 192600) -p(150868, 57328) -p(6477, 45588) -p(41564, 164848) -p(21097, 114192) -p(2424, 42192) -p(154785, 154368) -p(72940, 176688) -p(156497, 30352) -p(87076, 196480) -p(80777, 5512) -p(213872, 1048) -p(98693, 125064) -p(147756, 128168) -p(66929, 154660) -p(201576, 196388) -p(212357, 75184) -p(196596, 194928) -p(105289, 55584) -p(131064, 163296) -p(87401, 158248) -p(67760, 83820) -p(78249, 13756) -p(81604, 16184) -p(181365, 60532) -p(67788, 40248) -p(88565, 169312) -p(186240, 68684) -p(134525, 60240) -p(178540, 66064) -p(166709, 45004) -p(77396, 37628) -p(154545, 172708) -p(37864, 157472) -p(183433, 52088) -p(19392, 191340) -p(146329, 104196) -p(62448, 27540) -p(22281, 22200) -p(157028, 33748) -p(71153, 113124) -p(55684, 78772) -p(35217, 130980) -p(108244, 25012) -p(67401, 155336) -p(308, 89544) -p(6133, 14924) -p(183868, 207352) -p(42297, 60140) -p(155600, 143404) -p(51093, 43744) -p(173616, 124480) -p(61057, 10068) -p(10068, 10068) -p(65681, 111864) -p(196457, 212209) -p(143240, 136813) -p(180997, 146809) -p(148348, 12989) -p(202309, 36669) -p(7412, 108477) -p(15573, 26573) -p(65120, 54233) -p(129561, 144381) -p(102836, 156413) -p(6481, 1249) -p(129196, 130505) -p(130173, 106149) -p(156816, 82469) -p(87445, 168929) -p(74496, 16385) -p(174165, 201345) -p(130844, 2509) -p(95141, 161461) -p(203880, 181) -p(53089, 106049) -p(13356, 74125) -p(178817, 153601) -p(36420, 19005) -p(48461, 94309) -p(0, 161845) -p(115581, 160685) -p(24708, 151173) -p(144561, 58789) -p(117060, 144573) -p(96009, 86641) -p(70928, 204641) -p(5729, 200177) -p(127760, 112841) -p(143297, 195421) -p(73000, 51029) -p(207113, 107117) -p(182716, 27641) -p(13877, 141761) -p(38484, 122353) -p(137469, 20949) -p(117636, 35601) -p(3041, 66557) -p(44820, 130797) -p(162053, 177665) -p(169288, 204057) -p(201997, 163497) -p(11372, 205901) -p(127829, 101001) -p(53552, 93049) -p(184177, 106825) -p(209560, 147969) -p(133873, 71697) -p(30100, 95277) -p(139373, 139625) -p(134384, 4545) -p(35701, 164273) -p(138908, 62869) -p(130765, 24537) -p(97832, 9885) -p(24089, 42393) -p(124968, 67817) -p(76065, 198433) -p(36048, 179409) -p(11017, 93825) -p(66872, 104305) -p(9725, 182713) -p(121860, 212793) -p(212793, 212793) +p(x = 177533, y = 177533) +p(x = 133828, y = 31489) +p(x = 144509, y = 138041) +p(x = 87312, y = 57981) +p(x = 160197, y = 14025) +p(x = 76508, y = 129013) +p(x = 212949, y = 43329) +p(x = 155560, y = 70405) +p(x = 23301, y = 60893) +p(x = 64504, y = 75837) +p(x = 32297, y = 166861) +p(x = 113668, y = 168121) +p(x = 84273, y = 151141) +p(x = 156140, y = 172777) +p(x = 172545, y = 179961) +p(x = 23840, y = 102521) +p(x = 14437, y = 158125) +p(x = 175384, y = 118925) +p(x = 74857, y = 149881) +p(x = 188160, y = 98057) +p(x = 7481, y = 153469) +p(x = 53632, y = 172685) +p(x = 71397, y = 109897) +p(x = 161504, y = 66717) +p(x = 59133, y = 126201) +p(x = 107904, y = 151817) +p(x = 70065, y = 208005) +p(x = 88948, y = 18197) +p(x = 117193, y = 119701) +p(x = 143744, y = 134645) +p(x = 192365, y = 65941) +p(x = 77044, y = 11013) +p(x = 9317, y = 54293) +p(x = 83804, y = 116305) +p(x = 87401, y = 139301) +p(x = 162664, y = 3545) +p(x = 53985, y = 72733) +p(x = 4748, y = 151041) +p(x = 109849, y = 31589) +p(x = 66428, y = 19649) +p(x = 211705, y = 141629) +p(x = 195360, y = 39449) +p(x = 62425, y = 42361) +p(x = 164956, y = 112325) +p(x = 169429, y = 128821) +p(x = 158808, y = 2769) +p(x = 127569, y = 108153) +p(x = 129956, y = 174721) +p(x = 91825, y = 71181) +p(x = 147196, y = 149005) +p(x = 103533, y = 49053) +p(x = 86320, y = 136389) +p(x = 26261, y = 148421) +p(x = 205548, y = 114361) +p(x = 69701, y = 7909) +p(x = 80524, y = 44689) +p(x = 35217, y = 156281) +p(x = 120084, y = 149297) +p(x = 173561, y = 146193) +p(x = 152268, y = 196165) +p(x = 28745, y = 13733) +p(x = 122832, y = 155021) +p(x = 42297, y = 30521) +p(x = 155600, y = 68853) +p(x = 51093, y = 184325) +p(x = 173616, y = 137457) +p(x = 61057, y = 197425) +p(x = 116036, y = 138817) +p(x = 65681, y = 162981) +p(x = 162981, y = 12040) +p(x = 12040, y = 12040) +p(x = 62221, y = 143240) +p(x = 148348, y = 201848) +p(x = 202309, y = 83656) +p(x = 7412, y = 49112) +p(x = 15573, y = 212236) +p(x = 167400, y = 74052) +p(x = 40189, y = 102872) +p(x = 68092, y = 162356) +p(x = 24629, y = 139260) +p(x = 129196, y = 186712) +p(x = 64189, y = 21068) +p(x = 156816, y = 24948) +p(x = 176817, y = 102096) +p(x = 131844, y = 161480) +p(x = 58493, y = 185744) +p(x = 130844, y = 93844) +p(x = 95141, y = 164876) +p(x = 83260, y = 68812) +p(x = 53089, y = 93068) +p(x = 115736, y = 49888) +p(x = 187745, y = 132760) +p(x = 36420, y = 153328) +p(x = 48461, y = 91224) +p(x = 0, y = 6416) +p(x = 115581, y = 15828) +p(x = 24708, y = 57164) +p(x = 144561, y = 117716) +p(x = 88332, y = 184384) +p(x = 136277, y = 92584) +p(x = 184272, y = 38924) +p(x = 193985, y = 91616) +p(x = 91664, y = 188848) +p(x = 191425, y = 13108) +p(x = 84064, y = 127420) +p(x = 109881, y = 202624) +p(x = 169908, y = 194380) +p(x = 34253, y = 124024) +p(x = 89624, y = 60952) +p(x = 134657, y = 194672) +p(x = 107056, y = 38240) +p(x = 144713, y = 155080) +p(x = 111972, y = 123732) +p(x = 11353, y = 112768) +p(x = 145224, y = 170508) +p(x = 140961, y = 196224) +p(x = 26800, y = 76572) +p(x = 156649, y = 116748) +p(x = 187372, y = 159252) +p(x = 18433, y = 104424) +p(x = 42264, y = 100544) +p(x = 161141, y = 44548) +p(x = 206324, y = 173320) +p(x = 174017, y = 16020) +p(x = 108476, y = 71040) +p(x = 169521, y = 209708) +p(x = 37796, y = 163132) +p(x = 108545, y = 106168) +p(x = 63188, y = 211844) +p(x = 214089, y = 61728) +p(x = 205804, y = 71816) +p(x = 85093, y = 48628) +p(x = 11400, y = 160704) +p(x = 72637, y = 9228) +p(x = 24176, y = 197484) +p(x = 43785, y = 151292) +p(x = 33164, y = 159152) +p(x = 183489, y = 3112) +p(x = 214121, y = 34269) +p(x = 88704, y = 137617) +p(x = 137617, y = 137617) +p(x = 48980, y = 164985) +p(x = 71017, y = 72601) +p(x = 84560, y = 78325) +p(x = 71369, y = 46885) +p(x = 155752, y = 53193) +p(x = 146157, y = 26409) +p(x = 35976, y = 131309) +p(x = 116913, y = 197201) +p(x = 152000, y = 94045) +p(x = 25273, y = 161681) +p(x = 139352, y = 169641) +p(x = 40669, y = 118985) +p(x = 127480, y = 154505) +p(x = 206281, y = 152077) +p(x = 163544, y = 102973) +p(x = 168209, y = 22045) +p(x = 192524, y = 59017) +p(x = 102677, y = 79877) +p(x = 88952, y = 62221) +p(x = 181145, y = 8845) +p(x = 171692, y = 49021) +p(x = 177717, y = 35045) +p(x = 20860, y = 183033) +p(x = 128581, y = 129173) +p(x = 53628, y = 166829) +p(x = 115257, y = 81821) +p(x = 90568, y = 20685) +p(x = 135501, y = 191477) +p(x = 81700, y = 82497) +p(x = 112473, y = 123549) +p(x = 78564, y = 67553) +p(x = 210449, y = 149265) +p(x = 107060, y = 9237) +p(x = 204301, y = 76581) +p(x = 108096, y = 157801) +p(x = 119553, y = 135481) +p(x = 64876, y = 20785) +p(x = 194725, y = 25341) +p(x = 30492, y = 93661) +p(x = 200901, y = 193221) +p(x = 8916, y = 161973) +p(x = 130321, y = 208649) +p(x = 176472, y = 7393) +p(x = 111657, y = 70565) +p(x = 62512, y = 2345) +p(x = 34961, y = 62413) +p(x = 172328, y = 188173) +p(x = 119353, y = 144509) +p(x = 100872, y = 122965) +p(x = 148141, y = 154989) +p(x = 152080, y = 12049) +p(x = 100557, y = 126361) +p(x = 39964, y = 205837) +p(x = 10569, y = 69789) +p(x = 6356, y = 120153) +p(x = 93893, y = 57949) +p(x = 166920, y = 9429) +p(x = 163533, y = 196033) +p(x = 158544, y = 40677) +p(x = 15221, y = 51833) +p(x = 18092, y = 106369) +p(x = 127657, y = 101521) +p(x = 166240, y = 35437) +p(x = 59021, y = 70857) +p(x = 194928, y = 96281) +p(x = 139625, y = 133637) +p(x = 16937, y = 95364) +p(x = 159252, y = 42380) +p(x = 132377, y = 98568) +p(x = 39633, y = 208124) +p(x = 92476, y = 48980) +p(x = 201849, y = 104100) +p(x = 17693, y = 174356) +p(x = 173300, y = 148348) +p(x = 175445, y = 189592) +p(x = 63969, y = 125836) +p(x = 68876, y = 174548) +p(x = 160685, y = 164168) +p(x = 138041, y = 212497) +p(x = 117716, y = 56749) +p(x = 154989, y = 12793) +p(x = 111733, y = 146513) +p(x = 9020, y = 144085) +p(x = 142073, y = 106921) +p(x = 134525, y = 76549) +p(x = 864, y = 63449) +p(x = 41917, y = 39285) +p(x = 158097, y = 110025) +p(x = 116036, y = 89065) +p(x = 65681, y = 25117) +p(x = 196457, y = 214592) +p(x = 143240, y = 87472) +p(x = 90165, y = 15664) +p(x = 102705, y = 4792) +p(x = 94128, y = 72820) +p(x = 176033, y = 71460) +p(x = 127249, y = 46228) +p(x = 156028, y = 140356) +p(x = 115861, y = 31576) +p(x = 9725, y = 28472) +p(x = 85372, y = 204696) +p(x = 212793, y = 193048) +p(x = 78557, y = 96017) +p(x = 71816, y = 165013) +p(x = 150041, y = 82725) +p(x = 213533, y = 213533) +p(x = 184088, y = 112513) +p(x = 70561, y = 62833) +p(x = 30344, y = 104169) +p(x = 36469, y = 66713) +p(x = 65540, y = 153173) +p(x = 197809, y = 118629) +p(x = 141488, y = 198105) +p(x = 208065, y = 90101) +p(x = 21612, y = 110769) +p(x = 208417, y = 158029) +p(x = 31084, y = 52061) +p(x = 170637, y = 202569) +p(x = 17468, y = 92329) +p(x = 176329, y = 201017) +p(x = 110081, y = 206157) +p(x = 177092, y = 34105) +p(x = 185253, y = 190537) +p(x = 200544, y = 148709) +p(x = 132525, y = 188693) +p(x = 75812, y = 127849) +p(x = 15749, y = 48181) +p(x = 199116, y = 15573) +p(x = 71905, y = 86705) +p(x = 198085, y = 18385) +p(x = 143316, y = 183645) +p(x = 106445, y = 93789) +p(x = 31684, y = 63025) +p(x = 150953, y = 154725) +p(x = 6712, y = 108441) +p(x = 85905, y = 145121) +p(x = 152432, y = 139689) +p(x = 22017, y = 32553) +p(x = 131732, y = 70885) +p(x = 210341, y = 193541) +p(x = 169156, y = 50993) +p(x = 99877, y = 57785) +p(x = 14052, y = 205189) +p(x = 54137, y = 125421) +p(x = 165081, y = 118821) +p(x = 30936, y = 121441) +p(x = 161845, y = 208001) +p(x = 177533, y = 105972) +p(x = 203500, y = 197188) +p(x = 144509, y = 207284) +p(x = 212949, y = 198356) +p(x = 198356, y = 198356) +p(x = 103261, y = 97144) +p(x = 64504, y = 106264) +p(x = 208229, y = 11844) +p(x = 189748, y = 151972) +p(x = 134637, y = 59104) +p(x = 29504, y = 150804) +p(x = 145861, y = 99764) +p(x = 9380, y = 165456) +p(x = 153589, y = 184864) +p(x = 81256, y = 76084) +p(x = 185773, y = 58812) +p(x = 118096, y = 115000) +p(x = 2725, y = 104128) +p(x = 138225, y = 60656) +p(x = 49780, y = 65796) +p(x = 11457, y = 154784) +p(x = 30044, y = 91612) +p(x = 178909, y = 165072) +p(x = 161404, y = 206600) +p(x = 11093, y = 121692) +p(x = 40164, y = 30184) +p(x = 162537, y = 61624) +p(x = 162473, y = 147116) +p(x = 107796, y = 34940) +p(x = 1161, y = 114416) +p(x = 2864, y = 53864) +p(x = 82349, y = 131104) +p(x = 209328, y = 15532) +p(x = 204197, y = 92388) +p(x = 149036, y = 182536) +p(x = 68309, y = 173900) +p(x = 176172, y = 169436) +p(x = 87001, y = 9032) +p(x = 179536, y = 19512) +p(x = 121029, y = 46004) +p(x = 202308, y = 170796) +p(x = 188633, y = 164780) +p(x = 20689, y = 65120) +p(x = 154268, y = 167400) +p(x = 144381, y = 154300) +p(x = 195097, y = 211173) +p(x = 102872, y = 11753) +p(x = 67553, y = 172649) +p(x = 142309, y = 79389) +p(x = 194376, y = 129269) +p(x = 129269, y = 129269) +p(x = 66832, y = 113549) +p(x = 182121, y = 124905) +p(x = 141036, y = 199917) +p(x = 25665, y = 8649) +p(x = 168756, y = 195353) +p(x = 61629, y = 175461) +p(x = 63048, y = 123545) +p(x = 93913, y = 184681) +p(x = 155008, y = 75901) +p(x = 139681, y = 137905) +p(x = 173892, y = 214569) +p(x = 110829, y = 190113) +p(x = 4989, y = 166049) +p(x = 120228, y = 138297) +p(x = 166137, y = 170413) +p(x = 91664, y = 178373) +p(x = 142813, y = 143921) +p(x = 84064, y = 3509) +p(x = 144713, y = 33589) +p(x = 177280, y = 188369) +p(x = 186117, y = 114909) +p(x = 156649, y = 108893) +p(x = 53068, y = 73765) +p(x = 18433, y = 59113) +p(x = 42264, y = 45429) +p(x = 161141, y = 67457) +p(x = 168184, y = 91229) +p(x = 153541, y = 103069) +p(x = 108476, y = 7581) +p(x = 169521, y = 38245) +p(x = 21200, y = 46881) +p(x = 22085, y = 54841) +p(x = 113452, y = 190889) +p(x = 88037, y = 131697) +p(x = 209876, y = 141009) +p(x = 41713, y = 196905) +p(x = 201569, y = 183513) +p(x = 68684, y = 105789) +p(x = 23761, y = 70561) +p(x = 57013, y = 30344) +p(x = 56972, y = 52664) +p(x = 100745, y = 115452) +p(x = 202569, y = 140000) +p(x = 206600, y = 149220) +p(x = 62117, y = 121952) +p(x = 50017, y = 181144) +p(x = 76952, y = 80416) +p(x = 191949, y = 120300) +p(x = 39725, y = 149120) +p(x = 46676, y = 193176) +p(x = 5441, y = 150964) +p(x = 41304, y = 16568) +p(x = 73237, y = 212876) +p(x = 95808, y = 180560) +p(x = 64876, y = 66832) +p(x = 194725, y = 189296) +p(x = 41748, y = 99048) +p(x = 124437, y = 132140) +p(x = 59472, y = 80808) +p(x = 116445, y = 135728) +p(x = 124433, y = 39272) +p(x = 190084, y = 145340) +p(x = 64817, y = 65280) +p(x = 189249, y = 75176) +p(x = 192604, y = 200552) +p(x = 43949, y = 43252) +p(x = 10501, y = 9484) +p(x = 196388, y = 50820) +p(x = 205901, y = 110888) +p(x = 151817, y = 184549) +p(x = 155080, y = 159901) +p(x = 70857, y = 154469) +p(x = 164237, y = 86833) +p(x = 115000, y = 8617) +p(x = 67457, y = 45105) +p(x = 1689, y = 109637) +p(x = 26396, y = 20457) +p(x = 97045, y = 115553) +p(x = 56321, y = 127101) +p(x = 184568, y = 126425) +p(x = 11649, y = 27441) +p(x = 205880, y = 115653) +p(x = 108073, y = 44813) +p(x = 76108, y = 112741) +p(x = 23832, y = 156797) +p(x = 210153, y = 116913) +p(x = 122776, y = 208713) +p(x = 30401, y = 101485) +p(x = 31528, y = 29385) +p(x = 190097, y = 83145) +p(x = 77657, y = 162037) +p(x = 80044, y = 36177) +p(x = 59577, y = 3085) +p(x = 85609, y = 19973) +p(x = 45492, y = 115261) +p(x = 164569, y = 18613) +p(x = 165081, y = 186101) +p(x = 30936, y = 193961) +p(x = 161845, y = 169897) +p(x = 177533, y = 158500) +p(x = 15828, y = 22644) +p(x = 19717, y = 187128) +p(x = 212949, y = 49720) +p(x = 168952, y = 122696) +p(x = 103261, y = 175096) +p(x = 155209, y = 18180) +p(x = 54440, y = 12556) +p(x = 123345, y = 166944) +p(x = 126869, y = 69320) +p(x = 61328, y = 206052) +p(x = 61821, y = 42828) +p(x = 29948, y = 104840) +p(x = 361, y = 107460) +p(x = 112788, y = 93292) +p(x = 44984, y = 53216) +p(x = 59453, y = 191300) +p(x = 162952, y = 193144) +p(x = 161017, y = 207796) +p(x = 205424, y = 19540) +p(x = 48225, y = 106684) +p(x = 72033, y = 11388) +p(x = 17648, y = 51856) +p(x = 56957, y = 152968) +p(x = 129765, y = 208672) +p(x = 211428, y = 204984) +p(x = 56273, y = 3044) +p(x = 36217, y = 94360) +p(x = 109828, y = 3528) +p(x = 36669, y = 125800) +p(x = 204125, y = 60793) +p(x = 12432, y = 108145) +p(x = 129173, y = 30613) +p(x = 183645, y = 119401) +p(x = 112088, y = 64189) +p(x = 36401, y = 207029) +p(x = 95141, y = 25665) +p(x = 203880, y = 65349) +p(x = 53089, y = 43129) +p(x = 48461, y = 37697) +p(x = 0, y = 141) +p(x = 115581, y = 31289) +p(x = 24708, y = 203049) +p(x = 144561, y = 151233) +p(x = 117060, y = 127553) +p(x = 91664, y = 128137) +p(x = 117873, y = 84273) +p(x = 139468, y = 7517) +p(x = 144713, y = 212461) +p(x = 86740, y = 119985) +p(x = 30077, y = 34009) +p(x = 90757, y = 203533) +p(x = 2220, y = 171417) +p(x = 180973, y = 117173) +p(x = 35929, y = 183933) +p(x = 169216, y = 197809) +p(x = 45793, y = 188881) +p(x = 143445, y = 145601) +p(x = 130980, y = 16637) +p(x = 54717, y = 21393) +p(x = 13733, y = 17664) +p(x = 119560, y = 38040) +p(x = 197201, y = 135856) +p(x = 201985, y = 195632) +p(x = 114416, y = 135472) +p(x = 2049, y = 161964) +p(x = 173933, y = 176324) +p(x = 121592, y = 35228) +p(x = 143529, y = 182340) +p(x = 207897, y = 58516) +p(x = 20184, y = 14560) +p(x = 180789, y = 38332) +p(x = 160, y = 100344) +p(x = 25301, y = 23388) +p(x = 157328, y = 52892) +p(x = 1516, y = 130232) +p(x = 190557, y = 113344) +p(x = 131608, y = 80060) +p(x = 142193, y = 188164) +p(x = 72964, y = 166328) +p(x = 96261, y = 49880) +p(x = 58641, y = 16404) +p(x = 52000, y = 112860) +p(x = 116441, y = 211644) +p(x = 180029, y = 67836) +p(x = 105368, y = 82488) +p(x = 49573, y = 202816) +p(x = 59021, y = 53568) +p(x = 70236, y = 154104) +p(x = 71697, y = 5340) +p(x = 119701, y = 64641) +p(x = 170508, y = 23497) +p(x = 133637, y = 75413) +p(x = 184521, y = 201273) +p(x = 60656, y = 79293) +p(x = 202145, y = 201757) +p(x = 68649, y = 100929) +p(x = 200000, y = 6025) +p(x = 152357, y = 11657) +p(x = 62045, y = 90841) +p(x = 95288, y = 100153) +p(x = 99569, y = 194281) +p(x = 201124, y = 37081) +p(x = 170761, y = 153913) +p(x = 153932, y = 191277) +p(x = 184532, y = 56005) +p(x = 158917, y = 40669) +p(x = 125884, y = 136449) +p(x = 41949, y = 124609) +p(x = 114884, y = 149841) +p(x = 175445, y = 187197) +p(x = 9829, y = 160613) +p(x = 163108, y = 147513) +p(x = 156617, y = 214273) +p(x = 99877, y = 173129) +p(x = 126812, y = 184385) +p(x = 130893, y = 66385) +p(x = 165081, y = 54161) +p(x = 30936, y = 78417) +p(x = 127493, y = 82205) +p(x = 138041, y = 157176) +p(x = 117716, y = 1812) +p(x = 154989, y = 37332) +p(x = 207709, y = 50332) +p(x = 106264, y = 83908) +p(x = 193025, y = 11224) +p(x = 66221, y = 100504) +p(x = 118096, y = 37232) +p(x = 2725, y = 92936) +p(x = 21969, y = 139028) +p(x = 64432, y = 53728) +p(x = 45709, y = 59844) +p(x = 144529, y = 20252) +p(x = 111880, y = 78476) +p(x = 4077, y = 46260) +p(x = 37420, y = 48104) +p(x = 111857, y = 35680) +p(x = 83380, y = 66636) +p(x = 145885, y = 196668) +p(x = 193004, y = 110400) +p(x = 87529, y = 35872) +p(x = 13129, y = 77700) +p(x = 205424, y = 62756) +p(x = 81801, y = 153488) +p(x = 11965, y = 208024) +p(x = 188340, y = 192304) +p(x = 86069, y = 201132) +p(x = 209333, y = 45576) +p(x = 211428, y = 209476) +p(x = 210077, y = 212680) +p(x = 17293, y = 104192) +p(x = 51504, y = 103508) +p(x = 203089, y = 122432) +p(x = 61377, y = 116617) +p(x = 212236, y = 62665) +p(x = 81821, y = 110993) +p(x = 183645, y = 65477) +p(x = 24752, y = 41997) +p(x = 36401, y = 27053) +p(x = 95141, y = 150485) +p(x = 203880, y = 156501) +p(x = 159833, y = 150777) +p(x = 151517, y = 30741) +p(x = 39008, y = 115649) +p(x = 192821, y = 199881) +p(x = 152581, y = 32001) +p(x = 52688, y = 140781) +p(x = 193985, y = 20161) +p(x = 91664, y = 49465) +p(x = 191425, y = 127097) +p(x = 201480, y = 12493) +p(x = 30889, y = 203469) +p(x = 169908, y = 179789) +p(x = 100337, y = 24333) +p(x = 51461, y = 74113) +p(x = 129344, y = 14629) +p(x = 78989, y = 106621) +p(x = 157909, y = 190853) +p(x = 137492, y = 162617) +p(x = 59769, y = 113029) +p(x = 68437, y = 2697) +p(x = 211528, y = 32969) +p(x = 56173, y = 162325) +p(x = 43785, y = 60045) +p(x = 104196, y = 152137) +p(x = 134193, y = 68197) +p(x = 148421, y = 31084) +p(x = 68904, y = 69708) +p(x = 137617, y = 184020) +p(x = 201017, y = 184312) +p(x = 155752, y = 120656) +p(x = 110637, y = 210320) +p(x = 71269, y = 93388) +p(x = 20572, y = 77084) +p(x = 102677, y = 57576) +p(x = 177717, y = 81156) +p(x = 20860, y = 60588) +p(x = 54737, y = 43216) +p(x = 83685, y = 99596) +p(x = 166808, y = 140064) +p(x = 28825, y = 63400) +p(x = 165024, y = 80672) +p(x = 75177, y = 214008) +p(x = 171884, y = 161024) +p(x = 11389, y = 87080) +p(x = 87520, y = 1780) +p(x = 73845, y = 67572) +p(x = 124437, y = 91252) +p(x = 59472, y = 68056) +p(x = 31437, y = 193140) +p(x = 124433, y = 208376) +p(x = 46760, y = 66896) +p(x = 64817, y = 131036) +p(x = 64941, y = 48556) +p(x = 195708, y = 55056) +p(x = 6101, y = 99012) +p(x = 82793, y = 96784) +p(x = 128168, y = 79412) +p(x = 205901, y = 23616) +p(x = 151817, y = 185773) +p(x = 155080, y = 102225) +p(x = 70857, y = 83109) +p(x = 51185, y = 172481) +p(x = 115000, y = 172189) +p(x = 67457, y = 52053) +p(x = 40824, y = 196353) +p(x = 105073, y = 180825) +p(x = 203140, y = 59621) +p(x = 165885, y = 180049) +p(x = 173604, y = 1689) +p(x = 79293, y = 38177) +p(x = 80220, y = 7513) +p(x = 130009, y = 133857) +p(x = 115416, y = 27889) +p(x = 27889, y = 27889) +p(x = 47064, y = 122309) +p(x = 57845, y = 66513) +p(x = 75437, y = 93005) +p(x = 177092, y = 207609) +p(x = 185253, y = 72337) +p(x = 169077, y = 19353) +p(x = 108192, y = 36817) +p(x = 34841, y = 71269) +p(x = 18181, y = 35749) +p(x = 137692, y = 153557) +p(x = 57833, y = 118137) +p(x = 108932, y = 125321) +p(x = 182693, y = 18285) +p(x = 56984, y = 213625) +p(x = 115701, y = 181701) +p(x = 131572, y = 133473) +p(x = 71905, y = 10425) +p(x = 198085, y = 75733) +p(x = 143316, y = 79805) +p(x = 79953, y = 89509) +p(x = 202668, y = 42157) +p(x = 150953, y = 105813) +p(x = 6712, y = 63309) +p(x = 85905, y = 25561) +p(x = 81984, y = 63017) +p(x = 22017, y = 138905) +p(x = 131732, y = 30125) +p(x = 210341, y = 146181) +p(x = 12632, y = 95141) +p(x = 146453, y = 212265) +p(x = 45492, y = 74081) +p(x = 62581, y = 21197) +p(x = 75809, y = 127841) +p(x = 167660, y = 21873) +p(x = 42293, y = 155985) +p(x = 57981, y = 62492) +p(x = 117716, y = 88208) +p(x = 154989, y = 70352) +p(x = 207709, y = 52596) +p(x = 106264, y = 76368) +p(x = 81333, y = 98012) +p(x = 200552, y = 146532) +p(x = 24337, y = 133916) +p(x = 57872, y = 188160) +p(x = 75445, y = 147016) +p(x = 65408, y = 209604) +p(x = 185261, y = 54440) +p(x = 103900, y = 118096) +p(x = 190853, y = 126540) +p(x = 138120, y = 58612) +p(x = 180825, y = 151380) +p(x = 151380, y = 151380) +p(x = 63377, y = 8440) +p(x = 59909, y = 105872) +p(x = 49780, y = 194760) +p(x = 11457, y = 70744) +p(x = 133465, y = 88792) +p(x = 86556, y = 3884) +p(x = 117129, y = 155844) +p(x = 177809, y = 38620) +p(x = 181356, y = 200000) +p(x = 63757, y = 17468) +p(x = 20436, y = 160408) +p(x = 166681, y = 144588) +p(x = 174692, y = 122076) +p(x = 186541, y = 97912) +p(x = 146132, y = 204364) +p(x = 77529, y = 80448) +p(x = 206721, y = 156428) +p(x = 49572, y = 211548) +p(x = 93153, y = 176320) +p(x = 134064, y = 120040) +p(x = 82349, y = 137504) +p(x = 209328, y = 192524) +p(x = 204197, y = 78896) +p(x = 164464, y = 136728) +p(x = 6297, y = 148084) +p(x = 18196, y = 72680) +p(x = 43045, y = 140900) +p(x = 12340, y = 171080) +p(x = 197401, y = 20280) +p(x = 173196, y = 39788) +p(x = 91693, y = 121592) +p(x = 185949, y = 168268) +p(x = 54224, y = 55408) +p(x = 1249, y = 13296) +p(x = 104465, y = 14173) +p(x = 120920, y = 92681) +p(x = 76581, y = 30185) +p(x = 19745, y = 92197) +p(x = 113640, y = 51053) +p(x = 113549, y = 208353) +p(x = 49852, y = 93649) +p(x = 182121, y = 164489) +p(x = 211484, y = 132565) +p(x = 25665, y = 202821) +p(x = 168756, y = 53089) +p(x = 83465, y = 158181) +p(x = 130292, y = 86957) +p(x = 93913, y = 20097) +p(x = 155008, y = 23201) +p(x = 139681, y = 16701) +p(x = 173892, y = 110829) +p(x = 110829, y = 110829) +p(x = 4989, y = 154593) +p(x = 120228, y = 213977) +p(x = 166137, y = 193793) +p(x = 68641, y = 104421) +p(x = 81992, y = 40765) +p(x = 193985, y = 154785) +p(x = 30889, y = 182153) +p(x = 169908, y = 149837) +p(x = 34253, y = 7481) +p(x = 89624, y = 120141) +p(x = 134657, y = 14565) +p(x = 107056, y = 114225) +p(x = 144713, y = 198549) +p(x = 177280, y = 203789) +p(x = 186117, y = 15533) +p(x = 141997, y = 106073) +p(x = 2220, y = 43869) +p(x = 180973, y = 210389) +p(x = 144152, y = 8257) +p(x = 208501, y = 155661) +p(x = 196136, y = 63377) +p(x = 17201, y = 99573) +p(x = 172716, y = 97045) +p(x = 95577, y = 22133) +p(x = 55944, y = 83169) +p(x = 74969, y = 143821) +p(x = 45816, y = 94233) +p(x = 113361, y = 181085) +p(x = 4348, y = 66189) +p(x = 41521, y = 116453) +p(x = 176245, y = 186809) +p(x = 104196, y = 49401) +p(x = 134193, y = 152357) +p(x = 114361, y = 22384) +p(x = 147704, y = 24128) +p(x = 78325, y = 145624) +p(x = 177717, y = 174928) +p(x = 15328, y = 70128) +p(x = 128581, y = 181336) +p(x = 106973, y = 166584) +p(x = 480, y = 77988) +p(x = 118097, y = 203848) +p(x = 110365, y = 56252) +p(x = 115564, y = 25196) +p(x = 106937, y = 2492) +p(x = 5853, y = 111272) +p(x = 95960, y = 115736) +p(x = 116445, y = 13356) +p(x = 197397, y = 124080) +p(x = 154660, y = 62460) +p(x = 205901, y = 192008) +p(x = 151817, y = 15793) +p(x = 155080, y = 5213) +p(x = 70857, y = 97889) +p(x = 182665, y = 41801) +p(x = 82288, y = 211425) +p(x = 180889, y = 143789) +p(x = 128125, y = 196965) +p(x = 6596, y = 125833) +p(x = 107233, y = 125349) +p(x = 183633, y = 93809) +p(x = 142832, y = 40633) +p(x = 198253, y = 76345) +p(x = 179457, y = 202497) +p(x = 202220, y = 111181) +p(x = 137113, y = 82945) +p(x = 206225, y = 187745) +p(x = 30544, y = 178817) +p(x = 153601, y = 191725) +p(x = 59825, y = 136956) +p(x = 133828, y = 211576) +p(x = 144509, y = 64464) +p(x = 197317, y = 205268) +p(x = 170108, y = 67376) +p(x = 46585, y = 72424) +p(x = 66121, y = 47000) +p(x = 77044, y = 184408) +p(x = 9317, y = 122396) +p(x = 40693, y = 207696) +p(x = 81604, y = 99300) +p(x = 181365, y = 201872) +p(x = 145105, y = 199736) +p(x = 162628, y = 104932) +p(x = 80249, y = 126960) +p(x = 73965, y = 148888) +p(x = 124480, y = 54760) +p(x = 159133, y = 35160) +p(x = 208489, y = 51273) +p(x = 51924, y = 85725) +p(x = 62221, y = 177717) +p(x = 148348, y = 200621) +p(x = 202309, y = 160253) +p(x = 7412, y = 129681) +p(x = 15573, y = 83589) +p(x = 171088, y = 78057) +p(x = 120441, y = 56421) +p(x = 102836, y = 127937) +p(x = 32197, y = 211485) +p(x = 172768, y = 94845) +p(x = 119401, y = 3437) +p(x = 181756, y = 85625) +p(x = 122281, y = 125025) +p(x = 131844, y = 207897) +p(x = 58493, y = 140261) +p(x = 130844, y = 102705) +p(x = 131529, y = 7217) +p(x = 185348, y = 106493) +p(x = 161677, y = 35069) +p(x = 13356, y = 201397) +p(x = 178817, y = 12365) +p(x = 36420, y = 48461) +p(x = 48461, y = 48461) +p(x = 49296, y = 151517) +p(x = 115581, y = 169373) +p(x = 121840, y = 80777) +p(x = 137469, y = 206345) +p(x = 117636, y = 101445) +p(x = 44961, y = 5765) +p(x = 58312, y = 80193) +p(x = 43469, y = 178009) +p(x = 169288, y = 53701) +p(x = 201997, y = 197317) +p(x = 15836, y = 142881) +p(x = 127829, y = 207021) +p(x = 53552, y = 87277) +p(x = 184177, y = 150549) +p(x = 209560, y = 154913) +p(x = 133873, y = 63405) +p(x = 148000, y = 181213) +p(x = 68925, y = 111733) +p(x = 134384, y = 32741) +p(x = 35701, y = 20901) +p(x = 138908, y = 18765) +p(x = 152409, y = 64373) +p(x = 189048, y = 138225) +p(x = 187213, y = 116581) +p(x = 124968, y = 21969) +p(x = 41713, y = 59909) +p(x = 77192, y = 179369) +p(x = 154249, y = 15369) +p(x = 122668, y = 56321) +p(x = 116953, y = 182665) +p(x = 37628, y = 182181) +p(x = 209397, y = 118525) +p(x = 149005, y = 130324) +p(x = 151292, y = 173312) +p(x = 35729, y = 191068) +p(x = 13076, y = 131776) +p(x = 184069, y = 190192) +p(x = 6636, y = 92476) +p(x = 158029, y = 13776) +p(x = 206600, y = 206304) +p(x = 62117, y = 95288) +p(x = 121952, y = 85100) +p(x = 205993, y = 177092) +p(x = 160928, y = 56380) +p(x = 204601, y = 52108) +p(x = 17664, y = 155456) +p(x = 105493, y = 26200) +p(x = 6860, y = 147888) +p(x = 133113, y = 135272) +p(x = 93388, y = 9704) +p(x = 168209, y = 27168) +p(x = 192524, y = 14260) +p(x = 198649, y = 59192) +p(x = 51496, y = 65500) +p(x = 82945, y = 111300) +p(x = 171692, y = 20860) +p(x = 200621, y = 15328) +p(x = 15328, y = 15328) +p(x = 128581, y = 22028) +p(x = 79628, y = 56472) +p(x = 194725, y = 203584) +p(x = 41748, y = 129640) +p(x = 48065, y = 94128) +p(x = 52296, y = 149924) +p(x = 31437, y = 202032) +p(x = 90588, y = 18240) +p(x = 79149, y = 105284) +p(x = 173912, y = 208440) +p(x = 17497, y = 31824) +p(x = 24248, y = 39008) +p(x = 145845, y = 40752) +p(x = 38768, y = 211060) +p(x = 95641, y = 162924) +p(x = 6812, y = 140804) +p(x = 68049, y = 152736) +p(x = 145832, y = 144976) +p(x = 10569, y = 75788) +p(x = 188112, y = 213872) +p(x = 105341, y = 177192) +p(x = 166920, y = 138084) +p(x = 163533, y = 88496) +p(x = 158544, y = 182240) +p(x = 15221, y = 54920) +p(x = 18092, y = 52692) +p(x = 127657, y = 107904) +p(x = 166240, y = 170108) +p(x = 59021, y = 124208) +p(x = 70236, y = 78792) +p(x = 71697, y = 63172) +p(x = 86317, y = 155365) +p(x = 170508, y = 55413) +p(x = 133637, y = 142073) +p(x = 42380, y = 207281) +p(x = 42097, y = 213005) +p(x = 164036, y = 61821) +p(x = 184521, y = 49397) +p(x = 60656, y = 45709) +p(x = 202145, y = 11457) +p(x = 197740, y = 57549) +p(x = 150005, y = 164101) +p(x = 92032, y = 11649) +p(x = 142013, y = 123049) +p(x = 180496, y = 210869) +p(x = 177593, y = 33777) +p(x = 48104, y = 185061) +p(x = 144277, y = 120429) +p(x = 107648, y = 180889) +p(x = 66513, y = 196217) +p(x = 15624, y = 105585) +p(x = 186809, y = 94713) +p(x = 13164, y = 5149) +p(x = 109437, y = 37949) +p(x = 10412, y = 99569) +p(x = 75437, y = 8837) +p(x = 177092, y = 101313) +p(x = 101313, y = 101313) +p(x = 22472, y = 210193) +p(x = 182693, y = 128581) +p(x = 133256, y = 170601) +p(x = 119097, y = 199421) +p(x = 117504, y = 179045) +p(x = 84421, y = 51241) +p(x = 76520, y = 73077) +p(x = 1709, y = 117617) +p(x = 64356, y = 128873) +p(x = 196725, y = 118877) +p(x = 15996, y = 4373) +p(x = 201641, y = 180789) +p(x = 164144, y = 95881) +p(x = 90985, y = 177977) +p(x = 144896, y = 188065) +p(x = 37969, y = 93937) +p(x = 193576, y = 199713) +p(x = 23861, y = 90933) +p(x = 111740, y = 107037) +p(x = 63905, y = 16405) +p(x = 180120, y = 136833) +p(x = 86093, y = 115581) +p(x = 98476, y = 187581) +p(x = 1153, y = 166137) +p(x = 2664, y = 8253) +p(x = 144737, y = 207473) +p(x = 36400, y = 62981) +p(x = 102393, y = 205245) +p(x = 114192, y = 64049) +p(x = 51029, y = 89089) +p(x = 60893, y = 86136) +p(x = 188848, y = 177160) +p(x = 120153, y = 106320) +p(x = 212461, y = 57508) +p(x = 99660, y = 88948) +p(x = 167597, y = 39360) +p(x = 103900, y = 134656) +p(x = 192505, y = 212964) +p(x = 82324, y = 19276) +p(x = 59909, y = 200448) +p(x = 49780, y = 183660) +p(x = 11457, y = 133104) +p(x = 44761, y = 185796) +p(x = 26764, y = 6660) +p(x = 74033, y = 45668) +p(x = 140752, y = 113404) +p(x = 196365, y = 94288) +p(x = 195648, y = 123784) +p(x = 64937, y = 70608) +p(x = 177948, y = 99912) +p(x = 54233, y = 7436) +p(x = 121929, y = 44317) +p(x = 102872, y = 16757) +p(x = 67553, y = 114965) +p(x = 112709, y = 147081) +p(x = 113344, y = 150769) +p(x = 61629, y = 99729) +p(x = 63048, y = 111953) +p(x = 206573, y = 50433) +p(x = 107164, y = 167173) +p(x = 97565, y = 62273) +p(x = 140804, y = 15305) +p(x = 60945, y = 131653) +p(x = 17201, y = 191913) +p(x = 173492, y = 105161) +p(x = 151373, y = 70425) +p(x = 93984, y = 61205) +p(x = 131541, y = 197545) +p(x = 171384, y = 171637) +p(x = 200209, y = 126805) +p(x = 37628, y = 200749) +p(x = 186593, y = 25685) +p(x = 149005, y = 76108) +p(x = 159152, y = 78920) +p(x = 119469, y = 194300) +p(x = 204601, y = 51360) +p(x = 17664, y = 209728) +p(x = 56973, y = 90760) +p(x = 107004, y = 143644) +p(x = 133113, y = 52428) +p(x = 93388, y = 81540) +p(x = 198385, y = 166356) +p(x = 74036, y = 61456) +p(x = 143233, y = 192456) +p(x = 18753, y = 136952) +p(x = 145832, y = 93572) +p(x = 124881, y = 74940) +p(x = 93592, y = 97360) +p(x = 146877, y = 63200) +p(x = 56104, y = 86296) +p(x = 82793, y = 29724) +p(x = 128168, y = 49616) +p(x = 202605, y = 78144) +p(x = 109897, y = 94457) +p(x = 38240, y = 212357) +p(x = 63673, y = 101149) +p(x = 163392, y = 33513) +p(x = 138653, y = 38561) +p(x = 203436, y = 41373) +p(x = 59844, y = 164905) +p(x = 130009, y = 144529) +p(x = 140156, y = 181109) +p(x = 9476, y = 80481) +p(x = 211425, y = 154425) +p(x = 23804, y = 48165) +p(x = 39633, y = 100765) +p(x = 92476, y = 109785) +p(x = 37949, y = 128125) +p(x = 168401, y = 168401) +p(x = 141868, y = 74273) +p(x = 208445, y = 190137) +p(x = 191808, y = 116093) +p(x = 202973, y = 76893) +p(x = 34476, y = 136669) +p(x = 183633, y = 169077) +p(x = 142832, y = 180917) +p(x = 198253, y = 209545) +p(x = 55948, y = 110469) +p(x = 202101, y = 30601) +p(x = 142284, y = 111921) +p(x = 214001, y = 65053) +p(x = 129536, y = 207117) +p(x = 43277, y = 124729) +p(x = 65748, y = 98629) +p(x = 148921, y = 42149) +p(x = 183424, y = 50401) +p(x = 32825, y = 200517) +p(x = 56364, y = 70777) +p(x = 9405, y = 83685) +p(x = 29356, y = 2657) +p(x = 69149, y = 135501) +p(x = 118404, y = 98821) +p(x = 212760, y = 112989) +p(x = 161721, y = 106973) +p(x = 72308, y = 157237) +p(x = 157613, y = 92321) +p(x = 46556, y = 84945) +p(x = 2509, y = 6637) +p(x = 140853, y = 181460) +p(x = 150516, y = 43660) +p(x = 7393, y = 128960) +p(x = 10264, y = 23092) +p(x = 191637, y = 29592) +p(x = 112604, y = 111204) +p(x = 150868, y = 25904) +p(x = 46653, y = 127216) +p(x = 204980, y = 105672) +p(x = 72940, y = 87524) +p(x = 156497, y = 82768) +p(x = 131132, y = 213576) +p(x = 206345, y = 137696) +p(x = 138084, y = 139540) +p(x = 137609, y = 109260) +p(x = 18861, y = 131772) +p(x = 131772, y = 131772) +p(x = 5245, y = 38036) +p(x = 153476, y = 122844) +p(x = 39657, y = 196596) +p(x = 162856, y = 46672) +p(x = 106001, y = 195336) +p(x = 26676, y = 21732) +p(x = 116833, y = 84712) +p(x = 135424, y = 65204) +p(x = 100013, y = 19696) +p(x = 131120, y = 113048) +p(x = 61649, y = 7080) +p(x = 95768, y = 49000) +p(x = 40173, y = 52396) +p(x = 152792, y = 191548) +p(x = 105933, y = 20180) +p(x = 36412, y = 88884) +p(x = 168781, y = 123720) +p(x = 120704, y = 111880) +p(x = 42305, y = 8340) +p(x = 38184, y = 185924) +p(x = 104761, y = 86556) +p(x = 47564, y = 26196) +p(x = 14508, y = 49484) +p(x = 130865, y = 118288) +p(x = 212528, y = 18920) +p(x = 8073, y = 37744) +p(x = 155336, y = 76076) +p(x = 171941, y = 174084) +p(x = 19749, y = 112857) +p(x = 65124, y = 114509) +p(x = 94045, y = 58713) +p(x = 27728, y = 139349) +p(x = 20845, y = 34841) +p(x = 126872, y = 27949) +p(x = 104192, y = 46873) +p(x = 75473, y = 214069) +p(x = 68832, y = 116837) +p(x = 89828, y = 102085) +p(x = 43061, y = 20189) +p(x = 181204, y = 76953) +p(x = 3437, y = 115285) +p(x = 143616, y = 118097) +p(x = 118877, y = 172633) +p(x = 57485, y = 57161) +p(x = 181460, y = 140417) +p(x = 140417, y = 140417) +p(x = 180552, y = 110045) +p(x = 35585, y = 6989) +p(x = 128020, y = 18345) +p(x = 168981, y = 85205) +p(x = 214156, y = 2333) +p(x = 95873, y = 155461) +p(x = 18492, y = 187577) +p(x = 184145, y = 84329) +p(x = 177020, y = 167009) +p(x = 121909, y = 91605) +p(x = 157972, y = 54249) +p(x = 96261, y = 5729) +p(x = 168804, y = 168753) +p(x = 97005, y = 18729) +p(x = 103656, y = 193985) +p(x = 104925, y = 16693) +p(x = 69464, y = 78797) +p(x = 157585, y = 100633) +p(x = 156768, y = 113925) +p(x = 44209, y = 199417) +p(x = 104044, y = 36293) +p(x = 165500, y = 88017) +p(x = 158717, y = 78121) +p(x = 160128, y = 17569) +p(x = 65521, y = 193109) +p(x = 83820, y = 146141) +p(x = 42393, y = 13881) +p(x = 141629, y = 198700) +p(x = 209708, y = 15000) +p(x = 33885, y = 41492) +p(x = 137676, y = 59932) +p(x = 109733, y = 175020) +p(x = 28472, y = 142220) +p(x = 12761, y = 4136) +p(x = 154784, y = 203356) +p(x = 111805, y = 203648) +p(x = 36460, y = 71964) +p(x = 100609, y = 173952) +p(x = 92032, y = 69152) +p(x = 68649, y = 28008) +p(x = 200000, y = 129704) +p(x = 203013, y = 22768) +p(x = 200544, y = 200544) +p(x = 72749, y = 186860) +p(x = 75812, y = 18788) +p(x = 28853, y = 50228) +p(x = 149532, y = 207044) +p(x = 84033, y = 39748) +p(x = 17816, y = 117672) +p(x = 187641, y = 94476) +p(x = 18652, y = 83612) +p(x = 77469, y = 170848) +p(x = 199116, y = 177832) +p(x = 93057, y = 189772) +p(x = 70504, y = 165024) +p(x = 47317, y = 98456) +p(x = 86868, y = 50520) +p(x = 208976, y = 101076) +p(x = 75457, y = 148628) +p(x = 6712, y = 144164) +p(x = 85609, y = 180552) +p(x = 45492, y = 182688) +p(x = 62581, y = 107384) +p(x = 104629, y = 107868) +p(x = 167660, y = 151248) +p(x = 42293, y = 204232) +p(x = 57981, y = 125733) +p(x = 117716, y = 213745) +p(x = 154989, y = 143297) +p(x = 111184, y = 196181) +p(x = 153113, y = 94485) +p(x = 197128, y = 55477) +p(x = 34397, y = 120685) +p(x = 97144, y = 38297) +p(x = 23301, y = 210933) +p(x = 64504, y = 191425) +p(x = 208229, y = 170465) +p(x = 189748, y = 176773) +p(x = 155209, y = 39657) +p(x = 54440, y = 11905) +p(x = 123345, y = 66149) +p(x = 203356, y = 97297) +p(x = 97297, y = 97297) +p(x = 98324, y = 102829) +p(x = 117741, y = 85657) +p(x = 23764, y = 101669) +p(x = 136241, y = 144657) +p(x = 6268, y = 80801) +p(x = 185213, y = 82645) +p(x = 28748, y = 185801) +p(x = 168393, y = 178909) +p(x = 20656, y = 205985) +p(x = 56569, y = 133009) +p(x = 204808, y = 183957) +p(x = 185117, y = 125925) +p(x = 199144, y = 121945) +p(x = 193448, y = 148437) +p(x = 199765, y = 82353) +p(x = 168476, y = 202973) +p(x = 71249, y = 72749) +p(x = 105560, y = 132525) +p(x = 190285, y = 114961) +p(x = 36217, y = 65373) +p(x = 131564, y = 47033) +p(x = 94209, y = 26557) +p(x = 61377, y = 160720) +p(x = 212236, y = 101236) +p(x = 81821, y = 77756) +p(x = 178044, y = 188380) +p(x = 100129, y = 171884) +p(x = 95916, y = 2936) +p(x = 183645, y = 97064) +p(x = 24752, y = 109872) +p(x = 194093, y = 126368) +p(x = 112832, y = 107060) +p(x = 136129, y = 17204) +p(x = 102896, y = 30396) +p(x = 95141, y = 131608) +p(x = 82192, y = 186536) +p(x = 202529, y = 128020) +p(x = 91664, y = 12740) +p(x = 191425, y = 84064) +p(x = 84064, y = 84064) +p(x = 61945, y = 139468) +p(x = 182716, y = 201480) +p(x = 13877, y = 115888) +p(x = 38484, y = 84840) +p(x = 134465, y = 80376) +p(x = 122100, y = 124916) +p(x = 44961, y = 125208) +p(x = 25804, y = 180128) +p(x = 162053, y = 19824) +p(x = 169288, y = 163148) +p(x = 201997, y = 42044) +p(x = 11372, y = 70572) +p(x = 5676, y = 162856) +p(x = 92829, y = 1092) +p(x = 75416, y = 75036) +p(x = 95897, y = 174504) +p(x = 6192, y = 68728) +p(x = 41713, y = 208272) +p(x = 112005, y = 99492) +p(x = 45004, y = 142380) +p(x = 29001, y = 131416) +p(x = 71181, y = 83681) +p(x = 20776, y = 186445) +p(x = 100745, y = 145885) +p(x = 140000, y = 65925) +p(x = 206577, y = 51173) +p(x = 193144, y = 197217) +p(x = 62756, y = 168689) +p(x = 9389, y = 54569) +p(x = 120656, y = 25265) +p(x = 81165, y = 186545) +p(x = 30760, y = 183633) +p(x = 117329, y = 30697) +p(x = 198800, y = 206821) +p(x = 76345, y = 50105) +p(x = 96488, y = 73977) +p(x = 45649, y = 7017) +p(x = 9704, y = 198869) +p(x = 75989, y = 136665) +p(x = 6660, y = 97657) +p(x = 26461, y = 122981) +p(x = 134716, y = 28853) +p(x = 207044, y = 6925) +p(x = 197249, y = 163157) +p(x = 18364, y = 172377) +p(x = 172377, y = 172377) +p(x = 89848, y = 56897) +p(x = 118777, y = 69221) +p(x = 119097, y = 198285) +p(x = 117504, y = 101053) +p(x = 149245, y = 11389) +p(x = 76520, y = 211869) +p(x = 1709, y = 2845) +p(x = 186236, y = 200029) +p(x = 64096, y = 96489) +p(x = 94085, y = 148505) +p(x = 208064, y = 14685) +p(x = 146453, y = 195181) +p(x = 76156, y = 118517) +p(x = 62581, y = 168981) +p(x = 162392, y = 68637) +p(x = 75841, y = 42537) +p(x = 197780, y = 124533) +p(x = 107441, y = 180621) +p(x = 95660, y = 174997) +p(x = 144573, y = 204493) +p(x = 14025, y = 110716) +p(x = 184384, y = 211344) +p(x = 12049, y = 182816) +p(x = 75176, y = 169908) +p(x = 88769, y = 197368) +p(x = 57872, y = 152052) +p(x = 103900, y = 181748) +p(x = 5509, y = 211928) +p(x = 152772, y = 26676) +p(x = 168309, y = 181164) +p(x = 182336, y = 4748) +p(x = 55417, y = 88588) +p(x = 140092, y = 81604) +p(x = 203857, y = 185436) +p(x = 86784, y = 184852) +p(x = 59909, y = 65008) +p(x = 49780, y = 170876) +p(x = 164101, y = 175732) +p(x = 205880, y = 190384) +p(x = 108073, y = 88688) +p(x = 138020, y = 204068) +p(x = 30044, y = 181356) +p(x = 75661, y = 36088) +p(x = 161404, y = 123424) +p(x = 197217, y = 98876) +p(x = 98876, y = 98876) +p(x = 40077, y = 114112) +p(x = 46997, y = 172720) +p(x = 141276, y = 67044) +p(x = 71221, y = 15812) +p(x = 195780, y = 91500) +p(x = 33441, y = 169324) +p(x = 88812, y = 142832) +p(x = 170932, y = 149532) +p(x = 87001, y = 166704) +p(x = 179536, y = 37448) +p(x = 121029, y = 144484) +p(x = 202308, y = 76848) +p(x = 118185, y = 177576) +p(x = 120080, y = 128664) +p(x = 157061, y = 105084) +p(x = 110828, y = 84416) +p(x = 85605, y = 32792) +p(x = 39864, y = 64232) +p(x = 144381, y = 46084) +p(x = 83505, y = 138669) +p(x = 162356, y = 99369) +p(x = 67553, y = 102181) +p(x = 72556, y = 180297) +p(x = 22009, y = 119553) +p(x = 13524, y = 121689) +p(x = 195116, y = 42889) +p(x = 41121, y = 175641) +p(x = 193140, y = 189225) +p(x = 21197, y = 74329) +p(x = 163220, y = 126053) +p(x = 214369, y = 137893) +p(x = 47224, y = 203493) +p(x = 191725, y = 73069) +p(x = 136956, y = 95873) +p(x = 169373, y = 75397) +p(x = 64140, y = 75013) +p(x = 192821, y = 98009) +p(x = 84484, y = 72585) +p(x = 68481, y = 213681) +p(x = 113372, y = 63849) +p(x = 16168, y = 151961) +p(x = 170465, y = 43181) +p(x = 80376, y = 100337) +p(x = 21577, y = 34253) +p(x = 170976, y = 61037) +p(x = 61037, y = 61037) +p(x = 51461, y = 66861) +p(x = 163888, y = 150509) +p(x = 166033, y = 16789) +p(x = 145224, y = 56381) +p(x = 199769, y = 60745) +p(x = 119768, y = 34737) +p(x = 146384, y = 210961) +p(x = 75069, y = 136241) +p(x = 174780, y = 148273) +p(x = 35929, y = 164385) +p(x = 169216, y = 87529) +p(x = 45793, y = 29889) +p(x = 27120, y = 43281) +p(x = 152405, y = 174765) +p(x = 179824, y = 33185) +p(x = 19913, y = 111209) +p(x = 78772, y = 128673) +p(x = 156997, y = 124017) +p(x = 156281, y = 26644) +p(x = 94428, y = 115048) +p(x = 96473, y = 64976) +p(x = 128456, y = 23832) +p(x = 208909, y = 150952) +p(x = 190044, y = 47412) +p(x = 125321, y = 76424) +p(x = 34932, y = 82732) +p(x = 10393, y = 23732) +p(x = 211485, y = 211988) +p(x = 175540, y = 159396) +p(x = 73077, y = 88556) +p(x = 55180, y = 214316) +p(x = 102349, y = 200248) +p(x = 213416, y = 64392) +p(x = 132493, y = 41296) +p(x = 114012, y = 63132) +p(x = 175641, y = 126888) +p(x = 126888, y = 126888) +p(x = 130677, y = 41588) +p(x = 197888, y = 70892) +p(x = 106116, y = 213156) +p(x = 190741, y = 111944) +p(x = 110548, y = 140280) +p(x = 126296, y = 35280) +p(x = 179481, y = 4032) +p(x = 59404, y = 185888) +p(x = 150748, y = 141248) +p(x = 52457, y = 169100) +p(x = 45140, y = 194040) +p(x = 59021, y = 91076) +p(x = 194928, y = 174824) +p(x = 9885, y = 170552) +p(x = 72733, y = 137277) +p(x = 173320, y = 100013) +p(x = 50381, y = 211705) +p(x = 196092, y = 168041) +p(x = 209101, y = 24709) +p(x = 28472, y = 103217) +p(x = 165589, y = 67605) +p(x = 17468, y = 111853) +p(x = 43193, y = 132229) +p(x = 110081, y = 87105) +p(x = 209116, y = 173373) +p(x = 21837, y = 210153) +p(x = 15004, y = 110977) +p(x = 80321, y = 184829) +p(x = 168584, y = 56057) +p(x = 28853, y = 125437) +p(x = 161172, y = 35289) +p(x = 142649, y = 118061) +p(x = 17816, y = 187641) +p(x = 187641, y = 187641) +p(x = 174400, y = 182693) +p(x = 70504, y = 149893) +p(x = 47317, y = 132521) +p(x = 86868, y = 205689) +p(x = 161332, y = 89533) +p(x = 75457, y = 79537) +p(x = 6712, y = 208893) +p(x = 123580, y = 94097) +p(x = 94085, y = 176385) +p(x = 153528, y = 155809) +p(x = 175077, y = 198313) +p(x = 167660, y = 67021) +p(x = 58789, y = 87205) +p(x = 57981, y = 108608) +p(x = 117716, y = 10500) +p(x = 154989, y = 29132) +p(x = 60236, y = 89592) +p(x = 153113, y = 166640) +p(x = 197128, y = 119964) +p(x = 182861, y = 13028) +p(x = 118096, y = 199924) +p(x = 2725, y = 91144) +p(x = 59909, y = 24284) +p(x = 136048, y = 94732) +p(x = 37557, y = 166832) +p(x = 205880, y = 69792) +p(x = 108073, y = 81732) +p(x = 138020, y = 43400) +p(x = 24681, y = 150528) +p(x = 114112, y = 128500) +p(x = 128673, y = 83476) +p(x = 26644, y = 68724) +p(x = 167649, y = 104244) +p(x = 104244, y = 104244) +p(x = 168904, y = 87356) +p(x = 194429, y = 149268) +p(x = 39224, y = 113072) +p(x = 108348, y = 45436) +p(x = 113789, y = 36992) +p(x = 122092, y = 163244) +p(x = 76420, y = 142284) +p(x = 60509, y = 116468) +p(x = 76964, y = 172948) +p(x = 172265, y = 118604) +p(x = 177948, y = 34180) +p(x = 54233, y = 105796) +p(x = 83505, y = 88141) +p(x = 102872, y = 15457) +p(x = 67553, y = 40397) +p(x = 133696, y = 107257) +p(x = 129533, y = 39621) +p(x = 73888, y = 156845) +p(x = 139689, y = 133557) +p(x = 153232, y = 11577) +p(x = 79389, y = 182369) +p(x = 66832, y = 101633) +p(x = 138941, y = 45253) +p(x = 45448, y = 15073) +p(x = 144825, y = 76401) +p(x = 52892, y = 85329) +p(x = 173129, y = 200901) +p(x = 195116, y = 124437) +p(x = 41121, y = 199349) +p(x = 169660, y = 5853) +p(x = 74081, y = 20697) +p(x = 59580, y = 170045) +p(x = 86957, y = 38069) +p(x = 47808, y = 124529) +p(x = 109337, y = 99981) +p(x = 101436, y = 142193) +p(x = 159669, y = 70869) +p(x = 211060, y = 148209) +p(x = 62981, y = 164997) +p(x = 186664, y = 208761) +p(x = 134657, y = 49909) +p(x = 107056, y = 144713) +p(x = 147525, y = 51269) +p(x = 25312, y = 204005) +p(x = 169713, y = 201193) +p(x = 93984, y = 104253) +p(x = 131541, y = 10317) +p(x = 45816, y = 146849) +p(x = 80173, y = 139089) +p(x = 113124, y = 13129) +p(x = 38413, y = 55049) +p(x = 114361, y = 192708) +p(x = 147704, y = 205424) +p(x = 78325, y = 207944) +p(x = 128456, y = 19980) +p(x = 132245, y = 80340) +p(x = 91352, y = 102852) +p(x = 34105, y = 141276) +p(x = 121692, y = 40164) +p(x = 142369, y = 81600) +p(x = 153976, y = 134584) +p(x = 116913, y = 210756) +p(x = 152000, y = 167868) +p(x = 83981, y = 31528) +p(x = 139352, y = 102268) +p(x = 136449, y = 41524) +p(x = 62656, y = 148944) +p(x = 56357, y = 125556) +p(x = 77084, y = 146424) +p(x = 185289, y = 173300) +p(x = 136728, y = 211632) +p(x = 101609, y = 114884) +p(x = 174928, y = 32596) +p(x = 37821, y = 199116) +p(x = 137632, y = 131572) +p(x = 198385, y = 175436) +p(x = 29304, y = 174468) +p(x = 81905, y = 2124) +p(x = 126888, y = 163988) +p(x = 130677, y = 109644) +p(x = 136360, y = 97804) +p(x = 413, y = 26188) +p(x = 178340, y = 136912) +p(x = 212801, y = 38220) +p(x = 174428, y = 169904) +p(x = 40909, y = 201736) +p(x = 186620, y = 44820) +p(x = 59021, y = 111972) +p(x = 194928, y = 129344) +p(x = 139625, y = 47056) +p(x = 16937, y = 136045) +p(x = 116748, y = 75301) +p(x = 132377, y = 124205) +p(x = 172412, y = 36193) +p(x = 42097, y = 125565) +p(x = 38176, y = 116737) +p(x = 184521, y = 198149) +p(x = 60656, y = 16785) +p(x = 202145, y = 101793) +p(x = 130104, y = 147885) +p(x = 126425, y = 80249) +p(x = 133176, y = 166709) +p(x = 125417, y = 107809) +p(x = 74528, y = 33381) +p(x = 19125, y = 41917) +p(x = 35872, y = 199025) +p(x = 152137, y = 56569) +p(x = 184020, y = 51037) +p(x = 80873, y = 154869) +p(x = 97912, y = 48225) +p(x = 196513, y = 104897) +p(x = 100792, y = 77529) +p(x = 151065, y = 49101) +p(x = 7308, y = 71221) +p(x = 130365, y = 162537) +p(x = 187572, y = 187285) +p(x = 20677, y = 207853) +p(x = 76424, y = 145073) +p(x = 104185, y = 156813) +p(x = 133256, y = 93057) +p(x = 171297, y = 152249) +p(x = 101876, y = 84613) +p(x = 133709, y = 166417) +p(x = 123580, y = 202421) +p(x = 131833, y = 130321) +p(x = 77256, y = 31437) +p(x = 75809, y = 31145) +p(x = 167660, y = 122753) +p(x = 42293, y = 40073) +p(x = 57981, y = 106116) +p(x = 117716, y = 6072) +p(x = 154989, y = 182488) +p(x = 59909, y = 165992) +p(x = 136048, y = 125332) +p(x = 37557, y = 38480) +p(x = 205880, y = 151340) +p(x = 27337, y = 77396) +p(x = 138020, y = 85156) +p(x = 30044, y = 58664) +p(x = 178909, y = 170940) +p(x = 161404, y = 70796) +p(x = 58956, y = 58956) +p(x = 194429, y = 195780) +p(x = 56688, y = 135328) +p(x = 202476, y = 17520) +p(x = 82349, y = 2868) +p(x = 209328, y = 129504) +p(x = 46505, y = 211208) +p(x = 116044, y = 23536) +p(x = 151665, y = 139500) +p(x = 167440, y = 194328) +p(x = 124845, y = 76520) +p(x = 188268, y = 192968) +p(x = 185949, y = 155996) +p(x = 54224, y = 126692) +p(x = 1249, y = 146968) +p(x = 127461, y = 167745) +p(x = 21068, y = 178125) +p(x = 76581, y = 13741) +p(x = 177133, y = 122429) +p(x = 75788, y = 172501) +p(x = 178753, y = 138049) +p(x = 141932, y = 88269) +p(x = 13461, y = 214713) +p(x = 101824, y = 123105) +p(x = 62360, y = 2485) +p(x = 23745, y = 73809) +p(x = 163148, y = 201997) +p(x = 203256, y = 211609) +p(x = 211609, y = 211609) +p(x = 50672, y = 197049) +p(x = 76224, y = 105933) +p(x = 131253, y = 95937) +p(x = 47856, y = 123981) +p(x = 41849, y = 5981) +p(x = 145540, y = 163573) +p(x = 175053, y = 127569) +p(x = 27120, y = 134169) +p(x = 152405, y = 68961) +p(x = 67648, y = 185117) +p(x = 76777, y = 44313) +p(x = 78772, y = 18013) +p(x = 156997, y = 8501) +p(x = 156281, y = 93660) +p(x = 153912, y = 183132) +p(x = 78325, y = 134420) +p(x = 83589, y = 203800) +p(x = 29304, y = 148004) +p(x = 81905, y = 86868) +p(x = 38976, y = 28452) +p(x = 16757, y = 154120) +p(x = 154808, y = 142280) +p(x = 33440, y = 88036) +p(x = 142037, y = 160812) +p(x = 30396, y = 57564) +p(x = 75160, y = 30488) +p(x = 116897, y = 52032) +p(x = 52032, y = 52032) +p(x = 1604, y = 36020) +p(x = 128441, y = 209916) +p(x = 47956, y = 54168) +p(x = 6721, y = 103656) +p(x = 81400, y = 118308) +p(x = 10569, y = 20400) +p(x = 3248, y = 52516) +p(x = 34697, y = 66684) +p(x = 105204, y = 107152) +p(x = 10501, y = 147420) +p(x = 196388, y = 15836) +p(x = 205901, y = 211468) +p(x = 151817, y = 130157) +p(x = 155080, y = 92117) +p(x = 70857, y = 177417) +p(x = 65837, y = 141997) +p(x = 63468, y = 90757) +p(x = 91229, y = 78433) +p(x = 9968, y = 145293) +p(x = 198425, y = 209925) +p(x = 166068, y = 154321) +p(x = 160937, y = 181589) +p(x = 33484, y = 168781) +p(x = 164493, y = 133261) +p(x = 91476, y = 99785) +p(x = 130009, y = 150049) +p(x = 140156, y = 73193) +p(x = 183929, y = 150925) +p(x = 25136, y = 33701) +p(x = 96561, y = 12349) +p(x = 113285, y = 166937) +p(x = 173312, y = 179937) +p(x = 105585, y = 182073) +p(x = 171021, y = 2937) +p(x = 18920, y = 30013) +p(x = 10485, y = 48161) +p(x = 57312, y = 152669) +p(x = 148437, y = 140829) +p(x = 34476, y = 168389) +p(x = 23248, y = 206721) +p(x = 205981, y = 130641) +p(x = 163244, y = 114337) +p(x = 117545, y = 8469) +p(x = 102268, y = 49129) +p(x = 80925, y = 36029) +p(x = 40608, y = 9829) +p(x = 92049, y = 198085) +p(x = 2344, y = 121329) +p(x = 188665, y = 132969) +p(x = 23656, y = 185953) +p(x = 159521, y = 138017) +p(x = 76485, y = 152769) +p(x = 63344, y = 21377) +p(x = 82469, y = 124141) +p(x = 52065, y = 203476) +p(x = 185744, y = 151852) +p(x = 93661, y = 171360) +p(x = 191505, y = 167380) +p(x = 39212, y = 172328) +p(x = 75901, y = 24248) +p(x = 214428, y = 119636) +p(x = 82369, y = 46760) +p(x = 187128, y = 190084) +p(x = 203049, y = 10856) +p(x = 166328, y = 64908) +p(x = 121797, y = 107504) +p(x = 1812, y = 152920) +p(x = 6477, y = 93144) +p(x = 41564, y = 16580) +p(x = 21097, y = 174948) +p(x = 119264, y = 57724) +p(x = 200201, y = 37732) +p(x = 68937, y = 201632) +p(x = 75788, y = 204836) +p(x = 11065, y = 69464) +p(x = 18861, y = 145836) +p(x = 131772, y = 116532) +p(x = 5245, y = 107896) +p(x = 172692, y = 81404) +p(x = 39657, y = 43072) +p(x = 204292, y = 73444) +p(x = 174824, y = 90716) +p(x = 137277, y = 2220) +p(x = 91144, y = 83632) +p(x = 27589, y = 186012) +p(x = 95768, y = 157676) +p(x = 40173, y = 179220) +p(x = 52256, y = 568) +p(x = 204809, y = 91884) +p(x = 119176, y = 152144) +p(x = 14093, y = 205904) +p(x = 7552, y = 175140) +p(x = 150401, y = 134388) +p(x = 8073, y = 188340) +p(x = 155336, y = 17648) +p(x = 171941, y = 172620) +p(x = 140369, y = 56957) +p(x = 65124, y = 52009) +p(x = 161681, y = 178161) +p(x = 43425, y = 51617) +p(x = 138288, y = 112561) +p(x = 165273, y = 197761) +p(x = 181144, y = 113337) +p(x = 949, y = 141965) +p(x = 208672, y = 189801) +p(x = 121245, y = 52201) +p(x = 111792, y = 59577) +p(x = 124609, y = 9405) +p(x = 165520, y = 76657) +p(x = 45393, y = 142057) +p(x = 99596, y = 168457) +p(x = 51569, y = 117801) +p(x = 39788, y = 19209) +p(x = 111505, y = 1837) +p(x = 94845, y = 79953) +p(x = 81996, y = 145745) +p(x = 117617, y = 184661) +p(x = 205565, y = 60645) +p(x = 126148, y = 4557) +p(x = 209413, y = 158169) +p(x = 23544, y = 107513) +p(x = 190557, y = 173597) +p(x = 131608, y = 15813) +p(x = 29748, y = 213965) +p(x = 29565, y = 162925) +p(x = 136360, y = 119353) +p(x = 124529, y = 145845) +p(x = 54816, y = 10865) +p(x = 122753, y = 64817) +p(x = 32264, y = 198729) +p(x = 36737, y = 171269) +p(x = 54160, y = 3781) +p(x = 77073, y = 121781) +p(x = 85668, y = 201933) +p(x = 116433, y = 95289) +p(x = 175561, y = 198829) +p(x = 194928, y = 189417) +p(x = 139625, y = 18433) +p(x = 21009, y = 42264) +p(x = 100544, y = 14704) +p(x = 167797, y = 206840) +p(x = 72921, y = 191220) +p(x = 60656, y = 54588) +p(x = 111805, y = 129500) +p(x = 101741, y = 62448) +p(x = 105580, y = 33336) +p(x = 152357, y = 85152) +p(x = 75437, y = 175208) +p(x = 177092, y = 50608) +p(x = 21837, y = 136392) +p(x = 99136, y = 91752) +p(x = 80321, y = 138528) +p(x = 209728, y = 108348) +p(x = 169077, y = 208100) +p(x = 108192, y = 65452) +p(x = 34841, y = 49732) +p(x = 161332, y = 161332) +p(x = 150953, y = 208976) +p(x = 6712, y = 182192) +p(x = 85609, y = 139304) +p(x = 45492, y = 180348) +p(x = 164569, y = 46920) +p(x = 165081, y = 67688) +p(x = 30936, y = 70016) +p(x = 161845, y = 100872) +p(x = 138041, y = 148141) +p(x = 117716, y = 158621) +p(x = 154989, y = 105345) +p(x = 207709, y = 131061) +p(x = 106264, y = 186473) +p(x = 81333, y = 126305) +p(x = 199941, y = 137853) +p(x = 111496, y = 117185) +p(x = 145665, y = 16165) +p(x = 18765, y = 161141) +p(x = 61328, y = 140281) +p(x = 16213, y = 119221) +p(x = 29948, y = 87973) +p(x = 361, y = 52653) +p(x = 112788, y = 80989) +p(x = 89601, y = 196077) +p(x = 117512, y = 2581) +p(x = 143329, y = 63617) +p(x = 91752, y = 14321) +p(x = 14321, y = 14321) +p(x = 42616, y = 113789) +p(x = 129765, y = 87297) +p(x = 211428, y = 83801) +p(x = 56273, y = 3841) +p(x = 49217, y = 78269) +p(x = 29092, y = 84869) +p(x = 203089, y = 149693) +p(x = 61377, y = 3900) +p(x = 212236, y = 84928) +p(x = 81821, y = 46112) +p(x = 84277, y = 118696) +p(x = 67640, y = 150720) +p(x = 211173, y = 192156) +p(x = 95141, y = 53872) +p(x = 83260, y = 130244) +p(x = 53089, y = 198948) +p(x = 151517, y = 126848) +p(x = 39008, y = 164404) +p(x = 187581, y = 21072) +p(x = 24708, y = 206516) +p(x = 68481, y = 45044) +p(x = 113372, y = 191672) +p(x = 136277, y = 191864) +p(x = 105672, y = 73864) +p(x = 18729, y = 87256) +p(x = 112712, y = 75416) +p(x = 38585, y = 189052) +p(x = 189052, y = 189052) +p(x = 191577, y = 47856) +p(x = 42680, y = 124228) +p(x = 203285, y = 138880) +p(x = 149069, y = 155376) +p(x = 60240, y = 131312) +p(x = 23761, y = 47564) +p(x = 193253, y = 112881) +p(x = 20776, y = 150629) +p(x = 35729, y = 85805) +p(x = 202569, y = 69701) +p(x = 167884, y = 29041) +p(x = 62117, y = 18169) +p(x = 168209, y = 124237) +p(x = 192524, y = 204197) +p(x = 198649, y = 46505) +p(x = 177717, y = 4877) +p(x = 20860, y = 140149) +p(x = 54737, y = 84837) +p(x = 44700, y = 53397) +p(x = 174257, y = 214577) +p(x = 90568, y = 185273) +p(x = 2657, y = 169453) +p(x = 38712, y = 140633) +p(x = 32997, y = 127049) +p(x = 50520, y = 68341) +p(x = 28985, y = 60673) +p(x = 2936, y = 212349) +p(x = 211869, y = 202545) +p(x = 87520, y = 171297) +p(x = 97525, y = 190321) +p(x = 64392, y = 72513) +p(x = 172989, y = 177705) +p(x = 110936, y = 62225) +p(x = 90569, y = 48057) +p(x = 207360, y = 181777) +p(x = 130321, y = 105605) +p(x = 176472, y = 24093) +p(x = 2777, y = 37969) +p(x = 9528, y = 65237) +p(x = 30593, y = 30593) +p(x = 187076, y = 117637) +p(x = 46281, y = 188669) +p(x = 162565, y = 120449) +p(x = 142240, y = 6721) +p(x = 128081, y = 159657) +p(x = 206348, y = 177121) +p(x = 54589, y = 116469) +p(x = 25728, y = 27197) +p(x = 10985, y = 67465) +p(x = 5512, y = 83093) +p(x = 122353, y = 2549) +p(x = 191801, y = 204540) +p(x = 194380, y = 198332) +p(x = 140337, y = 173392) +p(x = 28481, y = 134384) +p(x = 61916, y = 181736) +p(x = 146349, y = 22108) +p(x = 191889, y = 173492) +p(x = 148568, y = 172716) +p(x = 97045, y = 174652) +p(x = 182665, y = 91104) +p(x = 190776, y = 122252) +p(x = 185061, y = 57720) +p(x = 186088, y = 34240) +p(x = 52177, y = 190764) +p(x = 46704, y = 213860) +p(x = 128125, y = 80524) +p(x = 6596, y = 10660) +p(x = 107233, y = 172032) +p(x = 66240, y = 154376) +p(x = 202973, y = 117596) +p(x = 22828, y = 104688) +p(x = 183633, y = 135160) +p(x = 142832, y = 202796) +p(x = 198253, y = 23952) +p(x = 94280, y = 134968) +p(x = 202101, y = 39380) +p(x = 160140, y = 91588) +p(x = 141901, y = 116528) +p(x = 125556, y = 31812) +p(x = 172241, y = 149036) +p(x = 129504, y = 130888) +p(x = 181037, y = 164464) +p(x = 174788, y = 25212) +p(x = 202737, y = 140208) +p(x = 140208, y = 140208) +p(x = 91497, y = 207552) +p(x = 52325, y = 31228) +p(x = 33944, y = 48600) +p(x = 122065, y = 152432) +p(x = 173456, y = 99448) +p(x = 107573, y = 123128) +p(x = 119372, y = 110704) +p(x = 157613, y = 101584) +p(x = 126032, y = 19972) +p(x = 161461, y = 199884) +p(x = 115621, y = 127693) +p(x = 142756, y = 139825) +p(x = 70565, y = 116145) +p(x = 203829, y = 133325) +p(x = 141100, y = 46281) +p(x = 113, y = 92181) +p(x = 28181, y = 72773) +p(x = 86172, y = 32789) +p(x = 7481, y = 141185) +p(x = 87277, y = 117989) +p(x = 63172, y = 189705) +p(x = 8353, y = 54433) +p(x = 134656, y = 200961) +p(x = 59261, y = 35701) +p(x = 131128, y = 76845) +p(x = 57677, y = 143997) +p(x = 195336, y = 57245) +p(x = 193501, y = 86941) +p(x = 204424, y = 60057) +p(x = 187937, y = 82961) +p(x = 166060, y = 169521) +p(x = 40693, y = 210665) +p(x = 81604, y = 169713) +p(x = 181365, y = 151373) +p(x = 67788, y = 95577) +p(x = 101373, y = 64521) +p(x = 103760, y = 124105) +p(x = 10317, y = 42009) +p(x = 162628, y = 65689) +p(x = 81317, y = 44629) +p(x = 212860, y = 57537) +p(x = 87977, y = 194169) +p(x = 129956, y = 51905) +p(x = 43209, y = 208045) +p(x = 200368, y = 56469) +p(x = 56469, y = 56469) +p(x = 42913, y = 39581) +p(x = 172420, y = 145549) +p(x = 66269, y = 170973) +p(x = 114164, y = 137013) +p(x = 185881, y = 178157) +p(x = 115876, y = 100425) +p(x = 50285, y = 101593) +p(x = 207352, y = 19789) +p(x = 174461, y = 59381) +p(x = 68853, y = 57104) +p(x = 182832, y = 59340) +p(x = 152077, y = 76420) +p(x = 198297, y = 64288) +p(x = 173900, y = 176172) +p(x = 170897, y = 202372) +p(x = 128717, y = 137940) +p(x = 205624, y = 200920) +p(x = 133341, y = 62344) +p(x = 125025, y = 131732) +p(x = 20184, y = 123580) +p(x = 177977, y = 40416) +p(x = 124533, y = 129112) +p(x = 83448, y = 64964) +p(x = 72585, y = 158224) +p(x = 213156, y = 129788) +p(x = 36549, y = 76128) +p(x = 29132, y = 164432) +p(x = 159753, y = 150748) +p(x = 14836, y = 3736) +p(x = 157585, y = 32264) +p(x = 32848, y = 32848) +p(x = 55269, y = 165500) +p(x = 160128, y = 152884) +p(x = 42617, y = 107276) +p(x = 49276, y = 37796) +p(x = 179409, y = 100484) +p(x = 42361, y = 190541) +p(x = 56388, y = 120577) +p(x = 181381, y = 131541) +p(x = 165013, y = 178901) +p(x = 136152, y = 75069) +p(x = 70561, y = 145517) +p(x = 207609, y = 139985) +p(x = 30760, y = 96029) +p(x = 204273, y = 214221) +p(x = 210709, y = 80209) +p(x = 9704, y = 60509) +p(x = 89473, y = 8109) +p(x = 2845, y = 105925) +p(x = 87520, y = 210341) +p(x = 149733, y = 11213) +p(x = 70800, y = 131833) +p(x = 94097, y = 94085) +p(x = 71636, y = 41877) +p(x = 140929, y = 122905) +p(x = 64908, y = 199177) +p(x = 48513, y = 31013) +p(x = 6356, y = 7525) +p(x = 7525, y = 7525) +p(x = 56104, y = 202673) +p(x = 197397, y = 205485) +p(x = 154660, y = 37805) +p(x = 163497, y = 199469) +p(x = 54101, y = 172160) +p(x = 38240, y = 147904) +p(x = 35437, y = 160128) +p(x = 101357, y = 207580) +p(x = 61916, y = 97832) +p(x = 67457, y = 189048) +p(x = 183929, y = 183224) +p(x = 88792, y = 190116) +p(x = 57845, y = 121120) +p(x = 131233, y = 97732) +p(x = 95288, y = 107144) +p(x = 99569, y = 152268) +p(x = 50105, y = 183808) +p(x = 115080, y = 136064) +p(x = 213973, y = 138976) +p(x = 74972, y = 76964) +p(x = 125437, y = 176916) +p(x = 92112, y = 179536) +p(x = 198085, y = 2344) +p(x = 143316, y = 10396) +p(x = 50549, y = 112776) +p(x = 123580, y = 57656) +p(x = 131833, y = 12632) +p(x = 12632, y = 12632) +p(x = 165081, y = 33300) +p(x = 30936, y = 97440) +p(x = 120701, y = 165468) +p(x = 31489, y = 170325) +p(x = 15828, y = 132869) +p(x = 207973, y = 187597) +p(x = 212949, y = 148881) +p(x = 155560, y = 208657) +p(x = 103261, y = 150433) +p(x = 64504, y = 74061) +p(x = 32297, y = 150725) +p(x = 113668, y = 64941) +p(x = 84273, y = 189249) +p(x = 156140, y = 15645) +p(x = 150133, y = 163533) +p(x = 80512, y = 144417) +p(x = 24333, y = 67753) +p(x = 96784, y = 194005) +p(x = 38661, y = 98709) +p(x = 147016, y = 91433) +p(x = 198549, y = 115113) +p(x = 63405, y = 34861) +p(x = 120328, y = 65817) +p(x = 142073, y = 126753) +p(x = 32856, y = 187213) +p(x = 162121, y = 9145) +p(x = 166060, y = 66593) +p(x = 80869, y = 131993) +p(x = 81604, y = 95897) +p(x = 181365, y = 214089) +p(x = 146849, y = 113361) +p(x = 138564, y = 3613) +p(x = 80249, y = 68437) +p(x = 151340, y = 35637) +p(x = 191617, y = 211277) +p(x = 37864, y = 35929) +p(x = 183433, y = 49705) +p(x = 19392, y = 181973) +p(x = 146329, y = 76197) +p(x = 86320, y = 16421) +p(x = 108449, y = 13993) +p(x = 115200, y = 79885) +p(x = 112297, y = 14093) +p(x = 80524, y = 3805) +p(x = 35217, y = 42913) +p(x = 30105, y = 30105) +p(x = 122832, y = 178669) +p(x = 209693, y = 6133) +p(x = 172749, y = 108121) +p(x = 143404, y = 205161) +p(x = 174461, y = 179353) +p(x = 68853, y = 71984) +p(x = 210876, y = 86928) +p(x = 118985, y = 137484) +p(x = 63901, y = 60436) +p(x = 15532, y = 211428) +p(x = 170897, y = 145052) +p(x = 150964, y = 48988) +p(x = 3085, y = 166112) +p(x = 196832, y = 50924) +p(x = 104457, y = 173196) +p(x = 176324, y = 33944) +p(x = 108597, y = 23656) +p(x = 87888, y = 198620) +p(x = 105945, y = 210360) +p(x = 1780, y = 143792) +p(x = 44777, y = 195416) +p(x = 178648, y = 157476) +p(x = 51053, y = 2212) +p(x = 32641, y = 126812) +p(x = 198444, y = 104492) +p(x = 93937, y = 45492) +p(x = 107868, y = 207548) +p(x = 58873, y = 22204) +p(x = 151308, y = 84500) +p(x = 1393, y = 127588) +p(x = 110716, y = 193964) +p(x = 78409, y = 51508) +p(x = 179649, y = 180764) +p(x = 136912, y = 69172) +p(x = 25421, y = 205120) +p(x = 179576, y = 16864) +p(x = 214713, y = 22104) +p(x = 184976, y = 157376) +p(x = 17589, y = 48696) +p(x = 67720, y = 167472) +p(x = 171269, y = 124776) +p(x = 67204, y = 40736) +p(x = 131837, y = 85668) +p(x = 95016, y = 26084) +p(x = 200801, y = 107304) +p(x = 107600, y = 130984) +p(x = 117989, y = 19000) +p(x = 203901, y = 122156) +p(x = 122156, y = 122156) +p(x = 212313, y = 141464) +p(x = 42617, y = 93720) +p(x = 201628, y = 209876) +p(x = 93825, y = 92652) +p(x = 42361, y = 41713) +p(x = 1268, y = 203285) +p(x = 181381, y = 167381) +p(x = 62833, y = 17457) +p(x = 18344, y = 10273) +p(x = 93949, y = 45793) +p(x = 68968, y = 89749) +p(x = 53257, y = 208525) +p(x = 213912, y = 36765) +p(x = 16345, y = 56949) +p(x = 200872, y = 138461) +p(x = 157893, y = 63257) +p(x = 77700, y = 71993) +p(x = 117785, y = 66269) +p(x = 120656, y = 204937) +p(x = 207609, y = 61897) +p(x = 30760, y = 209693) +p(x = 34165, y = 179705) +p(x = 45649, y = 183201) +p(x = 10964, y = 68205) +p(x = 134597, y = 190285) +p(x = 83612, y = 19301) +p(x = 47033, y = 48797) +p(x = 67276, y = 197853) +p(x = 123465, y = 91693) +p(x = 64232, y = 191545) +p(x = 54145, y = 113621) +p(x = 73681, y = 122065) +p(x = 90136, y = 19493) +p(x = 154777, y = 174173) +p(x = 24412, y = 41621) +p(x = 178125, y = 124585) +p(x = 42328, y = 79853) +p(x = 152769, y = 29681) +p(x = 15996, y = 15029) +p(x = 3973, y = 24833) +p(x = 14412, y = 162333) +p(x = 64493, y = 207165) +p(x = 207876, y = 116241) +p(x = 181777, y = 54137) +p(x = 86932, y = 130893) +p(x = 167677, y = 186597) +p(x = 109289, y = 164569) +p(x = 76156, y = 62581) +p(x = 62581, y = 62581) +p(x = 165081, y = 5617) +p(x = 211040, y = 75097) +p(x = 127493, y = 4841) +p(x = 138041, y = 162292) +p(x = 117716, y = 81264) +p(x = 154989, y = 12468) +p(x = 181213, y = 175392) +p(x = 123140, y = 128624) +p(x = 207281, y = 148124) +p(x = 89601, y = 75832) +p(x = 88884, y = 63024) +p(x = 42601, y = 101356) +p(x = 110296, y = 116784) +p(x = 102829, y = 11400) +p(x = 99492, y = 116976) +p(x = 148113, y = 176268) +p(x = 88688, y = 196744) +p(x = 82873, y = 53612) +p(x = 189284, y = 7228) +p(x = 59453, y = 27120) +p(x = 162952, y = 168992) +p(x = 100753, y = 114164) +p(x = 188340, y = 137644) +p(x = 119645, y = 93104) +p(x = 203321, y = 135900) +p(x = 202796, y = 59236) +p(x = 71121, y = 67196) +p(x = 49217, y = 205572) +p(x = 29092, y = 120080) +p(x = 203089, y = 14212) +p(x = 61377, y = 11501) +p(x = 106268, y = 208301) +p(x = 44365, y = 136685) +p(x = 171509, y = 31785) +p(x = 64140, y = 9949) +p(x = 166137, y = 122809) +p(x = 152581, y = 137461) +p(x = 184272, y = 189861) +p(x = 193985, y = 54589) +p(x = 150372, y = 152989) +p(x = 147177, y = 117469) +p(x = 201480, y = 5877) +p(x = 30889, y = 208201) +p(x = 169908, y = 187049) +p(x = 100337, y = 81081) +p(x = 158520, y = 34697) +p(x = 9089, y = 46437) +p(x = 107056, y = 127657) +p(x = 157909, y = 8497) +p(x = 90716, y = 90785) +p(x = 11057, y = 16257) +p(x = 156353, y = 92921) +p(x = 96636, y = 154149) +p(x = 169713, y = 11017) +p(x = 43785, y = 140273) +p(x = 33164, y = 35181) +p(x = 183489, y = 180741) +p(x = 214121, y = 123928) +p(x = 68904, y = 179824) +p(x = 164985, y = 108792) +p(x = 160253, y = 165172) +p(x = 189032, y = 18936) +p(x = 128581, y = 139748) +p(x = 135501, y = 203796) +p(x = 34348, y = 92196) +p(x = 126349, y = 103360) +p(x = 122136, y = 23884) +p(x = 205401, y = 188268) +p(x = 126368, y = 147608) +p(x = 200029, y = 9524) +p(x = 87520, y = 38828) +p(x = 73845, y = 110344) +p(x = 64876, y = 137320) +p(x = 187449, y = 119372) +p(x = 33596, y = 180892) +p(x = 159461, y = 4376) +p(x = 172328, y = 47656) +p(x = 119353, y = 44552) +p(x = 188669, y = 72012) +p(x = 35308, y = 36400) +p(x = 49869, y = 48240) +p(x = 10885, y = 55032) +p(x = 128168, y = 188752) +p(x = 202605, y = 118012) +p(x = 109897, y = 63485) +p(x = 80068, y = 103853) +p(x = 81629, y = 9141) +p(x = 163392, y = 59021) +p(x = 120505, y = 53197) +p(x = 203436, y = 212149) +p(x = 28481, y = 17877) +p(x = 61916, y = 117921) +p(x = 146349, y = 54457) +p(x = 71488, y = 167025) +p(x = 8617, y = 65521) +p(x = 54960, y = 131121) +p(x = 81653, y = 189729) +p(x = 180596, y = 169937) +p(x = 148773, y = 132573) +p(x = 192688, y = 203121) +p(x = 207933, y = 32529) +p(x = 140740, y = 9725) +p(x = 1689, y = 69109) +p(x = 27464, y = 88617) +p(x = 22133, y = 201569) +p(x = 133976, y = 197981) +p(x = 78965, y = 145773) +p(x = 139576, y = 116953) +p(x = 182665, y = 200209) +p(x = 190776, y = 43785) +p(x = 196217, y = 176245) +p(x = 141640, y = 80173) +p(x = 206081, y = 19913) +p(x = 182460, y = 24377) +p(x = 142293, y = 143445) +p(x = 150404, y = 188469) +p(x = 107233, y = 8073) +p(x = 199184, y = 5261) +p(x = 123113, y = 213409) +p(x = 179352, y = 37377) +p(x = 183633, y = 172749) +p(x = 142832, y = 67849) +p(x = 198253, y = 152565) +p(x = 94280, y = 73965) +p(x = 202101, y = 61057) +p(x = 116468, y = 77361) +p(x = 17885, y = 47181) +p(x = 173300, y = 122093) +p(x = 201837, y = 36217) +p(x = 65748, y = 49217) +p(x = 84097, y = 17293) +p(x = 183424, y = 196329) +p(x = 33217, y = 64937) +p(x = 159036, y = 172265) +p(x = 142057, y = 3317) +p(x = 29356, y = 91529) +p(x = 15681, y = 147225) +p(x = 153824, y = 157997) +p(x = 127049, y = 176629) +p(x = 107016, y = 185949) +p(x = 159817, y = 213893) +p(x = 150072, y = 38837) +p(x = 133193, y = 135485) +p(x = 67944, y = 76485) +p(x = 158485, y = 66297) +p(x = 52384, y = 35341) +p(x = 24833, y = 2641) +p(x = 15280, y = 157613) +p(x = 163953, y = 115109) +p(x = 43968, y = 141601) +p(x = 141601, y = 141601) +p(x = 126032, y = 150429) +p(x = 57045, y = 137913) +p(x = 4029, y = 87024) +p(x = 150516, y = 204148) +p(x = 7393, y = 177656) +p(x = 198520, y = 72080) +p(x = 156701, y = 73148) +p(x = 194892, y = 30544) +p(x = 191505, y = 119916) +p(x = 39212, y = 30936) +p(x = 184681, y = 211040) +p(x = 214428, y = 187360) +p(x = 126517, y = 68876) +p(x = 202072, y = 167660) +p(x = 203049, y = 165624) +p(x = 154488, y = 95660) +p(x = 123641, y = 192600) +p(x = 150868, y = 57328) +p(x = 6477, y = 45588) +p(x = 41564, y = 164848) +p(x = 21097, y = 114192) +p(x = 2424, y = 42192) +p(x = 154785, y = 154368) +p(x = 72940, y = 176688) +p(x = 156497, y = 30352) +p(x = 87076, y = 196480) +p(x = 80777, y = 5512) +p(x = 213872, y = 1048) +p(x = 98693, y = 125064) +p(x = 147756, y = 128168) +p(x = 66929, y = 154660) +p(x = 201576, y = 196388) +p(x = 212357, y = 75184) +p(x = 196596, y = 194928) +p(x = 105289, y = 55584) +p(x = 131064, y = 163296) +p(x = 87401, y = 158248) +p(x = 67760, y = 83820) +p(x = 78249, y = 13756) +p(x = 81604, y = 16184) +p(x = 181365, y = 60532) +p(x = 67788, y = 40248) +p(x = 88565, y = 169312) +p(x = 186240, y = 68684) +p(x = 134525, y = 60240) +p(x = 178540, y = 66064) +p(x = 166709, y = 45004) +p(x = 77396, y = 37628) +p(x = 154545, y = 172708) +p(x = 37864, y = 157472) +p(x = 183433, y = 52088) +p(x = 19392, y = 191340) +p(x = 146329, y = 104196) +p(x = 62448, y = 27540) +p(x = 22281, y = 22200) +p(x = 157028, y = 33748) +p(x = 71153, y = 113124) +p(x = 55684, y = 78772) +p(x = 35217, y = 130980) +p(x = 108244, y = 25012) +p(x = 67401, y = 155336) +p(x = 308, y = 89544) +p(x = 6133, y = 14924) +p(x = 183868, y = 207352) +p(x = 42297, y = 60140) +p(x = 155600, y = 143404) +p(x = 51093, y = 43744) +p(x = 173616, y = 124480) +p(x = 61057, y = 10068) +p(x = 10068, y = 10068) +p(x = 65681, y = 111864) +p(x = 196457, y = 212209) +p(x = 143240, y = 136813) +p(x = 180997, y = 146809) +p(x = 148348, y = 12989) +p(x = 202309, y = 36669) +p(x = 7412, y = 108477) +p(x = 15573, y = 26573) +p(x = 65120, y = 54233) +p(x = 129561, y = 144381) +p(x = 102836, y = 156413) +p(x = 6481, y = 1249) +p(x = 129196, y = 130505) +p(x = 130173, y = 106149) +p(x = 156816, y = 82469) +p(x = 87445, y = 168929) +p(x = 74496, y = 16385) +p(x = 174165, y = 201345) +p(x = 130844, y = 2509) +p(x = 95141, y = 161461) +p(x = 203880, y = 181) +p(x = 53089, y = 106049) +p(x = 13356, y = 74125) +p(x = 178817, y = 153601) +p(x = 36420, y = 19005) +p(x = 48461, y = 94309) +p(x = 0, y = 161845) +p(x = 115581, y = 160685) +p(x = 24708, y = 151173) +p(x = 144561, y = 58789) +p(x = 117060, y = 144573) +p(x = 96009, y = 86641) +p(x = 70928, y = 204641) +p(x = 5729, y = 200177) +p(x = 127760, y = 112841) +p(x = 143297, y = 195421) +p(x = 73000, y = 51029) +p(x = 207113, y = 107117) +p(x = 182716, y = 27641) +p(x = 13877, y = 141761) +p(x = 38484, y = 122353) +p(x = 137469, y = 20949) +p(x = 117636, y = 35601) +p(x = 3041, y = 66557) +p(x = 44820, y = 130797) +p(x = 162053, y = 177665) +p(x = 169288, y = 204057) +p(x = 201997, y = 163497) +p(x = 11372, y = 205901) +p(x = 127829, y = 101001) +p(x = 53552, y = 93049) +p(x = 184177, y = 106825) +p(x = 209560, y = 147969) +p(x = 133873, y = 71697) +p(x = 30100, y = 95277) +p(x = 139373, y = 139625) +p(x = 134384, y = 4545) +p(x = 35701, y = 164273) +p(x = 138908, y = 62869) +p(x = 130765, y = 24537) +p(x = 97832, y = 9885) +p(x = 24089, y = 42393) +p(x = 124968, y = 67817) +p(x = 76065, y = 198433) +p(x = 36048, y = 179409) +p(x = 11017, y = 93825) +p(x = 66872, y = 104305) +p(x = 9725, y = 182713) +p(x = 121860, y = 212793) +p(x = 212793, y = 212793) diff --git a/rust/kcl-lib/e2e/executor/inputs/riddle_small.kcl b/rust/kcl-lib/e2e/executor/inputs/riddle_small.kcl index 966358cd1..ba0447e8f 100644 --- a/rust/kcl-lib/e2e/executor/inputs/riddle_small.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/riddle_small.kcl @@ -1,6 +1,6 @@ ANSWER = 41803 -fn t(s) { +fn t(@s) { return (ANSWER * s + 12345) % 214748 } diff --git a/rust/kcl-lib/e2e/executor/inputs/scoped-tags.kcl b/rust/kcl-lib/e2e/executor/inputs/scoped-tags.kcl index af4a138ff..02f0788d9 100644 --- a/rust/kcl-lib/e2e/executor/inputs/scoped-tags.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/scoped-tags.kcl @@ -1,4 +1,4 @@ -fn rect(origin) { +fn rect(@origin) { return startSketchOn(XZ) |> startProfile(at = origin) |> angledLine( diff --git a/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl b/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl index 83329542d..df9cb4456 100644 --- a/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl @@ -9,7 +9,7 @@ serverDepth = 31 width = 21.53 // simple caster model at each corner -fn caster(originStart) { +fn caster(@originStart) { plane001c = { origin = [ -(3.543 - 2.756) / 2 + originStart[0], @@ -1330,7 +1330,7 @@ extrude012rl = extrude(sketch012rl, length = -thickness) // GENERATE SERVER MODELS // Define planes so the server can be moved -fn streamServer(serverPos) { +fn streamServer(@serverPos) { planeXYs = { origin = [0, 0 + 2, 4.114 + 1 + serverPos * 1.75], xAxis = [1.0, 0.0, 0.0], diff --git a/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl b/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl index cfdc21b3c..71b40462b 100644 --- a/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl @@ -7,7 +7,7 @@ serverDepth = 31 width = 21.53 // simple caster model at each corner -fn caster(originStart) { +fn caster(@originStart) { plane001c = { origin = [ -(3.543 - 2.756) / 2 + originStart[0], @@ -967,7 +967,7 @@ sketch012rl = startSketchOn(extrude001rl, face = 'START') extrude012rl = extrude(sketch012rl, length = -thickness) // Define planes so the server can be moved -fn streamServer(serverPos) { +fn streamServer(@serverPos) { planeXYs = { origin = [0, 0 + 2, 4.114 + 1 + serverPos * 1.75], xAxis = [1.0, 0.0, 0.0], diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_circle_tagged.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_circle_tagged.kcl index 0def47d95..55ba40de9 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_circle_tagged.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_circle_tagged.kcl @@ -7,10 +7,10 @@ fn cube(pos, scale) { return sg } -part001 = cube([0,0], 20) +part001 = cube(pos = [0,0], scale = 20) |> close() |> extrude(length = 20) part002 = startSketchOn(part001, face = "end") - |> circle(center: [0, 0], radius: 5, tag =$myCircle) + |> circle(center = [0, 0], radius = 5, tag = $myCircle) |> extrude(length = 5) diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end.kcl index 143b52b89..341335536 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end.kcl @@ -7,7 +7,7 @@ fn cube(pos, scale) { return sg } -part001 = cube([0,0], 20) +part001 = cube(pos = [0,0], scale = 20) |> close() |> extrude(length = 20) diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end_negative_extrude.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end_negative_extrude.kcl index 9acdd83e8..8dddd1ba3 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end_negative_extrude.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_end_negative_extrude.kcl @@ -7,7 +7,7 @@ fn cube(pos, scale) { return sg } -part001 = cube([0,0], 20) +part001 = cube(pos = [0,0], scale = 20) |> close() |> extrude(length = 20) diff --git a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_start.kcl b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_start.kcl index 33e55287e..7cbf7b8bf 100644 --- a/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_start.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/sketch_on_face_start.kcl @@ -7,7 +7,7 @@ fn cube(pos, scale) { return sg } -part001 = cube([0,0], 20) +part001 = cube(pos = [0,0], scale = 20) |> close() |> extrude(length = 20) diff --git a/rust/kcl-lib/e2e/executor/main.rs b/rust/kcl-lib/e2e/executor/main.rs index dd227a24d..c6d2e25fa 100644 --- a/rust/kcl-lib/e2e/executor/main.rs +++ b/rust/kcl-lib/e2e/executor/main.rs @@ -197,11 +197,11 @@ fn box(sk1, sk2, scale, plane) { return boxsketch } -box(0, 0, 5, XY) -box(10, 23, 8, XZ) -box(30, 43, 18, -XY) -thing = box(-12, -15, 10, YZ) -box(-20, -5, 10, XY)"#; +box(sk1 = 0, sk2 = 0, scale = 5, plane = XY) +box(sk1 = 10, sk2 = 23, scale = 8, plane = XZ) +box(sk1 = 30, sk2 = 43, scale = 18, plane = -XY) +thing = box(sk1 = -12, sk2 = -15, scale = 10, plane = YZ) +box(sk1 = -20, sk2 = -5, scale = 10, plane = XY)"#; let result = execute_and_snapshot(code, None).await.unwrap(); assert_out("different_planes_same_drawing", &result); @@ -295,7 +295,7 @@ async fn optional_params() { return sg } -thing = other_circle([2, 2], 20) +thing = other_circle(pos = [2, 2], radius = 20) "#; let result = execute_and_snapshot(code, None).await.unwrap(); assert_out("optional_params", &result); @@ -303,7 +303,7 @@ thing = other_circle([2, 2], 20) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_rounded_with_holes() { - let code = r#"fn tarc(to, sktch, tag?) { + let code = r#"fn tarc(@to, sktch, tag?) { return tangentialArc(sktch, endAbsolute = to, tag = tag) } @@ -311,13 +311,13 @@ fn roundedRectangle(pos, w, l, cornerRadius) { rr = startSketchOn(XY) |> startProfile(at = [pos[0] - w/2, 0]) |> line(endAbsolute = [pos[0] - w/2, pos[1] - l/2 + cornerRadius]) - |> tarc([pos[0] - w/2 + cornerRadius, pos[1] - l/2], %, $arc0) + |> tarc([pos[0] - w/2 + cornerRadius, pos[1] - l/2], sktch=%, tag=$arc0) |> line(endAbsolute = [pos[0] + w/2 - cornerRadius, pos[1] - l/2]) - |> tarc([pos[0] + w/2, pos[1] - l/2 + cornerRadius], %) + |> tarc([pos[0] + w/2, pos[1] - l/2 + cornerRadius], sktch=%) |> line(endAbsolute = [pos[0] + w/2, pos[1] + l/2 - cornerRadius]) - |> tarc([pos[0] + w/2 - cornerRadius, pos[1] + l/2], %, $arc2) + |> tarc([pos[0] + w/2 - cornerRadius, pos[1] + l/2], sktch=%, tag=$arc2) |> line(endAbsolute = [pos[0] - w/2 + cornerRadius, pos[1] + l/2]) - |> tarc([pos[0] - w/2, pos[1] + l/2 - cornerRadius], %) + |> tarc([pos[0] - w/2, pos[1] + l/2 - cornerRadius], sktch=%) |> close() return rr } @@ -325,11 +325,11 @@ fn roundedRectangle(pos, w, l, cornerRadius) { holeRadius = 1 holeIndex = 6 -part = roundedRectangle([0, 0], 20, 20, 4) - |> subtract2d(tool = circle(center = [-holeIndex, holeIndex], radius= holeRadius)) - |> subtract2d(tool = circle(center = [holeIndex, holeIndex], radius= holeRadius)) - |> subtract2d(tool = circle(center = [-holeIndex, -holeIndex], radius= holeRadius)) - |> subtract2d(tool = circle(center = [holeIndex, -holeIndex], radius= holeRadius)) +part = roundedRectangle(pos=[0, 0], w=20, l=20, cornerRadius=4) + |> subtract2d(tool = circle(center = [-holeIndex, holeIndex], radius = holeRadius)) + |> subtract2d(tool = circle(center = [holeIndex, holeIndex], radius = holeRadius)) + |> subtract2d(tool = circle(center = [-holeIndex, -holeIndex], radius = holeRadius)) + |> subtract2d(tool = circle(center = [holeIndex, -holeIndex], radius = holeRadius)) |> extrude(length = 2) "#; @@ -581,7 +581,7 @@ async fn kcl_test_cube_mm() { return sg } -myCube = cube([0,0], 10) +myCube = cube(pos = [0,0], scale = 10) "#; let result = execute_and_snapshot(code, None).await.unwrap(); @@ -603,7 +603,7 @@ fn cube(pos, scale) { return sg } -myCube = cube([0,0], 10) +myCube = cube(pos = [0,0], scale = 10) "#; let result = execute_and_snapshot(code, None).await.unwrap(); @@ -625,7 +625,7 @@ fn cube(pos, scale) { return sg } -myCube = cube([0,0], 10) +myCube = cube(pos = [0,0], scale = 10) "#; let result = execute_and_snapshot(code, None).await.unwrap(); @@ -647,7 +647,7 @@ fn cube(pos, scale) { return sg } -myCube = cube([0,0], 10) +myCube = cube(pos = [0,0], scale = 10) "#; let result = execute_and_snapshot(code, None).await.unwrap(); @@ -669,7 +669,7 @@ fn cube(pos, scale) { return sg } -myCube = cube([0,0], 10) +myCube = cube(pos = [0,0], scale = 10) "#; let result = execute_and_snapshot(code, None).await.unwrap(); @@ -691,7 +691,7 @@ fn cube(pos, scale) { return sg } -myCube = cube([0,0], 10) +myCube = cube(pos = [0,0], scale = 10) "#; let result = execute_and_snapshot(code, None).await.unwrap(); @@ -709,7 +709,7 @@ async fn kcl_test_error_sketch_on_arc_face() { return sg } -part001 = cube([0, 0], 20) +part001 = cube(pos = [0, 0], scale = 20) |> close() |> extrude(length = 20) @@ -745,7 +745,7 @@ async fn kcl_test_sketch_on_face_of_face() { return sg } -part001 = cube([0,0], 20) +part001 = cube(pos = [0,0], scale = 20) |> close() |> extrude(length = 20) @@ -805,7 +805,7 @@ async fn kcl_test_sketch_on_face_circle() { return sg } -part001 = cube([0,0], 20) +part001 = cube(pos = [0,0], scale = 20) |> close() |> extrude(length = 20) @@ -1151,7 +1151,7 @@ async fn kcl_test_plumbus_fillets() { return sg } -fn pentagon(len) { +fn pentagon(@len) { sg = startSketchOn(XY) |> startProfile(at = [-len / 2, -len / 2]) |> angledLine(angle = 0, length = len, tag = $a) @@ -1181,7 +1181,7 @@ fn pentagon(len) { p = pentagon(32) |> extrude(length = 10) -circle0 = make_circle(p, p.sketch.tags.a, [0, 0], 2.5) +circle0 = make_circle(ext=p, face=p.sketch.tags.a, pos=[0, 0], radius=2.5) plumbus0 = circle0 |> extrude(length = 10) |> fillet( @@ -1189,7 +1189,7 @@ plumbus0 = circle0 tags = [circle0.tags.arc1, getOppositeEdge(circle0.tags.arc1)] ) -circle1 = make_circle(p, p.sketch.tags.b, [0, 0], 2.5) +circle1 = make_circle(ext=p, face=p.sketch.tags.b, pos=[0, 0], radius=2.5) plumbus1 = circle1 |> extrude(length = 10) |> fillet( @@ -1231,7 +1231,7 @@ async fn kcl_test_member_expression_in_params() { return screw } -capScrew([0, 0.5, 0], 50, 37.5, 50, 25) +capScrew(originStart = [0, 0.5, 0], length=50, dia=37.5, capDia=50, capHeadLength=25) "#; let result = execute_and_snapshot(code, None).await.unwrap(); @@ -1327,13 +1327,13 @@ fn squareHole(l, w) { extrusion = startSketchOn(XY) |> circle(center = [0, 0], radius= dia/2 ) - |> subtract2d(tool = squareHole(length, width, height)) + |> subtract2d(tool = squareHole(l = length, w = width, h = height)) |> extrude(length = height) "#; let result = execute_and_snapshot(code, None).await; assert!(result.is_err()); - let expected_msg = "semantic: Expected 2 arguments, got 3"; + let expected_msg = "semantic: `h` is not an argument of `squareHole`"; let err = result.unwrap_err().as_kcl_error().unwrap().get_message(); assert_eq!(err, expected_msg); } @@ -1531,7 +1531,7 @@ async fn kcl_test_linear_pattern3d_filleted_sketch() { return sg } -part001 = cube([0,0], 20) +part001 = cube(pos = [0,0], scale = 20) |> close(tag = $line1) |> extrude(length = 20) |> fillet( @@ -1562,7 +1562,7 @@ async fn kcl_test_circular_pattern3d_filleted_sketch() { return sg } -part001 = cube([0,0], 20) +part001 = cube(pos = [0,0], scale = 20) |> close(tag = $line1) |> extrude(length = 20) |> fillet( @@ -1589,7 +1589,7 @@ async fn kcl_test_circular_pattern3d_chamfered_sketch() { return sg } -part001 = cube([0,0], 20) +part001 = cube(pos = [0,0], scale = 20) |> close(tag = $line1) |> extrude(length = 20) |> chamfer( @@ -1615,7 +1615,7 @@ async fn kcl_test_tag_chamfer_with_more_than_one_edge_should_fail() { return sg } -part001 = cube([0,0], 20) +part001 = cube(pos = [0,0], scale = 20) |> close(tag = $line1) |> extrude(length = 20) |> chamfer( @@ -1640,7 +1640,7 @@ part001 = cube([0,0], 20) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_duplicate_tags_should_error() { - let code = r#"fn triangle(len) { + let code = r#"fn triangle(@len) { return startSketchOn(XY) |> startProfile(at = [-len / 2, -len / 2]) |> angledLine(angle = 0, length = len , tag = $a) @@ -1926,7 +1926,7 @@ example = extrude(exampleSketch, length = 10) #[tokio::test(flavor = "multi_thread")] async fn kcl_test_error_inside_fn_also_has_source_range_of_call_site() { - let code = r#"fn someFunction(something) { + let code = r#"fn someFunction(@something) { startSketchOn(something) } @@ -1937,14 +1937,14 @@ someFunction('INVALID') assert!(result.is_err()); assert_eq!( result.err().unwrap().to_string(), - r#"semantic: KclErrorDetails { source_ranges: [SourceRange([45, 54, 0]), SourceRange([59, 82, 0])], message: "This function expected the input argument to be Solid or Plane but it's actually of type string (text)" }"# + r#"semantic: KclErrorDetails { source_ranges: [SourceRange([46, 55, 0]), SourceRange([60, 83, 0])], message: "This function expected the input argument to be Solid or Plane but it's actually of type string (text)" }"# ); } #[tokio::test(flavor = "multi_thread")] async fn kcl_test_error_inside_fn_also_has_source_range_of_call_site_recursive() { - let code = r#"fn someFunction(something) { - fn someNestedFunction(something2) { + let code = r#"fn someFunction(@something) { + fn someNestedFunction(@something2) { startSketchOn(something2) } @@ -1958,7 +1958,7 @@ someFunction('INVALID') assert!(result.is_err()); assert_eq!( result.err().unwrap().to_string(), - r#"semantic: KclErrorDetails { source_ranges: [SourceRange([91, 101, 0]), SourceRange([114, 143, 0]), SourceRange([147, 170, 0])], message: "This function expected the input argument to be Solid or Plane but it's actually of type string (text)" }"# + r#"semantic: KclErrorDetails { source_ranges: [SourceRange([93, 103, 0]), SourceRange([116, 145, 0]), SourceRange([149, 172, 0])], message: "This function expected the input argument to be Solid or Plane but it's actually of type string (text)" }"# ); } @@ -2038,6 +2038,17 @@ async fn kcl_test_ensure_nothing_left_in_batch_multi_file() { ctx.close().await; } +#[tokio::test(flavor = "multi_thread")] +async fn kcl_test_default_param_for_unlabeled() { + let code = r#"fn myExtrude(@sk, len) { + return extrude(sk, length = len) +} + +sketch001 = startSketchOn(XY) +|> circle(center = [0, 0], radius = 93.75) +|> myExtrude(len = 40)"#; + let _ = execute_and_snapshot(code, None).await.unwrap(); +} #[tokio::test(flavor = "multi_thread")] async fn kcl_test_better_type_names() { diff --git a/rust/kcl-lib/src/docs/gen_std_tests.rs b/rust/kcl-lib/src/docs/gen_std_tests.rs index 87f572a36..c0c3750e4 100644 --- a/rust/kcl-lib/src/docs/gen_std_tests.rs +++ b/rust/kcl-lib/src/docs/gen_std_tests.rs @@ -1,113 +1,60 @@ use std::{ - collections::{BTreeMap, HashMap}, - fs::File, + collections::HashMap, + fs::{self, File}, io::Read as _, + path::Path, }; use anyhow::Result; use base64::Engine; use convert_case::Casing; -use handlebars::Renderable; use indexmap::IndexMap; use itertools::Itertools; -use schemars::schema::SingleOrVec; use serde_json::json; use tokio::task::JoinSet; use super::kcl_doc::{ConstData, DocData, ExampleProperties, FnData, TyData}; -use crate::{ - docs::{is_primitive, StdLibFn}, - std::StdLib, - ExecutorContext, -}; +use crate::{docs::StdLibFn, std::StdLib, ExecutorContext}; -const TYPES_DIR: &str = "../../docs/kcl/types"; -const LANG_TOPICS: [&str; 5] = ["Types", "Modules", "Settings", "Known Issues", "Constants"]; -// These types are declared in std. -const DECLARED_TYPES: [&str; 14] = [ - "number", "string", "tag", "bool", "Sketch", "Solid", "Plane", "Helix", "Face", "Edge", "Point2d", "Point3d", - "Axis2d", "Axis3d", +const LANG_TOPICS: [&str; 4] = ["Types", "Modules", "Settings", "Known Issues"]; +// These types are declared in (KCL) std. +const DECLARED_TYPES: [&str; 15] = [ + "any", "number", "string", "tag", "bool", "Sketch", "Solid", "Plane", "Helix", "Face", "Edge", "Point2d", + "Point3d", "Axis2d", "Axis3d", ]; +// Types with special handling. +const SPECIAL_TYPES: [&str; 5] = ["TagDeclarator", "TagIdentifier", "Start", "End", "ImportedGeometry"]; + +const TYPE_REWRITES: [(&str, &str); 11] = [ + ("TagNode", "TagDeclarator"), + ("SketchData", "Plane | Solid"), + ("SketchOrSurface", "Sketch | Plane | Face"), + ("SketchSurface", "Plane | Face"), + ("SolidOrImportedGeometry", "[Solid] | ImportedGeometry"), + ( + "SolidOrSketchOrImportedGeometry", + "[Solid] | [Sketch] | ImportedGeometry", + ), + ("KclValue", "any"), + ("[KclValue]", "[any]"), + ("FaceTag", "TagIdentifier | Start | End"), + ("GeometryWithImportedGeometry", "Solid | Sketch | ImportedGeometry"), + ("SweepPath", "Sketch | Helix"), +]; + +fn rename_type(input: &str) -> &str { + for (i, o) in TYPE_REWRITES { + if input == i { + return o; + } + } + + input +} + fn init_handlebars() -> Result> { let mut hbs = handlebars::Handlebars::new(); - // Register the 'json' helper - hbs.register_helper( - "json", - Box::new( - |h: &handlebars::Helper, - _: &handlebars::Handlebars, - _: &handlebars::Context, - _: &mut handlebars::RenderContext, - out: &mut dyn handlebars::Output| - -> handlebars::HelperResult { - let param = h.param(0).and_then(|v| v.value().as_str()).unwrap_or(""); - out.write(&serde_json::to_string(¶m).unwrap())?; - Ok(()) - }, - ), - ); - - // Register the 'basename' helper - hbs.register_helper( - "times", - Box::new( - |h: &handlebars::Helper, - hb: &handlebars::Handlebars, - ctx: &handlebars::Context, - rc: &mut handlebars::RenderContext, - out: &mut dyn handlebars::Output| - -> handlebars::HelperResult { - let n = h.param(0).and_then(|v| v.value().as_u64()).ok_or_else(|| { - handlebars::RenderErrorReason::Other( - "times helper expects an integer as first parameter".to_string(), - ) - })?; - - let template = h - .template() - .ok_or_else(|| handlebars::RenderErrorReason::Other("times helper expects a block".to_string()))?; - - for i in 0..n { - let mut local_ctx = ctx.clone(); - let mut rc = rc.clone(); - let m = local_ctx.data_mut().as_object_mut().unwrap(); - m.insert("@index".to_string(), handlebars::JsonValue::Number(i.into())); - if i == 0 { - m.insert("@first".to_string(), handlebars::JsonValue::Bool(true)); - } - template.render(hb, &local_ctx, &mut rc, out)?; - } - - Ok(()) - }, - ), - ); - - hbs.register_helper( - "lte", - Box::new( - |h: &handlebars::Helper, - _: &handlebars::Handlebars, - _: &handlebars::Context, - _: &mut handlebars::RenderContext, - out: &mut dyn handlebars::Output| - -> handlebars::HelperResult { - let a = h.param(0).and_then(|v| v.value().as_f64()).ok_or_else(|| { - handlebars::RenderErrorReason::Other("lte helper expects a number as first parameter".to_string()) - })?; - - let b = h.param(1).and_then(|v| v.value().as_f64()).ok_or_else(|| { - handlebars::RenderErrorReason::Other("lte helper expects a number as second parameter".to_string()) - })?; - - let result = a <= b; - out.write(if result { "true" } else { "false" })?; - - Ok(()) - }, - ), - ); hbs.register_helper( "firstLine", @@ -131,146 +78,6 @@ fn init_handlebars() -> Result> { ), ); - hbs.register_helper( - "neq", - Box::new( - |h: &handlebars::Helper, - _: &handlebars::Handlebars, - _: &handlebars::Context, - _: &mut handlebars::RenderContext, - out: &mut dyn handlebars::Output| - -> handlebars::HelperResult { - let param1 = h - .param(0) - .ok_or_else(|| { - handlebars::RenderErrorReason::Other("neq helper expects two parameters".to_string()) - })? - .value(); - let param2 = h - .param(1) - .ok_or_else(|| { - handlebars::RenderErrorReason::Other("neq helper expects two parameters".to_string()) - })? - .value(); - - let result = param1 != param2; - out.write(if result { "true" } else { "false" })?; - - Ok(()) - }, - ), - ); - - // Register the 'lowercase' helper - hbs.register_helper( - "lowercase", - Box::new( - |h: &handlebars::Helper, - _: &handlebars::Handlebars, - _: &handlebars::Context, - _: &mut handlebars::RenderContext, - out: &mut dyn handlebars::Output| - -> handlebars::HelperResult { - let param = h.param(0).and_then(|v| v.value().as_str()).unwrap_or(""); - out.write(¶m.to_lowercase())?; - Ok(()) - }, - ), - ); - - hbs.register_helper( - "pretty_enum", - Box::new( - |h: &handlebars::Helper, - _: &handlebars::Handlebars, - _: &handlebars::Context, - _: &mut handlebars::RenderContext, - out: &mut dyn handlebars::Output| - -> handlebars::HelperResult { - if let Some(enum_value) = h.param(0) { - if let Some(array) = enum_value.value().as_array() { - let pretty_options = array - .iter() - .filter_map(|v| v.as_str()) - .map(|s| format!("`{}`", s)) - .collect::>() - .join(", "); - out.write(&pretty_options)?; - return Ok(()); - } - } - out.write("Invalid enum")?; - Ok(()) - }, - ), - ); - - hbs.register_helper( - "pretty_enum", - Box::new( - |h: &handlebars::Helper, - _: &handlebars::Handlebars, - _: &handlebars::Context, - _: &mut handlebars::RenderContext, - out: &mut dyn handlebars::Output| - -> handlebars::HelperResult { - if let Some(enum_value) = h.param(0) { - if let Some(array) = enum_value.value().as_array() { - let pretty_options = array - .iter() - .filter_map(|v| v.as_str()) - .map(|s| format!("`{}`", s)) - .collect::>() - .join(", "); - out.write(&pretty_options)?; - return Ok(()); - } - } - out.write("Invalid enum")?; - Ok(()) - }, - ), - ); - - hbs.register_helper( - "pretty_ref", - Box::new( - |h: &handlebars::Helper, - _: &handlebars::Handlebars, - _: &handlebars::Context, - _: &mut handlebars::RenderContext, - out: &mut dyn handlebars::Output| - -> handlebars::HelperResult { - let param = h.param(0).and_then(|v| v.value().as_str()).unwrap_or(""); - let basename = param.split('/').next_back().unwrap_or(""); - out.write(&format!("`{}`", basename))?; - Ok(()) - }, - ), - ); - - // Register helper to remove newlines from a string. - hbs.register_helper( - "remove_newlines", - Box::new( - |h: &handlebars::Helper, - _: &handlebars::Handlebars, - _: &handlebars::Context, - _: &mut handlebars::RenderContext, - out: &mut dyn handlebars::Output| - -> handlebars::HelperResult { - if let Some(param) = h.param(0) { - if let Some(string) = param.value().as_str() { - out.write(&string.replace("\n", ""))?; - return Ok(()); - } - } - out.write("")?; - Ok(()) - }, - ), - ); - // Register a helper to do safe YAML new lines. hbs.register_helper( "safe_yaml", @@ -296,16 +103,9 @@ fn init_handlebars() -> Result> { ), ); - hbs.register_template_string("schemaType", include_str!("templates/schemaType.hbs"))?; - hbs.register_template_string("properties", include_str!("templates/properties.hbs"))?; - hbs.register_template_string("array", include_str!("templates/array.hbs"))?; - hbs.register_template_string("propertyType", include_str!("templates/propertyType.hbs"))?; - hbs.register_template_string("schema", include_str!("templates/schema.hbs"))?; hbs.register_template_string("index", include_str!("templates/index.hbs"))?; - hbs.register_template_string("consts-index", include_str!("templates/consts-index.hbs"))?; hbs.register_template_string("function", include_str!("templates/function.hbs"))?; hbs.register_template_string("const", include_str!("templates/const.hbs"))?; - hbs.register_template_string("type", include_str!("templates/type.hbs"))?; hbs.register_template_string("kclType", include_str!("templates/kclType.hbs"))?; Ok(hbs) @@ -318,7 +118,9 @@ fn generate_index(combined: &IndexMap>, kcl_lib: &[Doc functions.insert("std".to_owned(), Vec::new()); let mut constants = HashMap::new(); - constants.insert("std".to_owned(), Vec::new()); + + let mut types = HashMap::new(); + types.insert("Primitive types".to_owned(), Vec::new()); for key in combined.keys() { let internal_fn = combined @@ -335,33 +137,34 @@ fn generate_index(combined: &IndexMap>, kcl_lib: &[Doc .push((internal_fn.name(), internal_fn.name())); } + for name in SPECIAL_TYPES { + types + .get_mut("Primitive types") + .unwrap() + .push((name.to_owned(), format!("types.md#{name}"))); + } + for d in kcl_lib { if d.hide() { continue; } - functions.entry(d.mod_name()).or_default().push(match d { - DocData::Fn(f) => (f.preferred_name.clone(), d.file_name()), - DocData::Const(c) => (c.preferred_name.clone(), d.file_name()), - DocData::Ty(t) => (t.preferred_name.clone(), d.file_name()), - }); + let group = match d { + DocData::Fn(_) => functions.entry(d.mod_name()).or_default(), + DocData::Ty(_) => types.entry(d.mod_name()).or_default(), + DocData::Const(_) => constants.entry(d.mod_name()).or_default(), + }; - if let DocData::Const(c) = d { - constants - .entry(d.mod_name()) - .or_default() - .push((c.name.clone(), d.file_name())); - } + group.push((d.preferred_name().to_owned(), d.file_name())); } - // TODO we should sub-divide into types, constants, and functions. - let mut sorted: Vec<_> = functions + let mut sorted_fns: Vec<_> = functions .into_iter() .map(|(m, mut fns)| { fns.sort(); let val = json!({ "name": m, - "functions": fns.into_iter().map(|(n, f)| json!({ + "items": fns.into_iter().map(|(n, f)| json!({ "name": n, "file_name": f, })).collect::>(), @@ -369,35 +172,16 @@ fn generate_index(combined: &IndexMap>, kcl_lib: &[Doc (m, val) }) .collect(); - sorted.sort_by(|t1, t2| t1.0.cmp(&t2.0)); - let data: Vec<_> = sorted.into_iter().map(|(_, val)| val).collect(); + sorted_fns.sort_by(|t1, t2| t1.0.cmp(&t2.0)); + let functions_data: Vec<_> = sorted_fns.into_iter().map(|(_, val)| val).collect(); - let topics: Vec<_> = LANG_TOPICS - .iter() - .map(|name| { - json!({ - "name": name, - "file_name": name.to_lowercase().replace(' ', "-").replace("constants", "consts"), - }) - }) - .collect(); - let data = json!({ - "lang_topics": topics, - "modules": data, - }); - - let output = hbs.render("index", &data)?; - - expectorate::assert_contents("../../docs/kcl/index.md", &output); - - // Generate the index for the constants. let mut sorted_consts: Vec<_> = constants .into_iter() .map(|(m, mut consts)| { consts.sort(); let val = json!({ "name": m, - "consts": consts.into_iter().map(|(n, f)| json!({ + "items": consts.into_iter().map(|(n, f)| json!({ "name": n, "file_name": f, })).collect::>(), @@ -406,14 +190,45 @@ fn generate_index(combined: &IndexMap>, kcl_lib: &[Doc }) .collect(); sorted_consts.sort_by(|t1, t2| t1.0.cmp(&t2.0)); - let data: Vec<_> = sorted_consts.into_iter().map(|(_, val)| val).collect(); + let consts_data: Vec<_> = sorted_consts.into_iter().map(|(_, val)| val).collect(); + + let mut sorted_types: Vec<_> = types + .into_iter() + .map(|(m, mut tys)| { + tys.sort(); + let val = json!({ + "name": m, + "items": tys.into_iter().map(|(n, f)| json!({ + "name": n, + "file_name": f, + })).collect::>(), + }); + (m, val) + }) + .collect(); + sorted_types.sort_by(|t1, t2| t1.0.cmp(&t2.0)); + let types_data: Vec<_> = sorted_types.into_iter().map(|(_, val)| val).collect(); + + let topics: Vec<_> = LANG_TOPICS + .iter() + .map(|name| { + json!({ + "name": name, + "file_name": name.to_lowercase().replace(' ', "-"), + }) + }) + .collect(); + let data = json!({ - "consts": data, + "lang_topics": topics, + "functions": functions_data, + "consts": consts_data, + "types": types_data, }); - let output = hbs.render("consts-index", &data)?; + let output = hbs.render("index", &data)?; - expectorate::assert_contents("../../docs/kcl/consts.md", &output); + expectorate::assert_contents("../../docs/kcl/index.md", &output); Ok(()) } @@ -446,7 +261,7 @@ fn generate_example(index: usize, src: &str, props: &ExampleProperties, file_nam } fn generate_type_from_kcl(ty: &TyData, file_name: String, example_name: String) -> Result<()> { - if ty.properties.doc_hidden { + if ty.properties.doc_hidden || !DECLARED_TYPES.contains(&&*ty.name) { return Ok(()); } @@ -461,7 +276,7 @@ fn generate_type_from_kcl(ty: &TyData, file_name: String, example_name: String) let data = json!({ "name": ty.qual_name(), - "definition": ty.alias.as_ref().map(|t| cleanup_sig(format!("type {} = {t}", ty.preferred_name), ty.referenced_types.iter().filter(|t| !DECLARED_TYPES.contains(&&***t)))), + "definition": ty.alias.as_ref().map(|t| format!("type {} = {t}", ty.preferred_name)), "summary": ty.summary, "description": ty.description, "deprecated": ty.properties.deprecated, @@ -469,16 +284,13 @@ fn generate_type_from_kcl(ty: &TyData, file_name: String, example_name: String) }); let output = hbs.render("kclType", &data)?; - let output = cleanup_type_links( - &output, - ty.referenced_types.iter().filter(|t| !DECLARED_TYPES.contains(&&***t)), - ); + let output = cleanup_types(&output); expectorate::assert_contents(format!("../../docs/kcl/{}.md", file_name), &output); Ok(()) } -fn generate_function_from_kcl(function: &FnData, file_name: String) -> Result<()> { +fn generate_function_from_kcl(function: &FnData, file_name: String, example_name: String) -> Result<()> { if function.properties.doc_hidden { return Ok(()); } @@ -489,7 +301,7 @@ fn generate_function_from_kcl(function: &FnData, file_name: String) -> Result<() .examples .iter() .enumerate() - .filter_map(|(index, example)| generate_example(index, &example.0, &example.1, &file_name)) + .filter_map(|(index, example)| generate_example(index, &example.0, &example.1, &example_name)) .collect(); let data = json!({ @@ -497,10 +309,7 @@ fn generate_function_from_kcl(function: &FnData, file_name: String) -> Result<() "summary": function.summary, "description": function.description, "deprecated": function.properties.deprecated, - "fn_signature": cleanup_sig(function.preferred_name.clone() + &function.fn_signature(), function - .referenced_types - .iter() - .filter(|t| !DECLARED_TYPES.contains(&&***t))), + "fn_signature": function.preferred_name.clone() + &function.fn_signature(), "tags": [], "examples": examples, "is_utilities": false, @@ -521,14 +330,8 @@ fn generate_function_from_kcl(function: &FnData, file_name: String) -> Result<() }); let output = hbs.render("function", &data)?; - let output = cleanup_type_links( - &output, - function - .referenced_types - .iter() - .filter(|t| !DECLARED_TYPES.contains(&&***t)), - ); - expectorate::assert_contents(format!("../../docs/kcl/{}.md", file_name), &output); + let output = &cleanup_types(&output); + expectorate::assert_contents(format!("../../docs/kcl/{}.md", file_name), output); Ok(()) } @@ -562,11 +365,11 @@ fn generate_const_from_kcl(cnst: &ConstData, file_name: String, example_name: St Ok(()) } -fn generate_function(internal_fn: Box) -> Result> { +fn generate_function(internal_fn: Box) -> Result<()> { let hbs = init_handlebars()?; if internal_fn.unpublished() { - return Ok(BTreeMap::new()); + return Ok(()); } let fn_name = internal_fn.name(); @@ -598,48 +401,26 @@ fn generate_function(internal_fn: Box) -> Result>(), "return_value": internal_fn.return_value(false).map(|ret| { json!({ - "type_": ret.type_, + "type_": rename_type(&ret.type_), "description": ret.description(), }) }), @@ -647,295 +428,170 @@ fn generate_function(internal_fn: Box) -> Result(output: &str, types: impl Iterator) -> String { - let mut cleaned_output = output.to_string(); - - // Cleanup our weird number arrays. - // TODO: This is a hack for the handlebars template being too complex. - cleaned_output = cleaned_output.replace("`[, `number`, `number`]`", "`[number, number]`"); - cleaned_output = cleaned_output.replace("`[, `number`, `number`, `number`]`", "`[number, number, number]`"); - - // Fix the links to the types. - for type_name in types.map(|s| &**s).chain(DECLARED_TYPES) { - if type_name == "TagDeclarator" || type_name == "TagIdentifier" || type_name == "TagNode" || type_name == "tag" - { - continue; - } else { - let link = format!("(/docs/kcl/types/{})", type_name); - cleaned_output = - cleaned_output.replace(&format!("`{}`", type_name), &format!("[`{}`]{}", type_name, &link)); - // Do the same for the type with brackets. - cleaned_output = - cleaned_output.replace(&format!("`[{}]`", type_name), &format!("[`[{}]`]{}", type_name, link)); - } - } - - // TODO handle union types generically rather than special casing them. - cleaned_output = cleaned_output.replace( - "`Sketch | Plane | Face`", - "[`Sketch`](/docs/kcl/types/Sketch) or [`Plane`](/docs/kcl/types/Plane) or [`Face`](/docs/kcl/types/Face)", - ); - cleaned_output = cleaned_output.replace( - "`Axis3d | Edge`", - "[`Axis3d`](/docs/kcl/types/Axis3d) or [`Edge`](/docs/kcl/types/Edge)", - ); - cleaned_output = cleaned_output.replace( - "`Axis2d | Edge`", - "[`Axis2d`](/docs/kcl/types/Axis2d) or [`Edge`](/docs/kcl/types/Edge)", - ); - - // Fix the links to the types. - // Gross hack for the stupid alias types. - cleaned_output = cleaned_output.replace("TagNode", "TagDeclarator"); - - let link = "[`TagDeclarator`](/docs/kcl/types#tag-declaration)"; - cleaned_output = cleaned_output.replace("`TagDeclarator`", link); - let link = "[`TagIdentifier`](/docs/kcl/types#tag-identifier)"; - cleaned_output = cleaned_output.replace("`TagIdentifier`", link); - - cleaned_output -} - -// TODO total code dup with `cleanup_type_links`, just this version doesn't have the backticks. :-( -fn cleanup_sig<'a>(input: String, types: impl Iterator) -> String { - let mut cleaned_output = input; - - // Fix the links to the types. - for type_name in types.map(|s| &**s).chain(DECLARED_TYPES) { - if type_name == "TagDeclarator" || type_name == "TagIdentifier" || type_name == "TagNode" || type_name == "tag" - { - continue; - } else { - let link = format!("(/docs/kcl/types/{})", type_name); - // Do the same for the type with brackets. - cleaned_output = cleaned_output.replace(&format!("[{}]", type_name), &format!("[[{}]]{}", type_name, link)); - cleaned_output = cleaned_output.replace(type_name, &format!("[{}]{}", type_name, &link)); - } - } - - // TODO handle union types generically rather than special casing them. - cleaned_output = cleaned_output.replace( - "Sketch | Plane | Face", - "[Sketch](/docs/kcl/types/Sketch) | [Plane](/docs/kcl/types/Plane) | [Face](/docs/kcl/types/Face)", - ); - cleaned_output = cleaned_output.replace( - "Axis3d | Edge", - "[Axis3d](/docs/kcl/types/Axis3d) | [Edge](/docs/kcl/types/Edge)", - ); - cleaned_output = cleaned_output.replace( - "Axis2d | Edge", - "[Axis2d](/docs/kcl/types/Axis2d) | [Edge](/docs/kcl/types/Edge)", - ); - - // Fix the links to the types. - // Gross hack for the stupid alias types. - cleaned_output = cleaned_output.replace("TagNode", "TagDeclarator"); - - let link = "[TagDeclarator](/docs/kcl/types#tag-declaration)"; - cleaned_output = cleaned_output.replace("TagDeclarator", link); - let link = "[TagIdentifier](/docs/kcl/types#tag-identifier)"; - cleaned_output = cleaned_output.replace("TagIdentifier", link); - - cleaned_output -} - -fn add_to_types( - name: &str, - schema: &schemars::schema::Schema, - types: &mut BTreeMap, -) -> Result<()> { - if name.is_empty() { - return Err(anyhow::anyhow!("Empty type name")); - } - - if DECLARED_TYPES.contains(&name) || name == "TyF64" { - return Ok(()); - } - - if name.starts_with("number(") { - panic!("uom number"); - } - - let schemars::schema::Schema::Object(o) = schema else { - return Err(anyhow::anyhow!( - "Failed to get object schema, should have not been a primitive" - )); - }; - - if name == "SourceRange" { - types.insert(name.to_string(), schema.clone()); - return Ok(()); - } - - // If we have an array we want to generate the type markdown files for each item in the - // array. - if let Some(array) = &o.array { - // Recursively generate the type markdown files for each item in the array. - if let Some(items) = &array.items { - match items { - schemars::schema::SingleOrVec::Single(item) => { - if is_primitive(item)?.is_some() { - return Ok(()); - } - return add_to_types(name.trim_start_matches('[').trim_end_matches(']'), item, types); - } - schemars::schema::SingleOrVec::Vec(items) => { - for item in items { - if is_primitive(item)?.is_some() { - continue; - } - add_to_types(name.trim_start_matches('[').trim_end_matches(']'), item, types)?; - } - } - } - } else { - return Err(anyhow::anyhow!("Failed to get array items")); - } - } - - types.insert(name.to_string(), schema.clone()); - Ok(()) } -fn generate_type( - name: &str, - schema: &schemars::schema::Schema, - types: &BTreeMap, -) -> Result<()> { - if name.is_empty() { - return Err(anyhow::anyhow!("Empty type name")); +fn cleanup_types(input: &str) -> String { + #[derive(Copy, Clone, Eq, PartialEq, Debug)] + enum State { + Text, + PreCodeBlock, + CodeBlock, + CodeBlockType, + Slash, + Comment, } - // Skip over TagDeclarator and TagIdentifier since they have custom docs. - if name == "TagDeclarator" || name == "TagIdentifier" || name == "TagNode" || name == "TyF64" { - return Ok(()); - } + let mut output = String::new(); + let mut code_annot = String::new(); + let mut code = String::new(); + let mut code_type = String::new(); + let mut state = State::Text; + let mut ticks = 0; - let schemars::schema::Schema::Object(o) = schema else { - return Err(anyhow::anyhow!( - "Failed to get object schema, should have not been a primitive" - )); - }; - - // If we have an array we want to generate the type markdown files for each item in the - // array. - if let Some(array) = &o.array { - // Recursively generate the type markdown files for each item in the array. - if let Some(items) = &array.items { - match items { - schemars::schema::SingleOrVec::Single(item) => { - if is_primitive(item)?.is_some() { - return Ok(()); - } - return generate_type(name.trim_start_matches('[').trim_end_matches(']'), item, types); + for c in input.chars() { + if state == State::CodeBlockType { + if ['`', ',', '\n', ')', '/'].contains(&c) { + if code_type.starts_with(' ') { + code.push(' '); } - schemars::schema::SingleOrVec::Vec(items) => { - for item in items { - if is_primitive(item)?.is_some() { - continue; - } - generate_type(name.trim_start_matches('[').trim_end_matches(']'), item, types)?; + code.push_str(&cleanup_type_string(code_type.trim(), false)); + if code_type.ends_with(' ') { + code.push(' '); + } + + code_type = String::new(); + state = State::CodeBlock; + } else { + code_type.push(c); + continue; + } + } + if c == '`' { + if state == State::Comment { + code.push(c); + } else { + if state == State::Slash { + state = State::CodeBlock; + } + + ticks += 1; + if ticks == 3 { + if state == State::Text { + state = State::PreCodeBlock; + } else { + output.push_str("```"); + output.push_str(&code_annot); + output.push_str(&code); + // `code` includes the first two of three backticks + output.push('`'); + state = State::Text; + code_annot = String::new(); + code = String::new(); } - return Ok(()); + ticks = 0; + } else if state == State::Text && ticks == 2 && !code.is_empty() { + output.push_str(&cleanup_type_string(&code, true)); + code = String::new(); + ticks = 0; + } else if state == State::CodeBlock { + code.push(c); } } } else { - return Err(anyhow::anyhow!("Failed to get array items")); + if ticks == 2 { + // Empty code block + ticks = 0; + } + + if c == '\n' && (state == State::PreCodeBlock || state == State::Comment) { + state = State::CodeBlock; + } + + if c == '/' { + match state { + State::CodeBlock => state = State::Slash, + State::Slash => state = State::Comment, + _ => {} + } + } else if state == State::Slash { + state = State::CodeBlock; + } + + match state { + State::Text if ticks == 0 => output.push(c), + State::Text if ticks == 1 => code.push(c), + State::Text => unreachable!(), + State::PreCodeBlock => code_annot.push(c), + State::CodeBlock | State::Slash | State::Comment => code.push(c), + State::CodeBlockType => unreachable!(), + } + + if c == ':' && state == State::CodeBlock { + state = State::CodeBlockType; + } } } - // Make sure the name is pascal cased. - if !(name.is_case(convert_case::Case::Pascal) - || name == "Point3d" - || name == "Point2d" - || name == "CircularPattern2dData" - || name == "CircularPattern3dData" - || name == "LinearPattern2dData" - || name == "LinearPattern3dData" - || name == "Mirror2dData" - || name == "Axis2dOrEdgeReference" - || name == "Axis3dOrEdgeReference" - || name == "AxisAndOrigin2d" - || name == "AxisAndOrigin3d") - { - return Err(anyhow::anyhow!("Type name is not pascal cased: {}", name)); - } - - let cleaned_schema = recurse_and_create_references(name, schema, types)?; - - let schemars::schema::Schema::Object(o) = cleaned_schema else { - return Err(anyhow::anyhow!( - "Failed to get object schema, should have not been a primitive" - )); - }; - - let hbs = init_handlebars()?; - - // Add the name as the title. - let mut object = o.clone(); - if let Some(metadata) = object.metadata.as_mut() { - metadata.title = Some(name.to_string()); - } else { - object.metadata = Some(Box::new(schemars::schema::Metadata { - title: Some(name.to_string()), - ..Default::default() - })); - } - - // Cleanup the description. - let object = cleanup_type_description(&object) - .map_err(|e| anyhow::anyhow!("Failed to cleanup type description for type `{}`: {}", name, e))?; - - let data = json!(schemars::schema::Schema::Object(object)); - - let mut output = hbs.render("type", &data)?; - // Fix the links to the types. - output = cleanup_type_links(&output, types.keys()); - expectorate::assert_contents(format!("{}/{}.md", TYPES_DIR, name), &output); - - Ok(()) + output } -fn cleanup_type_description(object: &schemars::schema::SchemaObject) -> Result { - let mut object = object.clone(); - if let Some(metadata) = object.metadata.as_mut() { - if let Some(description) = metadata.description.as_mut() { - // Find any ```kcl code blocks and format the code. - // Parse any code blocks from the doc string. - let mut code_blocks = Vec::new(); - let d = description.clone(); - for line in d.lines() { - if line.starts_with("```kcl") && line.ends_with("```") { - code_blocks.push(line); +fn cleanup_type_string(input: &str, fmt_for_text: bool) -> String { + assert!( + !(input.starts_with('[') && input.ends_with(']') && input.contains('|')), + "Arrays of unions are not supported" + ); + + let input = rename_type(input); + + let tys: Vec<_> = input + .split('|') + .map(|ty| { + let ty = ty.trim(); + + let mut prefix = String::new(); + let mut suffix = String::new(); + + if fmt_for_text { + prefix.push('`'); + suffix.push('`'); + } + + let ty = if ty.starts_with('[') { + if ty.ends_with("; 1+]") { + prefix = format!("{prefix}["); + suffix = format!("; 1+]{suffix}"); + &ty[1..ty.len() - 5] + } else if ty.ends_with(']') { + prefix = format!("{prefix}["); + suffix = format!("]{suffix}"); + &ty[1..ty.len() - 1] + } else { + ty } + } else { + ty + }; + + // TODO markdown links in code blocks are not turned into links by our website stack. + // If we can handle signatures more manually we could get highlighting and links and + // we might want to restore the links by not checking `fmt_for_text` here. + + if fmt_for_text && SPECIAL_TYPES.contains(&ty) { + format!("[{prefix}{ty}{suffix}](/docs/kcl/types#{ty})") + } else if fmt_for_text && DECLARED_TYPES.contains(&ty) { + format!("[{prefix}{ty}{suffix}](/docs/kcl/types/std-types-{ty})") + } else { + format!("{prefix}{ty}{suffix}") } + }) + .collect(); - // Parse the kcl and recast it. - for code_block in &code_blocks { - let trimmed = code_block.trim_start_matches("```kcl").trim_end_matches("```"); - let program = crate::Program::parse_no_errs(trimmed)?; - - let options = crate::parsing::ast::types::FormatOptions { - insert_final_newline: false, - ..Default::default() - }; - let cleaned = program.ast.recast(&options, 0); - - *description = description.replace(code_block, &format!("```kcl\n{}\n```", cleaned)); - } - } - } - - Ok(object) + tys.join(if fmt_for_text { " or " } else { " | " }) } fn clean_function_name(name: &str) -> String { @@ -946,14 +602,6 @@ fn clean_function_name(name: &str) -> String { fn_name = fn_name.replace("last_seg_", "last_segment_"); } else if fn_name.contains("_2_d") { fn_name = fn_name.replace("_2_d", "_2d"); - } else if fn_name.contains("_greater_than_or_eq") { - fn_name = fn_name.replace("_greater_than_or_eq", "_gte"); - } else if fn_name.contains("_less_than_or_eq") { - fn_name = fn_name.replace("_less_than_or_eq", "_lte"); - } else if fn_name.contains("_greater_than") { - fn_name = fn_name.replace("_greater_than", "_gt"); - } else if fn_name.contains("_less_than") { - fn_name = fn_name.replace("_less_than", "_lt"); } else if fn_name.contains("_3_d") { fn_name = fn_name.replace("_3_d", "_3d"); } else if fn_name == "seg_ang" { @@ -962,172 +610,11 @@ fn clean_function_name(name: &str) -> String { fn_name = "segment_length".to_string(); } else if fn_name.starts_with("seg_") { fn_name = fn_name.replace("seg_", "segment_"); - } else if fn_name.starts_with("log_") { - fn_name = fn_name.replace("log_", "log"); - } else if fn_name.ends_with("tan_2") { - fn_name = fn_name.replace("tan_2", "tan2"); } fn_name } -/// Recursively create references for types we already know about. -fn recurse_and_create_references( - name: &str, - schema: &schemars::schema::Schema, - types: &BTreeMap, -) -> Result { - if DECLARED_TYPES.contains(&name) || name == "TyF64" { - return Ok(schema.clone()); - } - - let schemars::schema::Schema::Object(o) = schema else { - return Err(anyhow::anyhow!( - "Failed to get object schema, should have not been a primitive" - )); - }; - - // If we already have a reference add the metadata to the reference if it has none. - if let Some(reference) = &o.reference { - let mut obj = o.clone(); - let reference = reference.trim_start_matches("#/components/schemas/"); - if DECLARED_TYPES.contains(&reference) || reference == "TyF64" { - return Ok(schema.clone()); - } - - let t = types - .get(reference) - .ok_or_else(|| anyhow::anyhow!("Failed to get type: {} {:?}", reference, types.keys()))?; - - let schemars::schema::Schema::Object(to) = t else { - return Err(anyhow::anyhow!( - "Failed to get object schema, should have not been a primitive" - )); - }; - - // If this is a primitive just use the primitive. - if to.subschemas.is_none() && to.object.is_none() && to.reference.is_none() { - return Ok(t.clone()); - } - - // Otherwise append the metadata to our reference. - if let Some(metadata) = obj.metadata.as_mut() { - if metadata.description.is_none() { - metadata.description = to.metadata.as_ref().and_then(|m| m.description.clone()); - } - } else { - obj.metadata = to.metadata.clone(); - } - - let obj = cleanup_type_description(&obj) - .map_err(|e| anyhow::anyhow!("Failed to cleanup type description for type `{}`: {}", name, e))?; - return Ok(schemars::schema::Schema::Object(obj)); - } - - let mut obj = o.clone(); - - // If we have an object iterate over the properties and recursively create references. - if let Some(object) = &mut obj.object { - for (_, value) in object.properties.iter_mut() { - let new_value = recurse_and_create_references(name, value, types)?; - *value = new_value; - } - } - - // If we have an array iterate over the items and recursively create references. - if let Some(array) = &mut obj.array { - if let Some(items) = &mut array.items { - match items { - schemars::schema::SingleOrVec::Single(item) => { - let new_item = recurse_and_create_references(name, item, types)?; - *item = Box::new(new_item); - } - schemars::schema::SingleOrVec::Vec(items) => { - for item in items { - let new_item = recurse_and_create_references(name, item, types)?; - *item = new_item; - } - } - } - } - } - - // If we have subschemas iterate over them and recursively create references. - if let Some(subschema) = &mut obj.subschemas { - // Do anyOf. - if let Some(any_of) = &mut subschema.any_of { - // If we only have one item in anyOf we can just return that item. - if any_of.len() == 1 { - let mut new_item = recurse_and_create_references(name, &any_of[0], types)?; - if let schemars::schema::Schema::Object(new_obj) = &mut new_item { - if let Some(metadata) = new_obj.metadata.as_mut() { - metadata.description = obj.metadata.as_ref().and_then(|m| m.description.clone()); - } else { - new_obj.metadata = obj.metadata.clone(); - } - } - return Ok(new_item); - } - for item in any_of { - let new_item = recurse_and_create_references(name, item, types)?; - *item = new_item; - } - } - - // Do allOf. - if let Some(all_of) = &mut subschema.all_of { - // If we only have one item in allOf we can just return that item. - if all_of.len() == 1 { - let mut new_item = recurse_and_create_references(name, &all_of[0], types)?; - if let schemars::schema::Schema::Object(new_obj) = &mut new_item { - if let Some(metadata) = new_obj.metadata.as_mut() { - metadata.description = obj.metadata.as_ref().and_then(|m| m.description.clone()); - } else { - new_obj.metadata = obj.metadata.clone(); - } - } - return Ok(new_item); - } - for item in all_of { - let new_item = recurse_and_create_references(name, item, types)?; - *item = new_item; - } - } - - // Do oneOf. - if let Some(one_of) = &mut subschema.one_of { - // If we only have one item in oneOf we can just return that item. - if one_of.len() == 1 { - let mut new_item = recurse_and_create_references(name, &one_of[0], types)?; - if let schemars::schema::Schema::Object(new_obj) = &mut new_item { - if let Some(metadata) = new_obj.metadata.as_mut() { - metadata.description = obj.metadata.as_ref().and_then(|m| m.description.clone()); - } else { - new_obj.metadata = obj.metadata.clone(); - } - } - return Ok(new_item); - } - for item in one_of { - let new_item = recurse_and_create_references(name, item, types)?; - *item = new_item; - } - } - - if subschema.one_of.is_none() && subschema.all_of.is_none() && subschema.any_of.is_none() && obj.array.is_none() - { - if let Some(SingleOrVec::Single(_)) = &o.instance_type { - return Ok(schema.clone()); - } - } - } - - let obj = cleanup_type_description(&obj) - .map_err(|e| anyhow::anyhow!("Failed to cleanup type description for type `{}`: {}", name, e))?; - - Ok(schemars::schema::Schema::Object(obj.clone())) -} - #[test] fn test_generate_stdlib_markdown_docs() { let stdlib = StdLib::new(); @@ -1137,25 +624,24 @@ fn test_generate_stdlib_markdown_docs() { // Generate the index which is the table of contents. generate_index(&combined, &kcl_std).unwrap(); - let mut types = BTreeMap::new(); for key in combined.keys().sorted() { let internal_fn = combined.get(key).unwrap(); - let fn_types = generate_function(internal_fn.clone()).unwrap(); - types.extend(fn_types); - } - - // Generate the type markdown files. - for (name, schema) in &types { - generate_type(name, schema, &types).unwrap(); + generate_function(internal_fn.clone()).unwrap(); } for d in &kcl_std { match d { - DocData::Fn(f) => generate_function_from_kcl(f, d.file_name()).unwrap(), + DocData::Fn(f) => generate_function_from_kcl(f, d.file_name(), d.example_name()).unwrap(), DocData::Const(c) => generate_const_from_kcl(c, d.file_name(), d.example_name()).unwrap(), DocData::Ty(t) => generate_type_from_kcl(t, d.file_name(), d.example_name()).unwrap(), } } + + // Copy manually written docs to the output directory. + for entry in fs::read_dir("../../docs/kcl-src").unwrap() { + let path = entry.unwrap().path(); + fs::copy(&path, Path::new("../../docs/kcl").join(path.file_name().unwrap())).unwrap(); + } } #[test] @@ -1185,8 +671,7 @@ fn test_generate_stdlib_json_schema() { async fn test_code_in_topics() { let mut join_set = JoinSet::new(); for name in LANG_TOPICS { - let filename = - format!("../../docs/kcl/{}.md", name.to_lowercase().replace(' ', "-")).replace("constants", "consts"); + let filename = format!("../../docs/kcl/{}.md", name.to_lowercase().replace(' ', "-")); let mut file = File::open(&filename).unwrap(); let mut text = String::new(); file.read_to_string(&mut text).unwrap(); diff --git a/rust/kcl-lib/src/docs/kcl_doc.rs b/rust/kcl-lib/src/docs/kcl_doc.rs index a36ecde75..e01e8b72b 100644 --- a/rust/kcl-lib/src/docs/kcl_doc.rs +++ b/rust/kcl-lib/src/docs/kcl_doc.rs @@ -1,8 +1,4 @@ -use std::{ - collections::{HashMap, HashSet}, - fmt, - str::FromStr, -}; +use std::{collections::HashMap, fmt, str::FromStr}; use regex::Regex; use tower_lsp::lsp_types::{ @@ -13,7 +9,7 @@ use tower_lsp::lsp_types::{ use crate::{ execution::annotations, parsing::{ - ast::types::{Annotation, ImportSelector, ItemVisibility, Node, PrimitiveType, Type, VariableKind}, + ast::types::{Annotation, ImportSelector, ItemVisibility, Node, VariableKind}, token::NumericSuffix, }, ModuleId, @@ -159,6 +155,15 @@ impl DocData { } } + #[allow(dead_code)] + pub fn preferred_name(&self) -> &str { + match self { + DocData::Fn(f) => &f.preferred_name, + DocData::Const(c) => &c.preferred_name, + DocData::Ty(t) => &t.preferred_name, + } + } + pub fn qual_name(&self) -> &str { match self { DocData::Fn(f) => &f.qual_name, @@ -180,18 +185,18 @@ impl DocData { #[allow(dead_code)] pub fn file_name(&self) -> String { match self { - DocData::Fn(f) => f.qual_name.replace("::", "-"), + DocData::Fn(f) => format!("functions/{}", f.qual_name.replace("::", "-")), DocData::Const(c) => format!("consts/{}", c.qual_name.replace("::", "-")), - DocData::Ty(t) => format!("types/{}", t.name.clone()), + DocData::Ty(t) => format!("types/{}", t.qual_name.replace("::", "-")), } } #[allow(dead_code)] pub fn example_name(&self) -> String { match self { - DocData::Fn(f) => f.qual_name.replace("::", "-"), + DocData::Fn(f) => format!("fn_{}", f.qual_name.replace("::", "-")), DocData::Const(c) => format!("const_{}", c.qual_name.replace("::", "-")), - DocData::Ty(t) => t.name.clone(), + DocData::Ty(t) => format!("ty_{}", t.qual_name.replace("::", "-")), } } @@ -400,8 +405,6 @@ pub struct FnData { /// Code examples. /// These are tested and we know they compile and execute. pub examples: Vec<(String, ExampleProperties)>, - #[allow(dead_code)] - pub referenced_types: Vec, pub module_name: String, } @@ -420,16 +423,6 @@ impl FnData { let name = var.declaration.id.name.clone(); qual_name.push_str(&name); - let mut referenced_types = HashSet::new(); - if let Some(t) = &expr.return_type { - collect_type_names(&mut referenced_types, t); - } - for p in &expr.params { - if let Some(t) = &p.type_ { - collect_type_names(&mut referenced_types, t); - } - } - FnData { preferred_name: format!("{preferred_prefix}{name}"), name, @@ -445,7 +438,6 @@ impl FnData { summary: None, description: None, examples: Vec::new(), - referenced_types: referenced_types.into_iter().collect(), module_name: module_name.to_owned(), } } @@ -726,8 +718,6 @@ pub struct TyData { /// Code examples. /// These are tested and we know they compile and execute. pub examples: Vec<(String, ExampleProperties)>, - #[allow(dead_code)] - pub referenced_types: Vec, pub module_name: String, } @@ -741,10 +731,6 @@ impl TyData { ) -> Self { let name = ty.name.name.clone(); qual_name.push_str(&name); - let mut referenced_types = HashSet::new(); - if let Some(t) = &ty.alias { - collect_type_names(&mut referenced_types, t); - } TyData { preferred_name: format!("{preferred_prefix}{name}"), @@ -760,7 +746,6 @@ impl TyData { summary: None, description: None, examples: Vec::new(), - referenced_types: referenced_types.into_iter().collect(), module_name: module_name.to_owned(), } } @@ -1056,35 +1041,6 @@ impl ApplyMeta for ArgData { } } -fn collect_type_names(acc: &mut HashSet, ty: &Type) { - match ty { - Type::Primitive(primitive_type) => { - acc.insert(collect_type_names_from_primitive(primitive_type)); - } - Type::Array { ty, .. } => { - collect_type_names(acc, ty); - } - Type::Union { tys } => tys.iter().for_each(|t| { - acc.insert(collect_type_names_from_primitive(t)); - }), - Type::Object { properties } => properties.iter().for_each(|p| { - if let Some(t) = &p.type_ { - collect_type_names(acc, t) - } - }), - } -} - -fn collect_type_names_from_primitive(ty: &PrimitiveType) -> String { - match ty { - PrimitiveType::String => "string".to_owned(), - PrimitiveType::Number(_) => "number".to_owned(), - PrimitiveType::Boolean => "bool".to_owned(), - PrimitiveType::Tag => "tag".to_owned(), - PrimitiveType::Named(id) => id.name.clone(), - } -} - #[cfg(test)] mod test { use kcl_derive_docs::for_each_std_mod; diff --git a/rust/kcl-lib/src/docs/templates/array.hbs b/rust/kcl-lib/src/docs/templates/array.hbs deleted file mode 100644 index 3a1fcc1d5..000000000 --- a/rust/kcl-lib/src/docs/templates/array.hbs +++ /dev/null @@ -1 +0,0 @@ -{{~ #if maxItems ~}}{{~ #if (lte maxItems 3) ~}}`[{{#times maxItems ~}}{{~ #if @first ~}}{{else ~}}, {{/if ~}}{{> propertyType ../items}}{{/times}}]`{{else ~}}`[` {{ > propertyType items }} `]`{{~ /if ~}}{{else ~}}`[` {{ > propertyType items }} `]`{{~ /if ~}} diff --git a/rust/kcl-lib/src/docs/templates/consts-index.hbs b/rust/kcl-lib/src/docs/templates/consts-index.hbs deleted file mode 100644 index b489921d5..000000000 --- a/rust/kcl-lib/src/docs/templates/consts-index.hbs +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "KCL Constants" -excerpt: "Documentation for the KCL constants." -layout: manual ---- - -## Table of Contents - -{{#each consts}} - -### `{{name}}` - -{{#each consts}} -- [`{{name}}`](/docs/kcl/{{file_name}}) -{{/each}} -{{/each}} - diff --git a/rust/kcl-lib/src/docs/templates/index.hbs b/rust/kcl-lib/src/docs/templates/index.hbs index 40cfc6e09..f03800824 100644 --- a/rust/kcl-lib/src/docs/templates/index.hbs +++ b/rust/kcl-lib/src/docs/templates/index.hbs @@ -12,11 +12,31 @@ layout: manual * [`{{name}}`](kcl/{{file_name}}) {{/each}} -### Standard library +### Functions -{{#each modules}} -* **{{name}}** {{#each functions}} +* **{{name}}** +{{#each items}} * [`{{name}}`](kcl/{{file_name}}) {{/each}} {{/each}} + +### Constants + +{{#each consts}} +* **{{name}}** +{{#each items}} + * [`{{name}}`](kcl/{{file_name}}) +{{/each}} +{{/each}} + +### Types + +See also the [types overview](types) + +{{#each types}} +* **{{name}}** +{{#each items}} + * [`{{name}}`](kcl/{{file_name}}) +{{/each}} +{{/each}} \ No newline at end of file diff --git a/rust/kcl-lib/src/docs/templates/properties.hbs b/rust/kcl-lib/src/docs/templates/properties.hbs deleted file mode 100644 index 283f68456..000000000 --- a/rust/kcl-lib/src/docs/templates/properties.hbs +++ /dev/null @@ -1,13 +0,0 @@ -{{#if properties}} -{{#if @root.inDefinition}} -#### Properties -{{else}} -## Properties -{{/if}} - -| Property | Type | Description | Required | -|----------|------|-------------|----------| -{{#each properties}} -| `{{@key}}` | {{~ > propertyType this ~}} | {{{firstLine this.description}}} | {{#if (lookup ../required @key)}}Yes{{else}}No{{/if}} | -{{/each}} -{{/if}} diff --git a/rust/kcl-lib/src/docs/templates/propertyType.hbs b/rust/kcl-lib/src/docs/templates/propertyType.hbs deleted file mode 100644 index 1c7064831..000000000 --- a/rust/kcl-lib/src/docs/templates/propertyType.hbs +++ /dev/null @@ -1,11 +0,0 @@ -{{~ #if $ref ~}} -{{pretty_ref $ref}}{{else if anyOf ~}} -**anyOf:** {{#each anyOf}}{{> propertyType this}}{{#unless @last}} **OR** {{/unless}}{{/each}}{{else if oneOf ~}} -**oneOf:** {{#each oneOf}}{{> propertyType this}}{{#unless @last}} **OR** {{/unless}}{{/each}}{{else if allOf ~}} -**allOf:** {{#each allOf}}{{> propertyType this}}{{#unless @last}} **OR** {{/unless}}{{/each}}{{else if enum ~}} -enum: {{pretty_enum enum}}{{else if items ~}} -{{~ >array ~}}{{else ~}} -`{{type}}{{~ #if format }}{{#if neq format "double" }} ({{format}}){{~/if ~}} -{{~ /if ~}}` -{{~ #if maximum }} (**maximum:** {{maximum}}){{~/if~}}{{~ #if minimum }} (**minimum:** {{minimum}}){{~/if~}} -{{~ /if ~}} diff --git a/rust/kcl-lib/src/docs/templates/schema.hbs b/rust/kcl-lib/src/docs/templates/schema.hbs deleted file mode 100644 index 6dca717f5..000000000 --- a/rust/kcl-lib/src/docs/templates/schema.hbs +++ /dev/null @@ -1,70 +0,0 @@ -{{#if description}} -{{{description}}} -{{/if}} - -{{#if $ref}} -{{pretty_ref $ref}} -{{else if enum}} -**enum:** {{pretty_enum enum}} -{{else if type}} -**Type:** `{{type}}`{{~ #if format }} (`{{format}}`){{~/if ~}}{{~ #if maximum }} (**maximum:** {{maximum}}){{~/if~}}{{~ #if minimum }} (**minimum:** {{minimum}}){{~/if~}} -{{else}} -{{/if}} - -{{#if $schema}} -**Schema:** `{{$schema}}` -{{/if}} - -{{#if items}} -{{>array}} -{{/if}} - -{{#if anyOf}} -**This schema accepts any of the following:** - -{{#each anyOf}} -{{> schema this}} ----- -{{/each}} -{{/if}} - -{{#if oneOf}} -**This schema accepts exactly one of the following:** - -{{#each oneOf}} -{{> schema this}} ----- -{{/each}} -{{/if}} - -{{#if allOf}} -**This schema requires all of the following:** - -{{#each allOf}} -{{> schema this}} ----- -{{/each}} -{{/if}} - -{{> properties}} - -{{#if definitions}} -## Definitions - -{{#each definitions}} -### {{@key}} - -{{> schemaType this}} - -{{/each}} -{{/if}} - -{{#if examples}} -## Examples - -{{#each examples}} -```json -{{{json this}}} -``` -{{/each}} -{{/if}} diff --git a/rust/kcl-lib/src/docs/templates/schemaType.hbs b/rust/kcl-lib/src/docs/templates/schemaType.hbs deleted file mode 100644 index b28637518..000000000 --- a/rust/kcl-lib/src/docs/templates/schemaType.hbs +++ /dev/null @@ -1,19 +0,0 @@ -{{#if $ref}} -{{pretty_ref $ref}} -{{else if anyOf}} -**anyOf** -{{else if oneOf}} -**oneOf** -{{else if allOf}} -**allOf** -{{else if enum}} -**enum:** {{pretty_enum enum}} -{{else}} -`{{type}}`{{ -#if - format}} (`{{format}}`){{ -/if -}} -{{ -/if -}} diff --git a/rust/kcl-lib/src/docs/templates/type.hbs b/rust/kcl-lib/src/docs/templates/type.hbs deleted file mode 100644 index 0a1050857..000000000 --- a/rust/kcl-lib/src/docs/templates/type.hbs +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "{{title}}" -excerpt: "{{safe_yaml description}}" -layout: manual ---- - -{{> schema this}} diff --git a/rust/kcl-lib/src/execution/artifact.rs b/rust/kcl-lib/src/execution/artifact.rs index 1bfa8f2d6..07e26df39 100644 --- a/rust/kcl-lib/src/execution/artifact.rs +++ b/rust/kcl-lib/src/execution/artifact.rs @@ -15,7 +15,7 @@ use uuid::Uuid; use crate::{ errors::KclErrorDetails, parsing::ast::types::{Node, Program}, - KclError, SourceRange, + KclError, NodePath, SourceRange, }; #[cfg(test)] @@ -120,6 +120,7 @@ where #[serde(rename_all = "camelCase")] pub struct CodeRef { pub range: SourceRange, + pub node_path: NodePath, // TODO: We should implement this in Rust. #[serde(default, serialize_with = "serialize_dummy_path_to_node")] #[ts(type = "Array<[string | number, string]>")] @@ -130,6 +131,7 @@ impl CodeRef { pub fn placeholder(range: SourceRange) -> Self { Self { range, + node_path: Default::default(), path_to_node: Vec::new(), } } @@ -780,6 +782,7 @@ fn flatten_modeling_command_responses( | OkWebSocketResponseData::Export { .. } | OkWebSocketResponseData::MetricsRequest { .. } | OkWebSocketResponseData::ModelingSessionData { .. } + | OkWebSocketResponseData::Debug { .. } | OkWebSocketResponseData::Pong { .. } => {} } } @@ -824,15 +827,21 @@ fn artifacts_to_update( artifact_command: &ArtifactCommand, responses: &FnvHashMap, path_to_plane_id_map: &FnvHashMap, - _ast: &Node, + ast: &Node, exec_artifacts: &IndexMap, ) -> Result, KclError> { // TODO: Build path-to-node from artifact_command source range. Right now, // we're serializing an empty array, and the TS wrapper fills it in with the - // correct value. + // correct value based on NodePath. let path_to_node = Vec::new(); - let range = artifact_command.range; + let node_path = NodePath::from_range(ast, range).unwrap_or_default(); + let code_ref = CodeRef { + range, + node_path, + path_to_node, + }; + let uuid = artifact_command.cmd_id; let id = ArtifactId::new(uuid); @@ -854,7 +863,7 @@ fn artifacts_to_update( return Ok(vec![Artifact::Plane(Plane { id, path_ids: Vec::new(), - code_ref: CodeRef { range, path_to_node }, + code_ref, })]); } ModelingCmd::EnableSketchMode(EnableSketchMode { entity_id, .. }) => { @@ -890,7 +899,7 @@ fn artifacts_to_update( return Ok(vec![Artifact::Plane(Plane { id: entity_id.into(), path_ids, - code_ref: CodeRef { range, path_to_node }, + code_ref, })]); } } @@ -911,15 +920,15 @@ fn artifacts_to_update( seg_ids: Vec::new(), sweep_id: None, solid2d_id: None, - code_ref: CodeRef { range, path_to_node }, + code_ref, })); let plane = artifacts.get(&ArtifactId::new(*current_plane_id)); if let Some(Artifact::Plane(plane)) = plane { - let code_ref = plane.code_ref.clone(); + let plane_code_ref = plane.code_ref.clone(); return_arr.push(Artifact::Plane(Plane { id: (*current_plane_id).into(), path_ids: vec![id], - code_ref, + code_ref: plane_code_ref, })); } if let Some(Artifact::Wall(wall)) = plane { @@ -959,7 +968,7 @@ fn artifacts_to_update( surface_id: None, edge_ids: Vec::new(), edge_cut_id: None, - code_ref: CodeRef { range, path_to_node }, + code_ref, common_surface_ids: Vec::new(), })); let path = artifacts.get(&path_id); @@ -1000,7 +1009,7 @@ fn artifacts_to_update( path_id: target, surface_ids: Vec::new(), edge_ids: Vec::new(), - code_ref: CodeRef { range, path_to_node }, + code_ref, })); let path = artifacts.get(&target); if let Some(Artifact::Path(path)) = path { @@ -1028,7 +1037,7 @@ fn artifacts_to_update( })?), surface_ids: Vec::new(), edge_ids: Vec::new(), - code_ref: CodeRef { range, path_to_node }, + code_ref, })); for section_id in &loft_cmd.section_ids { let path = artifacts.get(&ArtifactId::new(*section_id)); @@ -1094,6 +1103,7 @@ fn artifacts_to_update( path_ids: Vec::new(), face_code_ref: CodeRef { range: sketch_on_face_source_range, + node_path: NodePath::from_range(ast, sketch_on_face_source_range).unwrap_or_default(), path_to_node: Vec::new(), }, cmd_id: artifact_command.cmd_id, @@ -1146,6 +1156,7 @@ fn artifacts_to_update( path_ids: Vec::new(), face_code_ref: CodeRef { range: sketch_on_face_source_range, + node_path: NodePath::from_range(ast, sketch_on_face_source_range).unwrap_or_default(), path_to_node: Vec::new(), }, cmd_id: artifact_command.cmd_id, @@ -1254,7 +1265,7 @@ fn artifacts_to_update( consumed_edge_id: cmd.edge_id.into(), edge_ids: Vec::new(), surface_id: None, - code_ref: CodeRef { range, path_to_node }, + code_ref, })); let consumed_edge = artifacts.get(&ArtifactId::new(cmd.edge_id)); if let Some(Artifact::Segment(consumed_edge)) = consumed_edge { @@ -1270,7 +1281,7 @@ fn artifacts_to_update( let return_arr = vec![Artifact::Helix(Helix { id, axis_id: None, - code_ref: CodeRef { range, path_to_node }, + code_ref, })]; return Ok(return_arr); } @@ -1279,7 +1290,7 @@ fn artifacts_to_update( let return_arr = vec![Artifact::Helix(Helix { id, axis_id: Some(edge_id), - code_ref: CodeRef { range, path_to_node }, + code_ref, })]; // We could add the reverse graph edge connecting from the edge to // the helix here, but it's not useful right now. @@ -1356,10 +1367,7 @@ fn artifacts_to_update( sub_type, solid_ids: solid_ids.clone(), tool_ids: tool_ids.clone(), - code_ref: CodeRef { - range, - path_to_node: path_to_node.clone(), - }, + code_ref: code_ref.clone(), }) }) .collect::>(); diff --git a/rust/kcl-lib/src/execution/exec_ast.rs b/rust/kcl-lib/src/execution/exec_ast.rs index e703bedb3..b6533fd11 100644 --- a/rust/kcl-lib/src/execution/exec_ast.rs +++ b/rust/kcl-lib/src/execution/exec_ast.rs @@ -2187,7 +2187,15 @@ fn assign_args_to_params_kw( .mut_stack() .add(param.identifier.name.clone(), arg_val, (¶m.identifier).into())?; } else { - let Some(unlabeled) = args.unlabeled.take() else { + // TODO: Get the actual source range. + // Part of https://github.com/KittyCAD/modeling-app/issues/6613 + let pipe_value_source_range = Default::default(); + let default_unlabeled = exec_state + .mod_local + .pipe_value + .clone() + .map(|val| Arg::new(val, pipe_value_source_range)); + let Some(unlabeled) = args.unlabeled.take().or(default_unlabeled) else { let param_name = ¶m.identifier.name; return Err(if args.labeled.contains_key(param_name) { KclError::Semantic(KclErrorDetails { diff --git a/rust/kcl-lib/src/execution/geometry.rs b/rust/kcl-lib/src/execution/geometry.rs index 6aeaed19c..5385addac 100644 --- a/rust/kcl-lib/src/execution/geometry.rs +++ b/rust/kcl-lib/src/execution/geometry.rs @@ -8,12 +8,11 @@ use parse_display::{Display, FromStr}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use crate::engine::{PlaneName, DEFAULT_PLANE_INFO}; -use crate::errors::KclErrorDetails; #[cfg(feature = "artifact-graph")] use crate::execution::ArtifactId; use crate::{ - errors::KclError, + engine::{PlaneName, DEFAULT_PLANE_INFO}, + errors::{KclError, KclErrorDetails}, execution::{types::NumericType, ExecState, ExecutorContext, Metadata, TagEngineInfo, TagIdentifier, UnitLen}, parsing::ast::types::{Node, NodeRef, TagDeclarator, TagNode}, std::{args::TyF64, sketch::PlaneData}, diff --git a/rust/kcl-lib/src/execution/mod.rs b/rust/kcl-lib/src/execution/mod.rs index 5bd51ef47..d9686ec1c 100644 --- a/rust/kcl-lib/src/execution/mod.rs +++ b/rust/kcl-lib/src/execution/mod.rs @@ -1298,16 +1298,16 @@ mod tests { #[tokio::test(flavor = "multi_thread")] async fn test_execute_fn_definitions() { - let ast = r#"fn def(x) { + let ast = r#"fn def(@x) { return x } -fn ghi(x) { +fn ghi(@x) { return x } -fn jkl(x) { +fn jkl(@x) { return x } -fn hmm(x) { +fn hmm(@x) { return x } @@ -1408,7 +1408,7 @@ firstExtrude = startSketchOn(XY) l = 8 h = 10 -fn thing(x) { +fn thing(@x) { return -x } @@ -1429,7 +1429,7 @@ firstExtrude = startSketchOn(XY) l = 8 h = 10 -fn thing(x) { +fn thing(@x) { return [0, -x] } @@ -1450,11 +1450,11 @@ firstExtrude = startSketchOn(XY) l = 8 h = 10 -fn other_thing(y) { +fn other_thing(@y) { return -y } -fn thing(x) { +fn thing(@x) { return other_thing(x) } @@ -1483,14 +1483,14 @@ firstExtrude = startSketchOn(XY) return myBox } -fnBox = box(3, 6, 10)"#; +fnBox = box(h = 3, l = 6, w = 10)"#; parse_execute(ast).await.unwrap(); } #[tokio::test(flavor = "multi_thread")] async fn test_get_member_of_object_with_function_period() { - let ast = r#"fn box(obj) { + let ast = r#"fn box(@obj) { myBox = startSketchOn(XY) |> startProfile(at = obj.start) |> line(end = [0, obj.l]) @@ -1577,7 +1577,7 @@ for var in [[3, 6, 10, [0,0]], [1.5, 3, 5, [-10,-10]]] { #[tokio::test(flavor = "multi_thread")] async fn test_get_member_of_array_with_function() { - let ast = r#"fn box(arr) { + let ast = r#"fn box(@arr) { myBox =startSketchOn(XY) |> startProfile(at = arr[0]) |> line(end = [0, arr[1]]) @@ -1623,7 +1623,7 @@ answer = returnX()"#; #[tokio::test(flavor = "multi_thread")] async fn type_aliases() { let text = r#"type MyTy = [number; 2] -fn foo(x: MyTy) { +fn foo(@x: MyTy) { return x[0] } @@ -1783,7 +1783,7 @@ fn check(x) { assertIs(!x, error = "expected argument to be false") return true } -check(false) +check(x = false) "#; let result = parse_execute(ast).await.unwrap(); assert_eq!( @@ -1961,7 +1961,7 @@ bracket = startSketchOn(XY) #[tokio::test(flavor = "multi_thread")] async fn test_execute_function_no_return() { - let ast = r#"fn test(origin) { + let ast = r#"fn test(@origin) { origin } @@ -2154,7 +2154,7 @@ w = f() + f() #[tokio::test(flavor = "multi_thread")] async fn read_tag_version() { - let ast = r#"fn bar(t) { + let ast = r#"fn bar(@t) { return startSketchOn(XY) |> startProfile(at = [0,0]) |> angledLine( diff --git a/rust/kcl-lib/src/lib.rs b/rust/kcl-lib/src/lib.rs index b801ff322..9c6302e67 100644 --- a/rust/kcl-lib/src/lib.rs +++ b/rust/kcl-lib/src/lib.rs @@ -95,7 +95,7 @@ pub use lsp::{ kcl::{Backend as KclLspBackend, Server as KclLspServerSubCommand}, }; pub use modules::ModuleId; -pub use parsing::ast::types::FormatOptions; +pub use parsing::ast::types::{FormatOptions, NodePath}; pub use settings::types::{project::ProjectConfiguration, Configuration, UnitLength}; pub use source_range::SourceRange; #[cfg(not(target_arch = "wasm32"))] @@ -236,6 +236,10 @@ impl Program { self.ast.lint(rule) } + pub fn node_path_from_range(&self, range: SourceRange) -> Option { + NodePath::from_range(&self.ast, range) + } + pub fn recast(&self) -> String { // Use the default options until we integrate into the UI the ability to change them. self.ast.recast(&Default::default(), 0) diff --git a/rust/kcl-lib/src/lint/checks/default_plane.rs b/rust/kcl-lib/src/lint/checks/default_plane.rs index 90b18f6d4..267cb971e 100644 --- a/rust/kcl-lib/src/lint/checks/default_plane.rs +++ b/rust/kcl-lib/src/lint/checks/default_plane.rs @@ -2,13 +2,14 @@ use anyhow::Result; use crate::{ errors::Suggestion, - lint::rule::{def_finding, Discovered, Finding}, + lint::{ + checks::offset_plane::start_sketch_on_check_specific_plane, + rule::{def_finding, Discovered, Finding}, + }, parsing::ast::types::{Node as AstNode, Program}, walk::Node, }; -use super::offset_plane::start_sketch_on_check_specific_plane; - def_finding!( Z0002, "default plane should be called versus explicitly defined", diff --git a/rust/kcl-lib/src/lint/checks/offset_plane.rs b/rust/kcl-lib/src/lint/checks/offset_plane.rs index fa5d670bd..67f7d49d1 100644 --- a/rust/kcl-lib/src/lint/checks/offset_plane.rs +++ b/rust/kcl-lib/src/lint/checks/offset_plane.rs @@ -5,7 +5,10 @@ use crate::{ errors::Suggestion, execution::{types::UnitLen, PlaneInfo, Point3d}, lint::rule::{def_finding, Discovered, Finding}, - parsing::ast::types::{BinaryPart, Expr, LiteralValue, Node as AstNode, ObjectExpression, Program, UnaryOperator}, + parsing::ast::types::{ + BinaryPart, CallExpression, CallExpressionKw, Expr, LiteralValue, Node as AstNode, ObjectExpression, Program, + UnaryOperator, + }, walk::Node, SourceRange, }; @@ -124,10 +127,16 @@ fn get_offset(info: &PlaneInfo) -> Option { } pub fn start_sketch_on_check_specific_plane(node: Node) -> Result> { - let Node::CallExpression(call) = node else { - return Ok(None); - }; + match node { + Node::CallExpression(node) => start_sketch_on_check_specific_plane_pos(node), + Node::CallExpressionKw(node) => start_sketch_on_check_specific_plane_kw(node), + _ => Ok(None), + } +} +pub fn start_sketch_on_check_specific_plane_pos( + call: &AstNode, +) -> Result> { if call.inner.callee.inner.name.name != "startSketchOn" { return Ok(None); } @@ -147,7 +156,34 @@ pub fn start_sketch_on_check_specific_plane(node: Node) -> Result, +) -> Result> { + if call.inner.callee.inner.name.name != "startSketchOn" { + return Ok(None); + } + + let Some(ref unlabeled) = call.inner.unlabeled else { + // we only look for single-argument object patterns, if there's more + // than that we don't have a plane decl + return Ok(None); + }; + + let call_source_range = SourceRange::new(unlabeled.start(), unlabeled.end(), unlabeled.module_id()); + + let Expr::ObjectExpression(arg) = &unlabeled else { + return Ok(None); + }; + common(arg, call_source_range) +} + +pub fn common( + arg: &AstNode, + call_source_range: SourceRange, +) -> Result> { let mut origin: Option = None; let mut x_vec: Option = None; let mut y_vec: Option = None; diff --git a/rust/kcl-lib/src/lsp/kcl/mod.rs b/rust/kcl-lib/src/lsp/kcl/mod.rs index 9f46643b4..90b09e802 100644 --- a/rust/kcl-lib/src/lsp/kcl/mod.rs +++ b/rust/kcl-lib/src/lsp/kcl/mod.rs @@ -18,23 +18,24 @@ use tower_lsp::{ jsonrpc::Result as RpcResult, lsp_types::{ CodeAction, CodeActionKind, CodeActionOptions, CodeActionOrCommand, CodeActionParams, - CodeActionProviderCapability, CodeActionResponse, CompletionItem, CompletionItemKind, CompletionOptions, - CompletionParams, CompletionResponse, CreateFilesParams, DeleteFilesParams, Diagnostic, DiagnosticOptions, + CodeActionProviderCapability, CodeActionResponse, ColorInformation, ColorPresentation, ColorPresentationParams, + ColorProviderCapability, CompletionItem, CompletionItemKind, CompletionOptions, CompletionParams, + CompletionResponse, CreateFilesParams, DeleteFilesParams, Diagnostic, DiagnosticOptions, DiagnosticServerCapabilities, DiagnosticSeverity, DidChangeConfigurationParams, DidChangeTextDocumentParams, DidChangeWatchedFilesParams, DidChangeWorkspaceFoldersParams, DidCloseTextDocumentParams, - DidOpenTextDocumentParams, DidSaveTextDocumentParams, DocumentDiagnosticParams, DocumentDiagnosticReport, - DocumentDiagnosticReportResult, DocumentFilter, DocumentFormattingParams, DocumentSymbol, DocumentSymbolParams, - DocumentSymbolResponse, Documentation, FoldingRange, FoldingRangeParams, FoldingRangeProviderCapability, - FullDocumentDiagnosticReport, Hover as LspHover, HoverContents, HoverParams, HoverProviderCapability, - InitializeParams, InitializeResult, InitializedParams, InlayHint, InlayHintParams, InsertTextFormat, - MarkupContent, MarkupKind, MessageType, OneOf, Position, RelatedFullDocumentDiagnosticReport, - RenameFilesParams, RenameParams, SemanticToken, SemanticTokenModifier, SemanticTokenType, SemanticTokens, - SemanticTokensFullOptions, SemanticTokensLegend, SemanticTokensOptions, SemanticTokensParams, - SemanticTokensRegistrationOptions, SemanticTokensResult, SemanticTokensServerCapabilities, ServerCapabilities, - SignatureHelp, SignatureHelpOptions, SignatureHelpParams, StaticRegistrationOptions, TextDocumentItem, - TextDocumentRegistrationOptions, TextDocumentSyncCapability, TextDocumentSyncKind, TextDocumentSyncOptions, - TextEdit, WorkDoneProgressOptions, WorkspaceEdit, WorkspaceFolder, WorkspaceFoldersServerCapabilities, - WorkspaceServerCapabilities, + DidOpenTextDocumentParams, DidSaveTextDocumentParams, DocumentColorParams, DocumentDiagnosticParams, + DocumentDiagnosticReport, DocumentDiagnosticReportResult, DocumentFilter, DocumentFormattingParams, + DocumentSymbol, DocumentSymbolParams, DocumentSymbolResponse, Documentation, FoldingRange, FoldingRangeParams, + FoldingRangeProviderCapability, FullDocumentDiagnosticReport, Hover as LspHover, HoverContents, HoverParams, + HoverProviderCapability, InitializeParams, InitializeResult, InitializedParams, InlayHint, InlayHintParams, + InsertTextFormat, MarkupContent, MarkupKind, MessageType, OneOf, Position, PrepareRenameResponse, + RelatedFullDocumentDiagnosticReport, RenameFilesParams, RenameParams, SemanticToken, SemanticTokenModifier, + SemanticTokenType, SemanticTokens, SemanticTokensFullOptions, SemanticTokensLegend, SemanticTokensOptions, + SemanticTokensParams, SemanticTokensRegistrationOptions, SemanticTokensResult, + SemanticTokensServerCapabilities, ServerCapabilities, SignatureHelp, SignatureHelpOptions, SignatureHelpParams, + StaticRegistrationOptions, TextDocumentItem, TextDocumentPositionParams, TextDocumentRegistrationOptions, + TextDocumentSyncCapability, TextDocumentSyncKind, TextDocumentSyncOptions, TextEdit, WorkDoneProgressOptions, + WorkspaceEdit, WorkspaceFolder, WorkspaceFoldersServerCapabilities, WorkspaceServerCapabilities, }, Client, LanguageServer, }; @@ -532,6 +533,23 @@ impl Backend { return Ok(false); } } + crate::walk::Node::CallExpressionKw(call_expr) => { + let sr: SourceRange = (&call_expr.callee).into(); + if sr.contains(source_range.start()) { + let mut ti = token_index.lock().map_err(|_| anyhow::anyhow!("mutex"))?; + *ti = match self.get_semantic_token_type_index(&SemanticTokenType::FUNCTION) { + Some(index) => index, + None => token_type_index, + }; + + if self.stdlib_completions.contains_key(&call_expr.callee.name.name) { + // This is a stdlib function. + return get_modifier(vec![SemanticTokenModifier::DEFAULT_LIBRARY]); + } + + return Ok(false); + } + } _ => {} } Ok(true) @@ -827,6 +845,39 @@ impl Backend { Ok(custom_notifications::UpdateCanExecuteResponse {}) } + + /// Returns the new string for the code after rename. + pub fn inner_prepare_rename( + &self, + params: &TextDocumentPositionParams, + new_name: &str, + ) -> RpcResult> { + let filename = params.text_document.uri.to_string(); + + let Some(current_code) = self.code_map.get(&filename) else { + return Ok(None); + }; + let Ok(current_code) = std::str::from_utf8(¤t_code) else { + return Ok(None); + }; + + // Parse the ast. + // I don't know if we need to do this again since it should be updated in the context. + // But I figure better safe than sorry since this will write back out to the file. + let module_id = ModuleId::default(); + let Ok(mut ast) = crate::parsing::parse_str(current_code, module_id).parse_errs_as_err() else { + return Ok(None); + }; + + // Let's convert the position to a character index. + let pos = position_to_char_index(params.position, current_code); + // Now let's perform the rename on the ast. + ast.rename_symbol(new_name, pos); + // Now recast it. + let recast = ast.recast(&Default::default(), 0); + + Ok(Some((current_code.to_string(), recast))) + } } #[tower_lsp::async_trait] @@ -838,6 +889,7 @@ impl LanguageServer for Backend { Ok(InitializeResult { capabilities: ServerCapabilities { + color_provider: Some(ColorProviderCapability::Simple(true)), code_action_provider: Some(CodeActionProviderCapability::Options(CodeActionOptions { code_action_kinds: Some(vec![CodeActionKind::QUICKFIX]), resolve_provider: Some(false), @@ -1459,36 +1511,19 @@ impl LanguageServer for Backend { } async fn rename(&self, params: RenameParams) -> RpcResult> { - let filename = params.text_document_position.text_document.uri.to_string(); - - let Some(current_code) = self.code_map.get(&filename) else { - return Ok(None); - }; - let Ok(current_code) = std::str::from_utf8(¤t_code) else { + let Some((current_code, new_code)) = + self.inner_prepare_rename(¶ms.text_document_position, ¶ms.new_name)? + else { return Ok(None); }; - // Parse the ast. - // I don't know if we need to do this again since it should be updated in the context. - // But I figure better safe than sorry since this will write back out to the file. - let module_id = ModuleId::default(); - let Ok(mut ast) = crate::parsing::parse_str(current_code, module_id).parse_errs_as_err() else { - return Ok(None); - }; - - // Let's convert the position to a character index. - let pos = position_to_char_index(params.text_document_position.position, current_code); - // Now let's perform the rename on the ast. - ast.rename_symbol(¶ms.new_name, pos); - // Now recast it. - let recast = ast.recast(&Default::default(), 0); - let source_range = SourceRange::new(0, current_code.len(), module_id); - let range = source_range.to_lsp_range(current_code); + let source_range = SourceRange::new(0, current_code.len(), ModuleId::default()); + let range = source_range.to_lsp_range(¤t_code); Ok(Some(WorkspaceEdit { changes: Some(HashMap::from([( params.text_document_position.text_document.uri, vec![TextEdit { - new_text: recast, + new_text: new_code, range, }], )])), @@ -1497,6 +1532,18 @@ impl LanguageServer for Backend { })) } + async fn prepare_rename(&self, params: TextDocumentPositionParams) -> RpcResult> { + if self + .inner_prepare_rename(¶ms, "someNameNoOneInTheirRightMindWouldEverUseForTesting")? + .is_none() + { + return Ok(None); + } + + // Return back to the client, that it is safe to use the rename behavior. + Ok(Some(PrepareRenameResponse::DefaultBehavior { default_behavior: true })) + } + async fn folding_range(&self, params: FoldingRangeParams) -> RpcResult>> { let filename = params.text_document.uri.to_string(); @@ -1552,6 +1599,55 @@ impl LanguageServer for Backend { Ok(Some(actions)) } + + async fn document_color(&self, params: DocumentColorParams) -> RpcResult> { + let filename = params.text_document.uri.to_string(); + + let Some(current_code) = self.code_map.get(&filename) else { + return Ok(vec![]); + }; + let Ok(current_code) = std::str::from_utf8(¤t_code) else { + return Ok(vec![]); + }; + + // Get the ast from our map. + let Some(ast) = self.ast_map.get(&filename) else { + return Ok(vec![]); + }; + + // Get the colors from the ast. + let Ok(colors) = ast.ast.document_color(current_code) else { + return Ok(vec![]); + }; + + Ok(colors) + } + + async fn color_presentation(&self, params: ColorPresentationParams) -> RpcResult> { + let filename = params.text_document.uri.to_string(); + + let Some(current_code) = self.code_map.get(&filename) else { + return Ok(vec![]); + }; + let Ok(current_code) = std::str::from_utf8(¤t_code) else { + return Ok(vec![]); + }; + + // Get the ast from our map. + let Some(ast) = self.ast_map.get(&filename) else { + return Ok(vec![]); + }; + + let pos_start = position_to_char_index(params.range.start, current_code); + let pos_end = position_to_char_index(params.range.end, current_code); + + // Get the colors from the ast. + let Ok(Some(presentation)) = ast.ast.color_presentation(¶ms.color, pos_start, pos_end) else { + return Ok(vec![]); + }; + + Ok(vec![presentation]) + } } /// Get completions from our stdlib. @@ -1662,3 +1758,48 @@ async fn with_cached_var(name: &str, f: impl Fn(&KclValue) -> T) -> Option Some(f(value)) } + +#[cfg(test)] +mod tests { + use pretty_assertions::assert_eq; + + use super::*; + + #[test] + fn test_position_to_char_index_first_line() { + let code = r#"def foo(): +return 42"#; + let position = Position::new(0, 3); + let index = position_to_char_index(position, code); + assert_eq!(index, 3); + } + + #[test] + fn test_position_to_char_index() { + let code = r#"def foo(): +return 42"#; + let position = Position::new(1, 4); + let index = position_to_char_index(position, code); + assert_eq!(index, 15); + } + + #[test] + fn test_position_to_char_index_with_newline() { + let code = r#"def foo(): + +return 42"#; + let position = Position::new(2, 0); + let index = position_to_char_index(position, code); + assert_eq!(index, 12); + } + + #[test] + fn test_position_to_char_at_end() { + let code = r#"def foo(): +return 42"#; + + let position = Position::new(1, 8); + let index = position_to_char_index(position, code); + assert_eq!(index, 19); + } +} diff --git a/rust/kcl-lib/src/lsp/tests.rs b/rust/kcl-lib/src/lsp/tests.rs index 0883fa059..3c659a7c8 100644 --- a/rust/kcl-lib/src/lsp/tests.rs +++ b/rust/kcl-lib/src/lsp/tests.rs @@ -3,8 +3,8 @@ use std::collections::{BTreeMap, HashMap}; use pretty_assertions::assert_eq; use tower_lsp::{ lsp_types::{ - CodeActionKind, CodeActionOrCommand, Diagnostic, SemanticTokenModifier, SemanticTokenType, TextEdit, - WorkspaceEdit, + CodeActionKind, CodeActionOrCommand, Diagnostic, PrepareRenameResponse, SemanticTokenModifier, + SemanticTokenType, TextEdit, WorkspaceEdit, }, LanguageServer, }; @@ -895,7 +895,7 @@ async fn test_kcl_lsp_on_hover() { foo = 42 foo -fn bar(x: string): string { +fn bar(@x: string): string { return x } @@ -971,7 +971,7 @@ startSketchOn(XY) match hover.unwrap().contents { tower_lsp::lsp_types::HoverContents::Markup(tower_lsp::lsp_types::MarkupContent { value, .. }) => { - assert!(value.contains("bar(x: string): string")); + assert!(value.contains("bar(@x: string): string")); } _ => unreachable!(), } @@ -1016,7 +1016,7 @@ startSketchOn(XY) match hover.unwrap().contents { tower_lsp::lsp_types::HoverContents::Markup(tower_lsp::lsp_types::MarkupContent { value, .. }) => { - assert!(value.contains("end?: [number]")); + assert!(value.contains("end?: Point2d")); assert!(value.contains("How far away (along the X and Y axes) should this line go?")); } _ => unreachable!(), @@ -2027,7 +2027,7 @@ insideRevolve = startSketchOn(XZ) |> line(end = [0, -thickness]) |> line(end = [-overHangLength, 0]) |> close() - |> revolve({ axis = Y }, %) + |> revolve(axis = Y) // Sketch and revolve one of the balls and duplicate it using a circular pattern. (This is currently a workaround, we have a bug with rotating on a sketch that touches the rotation axis) sphere = startSketchOn(XZ) @@ -2035,7 +2035,7 @@ sphere = startSketchOn(XZ) |> line(end = [sphereDia - 0.1, 0]) |> arc(angle_start = 0, angle_end = -180, radius = sphereDia / 2 - 0.05) |> close() - |> revolve({ axis = X }, %) + |> revolve(axis = X) |> patternCircular3d( axis = [0, 0, 1], center = [0, 0, 0], @@ -2056,7 +2056,7 @@ outsideRevolve = startSketchOn(XZ) |> line(end = [0, thickness]) |> line(end = [overHangLength - thickness, 0]) |> close() - |> revolve({ axis = Y }, %)"# + |> revolve(axis = Y)"# .to_string(), }, }) @@ -2090,7 +2090,7 @@ outsideRevolve = startSketchOn(XZ) start: tower_lsp::lsp_types::Position { line: 0, character: 0 }, end: tower_lsp::lsp_types::Position { line: 50, - character: 29 + character: 22 } } ); @@ -2117,7 +2117,7 @@ insideRevolve = startSketchOn(XZ) |> line(end = [0, -thickness]) |> line(end = [-overHangLength, 0]) |> close() - |> revolve({ axis = Y }, %) + |> revolve(axis = Y) // Sketch and revolve one of the balls and duplicate it using a circular pattern. (This is currently a workaround, we have a bug with rotating on a sketch that touches the rotation axis) sphere = startSketchOn(XZ) @@ -2128,7 +2128,7 @@ sphere = startSketchOn(XZ) |> line(end = [sphereDia - 0.1, 0]) |> arc(angle_start = 0, angle_end = -180, radius = sphereDia / 2 - 0.05) |> close() - |> revolve({ axis = X }, %) + |> revolve(axis = X) |> patternCircular3d( axis = [0, 0, 1], center = [0, 0, 0], @@ -2152,7 +2152,7 @@ outsideRevolve = startSketchOn(XZ) |> line(end = [0, thickness]) |> line(end = [overHangLength - thickness, 0]) |> close() - |> revolve({ axis = Y }, %)"# + |> revolve(axis = Y)"# ); } @@ -3891,7 +3891,7 @@ async fn test_kcl_lsp_on_hover_untitled_file_scheme() { foo = 42 foo -fn bar(x: string): string { +fn bar(@x: string): string { return x } @@ -3967,7 +3967,7 @@ startSketchOn(XY) match hover.unwrap().contents { tower_lsp::lsp_types::HoverContents::Markup(tower_lsp::lsp_types::MarkupContent { value, .. }) => { - assert!(value.contains("bar(x: string): string")); + assert!(value.contains("bar(@x: string): string")); } _ => unreachable!(), } @@ -4012,7 +4012,7 @@ startSketchOn(XY) match hover.unwrap().contents { tower_lsp::lsp_types::HoverContents::Markup(tower_lsp::lsp_types::MarkupContent { value, .. }) => { - assert!(value.contains("end?: [number]")); + assert!(value.contains("end?: Point2d")); assert!(value.contains("How far away (along the X and Y axes) should this line go?")); } _ => unreachable!(), @@ -4146,3 +4146,173 @@ async fn kcl_test_kcl_lsp_code_actions_lint_offset_planes() { }) ); } + +#[tokio::test(flavor = "multi_thread")] +async fn test_kcl_lsp_prepare_rename() { + let server = kcl_lsp_server(false).await.unwrap(); + + // Send open file. + server + .did_open(tower_lsp::lsp_types::DidOpenTextDocumentParams { + text_document: tower_lsp::lsp_types::TextDocumentItem { + uri: "file:///test.kcl".try_into().unwrap(), + language_id: "kcl".to_string(), + version: 1, + text: r#"thing= 1"#.to_string(), + }, + }) + .await; + + // Send rename request. + let result = server + .prepare_rename(tower_lsp::lsp_types::TextDocumentPositionParams { + text_document: tower_lsp::lsp_types::TextDocumentIdentifier { + uri: "file:///test.kcl".try_into().unwrap(), + }, + position: tower_lsp::lsp_types::Position { line: 0, character: 2 }, + }) + .await + .unwrap() + .unwrap(); + + // Check the result. + assert_eq!( + result, + PrepareRenameResponse::DefaultBehavior { default_behavior: true } + ); +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_kcl_lsp_document_color() { + let server = kcl_lsp_server(false).await.unwrap(); + + // Send open file. + server + .did_open(tower_lsp::lsp_types::DidOpenTextDocumentParams { + text_document: tower_lsp::lsp_types::TextDocumentItem { + uri: "file:///test.kcl".try_into().unwrap(), + language_id: "kcl".to_string(), + version: 1, + text: r#"// Add color to a revolved solid. +sketch001 = startSketchOn(XY) + |> circle(center = [15, 0], radius = 5) + |> revolve(angle = 360, axis = Y) + |> appearance(color = '#ff0000', metalness = 90, roughness = 90)"# + .to_string(), + }, + }) + .await; + + // Send document color request. + let result = server + .document_color(tower_lsp::lsp_types::DocumentColorParams { + text_document: tower_lsp::lsp_types::TextDocumentIdentifier { + uri: "file:///test.kcl".try_into().unwrap(), + }, + work_done_progress_params: Default::default(), + partial_result_params: Default::default(), + }) + .await + .unwrap(); + + // Check the result. + assert_eq!( + result, + vec![tower_lsp::lsp_types::ColorInformation { + range: tower_lsp::lsp_types::Range { + start: tower_lsp::lsp_types::Position { line: 4, character: 24 }, + end: tower_lsp::lsp_types::Position { line: 4, character: 33 }, + }, + color: tower_lsp::lsp_types::Color { + red: 1.0, + green: 0.0, + blue: 0.0, + alpha: 1.0, + }, + }] + ); +} + +#[tokio::test(flavor = "multi_thread")] +async fn test_kcl_lsp_color_presentation() { + let server = kcl_lsp_server(false).await.unwrap(); + + let text = r#"// Add color to a revolved solid. +sketch001 = startSketchOn(XY) + |> circle(center = [15, 0], radius = 5) + |> revolve(angle = 360, axis = Y) + |> appearance(color = '#ff0000', metalness = 90, roughness = 90)"#; + + // Send open file. + server + .did_open(tower_lsp::lsp_types::DidOpenTextDocumentParams { + text_document: tower_lsp::lsp_types::TextDocumentItem { + uri: "file:///test.kcl".try_into().unwrap(), + language_id: "kcl".to_string(), + version: 1, + text: text.to_string(), + }, + }) + .await; + + // Send document color request. + let result = server + .document_color(tower_lsp::lsp_types::DocumentColorParams { + text_document: tower_lsp::lsp_types::TextDocumentIdentifier { + uri: "file:///test.kcl".try_into().unwrap(), + }, + work_done_progress_params: Default::default(), + partial_result_params: Default::default(), + }) + .await + .unwrap(); + + // Check the result. + assert_eq!( + result, + vec![tower_lsp::lsp_types::ColorInformation { + range: tower_lsp::lsp_types::Range { + start: tower_lsp::lsp_types::Position { line: 4, character: 24 }, + end: tower_lsp::lsp_types::Position { line: 4, character: 33 }, + }, + color: tower_lsp::lsp_types::Color { + red: 1.0, + green: 0.0, + blue: 0.0, + alpha: 1.0, + }, + }] + ); + + // Send color presentation request. + let result = server + .color_presentation(tower_lsp::lsp_types::ColorPresentationParams { + text_document: tower_lsp::lsp_types::TextDocumentIdentifier { + uri: "file:///test.kcl".try_into().unwrap(), + }, + range: tower_lsp::lsp_types::Range { + start: tower_lsp::lsp_types::Position { line: 4, character: 24 }, + end: tower_lsp::lsp_types::Position { line: 4, character: 33 }, + }, + color: tower_lsp::lsp_types::Color { + red: 1.0, + green: 0.0, + blue: 1.0, + alpha: 1.0, + }, + work_done_progress_params: Default::default(), + partial_result_params: Default::default(), + }) + .await + .unwrap(); + + // Check the result. + assert_eq!( + result, + vec![tower_lsp::lsp_types::ColorPresentation { + label: "#ff00ff".to_string(), + text_edit: None, + additional_text_edits: None, + }] + ); +} diff --git a/rust/kcl-lib/src/parsing/ast/digest.rs b/rust/kcl-lib/src/parsing/ast/digest.rs index f2d27661e..96bceee1e 100644 --- a/rust/kcl-lib/src/parsing/ast/digest.rs +++ b/rust/kcl-lib/src/parsing/ast/digest.rs @@ -529,13 +529,13 @@ mod test { async fn test_parse_digest() { let prog1_string = r#"startSketchOn(XY) |> startProfile(at = [0, 0]) - |> line([5, 5], %) + |> line([5, 5]) "#; let prog1_digest = crate::parsing::top_level_parse(prog1_string).unwrap().compute_digest(); let prog2_string = r#"startSketchOn(XY) |> startProfile(at = [0, 2]) - |> line([5, 5], %) + |> line([5, 5]) "#; let prog2_digest = crate::parsing::top_level_parse(prog2_string).unwrap().compute_digest(); @@ -543,7 +543,7 @@ mod test { let prog3_string = r#"startSketchOn(XY) |> startProfile(at = [0, 0]) - |> line([5, 5], %) + |> line([5, 5]) "#; let prog3_digest = crate::parsing::top_level_parse(prog3_string).unwrap().compute_digest(); diff --git a/rust/kcl-lib/src/parsing/ast/types/literal_value.rs b/rust/kcl-lib/src/parsing/ast/types/literal_value.rs index 4b0304603..acd753a79 100644 --- a/rust/kcl-lib/src/parsing/ast/types/literal_value.rs +++ b/rust/kcl-lib/src/parsing/ast/types/literal_value.rs @@ -1,4 +1,4 @@ -use std::fmt; +use std::{fmt, str::FromStr}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; @@ -32,6 +32,21 @@ impl LiteralValue { _ => None, } } + + pub fn is_color(&self) -> Option { + if let Self::String(s) = self { + // Check if the string is a color. + if s.starts_with('#') && s.len() == 7 { + let Ok(c) = csscolorparser::Color::from_str(s) else { + return None; + }; + + return Some(c); + } + } + + None + } } impl fmt::Display for LiteralValue { diff --git a/rust/kcl-lib/src/parsing/ast/types/mod.rs b/rust/kcl-lib/src/parsing/ast/types/mod.rs index 73b3bca13..7da4e0631 100644 --- a/rust/kcl-lib/src/parsing/ast/types/mod.rs +++ b/rust/kcl-lib/src/parsing/ast/types/mod.rs @@ -11,10 +11,12 @@ use std::{ use anyhow::Result; use parse_display::{Display, FromStr}; +pub use path::NodePath; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use tower_lsp::lsp_types::{ - CompletionItem, CompletionItemKind, DocumentSymbol, FoldingRange, FoldingRangeKind, SymbolKind, + Color, ColorInformation, ColorPresentation, CompletionItem, CompletionItemKind, DocumentSymbol, FoldingRange, + FoldingRangeKind, SymbolKind, }; pub use crate::parsing::ast::types::{ @@ -34,6 +36,7 @@ use crate::{ mod condition; mod literal_value; mod none; +mod path; #[derive(Debug)] pub enum Definition<'a> { @@ -158,6 +161,10 @@ impl Node { self.start <= pos && pos <= self.end } + pub(crate) fn contains_range(&self, range: &SourceRange) -> bool { + self.as_source_range().contains_range(range) + } + pub fn map(self, f: impl Fn(T) -> U) -> Node { Node { inner: f(self.inner), @@ -389,6 +396,99 @@ impl Node { true } + + /// Find all the color strings in the program. + /// For example `appearance(color = "#ff0000")` + /// This is to fulfill the `documentColor` request in LSP. + pub fn document_color<'a>(&'a self, code: &str) -> Result> { + let colors = Rc::new(RefCell::new(vec![])); + + let add_color = |literal: &Node| { + // Check if the string is a color. + if let Some(c) = literal.value.is_color() { + let color = ColorInformation { + range: literal.as_source_range().to_lsp_range(code), + color: tower_lsp::lsp_types::Color { + red: c.r, + green: c.g, + blue: c.b, + alpha: c.a, + }, + }; + if colors.borrow().iter().any(|c| *c == color) { + return; + } + colors.borrow_mut().push(color); + } + }; + + // The position must be within the variable declaration. + crate::walk::walk(self, |node: crate::walk::Node<'a>| { + match node { + crate::walk::Node::CallExpressionKw(call) => { + if call.inner.callee.inner.name.inner.name == "appearance" { + for arg in &call.arguments { + if arg.label.inner.name == "color" { + // Get the value of the argument. + if let Expr::Literal(literal) = &arg.arg { + add_color(literal); + } + } + } + } + } + crate::walk::Node::Literal(literal) => { + // Check if the literal is a color. + add_color(literal); + } + _ => { + // Do nothing. + } + } + Ok::(true) + })?; + + let colors = colors.take(); + Ok(colors) + } + + /// This is to fulfill the `colorPresentation` request in LSP. + pub fn color_presentation<'a>( + &'a self, + color: &Color, + pos_start: usize, + pos_end: usize, + ) -> Result> { + let found = Rc::new(RefCell::new(false)); + // Find the literal with the same start and end. + crate::walk::walk(self, |node: crate::walk::Node<'a>| { + match node { + crate::walk::Node::Literal(literal) => { + if literal.start == pos_start && literal.end == pos_end && literal.value.is_color().is_some() { + found.replace(true); + return Ok(true); + } + } + _ => { + // Do nothing. + } + } + Ok::(true) + })?; + + let found = found.take(); + if !found { + return Ok(None); + } + + let new_color = csscolorparser::Color::new(color.red, color.green, color.blue, color.alpha); + Ok(Some(ColorPresentation { + // The label will be what they replace the color with. + label: new_color.to_hex_string(), + text_edit: None, + additional_text_edits: None, + })) + } } impl Program { @@ -724,6 +824,11 @@ impl BodyItem { } } + pub(crate) fn contains_range(&self, range: &SourceRange) -> bool { + let item_range = SourceRange::from(self); + item_range.contains_range(range) + } + pub(crate) fn set_attrs(&mut self, attr: NodeList) { match self { BodyItem::ImportStatement(node) => node.outer_attrs = attr, @@ -951,6 +1056,11 @@ impl Expr { } } + fn contains_range(&self, range: &SourceRange) -> bool { + let expr_range = SourceRange::from(self); + expr_range.contains_range(range) + } + /// Rename all identifiers that have the old name to the new given name. fn rename_identifiers(&mut self, old_name: &str, new_name: &str) { match self { @@ -1068,6 +1178,21 @@ impl From<&Expr> for SourceRange { } } +impl From<&BinaryPart> for Expr { + fn from(value: &BinaryPart) -> Self { + match value { + BinaryPart::Literal(literal) => Expr::Literal(literal.clone()), + BinaryPart::Name(name) => Expr::Name(name.clone()), + BinaryPart::BinaryExpression(binary_expression) => Expr::BinaryExpression(binary_expression.clone()), + BinaryPart::CallExpression(call_expression) => Expr::CallExpression(call_expression.clone()), + BinaryPart::CallExpressionKw(call_expression) => Expr::CallExpressionKw(call_expression.clone()), + BinaryPart::UnaryExpression(unary_expression) => Expr::UnaryExpression(unary_expression.clone()), + BinaryPart::MemberExpression(member_expression) => Expr::MemberExpression(member_expression.clone()), + BinaryPart::IfExpression(e) => Expr::IfExpression(e.clone()), + } + } +} + #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] #[ts(export)] #[serde(tag = "type")] @@ -2701,6 +2826,11 @@ impl MemberObject { MemberObject::Identifier(identifier) => identifier.end, } } + + pub(crate) fn contains_range(&self, range: &SourceRange) -> bool { + let sr = SourceRange::from(self); + sr.contains_range(range) + } } impl From for SourceRange { @@ -2737,6 +2867,11 @@ impl LiteralIdentifier { LiteralIdentifier::Literal(literal) => literal.end, } } + + pub(crate) fn contains_range(&self, range: &SourceRange) -> bool { + let sr = SourceRange::from(self); + sr.contains_range(range) + } } impl From for SourceRange { @@ -3255,6 +3390,11 @@ impl Parameter { pub fn optional(&self) -> bool { self.default_value.is_some() } + + pub(crate) fn contains_range(&self, range: &SourceRange) -> bool { + let sr = SourceRange::from(self); + sr.contains_range(range) + } } impl From<&Parameter> for SourceRange { @@ -3645,11 +3785,11 @@ mod tests { fn test_get_lsp_folding_ranges() { let code = r#"part001 = startSketchOn(XY) |> startProfile(at = [0.0000000000, 5.0000000000]) - |> line([0.4900857016, -0.0240763666], %) + |> line([0.4900857016, -0.0240763666]) startSketchOn(XY) |> startProfile(at = [0.0000000000, 5.0000000000]) - |> line([0.4900857016, -0.0240763666], %) + |> line([0.4900857016, -0.0240763666]) part002 = "part002" things = [part001, 0.0] @@ -3657,7 +3797,7 @@ blah = 1 foo = false baz = {a = 1, b = "thing"} -fn ghi(x) { +fn ghi(@x) { return x } @@ -3667,24 +3807,24 @@ ghi("things") let folding_ranges = program.get_lsp_folding_ranges(); assert_eq!(folding_ranges.len(), 3); assert_eq!(folding_ranges[0].start_line, 27); - assert_eq!(folding_ranges[0].end_line, 126); + assert_eq!(folding_ranges[0].end_line, 123); assert_eq!( folding_ranges[0].collapsed_text, Some("part001 = startSketchOn(XY)".to_string()) ); - assert_eq!(folding_ranges[1].start_line, 145); - assert_eq!(folding_ranges[1].end_line, 244); + assert_eq!(folding_ranges[1].start_line, 142); + assert_eq!(folding_ranges[1].end_line, 238); assert_eq!(folding_ranges[1].collapsed_text, Some("startSketchOn(XY)".to_string())); - assert_eq!(folding_ranges[2].start_line, 350); - assert_eq!(folding_ranges[2].end_line, 363); - assert_eq!(folding_ranges[2].collapsed_text, Some("fn ghi(x) {".to_string())); + assert_eq!(folding_ranges[2].start_line, 345); + assert_eq!(folding_ranges[2].end_line, 358); + assert_eq!(folding_ranges[2].collapsed_text, Some("fn ghi(@x) {".to_string())); } #[test] fn test_get_lsp_symbols() { let code = r#"part001 = startSketchOn(XY) |> startProfile(at = [0.0000000000, 5.0000000000]) - |> line([0.4900857016, -0.0240763666], %) + |> line([0.4900857016, -0.0240763666]) part002 = "part002" things = [part001, 0.0] @@ -3710,12 +3850,12 @@ h = 30 cylinder = startSketchOn(-XZ) |> startProfile(at = [50, 0]) - |> arc({ + |> arc( angle_end = 360, angle_start = 0, radius = r - }, %) - |> extrude(h, %) + ) + |> extrude(h) "#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -3731,12 +3871,12 @@ h = 30 cylinder = startSketchOn(-XZ) |> startProfile(at = [50, 0]) // comment - |> arc({ + |> arc( angle_end= 360, angle_start= 0, radius= r - }, %) - |> extrude(h, %) + ) + |> extrude(h) "#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -4011,7 +4151,7 @@ cylinder = startSketchOn(-XZ) #[tokio::test(flavor = "multi_thread")] async fn test_parse_object_bool() { - let some_program_string = r#"some_func({thing: true, other_thing: false})"#; + let some_program_string = r#"some_func({thing = true, other_thing = false})"#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); // We want to get the bool and verify it is a bool. @@ -4029,14 +4169,22 @@ cylinder = startSketchOn(-XZ) panic!("expected a function!"); }; - let Expr::CallExpression(ce) = expression else { - panic!("expected a function!"); - }; + let oe = match expression { + Expr::CallExpressionKw(ce) => { + assert!(ce.unlabeled.is_some()); - assert!(!ce.arguments.is_empty()); - - let Expr::ObjectExpression(oe) = ce.arguments.first().unwrap() else { - panic!("expected a object!"); + let Expr::ObjectExpression(oe) = ce.unlabeled.as_ref().unwrap() else { + panic!("expected a object!"); + }; + oe + } + Expr::CallExpression(ce) => { + let Expr::ObjectExpression(ref oe) = (ce.arguments).first().unwrap() else { + panic!("expected an object!"); + }; + oe + } + other => panic!("expected a Call or CallKw, found {other:?}"), }; assert_eq!(oe.properties.len(), 2); diff --git a/rust/kcl-lib/src/parsing/ast/types/path.rs b/rust/kcl-lib/src/parsing/ast/types/path.rs new file mode 100644 index 000000000..931c05a60 --- /dev/null +++ b/rust/kcl-lib/src/parsing/ast/types/path.rs @@ -0,0 +1,406 @@ +use serde::Serialize; + +use super::{BodyItem, Expr, MemberObject, Node, Program}; +use crate::SourceRange; + +/// A traversal path through the AST to a node. +/// +/// Similar to the idea of a `NodeId`, a `NodePath` uniquely identifies a node, +/// assuming you know the root node. +/// +/// The implementation doesn't cover all parts of the tree. It currently only +/// works on parts of the tree that the frontend uses. +#[derive(Debug, Default, Clone, Serialize, PartialEq, Eq, Hash, ts_rs::TS)] +#[ts(export_to = "NodePath.ts")] +pub struct NodePath { + pub steps: Vec, +} + +#[derive(Debug, Clone, Serialize, PartialEq, Eq, Hash, ts_rs::TS)] +#[ts(export_to = "NodePath.ts")] +#[serde(tag = "type")] +pub enum Step { + ProgramBodyItem { index: usize }, + CallCallee, + CallArg { index: usize }, + CallKwCallee, + CallKwUnlabeledArg, + CallKwArg { index: usize }, + BinaryLeft, + BinaryRight, + UnaryArg, + PipeBodyItem { index: usize }, + ArrayElement { index: usize }, + ArrayRangeStart, + ArrayRangeEnd, + ObjectProperty { index: usize }, + ObjectPropertyKey, + ObjectPropertyValue, + ExpressionStatementExpr, + VariableDeclarationDeclaration, + VariableDeclarationInit, + FunctionExpressionParam { index: usize }, + FunctionExpressionBody, + FunctionExpressionBodyItem { index: usize }, + ReturnStatementArg, + MemberExpressionObject, + MemberExpressionProperty, + IfExpressionCondition, + IfExpressionThen, + IfExpressionElseIf { index: usize }, + IfExpressionElseIfCond, + IfExpressionElseIfBody, + IfExpressionElse, + ImportStatementItem { index: usize }, + ImportStatementItemName, + ImportStatementItemAlias, + LabeledExpressionExpr, + LabeledExpressionLabel, + AscribedExpressionExpr, +} + +impl NodePath { + /// Given a program and a [`SourceRange`], return the path to the node that + /// contains the range. + pub(crate) fn from_range(program: &Node, range: SourceRange) -> Option { + Self::from_body(&program.body, range, NodePath::default()) + } + + fn from_body(body: &[BodyItem], range: SourceRange, mut path: NodePath) -> Option { + for (i, item) in body.iter().enumerate() { + if item.contains_range(&range) { + path.push(Step::ProgramBodyItem { index: i }); + return Self::from_body_item(item, range, path); + } + } + + None + } + + fn from_body_item(body_item: &BodyItem, range: SourceRange, mut path: NodePath) -> Option { + match body_item { + BodyItem::ImportStatement(node) => match &node.selector { + super::ImportSelector::List { items } => { + for (i, item) in items.iter().enumerate() { + if item.contains_range(&range) { + path.push(Step::ImportStatementItem { index: i }); + if item.name.contains_range(&range) { + path.push(Step::ImportStatementItemName); + return Some(path); + } + if let Some(alias) = &item.alias { + if alias.contains_range(&range) { + path.push(Step::ImportStatementItemAlias); + return Some(path); + } + } + return Some(path); + } + } + } + super::ImportSelector::Glob(_) => { + // TODO: Handle glob imports. + } + super::ImportSelector::None { .. } => { + // TODO: Handle whole-module imports. + } + }, + BodyItem::ExpressionStatement(node) => { + path.push(Step::ExpressionStatementExpr); + return Self::from_expr(&node.expression, range, path); + } + BodyItem::VariableDeclaration(node) => { + if node.declaration.contains_range(&range) { + path.push(Step::VariableDeclarationDeclaration); + if node.declaration.init.contains_range(&range) { + path.push(Step::VariableDeclarationInit); + return Self::from_expr(&node.declaration.init, range, path); + } + } + } + BodyItem::TypeDeclaration(_) => {} + BodyItem::ReturnStatement(node) => { + if node.argument.contains_range(&range) { + path.push(Step::ReturnStatementArg); + return Self::from_expr(&node.argument, range, path); + } + } + } + + Some(path) + } + + fn from_expr(expr: &Expr, range: SourceRange, mut path: NodePath) -> Option { + match expr { + Expr::Literal(node) => { + if node.contains_range(&range) { + return Some(path); + } + } + Expr::Name(node) => { + if node.contains_range(&range) { + return Some(path); + } + } + Expr::TagDeclarator(node) => { + if node.contains_range(&range) { + return Some(path); + } + } + Expr::BinaryExpression(node) => { + let left = Expr::from(&node.left); + if left.contains_range(&range) { + path.push(Step::BinaryLeft); + return Self::from_expr(&left, range, path); + } + let right = Expr::from(&node.right); + if right.contains_range(&range) { + path.push(Step::BinaryRight); + return Self::from_expr(&right, range, path); + } + } + Expr::FunctionExpression(node) => { + for (i, param) in node.params.iter().enumerate() { + // TODO: Check the type annotation and default value. + if param.contains_range(&range) { + path.push(Step::FunctionExpressionParam { index: i }); + return Some(path); + } + } + if node.body.contains_range(&range) { + path.push(Step::FunctionExpressionBody); + for (i, item) in node.body.body.iter().enumerate() { + if item.contains_range(&range) { + path.push(Step::FunctionExpressionBodyItem { index: i }); + return Self::from_body_item(item, range, path); + } + } + } + } + Expr::CallExpression(node) => { + if node.callee.contains_range(&range) { + path.push(Step::CallCallee); + return Some(path); + } + for (i, arg) in node.arguments.iter().enumerate() { + if arg.contains_range(&range) { + path.push(Step::CallArg { index: i }); + return Self::from_expr(arg, range, path); + } + } + } + Expr::CallExpressionKw(node) => { + if node.callee.contains_range(&range) { + path.push(Step::CallKwCallee); + return Some(path); + } + if let Some(unlabeled) = &node.unlabeled { + if unlabeled.contains_range(&range) { + path.push(Step::CallKwUnlabeledArg); + return Self::from_expr(unlabeled, range, path); + } + } + for (i, arg) in node.arguments.iter().enumerate() { + if arg.arg.contains_range(&range) { + path.push(Step::CallKwArg { index: i }); + return Self::from_expr(&arg.arg, range, path); + } + } + } + Expr::PipeExpression(node) => { + for (i, expr) in node.body.iter().enumerate() { + if expr.contains_range(&range) { + path.push(Step::PipeBodyItem { index: i }); + return Self::from_expr(expr, range, path); + } + } + } + Expr::PipeSubstitution(_) => {} + Expr::ArrayExpression(node) => { + for (i, element) in node.elements.iter().enumerate() { + if element.contains_range(&range) { + path.push(Step::ArrayElement { index: i }); + return Self::from_expr(element, range, path); + } + } + } + Expr::ArrayRangeExpression(node) => { + if node.start_element.contains_range(&range) { + path.push(Step::ArrayRangeStart); + return Self::from_expr(&node.start_element, range, path); + } + if node.end_element.contains_range(&range) { + path.push(Step::ArrayRangeEnd); + return Self::from_expr(&node.end_element, range, path); + } + } + Expr::ObjectExpression(node) => { + for (i, property) in node.properties.iter().enumerate() { + if property.contains_range(&range) { + path.push(Step::ObjectProperty { index: i }); + if property.key.contains_range(&range) { + path.push(Step::ObjectPropertyKey); + return Some(path); + } + if property.value.contains_range(&range) { + path.push(Step::ObjectPropertyValue); + return Self::from_expr(&property.value, range, path); + } + return Some(path); + } + } + } + Expr::MemberExpression(node) => { + if node.object.contains_range(&range) { + path.push(Step::MemberExpressionObject); + return Self::from_member_expr_object(&node.object, range, path); + } + if node.property.contains_range(&range) { + path.push(Step::MemberExpressionProperty); + return Some(path); + } + } + Expr::UnaryExpression(node) => { + let arg = Expr::from(&node.argument); + if arg.contains_range(&range) { + path.push(Step::UnaryArg); + return Self::from_expr(&arg, range, path); + } + } + Expr::IfExpression(node) => { + if node.cond.contains_range(&range) { + path.push(Step::IfExpressionCondition); + return Self::from_expr(&node.cond, range, path); + } + if node.then_val.contains_range(&range) { + path.push(Step::IfExpressionThen); + return Self::from_body(&node.then_val.body, range, path); + } + for else_if in &node.else_ifs { + if else_if.contains_range(&range) { + path.push(Step::IfExpressionElseIf { index: 0 }); + if else_if.cond.contains_range(&range) { + path.push(Step::IfExpressionElseIfCond); + return Self::from_expr(&else_if.cond, range, path); + } + if else_if.then_val.contains_range(&range) { + path.push(Step::IfExpressionElseIfBody); + return Self::from_body(&else_if.then_val.body, range, path); + } + return Some(path); + } + } + if node.final_else.contains_range(&range) { + path.push(Step::IfExpressionElse); + return Self::from_body(&node.final_else.body, range, path); + } + } + Expr::LabelledExpression(node) => { + if node.expr.contains_range(&range) { + path.push(Step::LabeledExpressionExpr); + return Self::from_expr(&node.expr, range, path); + } + if node.label.contains_range(&range) { + path.push(Step::LabeledExpressionLabel); + return Some(path); + } + } + Expr::AscribedExpression(node) => { + if node.expr.contains_range(&range) { + path.push(Step::AscribedExpressionExpr); + return Self::from_expr(&node.expr, range, path); + } + // TODO: Check the type annotation. + } + Expr::None(_) => {} + } + + Some(path) + } + + fn from_member_expr_object(mut expr: &MemberObject, range: SourceRange, mut path: NodePath) -> Option { + while let MemberObject::MemberExpression(node) = expr { + if !node.object.contains_range(&range) { + break; + } + path.push(Step::MemberExpressionObject); + expr = &node.object; + } + + Some(path) + } + + fn push(&mut self, step: Step) { + self.steps.push(step); + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::ModuleId; + + fn range(start: usize, end: usize) -> SourceRange { + SourceRange::new(start, end, ModuleId::default()) + } + + #[test] + fn test_node_path_from_range() { + // Read the contents of the file. + let contents = std::fs::read_to_string("tests/misc/cube.kcl").unwrap(); + let program = crate::Program::parse_no_errs(&contents).unwrap(); + + // fn cube(sideLength, center) { + // ^^^^ + assert_eq!( + NodePath::from_range(&program.ast, range(38, 42)).unwrap(), + NodePath { + steps: vec![Step::ProgramBodyItem { index: 0 }, Step::VariableDeclarationDeclaration], + } + ); + // fn cube(sideLength, center) { + // ^^^^^^ + assert_eq!( + NodePath::from_range(&program.ast, range(55, 61)).unwrap(), + NodePath { + steps: vec![ + Step::ProgramBodyItem { index: 0 }, + Step::VariableDeclarationDeclaration, + Step::VariableDeclarationInit, + Step::FunctionExpressionParam { index: 1 } + ], + } + ); + // |> line(endAbsolute = p1) + // ^^ + assert_eq!( + NodePath::from_range(&program.ast, range(293, 295)).unwrap(), + NodePath { + steps: vec![ + Step::ProgramBodyItem { index: 0 }, + Step::VariableDeclarationDeclaration, + Step::VariableDeclarationInit, + Step::FunctionExpressionBody, + Step::FunctionExpressionBodyItem { index: 7 }, + Step::ReturnStatementArg, + Step::PipeBodyItem { index: 2 }, + Step::CallKwArg { index: 0 }, + ], + } + ); + // myCube = cube(sideLength = 40, center = [0, 0]) + // ^ + assert_eq!( + NodePath::from_range(&program.ast, range(485, 486)).unwrap(), + NodePath { + steps: vec![ + Step::ProgramBodyItem { index: 1 }, + Step::VariableDeclarationDeclaration, + Step::VariableDeclarationInit, + Step::CallKwArg { index: 1 }, + Step::ArrayElement { index: 1 } + ], + } + ); + } +} diff --git a/rust/kcl-lib/src/parsing/parser.rs b/rust/kcl-lib/src/parsing/parser.rs index 5b1291975..edd47d47e 100644 --- a/rust/kcl-lib/src/parsing/parser.rs +++ b/rust/kcl-lib/src/parsing/parser.rs @@ -14,7 +14,7 @@ use winnow::{ }; use super::{ - ast::types::{AscribedExpression, ImportPath, LabelledExpression}, + ast::types::{AscribedExpression, CallExpression, ImportPath, LabelledExpression}, token::{NumericSuffix, RESERVED_WORDS}, DeprecationKind, }; @@ -24,13 +24,12 @@ use crate::{ parsing::{ ast::types::{ Annotation, ArrayExpression, ArrayRangeExpression, BinaryExpression, BinaryOperator, BinaryPart, BodyItem, - BoxNode, CallExpression, CallExpressionKw, CommentStyle, DefaultParamVal, ElseIf, Expr, - ExpressionStatement, FunctionExpression, Identifier, IfExpression, ImportItem, ImportSelector, - ImportStatement, ItemVisibility, LabeledArg, Literal, LiteralIdentifier, LiteralValue, MemberExpression, - MemberObject, Name, Node, NodeList, NonCodeMeta, NonCodeNode, NonCodeValue, ObjectExpression, - ObjectProperty, Parameter, PipeExpression, PipeSubstitution, PrimitiveType, Program, ReturnStatement, - Shebang, TagDeclarator, Type, TypeDeclaration, UnaryExpression, UnaryOperator, VariableDeclaration, - VariableDeclarator, VariableKind, + BoxNode, CallExpressionKw, CommentStyle, DefaultParamVal, ElseIf, Expr, ExpressionStatement, + FunctionExpression, Identifier, IfExpression, ImportItem, ImportSelector, ImportStatement, ItemVisibility, + LabeledArg, Literal, LiteralIdentifier, LiteralValue, MemberExpression, MemberObject, Name, Node, NodeList, + NonCodeMeta, NonCodeNode, NonCodeValue, ObjectExpression, ObjectProperty, Parameter, PipeExpression, + PipeSubstitution, PrimitiveType, Program, ReturnStatement, Shebang, TagDeclarator, Type, TypeDeclaration, + UnaryExpression, UnaryOperator, VariableDeclaration, VariableDeclarator, VariableKind, }, math::BinaryExpressionToken, token::{Token, TokenSlice, TokenType}, @@ -3047,6 +3046,46 @@ fn fn_call_kw(i: &mut TokenSlice) -> PResult> { let _ = open_paren.parse_next(i)?; ignore_whitespace(i); + // Special case: no args + let early_close = peek(close_paren).parse_next(i); + if early_close.is_ok() { + let cl = close_paren.parse_next(i)?; + let result = Node::new_node( + fn_name.start, + cl.end, + fn_name.module_id, + CallExpressionKw { + callee: fn_name, + unlabeled: Default::default(), + arguments: Default::default(), + digest: None, + non_code_meta: Default::default(), + }, + ); + return Ok(result); + } + + // Special case: one arg (unlabeled) + let early_close = peek((expression, opt(whitespace), close_paren)).parse_next(i); + if early_close.is_ok() { + let first_expression = expression.parse_next(i)?; + ignore_whitespace(i); + let end = close_paren.parse_next(i)?.end; + let result = Node::new_node( + fn_name.start, + end, + fn_name.module_id, + CallExpressionKw { + callee: fn_name, + unlabeled: Some(first_expression), + arguments: Default::default(), + digest: None, + non_code_meta: Default::default(), + }, + ); + return Ok(result); + } + #[allow(clippy::large_enum_variant)] enum ArgPlace { NonCode(Node), @@ -3834,7 +3873,7 @@ mySk1 = startSketchOn(XY) #[test] fn pipes_on_pipes_minimal() { let test_program = r#"startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [0, -0]) // MoveRelative "#; @@ -4105,7 +4144,7 @@ mySk1 = startSketchOn(XY) fn test_parse_half_pipe_small() { assert_err_contains( "secondExtrude = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |", "Unexpected token: |", ); @@ -4169,7 +4208,7 @@ height = [obj["a"] -1, 0]"#; #[test] fn test_anon_fn() { - crate::parsing::top_level_parse("foo(42, fn(x) { return x + 1 })").unwrap(); + crate::parsing::top_level_parse("foo(num=42, closure=fn(x) { return x + 1 })").unwrap(); } #[test] @@ -4198,15 +4237,15 @@ height = [obj["a"] -1, 0]"#; let code = "height = 10 firstExtrude = startSketchOn(XY) - |> startProfileAt([0,0], %) - |> line([0, 8], %) - |> line([20, 0], %) - |> line([0, -8], %) + |> startProfile(at = [0,0]) + |> line(at = [0, 8]) + |> line(at = [20, 0]) + |> line(at = [0, -8]) |> close() |> extrude(length=2) secondExtrude = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |"; assert_err_contains(code, "Unexpected token: |"); } @@ -4477,7 +4516,7 @@ e /// /// ``` /// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) +/// |> startProfile(at = [0, 0]) /// |> angledLine( /// angle = 30, /// length = 3 / cos(toRadians(30)), @@ -4517,7 +4556,7 @@ export fn cos(num: number(rad)): number(_) {}"#; #[test] fn error_underscore() { - let (_, errs) = assert_no_fatal("_foo(_blah, _)"); + let (_, errs) = assert_no_fatal("_foo(a=_blah, b=_)"); assert_eq!(errs.len(), 3, "found: {errs:#?}"); } @@ -4629,11 +4668,11 @@ thing(false) #[test] fn random_words_fail() { let test_program = r#"part001 = startSketchOn(-XZ) - |> startProfileAt([8.53, 11.8], %) + |> startProfile(at = [8.53, 11.8]) asdasd asdasd - |> line([11.12, -14.82], %) - |> line([-13.27, -6.98], %) - |> line([-5.09, 12.33], %) + |> line(at = [11.12, -14.82]) + |> line(at = [-13.27, -6.98]) + |> line(at = [-5.09, 12.33]) asdasd "#; let _ = crate::parsing::top_level_parse(test_program).unwrap_errs(); @@ -4643,16 +4682,16 @@ thing(false) fn test_member_expression_sketch() { let some_program_string = r#"fn cube(pos, scale) { sg = startSketchOn(XY) - |> startProfileAt(pos, %) - |> line([0, scale], %) - |> line([scale, 0], %) - |> line([0, -scale], %) + |> startProfile(pos) + |> line(at = [0, scale]) + |> line(at = [scale, 0]) + |> line(at = [0, -scale]) return sg } -b1 = cube([0,0], 10) -b2 = cube([3,3], 4) +b1 = cube(pos=[0,0], scale=10) +b2 = cube(pos=[3,3], scale=4) pt1 = b1[0] pt2 = b2[0] @@ -4671,16 +4710,16 @@ let other_thing = 2 * cos(3)"#; fn test_negative_arguments() { let some_program_string = r#"fn box(p, h, l, w) { myBox = startSketchOn(XY) - |> startProfileAt(p, %) - |> line([0, l], %) - |> line([w, 0], %) - |> line([0, -l], %) + |> startProfile(p) + |> line(at = [0, l]) + |> line(at = [w, 0]) + |> line(at = [0, -l]) |> close() |> extrude(length=h) return myBox } -let myBox = box([0,0], -3, -16, -10) +let myBox = box(p=[0,0], h=-3, l=-16, w=-10) "#; crate::parsing::top_level_parse(some_program_string).unwrap(); } @@ -4697,20 +4736,20 @@ let myBox = box([0,0], -3, -16, -10) #[test] fn test_parse_tag_named_std_lib() { let some_program_string = r#"startSketchOn(XY) - |> startProfileAt([0, 0], %) - |> line([5, 5], %, $xLine) + |> startProfile(at = [0, 0]) + |> line(%, end = [5, 5], tag = $xLine) "#; assert_err( some_program_string, "Cannot assign a tag to a reserved keyword: xLine", - [74, 80], + [86, 92], ); } #[test] fn test_parse_empty_tag_brace() { let some_program_string = r#"startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(%, $) "#; assert_err(some_program_string, "Tag names must not be empty", [67, 68]); @@ -4718,7 +4757,7 @@ let myBox = box([0,0], -3, -16, -10) #[test] fn test_parse_empty_tag_whitespace() { let some_program_string = r#"startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(%, $ ,01) "#; assert_err(some_program_string, "Tag names must not be empty", [67, 68]); @@ -4727,7 +4766,7 @@ let myBox = box([0,0], -3, -16, -10) #[test] fn test_parse_empty_tag_comma() { let some_program_string = r#"startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(%, $,) "#; assert_err(some_program_string, "Tag names must not be empty", [67, 68]); @@ -4736,7 +4775,7 @@ let myBox = box([0,0], -3, -16, -10) fn test_parse_tag_starting_with_digit() { let some_program_string = r#" startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(%, $01)"#; assert_err( some_program_string, @@ -4748,14 +4787,14 @@ let myBox = box([0,0], -3, -16, -10) fn test_parse_tag_including_digit() { let some_program_string = r#" startSketchOn(XY) - |> startProfileAt([0, 0], %) - |> line(%, $var01)"#; + |> startProfile(at = [0, 0]) + |> line(%, tag = $var01)"#; assert_no_err(some_program_string); } #[test] fn test_parse_tag_starting_with_bang() { let some_program_string = r#"startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(%, $!var,01) "#; assert_err(some_program_string, "Tag names must not start with a bang", [67, 68]); @@ -4763,7 +4802,7 @@ let myBox = box([0,0], -3, -16, -10) #[test] fn test_parse_tag_starting_with_dollar() { let some_program_string = r#"startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(%, $$,01) "#; assert_err(some_program_string, "Tag names must not start with a dollar", [67, 68]); @@ -4771,7 +4810,7 @@ let myBox = box([0,0], -3, -16, -10) #[test] fn test_parse_tag_starting_with_fn() { let some_program_string = r#"startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(%, $fn,01) "#; assert_err(some_program_string, "Tag names must not start with a keyword", [67, 69]); @@ -4779,7 +4818,7 @@ let myBox = box([0,0], -3, -16, -10) #[test] fn test_parse_tag_starting_with_a_comment() { let some_program_string = r#"startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(%, $// ,01) "#; @@ -4794,8 +4833,8 @@ let myBox = box([0,0], -3, -16, -10) fn test_parse_tag_with_reserved_in_middle_works() { let some_program_string = r#" startSketchOn(XY) - |> startProfileAt([0, 0], %) - |> line([5, 5], %, $sketching) + |> startProfile(at = [0, 0]) + |> line(end = [5, 5], tag = $sketching) "#; assert_no_err(some_program_string); } @@ -4803,21 +4842,21 @@ let myBox = box([0,0], -3, -16, -10) #[test] fn test_parse_array_missing_closing_bracket() { let some_program_string = r#" -sketch001 = startSketchOn(XZ) |> startProfileAt([90.45, 119.09, %)"#; +sketch001 = startSketchOn(XZ) |> startProfile(at = [90.45, 119.09)"#; assert_err( some_program_string, "Encountered an unexpected character(s) before finding a closing bracket(`]`) for the array", - [49, 65], + [52, 60], ); } #[test] fn test_parse_array_missing_comma() { let some_program_string = r#" -sketch001 = startSketchOn(XZ) |> startProfileAt([90.45 119.09], %)"#; +sketch001 = startSketchOn(XZ) |> startProfile(at = [90.45 119.09])"#; assert_err( some_program_string, "Unexpected character encountered. You might be missing a comma in between elements.", - [50, 63], + [53, 66], ); } #[test] @@ -4825,21 +4864,21 @@ sketch001 = startSketchOn(XZ) |> startProfileAt([90.45 119.09], %)"#; // since there is an early exit if encountering a reserved word, the error should be about // that and not the missing comma let some_program_string = r#" -sketch001 = startSketchOn(XZ) |> startProfileAt([90.45 $struct], %)"#; +sketch001 = startSketchOn(XZ) |> startProfile(at = [90.45 $struct])"#; assert_err( some_program_string, "Encountered an unexpected character(s) before finding a closing bracket(`]`) for the array", - [49, 50], + [52, 53], ); } #[test] fn test_parse_array_random_brace() { let some_program_string = r#" -sketch001 = startSketchOn(XZ) |> startProfileAt([}], %)"#; +sketch001 = startSketchOn(XZ) |> startProfile(at = [}])"#; assert_err( some_program_string, "Encountered an unexpected character(s) before finding a closing bracket(`]`) for the array", - [49, 50], + [52, 53], ); } @@ -5075,17 +5114,17 @@ mod snapshot_tests { snapshot_test!( a, r#"boxSketch = startSketchOn(XY) - |> startProfileAt([0, 0], %) - |> line([0, 10], %) - |> tangentialArc([-5, 5], %) - |> line([5, -15], %) + |> startProfileAt(at = [0, 0]) + |> line(at = [0, 10]) + |> tangentialArc(end = [-5, 5]) + |> line(at = [5, -15]) |> extrude(length=10) "# ); - snapshot_test!(b, "myVar = min(5 , -legLen(5, 4))"); // Space before comma + snapshot_test!(b, "myVar = min(x=5 , y=-legLen(5, z=4))"); // Space before comma - snapshot_test!(c, "myVar = min(-legLen(5, 4), 5)"); - snapshot_test!(d, "myVar = 5 + 6 |> myFunc(45, %)"); + snapshot_test!(c, "myVar = min(x=-legLen(a=5, b=4), y=5)"); + snapshot_test!(d, "myVar = 5 + 6 |> myFunc(45)"); snapshot_test!(e, "x = 1 * (3 - 4)"); snapshot_test!(f, r#"x = 1 // this is an inline comment"#); snapshot_test!( @@ -5141,11 +5180,11 @@ mod snapshot_tests { snapshot_test!(v, r#"pt1 = b1[0]"#); snapshot_test!(w, r#"pt1 = b1['zero']"#); snapshot_test!(x, r#"pt1 = b1.zero"#); - snapshot_test!(y, r#"sg = startSketchOn(XY) |> startProfileAt(pos, %)"#); + snapshot_test!(y, r#"sg = startSketchOn(XY) |> startProfile(pos)"#); snapshot_test!( z, "sg = startSketchOn(XY) - |> startProfileAt(pos) |> line([0, -scale], %)" + |> startProfile(pos) |> line([0, -scale])" ); snapshot_test!(aa, r#"sg = -scale"#); snapshot_test!(ab, "line(endAbsolute = [0, -1])"); @@ -5168,7 +5207,7 @@ mod snapshot_tests { snapshot_test!( af, r#"mySketch = startSketchOn(XY) - |> startProfileAt([0,0], %) + |> startProfile(at = [0,0]) |> line(endAbsolute = [0, 1], tag = $myPath) |> line(endAbsolute = [1, 1]) |> line(endAbsolute = [1, 0], tag = $rightPath) @@ -5176,21 +5215,21 @@ mod snapshot_tests { ); snapshot_test!( ag, - "mySketch = startSketchOn(XY) |> startProfileAt([0,0], %) |> line(endAbsolute = [1, 1]) |> close()" + "mySketch = startSketchOn(XY) |> startProfile(at = [0,0]) |> line(endAbsolute = [1, 1]) |> close()" ); - snapshot_test!(ah, "myBox = startSketchOn(XY) |> startProfileAt(p, %)"); - snapshot_test!(ai, r#"myBox = f(1) |> g(2, %)"#); + snapshot_test!(ah, "myBox = startSketchOn(XY) |> startProfile(at = p)"); + snapshot_test!(ai, r#"myBox = f(1) |> g(2)"#); snapshot_test!( aj, - r#"myBox = startSketchOn(XY) |> startProfileAt(p, %) |> line(end = [0, l])"# + r#"myBox = startSketchOn(XY) |> startProfile(at = p) |> line(end = [0, l])"# ); snapshot_test!(ak, "line(endAbsolute = [0, 1])"); - snapshot_test!(ap, "mySketch = startSketchOn(XY) |> startProfileAt([0,0], %)"); - snapshot_test!(aq, "log(5, \"hello\", aIdentifier)"); + snapshot_test!(ap, "mySketch = startSketchOn(XY) |> startProfile(at = [0,0])"); + snapshot_test!(aq, "log(number = 5, msg = \"hello\", id=aIdentifier)"); snapshot_test!(ar, r#"5 + "a""#); - snapshot_test!(at, "line([0, l], %)"); + snapshot_test!(at, "line([0, l])"); snapshot_test!(au, include_str!("../../e2e/executor/inputs/cylinder.kcl")); - snapshot_test!(av, "fn f(angle?) { return default(angle, 360) }"); + snapshot_test!(av, "fn f(angle?) { return default(maybe=angle, otherwise=360) }"); snapshot_test!( aw, "numbers = [ diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__a.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__a.snap index d79784b2a..f95faad91 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__a.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__a.snap @@ -8,7 +8,7 @@ expression: actual "commentStart": 0, "declaration": { "commentStart": 0, - "end": 170, + "end": 179, "id": { "commentStart": 0, "end": 9, @@ -61,44 +61,47 @@ expression: actual { "arguments": [ { - "commentStart": 52, - "elements": [ - { - "commentStart": 53, - "end": 54, - "raw": "0", - "start": 53, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 52, + "end": 54, + "name": "at", + "start": 52, + "type": "Identifier" + }, + "arg": { + "commentStart": 57, + "elements": [ + { + "commentStart": 58, + "end": 59, + "raw": "0", + "start": 58, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 61, + "end": 62, + "raw": "0", + "start": 61, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 56, - "end": 57, - "raw": "0", - "start": 56, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 58, - "start": 52, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 60, - "end": 61, - "start": 60, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 63, + "start": 57, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -117,86 +120,175 @@ expression: actual "type": "Name" }, "commentStart": 37, - "end": 62, + "end": 64, "start": 37, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ { - "commentStart": 75, - "elements": [ - { - "commentStart": 76, - "end": 77, - "raw": "0", - "start": 76, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 77, + "end": 79, + "name": "at", + "start": 77, + "type": "Identifier" + }, + "arg": { + "commentStart": 82, + "elements": [ + { + "commentStart": 83, + "end": 84, + "raw": "0", + "start": 83, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 86, + "end": 88, + "raw": "10", + "start": 86, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } } - }, - { - "commentStart": 79, - "end": 81, - "raw": "10", - "start": 79, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } - } - ], - "end": 82, - "start": 75, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 84, - "end": 85, - "start": 84, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 89, + "start": 82, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { "abs_path": false, - "commentStart": 70, - "end": 74, + "commentStart": 72, + "end": 76, "name": { - "commentStart": 70, - "end": 74, + "commentStart": 72, + "end": 76, "name": "line", - "start": 70, + "start": 72, "type": "Identifier" }, "path": [], - "start": 70, + "start": 72, "type": "Name" }, - "commentStart": 70, - "end": 86, - "start": 70, - "type": "CallExpression", - "type": "CallExpression" + "commentStart": 72, + "end": 90, + "start": 72, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ { - "commentStart": 108, - "elements": [ - { - "argument": { - "commentStart": 110, - "end": 111, + "type": "LabeledArg", + "label": { + "commentStart": 112, + "end": 115, + "name": "end", + "start": 112, + "type": "Identifier" + }, + "arg": { + "commentStart": 118, + "elements": [ + { + "argument": { + "commentStart": 120, + "end": 121, + "raw": "5", + "start": 120, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + }, + "commentStart": 119, + "end": 121, + "operator": "-", + "start": 119, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "commentStart": 123, + "end": 124, "raw": "5", - "start": 110, + "start": 123, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + } + ], + "end": 125, + "start": 118, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 98, + "end": 111, + "name": { + "commentStart": 98, + "end": 111, + "name": "tangentialArc", + "start": 98, + "type": "Identifier" + }, + "path": [], + "start": 98, + "type": "Name" + }, + "commentStart": 98, + "end": 126, + "start": 98, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 139, + "end": 141, + "name": "at", + "start": 139, + "type": "Identifier" + }, + "arg": { + "commentStart": 144, + "elements": [ + { + "commentStart": 145, + "end": 146, + "raw": "5", + "start": 145, "type": "Literal", "type": "Literal", "value": { @@ -204,148 +296,72 @@ expression: actual "suffix": "None" } }, - "commentStart": 109, - "end": 111, - "operator": "-", - "start": 109, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 113, - "end": 114, - "raw": "5", - "start": 113, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + { + "argument": { + "commentStart": 149, + "end": 151, + "raw": "15", + "start": 149, + "type": "Literal", + "type": "Literal", + "value": { + "value": 15.0, + "suffix": "None" + } + }, + "commentStart": 148, + "end": 151, + "operator": "-", + "start": 148, + "type": "UnaryExpression", + "type": "UnaryExpression" } - } - ], - "end": 115, - "start": 108, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 117, - "end": 118, - "start": 117, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 152, + "start": 144, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { "abs_path": false, - "commentStart": 94, - "end": 107, + "commentStart": 134, + "end": 138, "name": { - "commentStart": 94, - "end": 107, - "name": "tangentialArc", - "start": 94, - "type": "Identifier" - }, - "path": [], - "start": 94, - "type": "Name" - }, - "commentStart": 94, - "end": 119, - "start": 94, - "type": "CallExpression", - "type": "CallExpression" - }, - { - "arguments": [ - { - "commentStart": 132, - "elements": [ - { - "commentStart": 133, - "end": 134, - "raw": "5", - "start": 133, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" - } - }, - { - "argument": { - "commentStart": 137, - "end": 139, - "raw": "15", - "start": 137, - "type": "Literal", - "type": "Literal", - "value": { - "value": 15.0, - "suffix": "None" - } - }, - "commentStart": 136, - "end": 139, - "operator": "-", - "start": 136, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 140, - "start": 132, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 142, - "end": 143, - "start": 142, - "type": "PipeSubstitution", - "type": "PipeSubstitution" - } - ], - "callee": { - "abs_path": false, - "commentStart": 127, - "end": 131, - "name": { - "commentStart": 127, - "end": 131, + "commentStart": 134, + "end": 138, "name": "line", - "start": 127, + "start": 134, "type": "Identifier" }, "path": [], - "start": 127, + "start": 134, "type": "Name" }, - "commentStart": 127, - "end": 144, - "start": 127, - "type": "CallExpression", - "type": "CallExpression" + "commentStart": 134, + "end": 153, + "start": 134, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ { "type": "LabeledArg", "label": { - "commentStart": 160, - "end": 166, + "commentStart": 169, + "end": 175, "name": "length", - "start": 160, + "start": 169, "type": "Identifier" }, "arg": { - "commentStart": 167, - "end": 169, + "commentStart": 176, + "end": 178, "raw": "10", - "start": 167, + "start": 176, "type": "Literal", "type": "Literal", "value": { @@ -357,29 +373,29 @@ expression: actual ], "callee": { "abs_path": false, - "commentStart": 152, - "end": 159, + "commentStart": 161, + "end": 168, "name": { - "commentStart": 152, - "end": 159, + "commentStart": 161, + "end": 168, "name": "extrude", - "start": 152, + "start": 161, "type": "Identifier" }, "path": [], - "start": 152, + "start": 161, "type": "Name" }, - "commentStart": 152, - "end": 170, - "start": 152, + "commentStart": 161, + "end": 179, + "start": 161, "type": "CallExpressionKw", "type": "CallExpressionKw", "unlabeled": null } ], "commentStart": 12, - "end": 170, + "end": 179, "start": 12, "type": "PipeExpression", "type": "PipeExpression" @@ -387,7 +403,7 @@ expression: actual "start": 0, "type": "VariableDeclarator" }, - "end": 170, + "end": 179, "kind": "const", "start": 0, "type": "VariableDeclaration", @@ -395,6 +411,6 @@ expression: actual } ], "commentStart": 0, - "end": 171, + "end": 180, "start": 0 } diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__af.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__af.snap index 51382f2a7..8b47a911b 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__af.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__af.snap @@ -61,54 +61,57 @@ expression: actual { "arguments": [ { - "commentStart": 55, - "elements": [ - { - "commentStart": 56, - "end": 57, - "raw": "0", - "start": 56, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 53, + "end": 55, + "name": "at", + "start": 53, + "type": "Identifier" + }, + "arg": { + "commentStart": 58, + "elements": [ + { + "commentStart": 59, + "end": 60, + "raw": "0", + "start": 59, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 61, + "end": 62, + "raw": "0", + "start": 61, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 58, - "end": 59, - "raw": "0", - "start": 58, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 60, - "start": 55, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 62, - "end": 63, - "start": 62, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 63, + "start": 58, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { "abs_path": false, "commentStart": 40, - "end": 54, + "end": 52, "name": { "commentStart": 40, - "end": 54, - "name": "startProfileAt", + "end": 52, + "name": "startProfile", "start": 40, "type": "Identifier" }, @@ -119,8 +122,9 @@ expression: actual "commentStart": 40, "end": 64, "start": 40, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ag.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ag.snap index 23bcb687d..bc65025da 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ag.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ag.snap @@ -61,54 +61,57 @@ expression: actual { "arguments": [ { - "commentStart": 47, - "elements": [ - { - "commentStart": 48, - "end": 49, - "raw": "0", - "start": 48, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 45, + "end": 47, + "name": "at", + "start": 45, + "type": "Identifier" + }, + "arg": { + "commentStart": 50, + "elements": [ + { + "commentStart": 51, + "end": 52, + "raw": "0", + "start": 51, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 53, + "end": 54, + "raw": "0", + "start": 53, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 50, - "end": 51, - "raw": "0", - "start": 50, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 52, - "start": 47, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 54, - "end": 55, - "start": 54, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 55, + "start": 50, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { "abs_path": false, "commentStart": 32, - "end": 46, + "end": 44, "name": { "commentStart": 32, - "end": 46, - "name": "startProfileAt", + "end": 44, + "name": "startProfile", "start": 32, "type": "Identifier" }, @@ -119,8 +122,9 @@ expression: actual "commentStart": 32, "end": 56, "start": 32, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ah.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ah.snap index c1a92e028..5f0163dc0 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ah.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ah.snap @@ -61,37 +61,40 @@ expression: actual { "arguments": [ { - "abs_path": false, - "commentStart": 44, - "end": 45, - "name": { - "commentStart": 44, - "end": 45, - "name": "p", - "start": 44, + "type": "LabeledArg", + "label": { + "commentStart": 42, + "end": 44, + "name": "at", + "start": 42, "type": "Identifier" }, - "path": [], - "start": 44, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 47, - "end": 48, - "start": 47, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "arg": { + "abs_path": false, + "commentStart": 47, + "end": 48, + "name": { + "commentStart": 47, + "end": 48, + "name": "p", + "start": 47, + "type": "Identifier" + }, + "path": [], + "start": 47, + "type": "Name", + "type": "Name" + } } ], "callee": { "abs_path": false, "commentStart": 29, - "end": 43, + "end": 41, "name": { "commentStart": 29, - "end": 43, - "name": "startProfileAt", + "end": 41, + "name": "startProfile", "start": 29, "type": "Identifier" }, @@ -102,8 +105,9 @@ expression: actual "commentStart": 29, "end": 49, "start": 29, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null } ], "commentStart": 8, diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ai.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ai.snap index a0898409f..e1c34d5a5 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ai.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ai.snap @@ -8,7 +8,7 @@ expression: actual "commentStart": 0, "declaration": { "commentStart": 0, - "end": 23, + "end": 20, "id": { "commentStart": 0, "end": 5, @@ -67,13 +67,6 @@ expression: actual "value": 2.0, "suffix": "None" } - }, - { - "commentStart": 21, - "end": 22, - "start": 21, - "type": "PipeSubstitution", - "type": "PipeSubstitution" } ], "callee": { @@ -92,14 +85,14 @@ expression: actual "type": "Name" }, "commentStart": 16, - "end": 23, + "end": 20, "start": 16, "type": "CallExpression", "type": "CallExpression" } ], "commentStart": 8, - "end": 23, + "end": 20, "start": 8, "type": "PipeExpression", "type": "PipeExpression" @@ -107,7 +100,7 @@ expression: actual "start": 0, "type": "VariableDeclarator" }, - "end": 23, + "end": 20, "kind": "const", "start": 0, "type": "VariableDeclaration", @@ -115,6 +108,6 @@ expression: actual } ], "commentStart": 0, - "end": 23, + "end": 20, "start": 0 } diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aj.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aj.snap index 91ca51649..fd35296e0 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aj.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aj.snap @@ -61,37 +61,40 @@ expression: actual { "arguments": [ { - "abs_path": false, - "commentStart": 44, - "end": 45, - "name": { - "commentStart": 44, - "end": 45, - "name": "p", - "start": 44, + "type": "LabeledArg", + "label": { + "commentStart": 42, + "end": 44, + "name": "at", + "start": 42, "type": "Identifier" }, - "path": [], - "start": 44, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 47, - "end": 48, - "start": 47, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "arg": { + "abs_path": false, + "commentStart": 47, + "end": 48, + "name": { + "commentStart": 47, + "end": 48, + "name": "p", + "start": 47, + "type": "Identifier" + }, + "path": [], + "start": 47, + "type": "Name", + "type": "Name" + } } ], "callee": { "abs_path": false, "commentStart": 29, - "end": 43, + "end": 41, "name": { "commentStart": 29, - "end": 43, - "name": "startProfileAt", + "end": 41, + "name": "startProfile", "start": 29, "type": "Identifier" }, @@ -102,8 +105,9 @@ expression: actual "commentStart": 29, "end": 49, "start": 29, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ap.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ap.snap index cd59ac65a..54f7e9385 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ap.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ap.snap @@ -61,54 +61,57 @@ expression: actual { "arguments": [ { - "commentStart": 47, - "elements": [ - { - "commentStart": 48, - "end": 49, - "raw": "0", - "start": 48, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 45, + "end": 47, + "name": "at", + "start": 45, + "type": "Identifier" + }, + "arg": { + "commentStart": 50, + "elements": [ + { + "commentStart": 51, + "end": 52, + "raw": "0", + "start": 51, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 53, + "end": 54, + "raw": "0", + "start": 53, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 50, - "end": 51, - "raw": "0", - "start": 50, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 52, - "start": 47, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 54, - "end": 55, - "start": 54, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + ], + "end": 55, + "start": 50, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { "abs_path": false, "commentStart": 32, - "end": 46, + "end": 44, "name": { "commentStart": 32, - "end": 46, - "name": "startProfileAt", + "end": 44, + "name": "startProfile", "start": 32, "type": "Identifier" }, @@ -119,8 +122,9 @@ expression: actual "commentStart": 32, "end": 56, "start": 32, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null } ], "commentStart": 11, diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aq.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aq.snap index 2f2aa09a5..e6c992d7a 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aq.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aq.snap @@ -6,45 +6,75 @@ expression: actual "body": [ { "commentStart": 0, - "end": 28, + "end": 46, "expression": { "arguments": [ { - "commentStart": 4, - "end": 5, - "raw": "5", - "start": 4, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 4, + "end": 10, + "name": "number", + "start": 4, + "type": "Identifier" + }, + "arg": { + "commentStart": 13, + "end": 14, + "raw": "5", + "start": 13, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } }, { - "commentStart": 7, - "end": 14, - "raw": "\"hello\"", - "start": 7, - "type": "Literal", - "type": "Literal", - "value": "hello" - }, - { - "abs_path": false, - "commentStart": 16, - "end": 27, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 16, - "end": 27, - "name": "aIdentifier", + "end": 19, + "name": "msg", "start": 16, "type": "Identifier" }, - "path": [], - "start": 16, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 22, + "end": 29, + "raw": "\"hello\"", + "start": 22, + "type": "Literal", + "type": "Literal", + "value": "hello" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 31, + "end": 33, + "name": "id", + "start": 31, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 34, + "end": 45, + "name": { + "commentStart": 34, + "end": 45, + "name": "aIdentifier", + "start": 34, + "type": "Identifier" + }, + "path": [], + "start": 34, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -63,10 +93,11 @@ expression: actual "type": "Name" }, "commentStart": 0, - "end": 28, + "end": 46, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -74,6 +105,6 @@ expression: actual } ], "commentStart": 0, - "end": 28, + "end": 46, "start": 0 } diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__at.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__at.snap index 5a61f2013..c306ce489 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__at.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__at.snap @@ -6,7 +6,7 @@ expression: actual "body": [ { "commentStart": 0, - "end": 15, + "end": 12, "expression": { "arguments": [ { @@ -45,13 +45,6 @@ expression: actual "start": 5, "type": "ArrayExpression", "type": "ArrayExpression" - }, - { - "commentStart": 13, - "end": 14, - "start": 13, - "type": "PipeSubstitution", - "type": "PipeSubstitution" } ], "callee": { @@ -70,7 +63,7 @@ expression: actual "type": "Name" }, "commentStart": 0, - "end": 15, + "end": 12, "start": 0, "type": "CallExpression", "type": "CallExpression" @@ -81,6 +74,6 @@ expression: actual } ], "commentStart": 0, - "end": 15, + "end": 12, "start": 0 } diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__av.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__av.snap index 7999d6c3a..36f5156e3 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__av.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__av.snap @@ -8,7 +8,7 @@ expression: actual "commentStart": 0, "declaration": { "commentStart": 3, - "end": 43, + "end": 59, "id": { "commentStart": 3, "end": 4, @@ -23,31 +23,51 @@ expression: actual "argument": { "arguments": [ { - "abs_path": false, - "commentStart": 30, - "end": 35, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 30, "end": 35, - "name": "angle", + "name": "maybe", "start": 30, "type": "Identifier" }, - "path": [], - "start": 30, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 36, + "end": 41, + "name": { + "commentStart": 36, + "end": 41, + "name": "angle", + "start": 36, + "type": "Identifier" + }, + "path": [], + "start": 36, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 37, - "end": 40, - "raw": "360", - "start": 37, - "type": "Literal", - "type": "Literal", - "value": { - "value": 360.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 43, + "end": 52, + "name": "otherwise", + "start": 43, + "type": "Identifier" + }, + "arg": { + "commentStart": 53, + "end": 56, + "raw": "360", + "start": 53, + "type": "Literal", + "type": "Literal", + "value": { + "value": 360.0, + "suffix": "None" + } } } ], @@ -67,24 +87,25 @@ expression: actual "type": "Name" }, "commentStart": 22, - "end": 41, + "end": 57, "start": 22, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "commentStart": 15, - "end": 41, + "end": 57, "start": 15, "type": "ReturnStatement", "type": "ReturnStatement" } ], "commentStart": 13, - "end": 43, + "end": 59, "start": 13 }, "commentStart": 4, - "end": 43, + "end": 59, "params": [ { "type": "Parameter", @@ -109,7 +130,7 @@ expression: actual "start": 3, "type": "VariableDeclarator" }, - "end": 43, + "end": 59, "kind": "fn", "start": 0, "type": "VariableDeclaration", @@ -117,6 +138,6 @@ expression: actual } ], "commentStart": 0, - "end": 43, + "end": 59, "start": 0 } diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__b.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__b.snap index 95c1d7b7f..9a99bf254 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__b.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__b.snap @@ -8,7 +8,7 @@ expression: actual "commentStart": 0, "declaration": { "commentStart": 0, - "end": 30, + "end": 36, "id": { "commentStart": 0, "end": 5, @@ -19,72 +19,102 @@ expression: actual "init": { "arguments": [ { - "commentStart": 12, - "end": 13, - "raw": "5", - "start": 12, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 12, + "end": 13, + "name": "x", + "start": 12, + "type": "Identifier" + }, + "arg": { + "commentStart": 14, + "end": 15, + "raw": "5", + "start": 14, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } }, { - "argument": { - "arguments": [ - { - "commentStart": 24, - "end": 25, + "type": "LabeledArg", + "label": { + "commentStart": 18, + "end": 19, + "name": "y", + "start": 18, + "type": "Identifier" + }, + "arg": { + "argument": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 31, + "end": 32, + "name": "z", + "start": 31, + "type": "Identifier" + }, + "arg": { + "commentStart": 33, + "end": 34, + "raw": "4", + "start": 33, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 21, + "end": 27, + "name": { + "commentStart": 21, + "end": 27, + "name": "legLen", + "start": 21, + "type": "Identifier" + }, + "path": [], + "start": 21, + "type": "Name" + }, + "commentStart": 21, + "end": 35, + "start": 21, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "commentStart": 28, + "end": 29, "raw": "5", - "start": 24, + "start": 28, "type": "Literal", "type": "Literal", "value": { "value": 5.0, "suffix": "None" } - }, - { - "commentStart": 27, - "end": 28, - "raw": "4", - "start": 27, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } } - ], - "callee": { - "abs_path": false, - "commentStart": 17, - "end": 23, - "name": { - "commentStart": 17, - "end": 23, - "name": "legLen", - "start": 17, - "type": "Identifier" - }, - "path": [], - "start": 17, - "type": "Name" }, - "commentStart": 17, - "end": 29, - "start": 17, - "type": "CallExpression", - "type": "CallExpression" - }, - "commentStart": 16, - "end": 29, - "operator": "-", - "start": 16, - "type": "UnaryExpression", - "type": "UnaryExpression" + "commentStart": 20, + "end": 35, + "operator": "-", + "start": 20, + "type": "UnaryExpression", + "type": "UnaryExpression" + } } ], "callee": { @@ -103,15 +133,16 @@ expression: actual "type": "Name" }, "commentStart": 8, - "end": 30, + "end": 36, "start": 8, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" }, - "end": 30, + "end": 36, "kind": "const", "start": 0, "type": "VariableDeclaration", @@ -119,6 +150,6 @@ expression: actual } ], "commentStart": 0, - "end": 30, + "end": 36, "start": 0 } diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__c.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__c.snap index cab23fa89..da9677ce2 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__c.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__c.snap @@ -8,7 +8,7 @@ expression: actual "commentStart": 0, "declaration": { "commentStart": 0, - "end": 29, + "end": 37, "id": { "commentStart": 0, "end": 5, @@ -19,71 +19,112 @@ expression: actual "init": { "arguments": [ { - "argument": { - "arguments": [ - { - "commentStart": 20, - "end": 21, - "raw": "5", - "start": 20, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" - } - }, - { - "commentStart": 23, - "end": 24, - "raw": "4", - "start": 23, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 13, - "end": 19, - "name": { - "commentStart": 13, - "end": 19, - "name": "legLen", - "start": 13, - "type": "Identifier" - }, - "path": [], - "start": 13, - "type": "Name" - }, - "commentStart": 13, - "end": 25, - "start": 13, - "type": "CallExpression", - "type": "CallExpression" + "type": "LabeledArg", + "label": { + "commentStart": 12, + "end": 13, + "name": "x", + "start": 12, + "type": "Identifier" }, - "commentStart": 12, - "end": 25, - "operator": "-", - "start": 12, - "type": "UnaryExpression", - "type": "UnaryExpression" + "arg": { + "argument": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 22, + "end": 23, + "name": "a", + "start": 22, + "type": "Identifier" + }, + "arg": { + "commentStart": 24, + "end": 25, + "raw": "5", + "start": 24, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 27, + "end": 28, + "name": "b", + "start": 27, + "type": "Identifier" + }, + "arg": { + "commentStart": 29, + "end": 30, + "raw": "4", + "start": 29, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 15, + "end": 21, + "name": { + "commentStart": 15, + "end": 21, + "name": "legLen", + "start": 15, + "type": "Identifier" + }, + "path": [], + "start": 15, + "type": "Name" + }, + "commentStart": 15, + "end": 31, + "start": 15, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "commentStart": 14, + "end": 31, + "operator": "-", + "start": 14, + "type": "UnaryExpression", + "type": "UnaryExpression" + } }, { - "commentStart": 27, - "end": 28, - "raw": "5", - "start": 27, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 33, + "end": 34, + "name": "y", + "start": 33, + "type": "Identifier" + }, + "arg": { + "commentStart": 35, + "end": 36, + "raw": "5", + "start": 35, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } } ], @@ -103,15 +144,16 @@ expression: actual "type": "Name" }, "commentStart": 8, - "end": 29, + "end": 37, "start": 8, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" }, - "end": 29, + "end": 37, "kind": "const", "start": 0, "type": "VariableDeclaration", @@ -119,6 +161,6 @@ expression: actual } ], "commentStart": 0, - "end": 29, + "end": 37, "start": 0 } diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d.snap index ce5ecb940..ed8ee2e44 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d.snap @@ -8,7 +8,7 @@ expression: actual "commentStart": 0, "declaration": { "commentStart": 0, - "end": 30, + "end": 27, "id": { "commentStart": 0, "end": 5, @@ -63,13 +63,6 @@ expression: actual "value": 45.0, "suffix": "None" } - }, - { - "commentStart": 28, - "end": 29, - "start": 28, - "type": "PipeSubstitution", - "type": "PipeSubstitution" } ], "callee": { @@ -88,14 +81,14 @@ expression: actual "type": "Name" }, "commentStart": 17, - "end": 30, + "end": 27, "start": 17, "type": "CallExpression", "type": "CallExpression" } ], "commentStart": 8, - "end": 30, + "end": 27, "start": 8, "type": "PipeExpression", "type": "PipeExpression" @@ -103,7 +96,7 @@ expression: actual "start": 0, "type": "VariableDeclarator" }, - "end": 30, + "end": 27, "kind": "const", "start": 0, "type": "VariableDeclaration", @@ -111,6 +104,6 @@ expression: actual } ], "commentStart": 0, - "end": 30, + "end": 27, "start": 0 } diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__y.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__y.snap index b803ffe2c..21fc852c7 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__y.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__y.snap @@ -8,7 +8,7 @@ expression: actual "commentStart": 0, "declaration": { "commentStart": 0, - "end": 48, + "end": 43, "id": { "commentStart": 0, "end": 2, @@ -62,36 +62,29 @@ expression: actual "arguments": [ { "abs_path": false, - "commentStart": 41, - "end": 44, + "commentStart": 39, + "end": 42, "name": { - "commentStart": 41, - "end": 44, + "commentStart": 39, + "end": 42, "name": "pos", - "start": 41, + "start": 39, "type": "Identifier" }, "path": [], - "start": 41, + "start": 39, "type": "Name", "type": "Name" - }, - { - "commentStart": 46, - "end": 47, - "start": 46, - "type": "PipeSubstitution", - "type": "PipeSubstitution" } ], "callee": { "abs_path": false, "commentStart": 26, - "end": 40, + "end": 38, "name": { "commentStart": 26, - "end": 40, - "name": "startProfileAt", + "end": 38, + "name": "startProfile", "start": 26, "type": "Identifier" }, @@ -100,14 +93,14 @@ expression: actual "type": "Name" }, "commentStart": 26, - "end": 48, + "end": 43, "start": 26, "type": "CallExpression", "type": "CallExpression" } ], "commentStart": 5, - "end": 48, + "end": 43, "start": 5, "type": "PipeExpression", "type": "PipeExpression" @@ -115,7 +108,7 @@ expression: actual "start": 0, "type": "VariableDeclarator" }, - "end": 48, + "end": 43, "kind": "const", "start": 0, "type": "VariableDeclaration", @@ -123,6 +116,6 @@ expression: actual } ], "commentStart": 0, - "end": 48, + "end": 43, "start": 0 } diff --git a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__z.snap b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__z.snap index 0693edc13..7ba69bb3a 100644 --- a/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__z.snap +++ b/rust/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__z.snap @@ -8,7 +8,7 @@ expression: actual "commentStart": 0, "declaration": { "commentStart": 0, - "end": 73, + "end": 68, "id": { "commentStart": 0, "end": 2, @@ -62,17 +62,17 @@ expression: actual "arguments": [ { "abs_path": false, - "commentStart": 45, - "end": 48, + "commentStart": 43, + "end": 46, "name": { - "commentStart": 45, - "end": 48, + "commentStart": 43, + "end": 46, "name": "pos", - "start": 45, + "start": 43, "type": "Identifier" }, "path": [], - "start": 45, + "start": 43, "type": "Name", "type": "Name" } @@ -80,11 +80,11 @@ expression: actual "callee": { "abs_path": false, "commentStart": 30, - "end": 44, + "end": 42, "name": { "commentStart": 30, - "end": 44, - "name": "startProfileAt", + "end": 42, + "name": "startProfile", "start": 30, "type": "Identifier" }, @@ -93,7 +93,7 @@ expression: actual "type": "Name" }, "commentStart": 30, - "end": 49, + "end": 47, "start": 30, "type": "CallExpression", "type": "CallExpression" @@ -101,13 +101,13 @@ expression: actual { "arguments": [ { - "commentStart": 58, + "commentStart": 56, "elements": [ { - "commentStart": 59, - "end": 60, + "commentStart": 57, + "end": 58, "raw": "0", - "start": 59, + "start": 57, "type": "Literal", "type": "Literal", "value": { @@ -118,65 +118,58 @@ expression: actual { "argument": { "abs_path": false, - "commentStart": 63, - "end": 68, + "commentStart": 61, + "end": 66, "name": { - "commentStart": 63, - "end": 68, + "commentStart": 61, + "end": 66, "name": "scale", - "start": 63, + "start": 61, "type": "Identifier" }, "path": [], - "start": 63, + "start": 61, "type": "Name", "type": "Name" }, - "commentStart": 62, - "end": 68, + "commentStart": 60, + "end": 66, "operator": "-", - "start": 62, + "start": 60, "type": "UnaryExpression", "type": "UnaryExpression" } ], - "end": 69, - "start": 58, + "end": 67, + "start": 56, "type": "ArrayExpression", "type": "ArrayExpression" - }, - { - "commentStart": 71, - "end": 72, - "start": 71, - "type": "PipeSubstitution", - "type": "PipeSubstitution" } ], "callee": { "abs_path": false, - "commentStart": 53, - "end": 57, + "commentStart": 51, + "end": 55, "name": { - "commentStart": 53, - "end": 57, + "commentStart": 51, + "end": 55, "name": "line", - "start": 53, + "start": 51, "type": "Identifier" }, "path": [], - "start": 53, + "start": 51, "type": "Name" }, - "commentStart": 53, - "end": 73, - "start": 53, + "commentStart": 51, + "end": 68, + "start": 51, "type": "CallExpression", "type": "CallExpression" } ], "commentStart": 5, - "end": 73, + "end": 68, "start": 5, "type": "PipeExpression", "type": "PipeExpression" @@ -184,7 +177,7 @@ expression: actual "start": 0, "type": "VariableDeclarator" }, - "end": 73, + "end": 68, "kind": "const", "start": 0, "type": "VariableDeclaration", @@ -192,6 +185,6 @@ expression: actual } ], "commentStart": 0, - "end": 73, + "end": 68, "start": 0 } diff --git a/rust/kcl-lib/src/settings/generate_settings_docs.rs b/rust/kcl-lib/src/settings/generate_settings_docs.rs index 3e484349e..20695567e 100644 --- a/rust/kcl-lib/src/settings/generate_settings_docs.rs +++ b/rust/kcl-lib/src/settings/generate_settings_docs.rs @@ -39,8 +39,8 @@ base_unit = "mm" text_wrapping = false "#; -const PROJECT_SETTINGS_DOC_PATH: &str = "../../docs/kcl/settings/project.md"; -const USER_SETTINGS_DOC_PATH: &str = "../../docs/kcl/settings/user.md"; +const PROJECT_SETTINGS_DOC_PATH: &str = "../../docs/kcl/settings-project.md"; +const USER_SETTINGS_DOC_PATH: &str = "../../docs/kcl/settings-user.md"; fn init_handlebars() -> handlebars::Handlebars<'static> { let mut hbs = handlebars::Handlebars::new(); diff --git a/rust/kcl-lib/src/settings/types/mod.rs b/rust/kcl-lib/src/settings/types/mod.rs index babf53996..0437d4b02 100644 --- a/rust/kcl-lib/src/settings/types/mod.rs +++ b/rust/kcl-lib/src/settings/types/mod.rs @@ -527,6 +527,9 @@ pub enum OnboardingStatus { #[serde(rename = "/export")] #[display("/export")] Export, + #[serde(rename = "/move")] + #[display("/move")] + Move, #[serde(rename = "/sketching")] #[display("/sketching")] Sketching, diff --git a/rust/kcl-lib/src/simulation_tests.rs b/rust/kcl-lib/src/simulation_tests.rs index c286bfb9f..39ff5c393 100644 --- a/rust/kcl-lib/src/simulation_tests.rs +++ b/rust/kcl-lib/src/simulation_tests.rs @@ -282,6 +282,7 @@ fn assert_common_snapshots( insta::assert_json_snapshot!("ops", operations, { "[].unlabeledArg.*.value.**[].from[]" => rounded_redaction(4), "[].unlabeledArg.*.value.**[].to[]" => rounded_redaction(4), + "[].*.unlabeledArg.value.value" => rounded_redaction(4), "[].labeledArgs.*.value.**[].from[]" => rounded_redaction(4), "[].labeledArgs.*.value.**[].to[]" => rounded_redaction(4), ".**.sourceRange" => Vec::new(), diff --git a/rust/kcl-lib/src/simulation_tests/kcl_samples.rs b/rust/kcl-lib/src/simulation_tests/kcl_samples.rs index 2f3b590ca..67e1438eb 100644 --- a/rust/kcl-lib/src/simulation_tests/kcl_samples.rs +++ b/rust/kcl-lib/src/simulation_tests/kcl_samples.rs @@ -51,6 +51,7 @@ async fn unparse_test(test: &Test) { .map(|file| { tokio::spawn(async move { let contents = tokio::fs::read_to_string(&file).await.unwrap(); + eprintln!("{}", file.display()); let program = crate::Program::parse_no_errs(&contents).unwrap(); let recast = program.recast_with_options(&Default::default()); diff --git a/rust/kcl-lib/src/source_range.rs b/rust/kcl-lib/src/source_range.rs index f554655c0..96d893247 100644 --- a/rust/kcl-lib/src/source_range.rs +++ b/rust/kcl-lib/src/source_range.rs @@ -99,6 +99,11 @@ impl SourceRange { pos >= self.start() && pos <= self.end() } + /// Check if the range contains another range. Modules must match. + pub(crate) fn contains_range(&self, other: &Self) -> bool { + self.module_id() == other.module_id() && self.start() <= other.start() && self.end() >= other.end() + } + pub fn start_to_lsp_position(&self, code: &str) -> LspPosition { // Calculate the line and column of the error from the source range. // Lines are zero indexed in vscode so we need to subtract 1. diff --git a/rust/kcl-lib/src/std/appearance.rs b/rust/kcl-lib/src/std/appearance.rs index 57c552766..d0cecaa5f 100644 --- a/rust/kcl-lib/src/std/appearance.rs +++ b/rust/kcl-lib/src/std/appearance.rs @@ -91,9 +91,9 @@ pub async fn appearance(exec_state: &mut ExecState, args: Args) -> Result extrude(length = 10) /// } /// -/// example0 = cube([0, 0]) -/// example1 = cube([20, 0]) -/// example2 = cube([40, 0]) +/// example0 = cube(center = [0, 0]) +/// example1 = cube(center = [20, 0]) +/// example2 = cube(center = [40, 0]) /// /// appearance([example0, example1], color='#ff0000', metalness=50, roughness=50) /// appearance(example2, color='#00ff00', metalness=50, roughness=50) diff --git a/rust/kcl-lib/src/std/array.rs b/rust/kcl-lib/src/std/array.rs index efa0195e2..43ff7839f 100644 --- a/rust/kcl-lib/src/std/array.rs +++ b/rust/kcl-lib/src/std/array.rs @@ -26,7 +26,7 @@ pub async fn map(exec_state: &mut ExecState, args: Args) -> Result circle( center= [id * 2 * r, 0], radius= r) /// } @@ -110,7 +110,7 @@ pub async fn reduce(exec_state: &mut ExecState, args: Args) -> Result Result Result extrude(length = 10) /// } /// -/// part001 = cube([0, 0], 10) -/// part002 = cube([7, 3], 5) +/// part001 = cube(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) /// |> translate(z = 1) /// /// unionedPart = union([part001, part002]) @@ -71,8 +71,8 @@ pub async fn union(exec_state: &mut ExecState, args: Args) -> Result extrude(length = 10) /// } /// -/// part001 = cube([0, 0], 10) -/// part002 = cube([7, 3], 5) +/// part001 = cube(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) /// |> translate(z = 1) /// /// // This is the equivalent of: union([part001, part002]) @@ -94,8 +94,8 @@ pub async fn union(exec_state: &mut ExecState, args: Args) -> Result extrude(length = 10) /// } /// -/// part001 = cube([0, 0], 10) -/// part002 = cube([7, 3], 5) +/// part001 = cube(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) /// |> translate(z = 1) /// /// // This is the equivalent of: union([part001, part002]) @@ -199,8 +199,8 @@ pub async fn intersect(exec_state: &mut ExecState, args: Args) -> Result extrude(length = 10) /// } /// -/// part001 = cube([0, 0], 10) -/// part002 = cube([7, 3], 5) +/// part001 = cube(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) /// |> translate(z = 1) /// /// intersectedPart = intersect([part001, part002]) @@ -221,8 +221,8 @@ pub async fn intersect(exec_state: &mut ExecState, args: Args) -> Result extrude(length = 10) /// } /// -/// part001 = cube([0, 0], 10) -/// part002 = cube([7, 3], 5) +/// part001 = cube(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) /// |> translate(z = 1) /// /// // This is the equivalent of: intersect([part001, part002]) @@ -332,8 +332,8 @@ pub async fn subtract(exec_state: &mut ExecState, args: Args) -> Result extrude(length = 10) /// } /// -/// part001 = cube([0, 0], 10) -/// part002 = cube([7, 3], 5) +/// part001 = cube(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) /// |> translate(z = 1) /// /// subtractedPart = subtract([part001], tools=[part002]) @@ -354,8 +354,8 @@ pub async fn subtract(exec_state: &mut ExecState, args: Args) -> Result extrude(length = 10) /// } /// -/// part001 = cube([0, 0], 10) -/// part002 = cube([7, 3], 5) +/// part001 = cube(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) /// |> translate(z = 1) /// /// // This is the equivalent of: subtract([part001], tools=[part002]) diff --git a/rust/kcl-lib/src/std/patterns.rs b/rust/kcl-lib/src/std/patterns.rs index b64033d40..ca94e2e55 100644 --- a/rust/kcl-lib/src/std/patterns.rs +++ b/rust/kcl-lib/src/std/patterns.rs @@ -96,7 +96,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res /// /// ```no_run /// // Each instance will be shifted along the X axis. -/// fn transform(id) { +/// fn transform(@id) { /// return { translate = [4 * id, 0, 0] } /// } /// @@ -110,7 +110,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res /// // Each instance will be shifted along the X axis, /// // with a gap between the original (at x = 0) and the first replica /// // (at x = 8). This is because `id` starts at 1. -/// fn transform(id) { +/// fn transform(@id) { /// return { translate = [4 * (1+id), 0, 0] } /// } /// @@ -140,7 +140,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res /// } /// /// width = 20 -/// fn transform(i) { +/// fn transform(@i) { /// return { /// // Move down each time. /// translate = [0, 0, -i * width], @@ -155,7 +155,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res /// } /// /// myCubes = -/// cube(width, [100,0]) +/// cube(length = width, center = [100,0]) /// |> patternTransform(instances = 25, transform = transform) /// ``` /// @@ -180,7 +180,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res /// } /// /// width = 20 -/// fn transform(i) { +/// fn transform(@i) { /// return { /// translate = [0, 0, -i * width], /// rotation = { @@ -191,7 +191,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res /// } /// } /// myCubes = -/// cube(width, [100,100]) +/// cube(length = width, center = [100,100]) /// |> patternTransform(instances = 4, transform = transform) /// ``` /// ```no_run @@ -201,7 +201,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res /// t = 0.005 // taper factor [0-1) /// // Defines how to modify each layer of the vase. /// // Each replica is shifted up the Z axis, and has a smoothly-varying radius -/// fn transform(replicaId) { +/// fn transform(@replicaId) { /// scale = r * abs(1 - (t * replicaId)) * (5 + cos((replicaId / 8): number(rad))) /// return { /// translate = [0, 0, replicaId * 10], @@ -219,7 +219,7 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res /// vase = layer() |> patternTransform(instances = 100, transform = transform) /// ``` /// ``` -/// fn transform(i) { +/// fn transform(@i) { /// // Transform functions can return multiple transforms. They'll be applied in order. /// return [ /// { translate = [30 * i, 0, 0] }, @@ -282,7 +282,7 @@ async fn inner_pattern_transform<'a>( /// Just like patternTransform, but works on 2D sketches not 3D solids. /// ```no_run /// // Each instance will be shifted along the X axis. -/// fn transform(id) { +/// fn transform(@id) { /// return { translate = [4 * id, 0] } /// } /// diff --git a/rust/kcl-lib/src/std/segment.rs b/rust/kcl-lib/src/std/segment.rs index 8a97e02e0..eb4acf9e8 100644 --- a/rust/kcl-lib/src/std/segment.rs +++ b/rust/kcl-lib/src/std/segment.rs @@ -42,10 +42,10 @@ pub async fn segment_end(exec_state: &mut ExecState, args: Args) -> Result extrude(length = radius) /// } /// -/// cylinder(1, line1) -/// cylinder(2, line2) -/// cylinder(3, line3) -/// cylinder(4, line4) +/// cylinder(radius = 1, tag = line1) +/// cylinder(radius = 2, tag = line2) +/// cylinder(radius = 3, tag = line3) +/// cylinder(radius = 4, tag = line4) /// ``` #[stdlib { name = "segEnd", @@ -178,10 +178,10 @@ pub async fn segment_start(exec_state: &mut ExecState, args: Args) -> Result extrude(length = radius) /// } /// -/// cylinder(1, line1) -/// cylinder(2, line2) -/// cylinder(3, line3) -/// cylinder(4, line4) +/// cylinder(radius = 1, tag = line1) +/// cylinder(radius = 2, tag = line2) +/// cylinder(radius = 3, tag = line3) +/// cylinder(radius = 4, tag = line4) /// ``` #[stdlib { name = "segStart", diff --git a/rust/kcl-lib/src/std/transform.rs b/rust/kcl-lib/src/std/transform.rs index b7d4bcdfa..b364e9270 100644 --- a/rust/kcl-lib/src/std/transform.rs +++ b/rust/kcl-lib/src/std/transform.rs @@ -326,7 +326,7 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([x, y], %) + |> startProfile(at = [x, y]) |> xLine(length = w) |> yLine(length = h) |> xLine(length = -w) |> close() - |> extrude(d, %) + |> extrude(d) } fn quad(x1, y1, x2, y2, x3, y3, x4, y4) { startSketchOn(XY) - |> startProfileAt([x1, y1], %) + |> startProfile(at = [x1, y1]) |> line(endAbsolute = [x2, y2]) |> line(endAbsolute = [x3, y3]) |> line(endAbsolute = [x4, y4]) |> close() - |> extrude(d, %) + |> extrude(d) } fn crosshair(x, y) { startSketchOn(XY) - |> startProfileAt([x, y], %) + |> startProfile(at = [x, y]) |> yLine(length = 1) |> yLine(length = -2) |> yLine(length = 1) @@ -1159,11 +1159,30 @@ fn z(z_x, z_y) { z_corner = s * 2 z_w = z_end_w + 2 * z_corner z_h = z_w * 1.08130081300813 - rect(z_x, z_y, z_end_w, -z_end_h) - rect(z_x + z_w, z_y, -z_corner, -z_corner) - rect(z_x + z_w, z_y - z_h, -z_end_w, z_end_h) - rect(z_x, z_y - z_h, z_corner, z_corner) - quad(z_x, z_y - z_h + z_corner, z_x + z_w - z_corner, z_y, z_x + z_w, z_y - z_corner, z_x + z_corner, z_y - z_h) + rect( + z_x, + a = z_y, + b = z_end_w, + c = -z_end_h, + ) + rect( + z_x + z_w, + a = z_y, + b = -z_corner, + c = -z_corner, + ) + rect( + z_x + z_w, + a = z_y - z_h, + b = -z_end_w, + c = z_end_h, + ) + rect( + z_x, + a = z_y - z_h, + b = z_corner, + c = z_corner, + ) } fn o(c_x, c_y) { @@ -1175,61 +1194,45 @@ fn o(c_x, c_y) { a = 7 // Start point for the top sketch - o_x1 = c_x + o_r * cos((45 + a) / 360 * tau()) - o_y1 = c_y + o_r * sin((45 + a) / 360 * tau()) + o_x1 = c_x + o_r * cos((45 + a) / 360 * TAU) + o_y1 = c_y + o_r * sin((45 + a) / 360 * TAU) // Start point for the bottom sketch - o_x2 = c_x + o_r * cos((225 + a) / 360 * tau()) - o_y2 = c_y + o_r * sin((225 + a) / 360 * tau()) + o_x2 = c_x + o_r * cos((225 + a) / 360 * TAU) + o_y2 = c_y + o_r * sin((225 + a) / 360 * TAU) // End point for the bottom startSketch - o_x3 = c_x + o_r * cos((45 - a) / 360 * tau()) - o_y3 = c_y + o_r * sin((45 - a) / 360 * tau()) + o_x3 = c_x + o_r * cos((45 - a) / 360 * TAU) + o_y3 = c_y + o_r * sin((45 - a) / 360 * TAU) // Where is the center? // crosshair(c_x, c_y) startSketchOn(XY) - |> startProfileAt([o_x1, o_y1], %) - |> arc({ - radius = o_r, - angle_start = 45 + a, - angle_end = 225 - a - }, %) + |> startProfile(at = [o_x1, o_y1]) + |> arc(radius = o_r, angle_start = 45 + a, angle_end = 225 - a) |> angledLine(angle = 45, length = o_r - i_r) - |> arc({ - radius = i_r, - angle_start = 225 - a, - angle_end = 45 + a - }, %) + |> arc(radius = i_r, angle_start = 225 - a, angle_end = 45 + a) |> close() - |> extrude(d, %) + |> extrude(d) startSketchOn(XY) - |> startProfileAt([o_x2, o_y2], %) - |> arc({ - radius = o_r, - angle_start = 225 + a, - angle_end = 360 + 45 - a - }, %) + |> startProfile(at = [o_x2, o_y2]) + |> arc(radius = o_r, angle_start = 225 + a, angle_end = 360 + 45 - a) |> angledLine(angle = 225, length = o_r - i_r) - |> arc({ - radius = i_r, - angle_start = 45 - a, - angle_end = 225 + a - 360 - }, %) + |> arc(radius = i_r, angle_start = 45 - a, angle_end = 225 + a - 360) |> close() - |> extrude(d, %) + |> extrude(d) } fn zoo(x0, y0) { - z(x0, y0) - o(x0 + s * 20, y0 - (s * 6.7)) - o(x0 + s * 35, y0 - (s * 6.7)) + z(x = x0, y = y0) + o(x = x0 + s * 20, y = y0 - (s * 6.7)) + o(x = x0 + s * 35, y = y0 - (s * 6.7)) } -zoo(zoo_x, zoo_y) +zoo(x = zoo_x, y = zoo_y) "#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -1250,32 +1253,32 @@ overHangLength = .4 // Sketch and revolve the inside bearing piece insideRevolve = startSketchOn(XZ) - |> startProfileAt([insideDia / 2, 0], %) - |> line([0, thickness + sphereDia / 2], %) - |> line([overHangLength, 0], %) - |> line([0, -thickness], %) - |> line([-overHangLength + thickness, 0], %) - |> line([0, -sphereDia], %) - |> line([overHangLength - thickness, 0], %) - |> line([0, -thickness], %) - |> line([-overHangLength, 0], %) + |> startProfile(at = [insideDia / 2, 0]) + |> line(end = [0, thickness + sphereDia / 2]) + |> line(end = [overHangLength, 0]) + |> line(end = [0, -thickness]) + |> line(end = [-overHangLength + thickness, 0]) + |> line(end = [0, -sphereDia]) + |> line(end = [overHangLength - thickness, 0]) + |> line(end = [0, -thickness]) + |> line(end = [-overHangLength, 0]) |> close() - |> revolve({ axis = Y }, %) + |> revolve(axis = Y) // Sketch and revolve one of the balls and duplicate it using a circular pattern. (This is currently a workaround, we have a bug with rotating on a sketch that touches the rotation axis) sphere = startSketchOn(XZ) - |> startProfileAt([ + |> startProfile(at = [ 0.05 + insideDia / 2 + thickness, 0 - 0.05 - ], %) - |> line([sphereDia - 0.1, 0], %) - |> arc({ + ]) + |> line(end = [sphereDia - 0.1, 0]) + |> arc( angle_start = 0, angle_end = -180, radius = sphereDia / 2 - 0.05 - }, %) + ) |> close() - |> revolve({ axis = X }, %) + |> revolve(axis = X) |> patternCircular3d( axis = [0, 0, 1], center = [0, 0, 0], @@ -1286,20 +1289,21 @@ sphere = startSketchOn(XZ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn(XZ) - |> startProfileAt([ + |> startProfile(at = [ insideDia / 2 + thickness + sphereDia, 0 - ], %) - |> line([0, sphereDia / 2], %) - |> line([-overHangLength + thickness, 0], %) - |> line([0, thickness], %) - |> line([overHangLength, 0], %) - |> line([0, -2 * thickness - sphereDia], %) - |> line([-overHangLength, 0], %) - |> line([0, thickness], %) - |> line([overHangLength - thickness, 0], %) + ] + ) + |> line(end = [0, sphereDia / 2]) + |> line(end = [-overHangLength + thickness, 0]) + |> line(end = [0, thickness]) + |> line(end = [overHangLength, 0]) + |> line(end = [0, -2 * thickness - sphereDia]) + |> line(end = [-overHangLength, 0]) + |> line(end = [0, thickness]) + |> line(end = [overHangLength - thickness, 0]) |> close() - |> revolve({ axis = Y }, %)"#; + |> revolve(axis = Y)"#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); @@ -1316,32 +1320,28 @@ overHangLength = .4 // Sketch and revolve the inside bearing piece insideRevolve = startSketchOn(XZ) - |> startProfileAt([insideDia / 2, 0], %) - |> line([0, thickness + sphereDia / 2], %) - |> line([overHangLength, 0], %) - |> line([0, -thickness], %) - |> line([-overHangLength + thickness, 0], %) - |> line([0, -sphereDia], %) - |> line([overHangLength - thickness, 0], %) - |> line([0, -thickness], %) - |> line([-overHangLength, 0], %) + |> startProfile(at = [insideDia / 2, 0]) + |> line(end = [0, thickness + sphereDia / 2]) + |> line(end = [overHangLength, 0]) + |> line(end = [0, -thickness]) + |> line(end = [-overHangLength + thickness, 0]) + |> line(end = [0, -sphereDia]) + |> line(end = [overHangLength - thickness, 0]) + |> line(end = [0, -thickness]) + |> line(end = [-overHangLength, 0]) |> close() - |> revolve({ axis = Y }, %) + |> revolve(axis = Y) // Sketch and revolve one of the balls and duplicate it using a circular pattern. (This is currently a workaround, we have a bug with rotating on a sketch that touches the rotation axis) sphere = startSketchOn(XZ) - |> startProfileAt([ + |> startProfile(at = [ 0.05 + insideDia / 2 + thickness, 0 - 0.05 - ], %) - |> line([sphereDia - 0.1, 0], %) - |> arc({ - angle_start = 0, - angle_end = -180, - radius = sphereDia / 2 - 0.05 - }, %) + ]) + |> line(end = [sphereDia - 0.1, 0]) + |> arc(angle_start = 0, angle_end = -180, radius = sphereDia / 2 - 0.05) |> close() - |> revolve({ axis = X }, %) + |> revolve(axis = X) |> patternCircular3d( axis = [0, 0, 1], center = [0, 0, 0], @@ -1352,20 +1352,20 @@ sphere = startSketchOn(XZ) // Sketch and revolve the outside bearing outsideRevolve = startSketchOn(XZ) - |> startProfileAt([ + |> startProfile(at = [ insideDia / 2 + thickness + sphereDia, 0 - ], %) - |> line([0, sphereDia / 2], %) - |> line([-overHangLength + thickness, 0], %) - |> line([0, thickness], %) - |> line([overHangLength, 0], %) - |> line([0, -2 * thickness - sphereDia], %) - |> line([-overHangLength, 0], %) - |> line([0, thickness], %) - |> line([overHangLength - thickness, 0], %) + ]) + |> line(end = [0, sphereDia / 2]) + |> line(end = [-overHangLength + thickness, 0]) + |> line(end = [0, thickness]) + |> line(end = [overHangLength, 0]) + |> line(end = [0, -2 * thickness - sphereDia]) + |> line(end = [-overHangLength, 0]) + |> line(end = [0, thickness]) + |> line(end = [overHangLength - thickness, 0]) |> close() - |> revolve({ axis = Y }, %) + |> revolve(axis = Y) "# ); } @@ -1458,7 +1458,7 @@ f = [1, 2, 3]: [number; 1+] let some_program_string = r#"bing = { yo = 55 } myNestedVar = [ { - prop: line([bing.yo, 21], sketch001) + prop: line(a = [bing.yo, 21], b = sketch001) } ] "#; @@ -1470,7 +1470,7 @@ myNestedVar = [ r#"bing = { yo = 55 } myNestedVar = [ { - prop = line([bing.yo, 21], sketch001) + prop = line(a = [bing.yo, 21], b = sketch001) } ] "# @@ -1502,10 +1502,10 @@ myNestedVar = [ fn test_recast_shebang() { let some_program_string = r#"#!/usr/local/env zoo kcl part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) - |> line([20, 0], %) - |> line([0, 20], %) - |> line([-20, 0], %) + |> startProfile(at = [-10, -10]) + |> line(end = [20, 0]) + |> line(end = [0, 20]) + |> line(end = [-20, 0]) |> close() "#; @@ -1517,10 +1517,10 @@ part001 = startSketchOn(XY) r#"#!/usr/local/env zoo kcl part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) - |> line([20, 0], %) - |> line([0, 20], %) - |> line([-20, 0], %) + |> startProfile(at = [-10, -10]) + |> line(end = [20, 0]) + |> line(end = [0, 20]) + |> line(end = [-20, 0]) |> close() "# ); @@ -1533,10 +1533,10 @@ part001 = startSketchOn(XY) part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) - |> line([20, 0], %) - |> line([0, 20], %) - |> line([-20, 0], %) + |> startProfile(at = [-10, -10]) + |> line(end = [20, 0]) + |> line(end = [0, 20]) + |> line(end = [-20, 0]) |> close() "#; @@ -1548,10 +1548,10 @@ part001 = startSketchOn(XY) r#"#!/usr/local/env zoo kcl part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) - |> line([20, 0], %) - |> line([0, 20], %) - |> line([-20, 0], %) + |> startProfile(at = [-10, -10]) + |> line(end = [20, 0]) + |> line(end = [0, 20]) + |> line(end = [-20, 0]) |> close() "# ); @@ -1563,10 +1563,10 @@ part001 = startSketchOn(XY) // Yo yo my comments. part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) - |> line([20, 0], %) - |> line([0, 20], %) - |> line([-20, 0], %) + |> startProfile(at = [-10, -10]) + |> line(end = [20, 0]) + |> line(end = [0, 20]) + |> line(end = [-20, 0]) |> close() "#; @@ -1579,10 +1579,10 @@ part001 = startSketchOn(XY) // Yo yo my comments. part001 = startSketchOn(XY) - |> startProfileAt([-10, -10], %) - |> line([20, 0], %) - |> line([0, 20], %) - |> line([-20, 0], %) + |> startProfile(at = [-10, -10]) + |> line(end = [20, 0]) + |> line(end = [0, 20]) + |> line(end = [-20, 0]) |> close() "# ); @@ -1613,7 +1613,7 @@ hole_diam = 5 // define a rectangular shape func fn rectShape(pos, w, l) { rr = startSketchOn(XY) - |> startProfileAt([pos[0] - (w / 2), pos[1] - (l / 2)], %) + |> startProfile(at = [pos[0] - (w / 2), pos[1] - (l / 2)]) |> line(endAbsolute = [pos[0] + w / 2, pos[1] - (l / 2)], tag = $edge1) |> line(endAbsolute = [pos[0] + w / 2, pos[1] + l / 2], tag = $edge2) |> line(endAbsolute = [pos[0] - (w / 2), pos[1] + l / 2], tag = $edge3) @@ -1622,8 +1622,8 @@ fn rectShape(pos, w, l) { } // build the body of the focusrite scarlett solo gen 4 // only used for visualization -scarlett_body = rectShape([0, 0], width, length) - |> extrude(depth, %) +scarlett_body = rectShape(pos = [0, 0], w = width, l = length) + |> extrude(depth) |> fillet( radius = radius, tags = [ @@ -1636,14 +1636,14 @@ scarlett_body = rectShape([0, 0], width, length) // build the bracket sketch around the body fn bracketSketch(w, d, t) { s = startSketchOn({ - plane: { + plane = { origin = { x = 0, y = length / 2 + thk, z = 0 }, x_axis = { x = 1, y = 0, z = 0 }, y_axis = { x = 0, y = 0, z = 1 }, z_axis = { x = 0, y = 1, z = 0 } } }) - |> startProfileAt([-w / 2 - t, d + t], %) + |> startProfile(at = [-w / 2 - t, d + t]) |> line(endAbsolute = [-w / 2 - t, -t], tag = $edge1) |> line(endAbsolute = [w / 2 + t, -t], tag = $edge2) |> line(endAbsolute = [w / 2 + t, d + t], tag = $edge3) @@ -1655,8 +1655,8 @@ fn bracketSketch(w, d, t) { return s } // build the body of the bracket -bracket_body = bracketSketch(width, depth, thk) - |> extrude(length + 10, %) +bracket_body = bracketSketch(w = width, d = depth, t = thk) + |> extrude(length + 10) |> fillet( radius = radius, tags = [ @@ -1668,26 +1668,26 @@ bracket_body = bracketSketch(width, depth, thk) ) // build the tabs of the mounting bracket (right side) tabs_r = startSketchOn({ - plane: { + plane = { origin = { x = 0, y = 0, z = depth + thk }, x_axis = { x = 1, y = 0, z = 0 }, y_axis = { x = 0, y = 1, z = 0 }, z_axis = { x = 0, y = 0, z = 1 } } }) - |> startProfileAt([width / 2 + thk, length / 2 + thk], %) - |> line([10, -5], %) - |> line([0, -10], %) - |> line([-10, -5], %) + |> startProfile(at = [width / 2 + thk, length / 2 + thk]) + |> line(end = [10, -5]) + |> line(end = [0, -10]) + |> line(end = [-10, -5]) |> close() - |> hole(circle( + |> subtract2d(tool = circle( center = [ width / 2 + thk + hole_diam, length / 2 - hole_diam ], radius = hole_diam / 2 - ), %) - |> extrude(-thk, %) + )) + |> extrude(-thk) |> patternLinear3d( axis = [0, -1, 0], repetitions = 1, @@ -1695,26 +1695,26 @@ tabs_r = startSketchOn({ ) // build the tabs of the mounting bracket (left side) tabs_l = startSketchOn({ - plane: { + plane = { origin = { x = 0, y = 0, z = depth + thk }, x_axis = { x = 1, y = 0, z = 0 }, y_axis = { x = 0, y = 1, z = 0 }, z_axis = { x = 0, y = 0, z = 1 } } }) - |> startProfileAt([-width / 2 - thk, length / 2 + thk], %) - |> line([-10, -5], %) - |> line([0, -10], %) - |> line([10, -5], %) + |> startProfile(at = [-width / 2 - thk, length / 2 + thk]) + |> line(end = [-10, -5]) + |> line(end = [0, -10]) + |> line(end = [10, -5]) |> close() - |> hole(circle( + |> subtract2d(tool = circle( center = [ -width / 2 - thk - hole_diam, length / 2 - hole_diam ], radius = hole_diam / 2 - ), %) - |> extrude(-thk, %) + )) + |> extrude(-thk) |> patternLinear3d(axis = [0, -1, 0], repetitions = 1, distance = length - 10ft) "#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -1735,7 +1735,7 @@ hole_diam = 5 // define a rectangular shape func fn rectShape(pos, w, l) { rr = startSketchOn(XY) - |> startProfileAt([pos[0] - (w / 2), pos[1] - (l / 2)], %) + |> startProfile(at = [pos[0] - (w / 2), pos[1] - (l / 2)]) |> line(endAbsolute = [pos[0] + w / 2, pos[1] - (l / 2)], tag = $edge1) |> line(endAbsolute = [pos[0] + w / 2, pos[1] + l / 2], tag = $edge2) |> line(endAbsolute = [pos[0] - (w / 2), pos[1] + l / 2], tag = $edge3) @@ -1744,8 +1744,8 @@ fn rectShape(pos, w, l) { } // build the body of the focusrite scarlett solo gen 4 // only used for visualization -scarlett_body = rectShape([0, 0], width, length) - |> extrude(depth, %) +scarlett_body = rectShape(pos = [0, 0], w = width, l = length) + |> extrude(depth) |> fillet( radius = radius, tags = [ @@ -1765,7 +1765,7 @@ fn bracketSketch(w, d, t) { z_axis = { x = 0, y = 1, z = 0 } } }) - |> startProfileAt([-w / 2 - t, d + t], %) + |> startProfile(at = [-w / 2 - t, d + t]) |> line(endAbsolute = [-w / 2 - t, -t], tag = $edge1) |> line(endAbsolute = [w / 2 + t, -t], tag = $edge2) |> line(endAbsolute = [w / 2 + t, d + t], tag = $edge3) @@ -1777,8 +1777,8 @@ fn bracketSketch(w, d, t) { return s } // build the body of the bracket -bracket_body = bracketSketch(width, depth, thk) - |> extrude(length + 10, %) +bracket_body = bracketSketch(w = width, d = depth, t = thk) + |> extrude(length + 10) |> fillet( radius = radius, tags = [ @@ -1797,19 +1797,19 @@ tabs_r = startSketchOn({ z_axis = { x = 0, y = 0, z = 1 } } }) - |> startProfileAt([width / 2 + thk, length / 2 + thk], %) - |> line([10, -5], %) - |> line([0, -10], %) - |> line([-10, -5], %) + |> startProfile(at = [width / 2 + thk, length / 2 + thk]) + |> line(end = [10, -5]) + |> line(end = [0, -10]) + |> line(end = [-10, -5]) |> close() - |> hole(circle( + |> subtract2d(tool = circle( center = [ width / 2 + thk + hole_diam, length / 2 - hole_diam ], radius = hole_diam / 2, - ), %) - |> extrude(-thk, %) + )) + |> extrude(-thk) |> patternLinear3d(axis = [0, -1, 0], repetitions = 1, distance = length - 10) // build the tabs of the mounting bracket (left side) tabs_l = startSketchOn({ @@ -1820,19 +1820,19 @@ tabs_l = startSketchOn({ z_axis = { x = 0, y = 0, z = 1 } } }) - |> startProfileAt([-width / 2 - thk, length / 2 + thk], %) - |> line([-10, -5], %) - |> line([0, -10], %) - |> line([10, -5], %) + |> startProfile(at = [-width / 2 - thk, length / 2 + thk]) + |> line(end = [-10, -5]) + |> line(end = [0, -10]) + |> line(end = [10, -5]) |> close() - |> hole(circle( + |> subtract2d(tool = circle( center = [ -width / 2 - thk - hole_diam, length / 2 - hole_diam ], radius = hole_diam / 2, - ), %) - |> extrude(-thk, %) + )) + |> extrude(-thk) |> patternLinear3d(axis = [0, -1, 0], repetitions = 1, distance = length - 10ft) "# ); @@ -1842,12 +1842,12 @@ tabs_l = startSketchOn({ fn test_recast_nested_var_declaration_in_fn_body() { let some_program_string = r#"fn cube(pos, scale) { sg = startSketchOn(XY) - |> startProfileAt(pos, %) - |> line([0, scale], %) - |> line([scale, 0], %) - |> line([0, -scale], %) + |> startProfile(at = pos) + |> line(end = [0, scale]) + |> line(end = [scale, 0]) + |> line(end = [0, -scale]) |> close() - |> extrude(scale, %) + |> extrude(scale) }"#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -1856,12 +1856,12 @@ tabs_l = startSketchOn({ recasted, r#"fn cube(pos, scale) { sg = startSketchOn(XY) - |> startProfileAt(pos, %) - |> line([0, scale], %) - |> line([scale, 0], %) - |> line([0, -scale], %) + |> startProfile(at = pos) + |> line(end = [0, scale]) + |> line(end = [scale, 0]) + |> line(end = [0, -scale]) |> close() - |> extrude(scale, %) + |> extrude(scale) } "# ); @@ -1873,15 +1873,15 @@ tabs_l = startSketchOn({ x = dfsfs + dfsfsd as y sg = startSketchOn(XY) - |> startProfileAt(pos, %) as foo - |> line([0, scale], %) - |> line([scale, 0], %) as bar - |> line([0 as baz, -scale] as qux, %) + |> startProfile(at = pos) as foo + |> line([0, scale]) + |> line([scale, 0]) as bar + |> line([0 as baz, -scale] as qux) |> close() - |> extrude(scale, %) + |> extrude(length = scale) } -cube(0, 0) as cub +cube(pos = 0, scale = 0) as cub "#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -1892,18 +1892,18 @@ cube(0, 0) as cub #[test] fn test_recast_with_bad_indentation() { let some_program_string = r#"part001 = startSketchOn(XY) - |> startProfileAt([0.0, 5.0], %) - |> line([0.4900857016, -0.0240763666], %) - |> line([0.6804562304, 0.9087880491], %)"#; + |> startProfile(at = [0.0, 5.0]) + |> line(end = [0.4900857016, -0.0240763666]) + |> line(end = [0.6804562304, 0.9087880491])"#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( recasted, r#"part001 = startSketchOn(XY) - |> startProfileAt([0.0, 5.0], %) - |> line([0.4900857016, -0.0240763666], %) - |> line([0.6804562304, 0.9087880491], %) + |> startProfile(at = [0.0, 5.0]) + |> line(end = [0.4900857016, -0.0240763666]) + |> line(end = [0.6804562304, 0.9087880491]) "# ); } @@ -1911,38 +1911,38 @@ cube(0, 0) as cub #[test] fn test_recast_with_bad_indentation_and_inline_comment() { let some_program_string = r#"part001 = startSketchOn(XY) - |> startProfileAt([0.0, 5.0], %) - |> line([0.4900857016, -0.0240763666], %) // hello world - |> line([0.6804562304, 0.9087880491], %)"#; + |> startProfile(at = [0.0, 5.0]) + |> line(end = [0.4900857016, -0.0240763666]) // hello world + |> line(end = [0.6804562304, 0.9087880491])"#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( recasted, r#"part001 = startSketchOn(XY) - |> startProfileAt([0.0, 5.0], %) - |> line([0.4900857016, -0.0240763666], %) // hello world - |> line([0.6804562304, 0.9087880491], %) + |> startProfile(at = [0.0, 5.0]) + |> line(end = [0.4900857016, -0.0240763666]) // hello world + |> line(end = [0.6804562304, 0.9087880491]) "# ); } #[test] fn test_recast_with_bad_indentation_and_line_comment() { let some_program_string = r#"part001 = startSketchOn(XY) - |> startProfileAt([0.0, 5.0], %) - |> line([0.4900857016, -0.0240763666], %) + |> startProfile(at = [0.0, 5.0]) + |> line(end = [0.4900857016, -0.0240763666]) // hello world - |> line([0.6804562304, 0.9087880491], %)"#; + |> line(end = [0.6804562304, 0.9087880491])"#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( recasted, r#"part001 = startSketchOn(XY) - |> startProfileAt([0.0, 5.0], %) - |> line([0.4900857016, -0.0240763666], %) + |> startProfile(at = [0.0, 5.0]) + |> line(end = [0.4900857016, -0.0240763666]) // hello world - |> line([0.6804562304, 0.9087880491], %) + |> line(end = [0.6804562304, 0.9087880491]) "# ); } @@ -2085,7 +2085,7 @@ thing = 'foo' /* comment at start */ mySk1 = startSketchOn(XY) - |> startProfileAt([0, 0], %)"#; + |> startProfile(at = [0, 0])"#; let program = crate::parsing::top_level_parse(test_program).unwrap(); let recasted = program.recast(&Default::default(), 0); @@ -2094,7 +2094,7 @@ mySk1 = startSketchOn(XY) r#"/* comment at start */ mySk1 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) "# ); } @@ -2103,7 +2103,7 @@ mySk1 = startSketchOn(XY) fn test_recast_lots_of_comments() { let some_program_string = r#"// comment at start mySk1 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [1, 1]) // comment here |> line(endAbsolute = [0, 1], tag = $myTag) @@ -2112,10 +2112,10 @@ mySk1 = startSketchOn(XY) here */ // a comment between pipe expression statements - |> rx(90, %) + |> rx(90) // and another with just white space between others below - |> ry(45, %) - |> rx(45, %) + |> ry(45) + |> rx(45) // one more for good measure"#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -2124,7 +2124,7 @@ mySk1 = startSketchOn(XY) recasted, r#"// comment at start mySk1 = startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> line(endAbsolute = [1, 1]) // comment here |> line(endAbsolute = [0, 1], tag = $myTag) @@ -2132,10 +2132,10 @@ mySk1 = startSketchOn(XY) /* and here */ // a comment between pipe expression statements - |> rx(90, %) + |> rx(90) // and another with just white space between others below - |> ry(45, %) - |> rx(45, %) + |> ry(45) + |> rx(45) // one more for good measure "# ); @@ -2223,10 +2223,10 @@ myVar3 = 6 myAng = 40 myAng2 = 134 part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) - |> line([1, 3.82], %, $seg01) // ln-should-get-tag - |> angledLine(angle = -foo(seg01, myVar, %), length = myVar) // ln-lineTo-xAbsolute should use angleToMatchLengthX helper - |> angledLine(angle = -bar(seg01, myVar, %), length = myVar) // ln-lineTo-yAbsolute should use angleToMatchLengthY helper"#; + |> startProfile(at = [0, 0]) + |> line(end = [1, 3.82], tag = $seg01) // ln-should-get-tag + |> angledLine(angle = -foo(x = seg01, y = myVar, z = %), length = myVar) // ln-lineTo-xAbsolute should use angleToMatchLengthX helper + |> angledLine(angle = -bar(x = seg01, y = myVar, z = %), length = myVar) // ln-lineTo-yAbsolute should use angleToMatchLengthY helper"#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); @@ -2241,10 +2241,10 @@ myVar3 = 6 myAng = 40 myAng2 = 134 part001 = startSketchOn(XY) - |> startProfileAt([0, 0], %) - |> line([1, 3.82], %, $seg01) // ln-should-get-tag - |> angledLine(angle = -foo(seg01, myVar, %), length = myVar) // ln-lineTo-xAbsolute should use angleToMatchLengthX helper - |> angledLine(angle = -bar(seg01, myVar, %), length = myVar) // ln-lineTo-yAbsolute should use angleToMatchLengthY helper + |> startProfile(at = [0, 0]) + |> line(end = [1, 3.82], tag = $seg01) // ln-should-get-tag + |> angledLine(angle = -foo(x = seg01, y = myVar, z = %), length = myVar) // ln-lineTo-xAbsolute should use angleToMatchLengthX helper + |> angledLine(angle = -bar(x = seg01, y = myVar, z = %), length = myVar) // ln-lineTo-yAbsolute should use angleToMatchLengthY helper "#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -2262,8 +2262,8 @@ part001 = startSketchOn(XY) #[test] fn test_recast_after_rename_std() { let some_program_string = r#"part001 = startSketchOn(XY) - |> startProfileAt([0.0000000000, 5.0000000000], %) - |> line([0.4900857016, -0.0240763666], %) + |> startProfile(at = [0.0000000000, 5.0000000000]) + |> line(end = [0.4900857016, -0.0240763666]) part002 = "part002" things = [part001, 0.0] @@ -2282,8 +2282,8 @@ fn ghi(part001) { assert_eq!( recasted, r#"mySuperCoolPart = startSketchOn(XY) - |> startProfileAt([0.0, 5.0], %) - |> line([0.4900857016, -0.0240763666], %) + |> startProfile(at = [0.0, 5.0]) + |> line(end = [0.4900857016, -0.0240763666]) part002 = "part002" things = [mySuperCoolPart, 0.0] @@ -2319,24 +2319,24 @@ fn ghi(part001) { #[test] fn test_recast_trailing_comma() { let some_program_string = r#"startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> arc({ radius = 1, angle_start = 0, angle_end = 180, - }, %)"#; + })"#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( recasted, r#"startSketchOn(XY) - |> startProfileAt([0, 0], %) + |> startProfile(at = [0, 0]) |> arc({ radius = 1, angle_start = 0, angle_end = 180 - }, %) + }) "# ); } @@ -2348,12 +2348,12 @@ l = 8 h = 10 firstExtrude = startSketchOn(XY) - |> startProfileAt([0,0], %) - |> line([0, l], %) - |> line([w, 0], %) - |> line([0, -l], %) + |> startProfile(at = [0,0]) + |> line(end = [0, l]) + |> line(end = [w, 0]) + |> line(end = [0, -l]) |> close() - |> extrude(h, %) + |> extrude(h) "#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -2365,12 +2365,12 @@ l = 8 h = 10 firstExtrude = startSketchOn(XY) - |> startProfileAt([0, 0], %) - |> line([0, l], %) - |> line([w, 0], %) - |> line([0, -l], %) + |> startProfile(at = [0, 0]) + |> line(end = [0, l]) + |> line(end = [w, 0]) + |> line(end = [0, -l]) |> close() - |> extrude(h, %) + |> extrude(h) "# ); } @@ -2385,12 +2385,12 @@ h = 10 // It has multiple lines // And it's really long firstExtrude = startSketchOn(XY) - |> startProfileAt([0,0], %) - |> line([0, l], %) - |> line([w, 0], %) - |> line([0, -l], %) + |> startProfile(at = [0,0]) + |> line(end = [0, l]) + |> line(end = [w, 0]) + |> line(end = [0, -l]) |> close() - |> extrude(h, %) + |> extrude(h) "#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); @@ -2405,12 +2405,12 @@ h = 10 // It has multiple lines // And it's really long firstExtrude = startSketchOn(XY) - |> startProfileAt([0, 0], %) - |> line([0, l], %) - |> line([w, 0], %) - |> line([0, -l], %) + |> startProfile(at = [0, 0]) + |> line(end = [0, l]) + |> line(end = [w, 0]) + |> line(end = [0, -l]) |> close() - |> extrude(h, %) + |> extrude(h) "# ); } @@ -2430,11 +2430,11 @@ firstExtrude = startSketchOn(XY) thickness = 0.5 startSketchOn(XY) - |> startProfileAt([0, 0], %) - |> line([0, -(wallMountL - thickness)], %) - |> line([0, -(5 - thickness)], %) - |> line([0, -(5 - 1)], %) - |> line([0, -(-5 - 1)], %)"#; + |> startProfile(at = [0, 0]) + |> line(end = [0, -(wallMountL - thickness)]) + |> line(end = [0, -(5 - thickness)]) + |> line(end = [0, -(5 - 1)]) + |> line(end = [0, -(-5 - 1)])"#; let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); @@ -2560,9 +2560,13 @@ sketch002 = startSketchOn({ #[test] fn unparse_fn_unnamed() { - let input = r#"squares_out = reduce(arr, 0: number, fn(i, squares) { - return 1 -}) + let input = r#"squares_out = reduce( + arr, + n = 0: number, + f = fn(i, squares) { + return 1 + }, +) "#; let ast = crate::parsing::top_level_parse(input).unwrap(); let actual = ast.recast(&FormatOptions::new(), 0); diff --git a/rust/kcl-lib/std/solid.kcl b/rust/kcl-lib/std/solid.kcl index b9e589858..ad51dee73 100644 --- a/rust/kcl-lib/std/solid.kcl +++ b/rust/kcl-lib/std/solid.kcl @@ -117,7 +117,7 @@ export fn fillet( /// return sg /// } /// -/// part001 = cube([0,0], 20) +/// part001 = cube(pos = [0,0], scale = 20) /// |> close(tag = $line1) /// |> extrude(length = 20) /// // We tag the chamfer to reference it later. diff --git a/rust/kcl-lib/std/types.kcl b/rust/kcl-lib/std/types.kcl index 995221bb3..64c45b3c3 100644 --- a/rust/kcl-lib/std/types.kcl +++ b/rust/kcl-lib/std/types.kcl @@ -1,6 +1,10 @@ @no_std @settings(defaultLengthUnit = mm) +/// Any value. +@(impl = primitive) +export type any + /// A number /// /// May be signed or unsigned, an integer or decimal value. @@ -84,8 +88,8 @@ export type string /// |> close() /// } /// -/// rect([0, 0]) -/// rect([20, 0]) +/// rect(origin = [0, 0]) +/// rect(origin = [20, 0]) /// ``` /// /// Those tags would only be available in the `rect` function and not globally. @@ -112,8 +116,8 @@ export type string /// |> close() /// } /// -/// rect([0, 0]) -/// myRect = rect([20, 0]) +/// rect(origin = [0, 0]) +/// myRect = rect(origin = [20, 0]) /// /// myRect /// |> extrude(length = 10) diff --git a/rust/kcl-lib/tests/add_lots/ast.snap b/rust/kcl-lib/tests/add_lots/ast.snap index 267a77e27..0c13597e8 100644 --- a/rust/kcl-lib/tests/add_lots/ast.snap +++ b/rust/kcl-lib/tests/add_lots/ast.snap @@ -79,7 +79,8 @@ description: Result of parsing add_lots.kcl "name": "i", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/add_lots/input.kcl b/rust/kcl-lib/tests/add_lots/input.kcl index 9908919ea..b57329a2f 100644 --- a/rust/kcl-lib/tests/add_lots/input.kcl +++ b/rust/kcl-lib/tests/add_lots/input.kcl @@ -1,4 +1,4 @@ -fn f(i) { +fn f(@i) { return i * 2 } diff --git a/rust/kcl-lib/tests/add_lots/unparsed.snap b/rust/kcl-lib/tests/add_lots/unparsed.snap index 5fe7fdfe8..54d33f03a 100644 --- a/rust/kcl-lib/tests/add_lots/unparsed.snap +++ b/rust/kcl-lib/tests/add_lots/unparsed.snap @@ -2,7 +2,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing add_lots.kcl --- -fn f(i) { +fn f(@i) { return i * 2 } diff --git a/rust/kcl-lib/tests/argument_error/ast.snap b/rust/kcl-lib/tests/argument_error/ast.snap index 6c71a2c73..db4f99689 100644 --- a/rust/kcl-lib/tests/argument_error/ast.snap +++ b/rust/kcl-lib/tests/argument_error/ast.snap @@ -55,7 +55,8 @@ description: Result of parsing argument_error.kcl "name": "i", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, @@ -77,53 +78,47 @@ description: Result of parsing argument_error.kcl "expression": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, "name": "f", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -144,8 +139,24 @@ description: Result of parsing argument_error.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "f", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, "start": 0, "type": "ExpressionStatement", diff --git a/rust/kcl-lib/tests/argument_error/execution_error.snap b/rust/kcl-lib/tests/argument_error/execution_error.snap index e16a1568f..45f8382ea 100644 --- a/rust/kcl-lib/tests/argument_error/execution_error.snap +++ b/rust/kcl-lib/tests/argument_error/execution_error.snap @@ -8,7 +8,7 @@ KCL Semantic error │ Vec but it's actually of type Function ╭─[5:5] 4 │ - 5 │ map(f, [0, 1]) + 5 │ map(f, f = [0, 1]) · ┬ · ╰── tests/argument_error/input.kcl ╰──── diff --git a/rust/kcl-lib/tests/argument_error/input.kcl b/rust/kcl-lib/tests/argument_error/input.kcl index e9d750548..5443dce2c 100644 --- a/rust/kcl-lib/tests/argument_error/input.kcl +++ b/rust/kcl-lib/tests/argument_error/input.kcl @@ -1,5 +1,5 @@ -fn f(i) { +fn f(@i) { return 5 } -map(f, [0, 1]) +map(f, f = [0, 1]) diff --git a/rust/kcl-lib/tests/argument_error/unparsed.snap b/rust/kcl-lib/tests/argument_error/unparsed.snap index 464ef539e..b85dd2120 100644 --- a/rust/kcl-lib/tests/argument_error/unparsed.snap +++ b/rust/kcl-lib/tests/argument_error/unparsed.snap @@ -2,8 +2,8 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing argument_error.kcl --- -fn f(i) { +fn f(@i) { return 5 } -map(f, [0, 1]) +map(f, f = [0, 1]) diff --git a/rust/kcl-lib/tests/bad_units_in_annotation/ast.snap b/rust/kcl-lib/tests/bad_units_in_annotation/ast.snap index f4488027b..4376cdf07 100644 --- a/rust/kcl-lib/tests/bad_units_in_annotation/ast.snap +++ b/rust/kcl-lib/tests/bad_units_in_annotation/ast.snap @@ -422,53 +422,73 @@ description: Result of parsing bad_units_in_annotation.kcl "init": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "oxygenRadius", + "name": "center", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "oxygenRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -489,8 +509,9 @@ description: Result of parsing bad_units_in_annotation.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -784,61 +805,81 @@ description: Result of parsing bad_units_in_annotation.kcl "init": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "hydrogenOffsetX", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "hydrogenOffsetY", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "hydrogenRadius", + "name": "center", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hydrogenOffsetX", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hydrogenOffsetY", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hydrogenRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -859,8 +900,9 @@ description: Result of parsing bad_units_in_annotation.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -891,17 +933,49 @@ description: Result of parsing bad_units_in_annotation.kcl "init": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hydrogenOffsetX", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "hydrogenOffsetX", + "name": "hydrogenOffsetY", "start": 0, "type": "Identifier" }, @@ -909,51 +983,39 @@ description: Result of parsing bad_units_in_annotation.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "hydrogenOffsetY", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "hydrogenRadius", + "name": "radius", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hydrogenRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -974,8 +1036,9 @@ description: Result of parsing bad_units_in_annotation.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/bad_units_in_annotation/input.kcl b/rust/kcl-lib/tests/bad_units_in_annotation/input.kcl index e5fbde6a9..b23019562 100644 --- a/rust/kcl-lib/tests/bad_units_in_annotation/input.kcl +++ b/rust/kcl-lib/tests/bad_units_in_annotation/input.kcl @@ -17,12 +17,12 @@ fn createAtom(center, radius) { } // Create the oxygen atom at the origin -oxygenAtom = createAtom([0, 0], oxygenRadius) +oxygenAtom = createAtom(center = [0, 0], radius = oxygenRadius) // Calculate the positions of the hydrogen atoms hydrogenOffsetX = oxygenHydrogenDistance * cos(toRadians(bondAngle / 2)) hydrogenOffsetY = oxygenHydrogenDistance * sin(toRadians(bondAngle / 2)) // Create the hydrogen atoms -hydrogenAtom1 = createAtom([hydrogenOffsetX, hydrogenOffsetY], hydrogenRadius) -hydrogenAtom2 = createAtom([-hydrogenOffsetX, hydrogenOffsetY], hydrogenRadius) +hydrogenAtom1 = createAtom(center = [hydrogenOffsetX, hydrogenOffsetY], radius = hydrogenRadius) +hydrogenAtom2 = createAtom(center = [-hydrogenOffsetX, hydrogenOffsetY], radius = hydrogenRadius) diff --git a/rust/kcl-lib/tests/bad_units_in_annotation/unparsed.snap b/rust/kcl-lib/tests/bad_units_in_annotation/unparsed.snap index e9551f5ce..6e34a1483 100644 --- a/rust/kcl-lib/tests/bad_units_in_annotation/unparsed.snap +++ b/rust/kcl-lib/tests/bad_units_in_annotation/unparsed.snap @@ -21,12 +21,12 @@ fn createAtom(center, radius) { } // Create the oxygen atom at the origin -oxygenAtom = createAtom([0, 0], oxygenRadius) +oxygenAtom = createAtom(center = [0, 0], radius = oxygenRadius) // Calculate the positions of the hydrogen atoms hydrogenOffsetX = oxygenHydrogenDistance * cos(toRadians(bondAngle / 2)) hydrogenOffsetY = oxygenHydrogenDistance * sin(toRadians(bondAngle / 2)) // Create the hydrogen atoms -hydrogenAtom1 = createAtom([hydrogenOffsetX, hydrogenOffsetY], hydrogenRadius) -hydrogenAtom2 = createAtom([-hydrogenOffsetX, hydrogenOffsetY], hydrogenRadius) +hydrogenAtom1 = createAtom(center = [hydrogenOffsetX, hydrogenOffsetY], radius = hydrogenRadius) +hydrogenAtom2 = createAtom(center = [-hydrogenOffsetX, hydrogenOffsetY], radius = hydrogenRadius) diff --git a/rust/kcl-lib/tests/cube_with_error/ast.snap b/rust/kcl-lib/tests/cube_with_error/ast.snap index bbdd37fea..ee0652279 100644 --- a/rust/kcl-lib/tests/cube_with_error/ast.snap +++ b/rust/kcl-lib/tests/cube_with_error/ast.snap @@ -1105,49 +1105,69 @@ description: Result of parsing cube_with_error.kcl "init": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "40", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 40.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "40", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 40.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1168,8 +1188,9 @@ description: Result of parsing cube_with_error.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/cube_with_error/input.kcl b/rust/kcl-lib/tests/cube_with_error/input.kcl index 0331a1285..176b01a01 100644 --- a/rust/kcl-lib/tests/cube_with_error/input.kcl +++ b/rust/kcl-lib/tests/cube_with_error/input.kcl @@ -17,7 +17,7 @@ fn cube(length, center) { |> extrude(length = length) } -myCube = cube(40, [0, 0]) +myCube = cube(length = 40, center = [0, 0]) // Error, after creating meaningful output. foo diff --git a/rust/kcl-lib/tests/cube_with_error/ops.snap b/rust/kcl-lib/tests/cube_with_error/ops.snap index 756b2d2d3..2895df93a 100644 --- a/rust/kcl-lib/tests/cube_with_error/ops.snap +++ b/rust/kcl-lib/tests/cube_with_error/ops.snap @@ -57,7 +57,58 @@ description: Operations executed cube_with_error.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "center": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "length": { + "value": { + "type": "Number", + "value": 40.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/cube_with_error/unparsed.snap b/rust/kcl-lib/tests/cube_with_error/unparsed.snap index 4ff3a9e1b..b308dd42e 100644 --- a/rust/kcl-lib/tests/cube_with_error/unparsed.snap +++ b/rust/kcl-lib/tests/cube_with_error/unparsed.snap @@ -21,7 +21,7 @@ fn cube(length, center) { |> extrude(length = length) } -myCube = cube(40, [0, 0]) +myCube = cube(length = 40, center = [0, 0]) // Error, after creating meaningful output. foo diff --git a/rust/kcl-lib/tests/double_map_fn/ast.snap b/rust/kcl-lib/tests/double_map_fn/ast.snap index abdb0c8a9..00e28c89b 100644 --- a/rust/kcl-lib/tests/double_map_fn/ast.snap +++ b/rust/kcl-lib/tests/double_map_fn/ast.snap @@ -79,7 +79,8 @@ description: Result of parsing double_map_fn.kcl "name": "i", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/double_map_fn/input.kcl b/rust/kcl-lib/tests/double_map_fn/input.kcl index 1d3594a4a..bf1407ac9 100644 --- a/rust/kcl-lib/tests/double_map_fn/input.kcl +++ b/rust/kcl-lib/tests/double_map_fn/input.kcl @@ -1,4 +1,4 @@ -fn increment(i) { +fn increment(@i) { return i + 1 } diff --git a/rust/kcl-lib/tests/double_map_fn/unparsed.snap b/rust/kcl-lib/tests/double_map_fn/unparsed.snap index 38c716766..1382ce73d 100644 --- a/rust/kcl-lib/tests/double_map_fn/unparsed.snap +++ b/rust/kcl-lib/tests/double_map_fn/unparsed.snap @@ -2,7 +2,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing double_map_fn.kcl --- -fn increment(i) { +fn increment(@i) { return i + 1 } diff --git a/rust/kcl-lib/tests/fillet-and-shell/ast.snap b/rust/kcl-lib/tests/fillet-and-shell/ast.snap index c1a4013c0..ba795a618 100644 --- a/rust/kcl-lib/tests/fillet-and-shell/ast.snap +++ b/rust/kcl-lib/tests/fillet-and-shell/ast.snap @@ -2558,132 +2558,21 @@ description: Result of parsing fillet-and-shell.kcl "expression": { "arguments": [ { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "border", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "rpizWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, + "name": "x", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "Identifier" }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "widthBetweenScrews", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { + "arg": { "commentStart": 0, "end": 0, "left": { "commentStart": 0, "end": 0, "left": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "operator": "+", - "right": { "abs_path": false, "commentStart": 0, "end": 0, @@ -2699,11 +2588,48 @@ description: Result of parsing fillet-and-shell.kcl "type": "Name", "type": "Name" }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rpizWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", + "operator": "-", "right": { "commentStart": 0, "end": 0, @@ -2714,7 +2640,7 @@ description: Result of parsing fillet-and-shell.kcl "name": { "commentStart": 0, "end": 0, - "name": "rpizLength", + "name": "widthBetweenScrews", "start": 0, "type": "Identifier" }, @@ -2743,63 +2669,167 @@ description: Result of parsing fillet-and-shell.kcl "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "y", + "start": 0, + "type": "Identifier" }, - "operator": "-", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { "commentStart": 0, "end": 0, - "name": "lengthBetweenScrews", + "left": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "border", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "start": 0, - "type": "Identifier" + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rpizLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", + "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "lengthBetweenScrews", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "screwHeight", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "screwHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -2820,8 +2850,9 @@ description: Result of parsing fillet-and-shell.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -2833,132 +2864,21 @@ description: Result of parsing fillet-and-shell.kcl "expression": { "arguments": [ { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "border", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "rpizWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, + "name": "x", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "Identifier" }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "widthBetweenScrews", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { + "arg": { "commentStart": 0, "end": 0, "left": { "commentStart": 0, "end": 0, "left": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "operator": "+", - "right": { "abs_path": false, "commentStart": 0, "end": 0, @@ -2974,11 +2894,48 @@ description: Result of parsing fillet-and-shell.kcl "type": "Name", "type": "Name" }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rpizWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", + "operator": "-", "right": { "commentStart": 0, "end": 0, @@ -2989,7 +2946,7 @@ description: Result of parsing fillet-and-shell.kcl "name": { "commentStart": 0, "end": 0, - "name": "rpizLength", + "name": "widthBetweenScrews", "start": 0, "type": "Identifier" }, @@ -3018,63 +2975,167 @@ description: Result of parsing fillet-and-shell.kcl "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "y", + "start": 0, + "type": "Identifier" }, - "operator": "+", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { "commentStart": 0, "end": 0, - "name": "lengthBetweenScrews", + "left": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "border", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "start": 0, - "type": "Identifier" + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rpizLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", + "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "lengthBetweenScrews", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "screwHeight", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "screwHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -3095,8 +3156,9 @@ description: Result of parsing fillet-and-shell.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -3108,132 +3170,21 @@ description: Result of parsing fillet-and-shell.kcl "expression": { "arguments": [ { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "border", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "rpizWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, + "name": "x", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "Identifier" }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "widthBetweenScrews", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { + "arg": { "commentStart": 0, "end": 0, "left": { "commentStart": 0, "end": 0, "left": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "operator": "+", - "right": { "abs_path": false, "commentStart": 0, "end": 0, @@ -3249,6 +3200,43 @@ description: Result of parsing fillet-and-shell.kcl "type": "Name", "type": "Name" }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rpizWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" @@ -3264,7 +3252,7 @@ description: Result of parsing fillet-and-shell.kcl "name": { "commentStart": 0, "end": 0, - "name": "rpizLength", + "name": "widthBetweenScrews", "start": 0, "type": "Identifier" }, @@ -3293,63 +3281,167 @@ description: Result of parsing fillet-and-shell.kcl "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "y", + "start": 0, + "type": "Identifier" }, - "operator": "+", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { "commentStart": 0, "end": 0, - "name": "lengthBetweenScrews", + "left": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "border", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "start": 0, - "type": "Identifier" + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rpizLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", + "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "lengthBetweenScrews", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "screwHeight", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "screwHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -3370,8 +3462,9 @@ description: Result of parsing fillet-and-shell.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -3383,132 +3476,21 @@ description: Result of parsing fillet-and-shell.kcl "expression": { "arguments": [ { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "border", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "rpizWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, + "name": "x", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "Identifier" }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "widthBetweenScrews", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { + "arg": { "commentStart": 0, "end": 0, "left": { "commentStart": 0, "end": 0, "left": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "operator": "+", - "right": { "abs_path": false, "commentStart": 0, "end": 0, @@ -3524,6 +3506,43 @@ description: Result of parsing fillet-and-shell.kcl "type": "Name", "type": "Name" }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rpizWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" @@ -3539,7 +3558,7 @@ description: Result of parsing fillet-and-shell.kcl "name": { "commentStart": 0, "end": 0, - "name": "rpizLength", + "name": "widthBetweenScrews", "start": 0, "type": "Identifier" }, @@ -3568,63 +3587,167 @@ description: Result of parsing fillet-and-shell.kcl "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "y", + "start": 0, + "type": "Identifier" }, - "operator": "-", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { "commentStart": 0, "end": 0, - "name": "lengthBetweenScrews", + "left": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "border", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "start": 0, - "type": "Identifier" + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "rpizLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "/", + "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "lengthBetweenScrews", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "screwHeight", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "screwHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -3645,8 +3768,9 @@ description: Result of parsing fillet-and-shell.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -3879,39 +4003,6 @@ description: Result of parsing fillet-and-shell.kcl } } ], - "19": [ - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "NonCodeNode", - "value": { - "type": "newLine" - } - } - ], - "20": [ - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "NonCodeNode", - "value": { - "type": "newLine" - } - } - ], - "21": [ - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "NonCodeNode", - "value": { - "type": "newLine" - } - } - ], "22": [ { "commentStart": 0, diff --git a/rust/kcl-lib/tests/fillet-and-shell/input.kcl b/rust/kcl-lib/tests/fillet-and-shell/input.kcl index 7de92cbe2..09b685b46 100644 --- a/rust/kcl-lib/tests/fillet-and-shell/input.kcl +++ b/rust/kcl-lib/tests/fillet-and-shell/input.kcl @@ -64,12 +64,9 @@ fn m25Screw(x, y, height) { return screw } -m25Screw(border + rpizWidth / 2 - (widthBetweenScrews / 2), 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), screwHeight) - -m25Screw(border + rpizWidth / 2 - (widthBetweenScrews / 2), 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, screwHeight) - -m25Screw(border + rpizWidth / 2 + widthBetweenScrews / 2, 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, screwHeight) - -m25Screw(border + rpizWidth / 2 + widthBetweenScrews / 2, 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), screwHeight) +m25Screw(x = border + rpizWidth / 2 - (widthBetweenScrews / 2), y = 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), height = screwHeight) +m25Screw(x = border + rpizWidth / 2 - (widthBetweenScrews / 2), y = 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, height = screwHeight) +m25Screw(x = border + rpizWidth / 2 + widthBetweenScrews / 2, y = 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, height = screwHeight) +m25Screw(x = border + rpizWidth / 2 + widthBetweenScrews / 2, y = 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), height = screwHeight) shell(case, faces = ['end'], thickness = caseThickness) diff --git a/rust/kcl-lib/tests/fillet-and-shell/ops.snap b/rust/kcl-lib/tests/fillet-and-shell/ops.snap index 14173443e..58e96ec21 100644 --- a/rust/kcl-lib/tests/fillet-and-shell/ops.snap +++ b/rust/kcl-lib/tests/fillet-and-shell/ops.snap @@ -416,7 +416,56 @@ description: Operations executed fillet-and-shell.kcl "name": "m25Screw", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "height": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "x": { + "value": { + "type": "Number", + "value": 7.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "y": { + "value": { + "type": "Number", + "value": 7.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -427,7 +476,56 @@ description: Operations executed fillet-and-shell.kcl "name": "m25Screw", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "height": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "x": { + "value": { + "type": "Number", + "value": 7.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "y": { + "value": { + "type": "Number", + "value": 65.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -438,7 +536,56 @@ description: Operations executed fillet-and-shell.kcl "name": "m25Screw", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "height": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "x": { + "value": { + "type": "Number", + "value": 30.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "y": { + "value": { + "type": "Number", + "value": 65.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -449,7 +596,56 @@ description: Operations executed fillet-and-shell.kcl "name": "m25Screw", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "height": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "x": { + "value": { + "type": "Number", + "value": 30.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "y": { + "value": { + "type": "Number", + "value": 7.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/fillet-and-shell/unparsed.snap b/rust/kcl-lib/tests/fillet-and-shell/unparsed.snap index c8ff7b04b..3390e7062 100644 --- a/rust/kcl-lib/tests/fillet-and-shell/unparsed.snap +++ b/rust/kcl-lib/tests/fillet-and-shell/unparsed.snap @@ -71,12 +71,9 @@ fn m25Screw(x, y, height) { return screw } -m25Screw(border + rpizWidth / 2 - (widthBetweenScrews / 2), 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), screwHeight) - -m25Screw(border + rpizWidth / 2 - (widthBetweenScrews / 2), 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, screwHeight) - -m25Screw(border + rpizWidth / 2 + widthBetweenScrews / 2, 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, screwHeight) - -m25Screw(border + rpizWidth / 2 + widthBetweenScrews / 2, 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), screwHeight) +m25Screw(x = border + rpizWidth / 2 - (widthBetweenScrews / 2), y = 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), height = screwHeight) +m25Screw(x = border + rpizWidth / 2 - (widthBetweenScrews / 2), y = 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, height = screwHeight) +m25Screw(x = border + rpizWidth / 2 + widthBetweenScrews / 2, y = 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, height = screwHeight) +m25Screw(x = border + rpizWidth / 2 + widthBetweenScrews / 2, y = 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), height = screwHeight) shell(case, faces = [END], thickness = caseThickness) diff --git a/rust/kcl-lib/tests/function_sketch/ast.snap b/rust/kcl-lib/tests/function_sketch/ast.snap index b36376bfb..65d15bbea 100644 --- a/rust/kcl-lib/tests/function_sketch/ast.snap +++ b/rust/kcl-lib/tests/function_sketch/ast.snap @@ -570,39 +570,69 @@ description: Result of parsing function_sketch.kcl "init": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "h", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 6.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "l", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "w", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } } } ], @@ -624,8 +654,9 @@ description: Result of parsing function_sketch.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/function_sketch/input.kcl b/rust/kcl-lib/tests/function_sketch/input.kcl index 8e32a5e27..87127e2b7 100644 --- a/rust/kcl-lib/tests/function_sketch/input.kcl +++ b/rust/kcl-lib/tests/function_sketch/input.kcl @@ -10,4 +10,4 @@ fn box(h, l, w) { return myBox } -fnBox = box(3, 6, 10) +fnBox = box(h = 3, l = 6, w = 10) diff --git a/rust/kcl-lib/tests/function_sketch/ops.snap b/rust/kcl-lib/tests/function_sketch/ops.snap index 230898ba1..712a5a388 100644 --- a/rust/kcl-lib/tests/function_sketch/ops.snap +++ b/rust/kcl-lib/tests/function_sketch/ops.snap @@ -57,7 +57,56 @@ description: Operations executed function_sketch.kcl "name": "box", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "h": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "l": { + "value": { + "type": "Number", + "value": 6.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "w": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/function_sketch/unparsed.snap b/rust/kcl-lib/tests/function_sketch/unparsed.snap index ad3e8ad12..73447b494 100644 --- a/rust/kcl-lib/tests/function_sketch/unparsed.snap +++ b/rust/kcl-lib/tests/function_sketch/unparsed.snap @@ -14,4 +14,4 @@ fn box(h, l, w) { return myBox } -fnBox = box(3, 6, 10) +fnBox = box(h = 3, l = 6, w = 10) diff --git a/rust/kcl-lib/tests/function_sketch_with_position/ast.snap b/rust/kcl-lib/tests/function_sketch_with_position/ast.snap index b1ad9322f..8392cf01c 100644 --- a/rust/kcl-lib/tests/function_sketch_with_position/ast.snap +++ b/rust/kcl-lib/tests/function_sketch_with_position/ast.snap @@ -563,72 +563,112 @@ description: Result of parsing function_sketch_with_position.kcl "init": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "p", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "h", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" } }, { - "commentStart": 0, - "end": 0, - "raw": "6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 6.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "l", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "w", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } } } ], @@ -650,8 +690,9 @@ description: Result of parsing function_sketch_with_position.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/function_sketch_with_position/input.kcl b/rust/kcl-lib/tests/function_sketch_with_position/input.kcl index 648433121..7a670b662 100644 --- a/rust/kcl-lib/tests/function_sketch_with_position/input.kcl +++ b/rust/kcl-lib/tests/function_sketch_with_position/input.kcl @@ -10,4 +10,4 @@ fn box(p, h, l, w) { return myBox } -thing = box([0, 0], 3, 6, 10) +thing = box(p = [0, 0], h = 3, l = 6, w = 10) diff --git a/rust/kcl-lib/tests/function_sketch_with_position/ops.snap b/rust/kcl-lib/tests/function_sketch_with_position/ops.snap index c9fd15a78..cc8fced1b 100644 --- a/rust/kcl-lib/tests/function_sketch_with_position/ops.snap +++ b/rust/kcl-lib/tests/function_sketch_with_position/ops.snap @@ -57,7 +57,90 @@ description: Operations executed function_sketch_with_position.kcl "name": "box", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "h": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "l": { + "value": { + "type": "Number", + "value": 6.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "p": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "w": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/function_sketch_with_position/unparsed.snap b/rust/kcl-lib/tests/function_sketch_with_position/unparsed.snap index ffa71009e..569af5f11 100644 --- a/rust/kcl-lib/tests/function_sketch_with_position/unparsed.snap +++ b/rust/kcl-lib/tests/function_sketch_with_position/unparsed.snap @@ -14,4 +14,9 @@ fn box(p, h, l, w) { return myBox } -thing = box([0, 0], 3, 6, 10) +thing = box( + p = [0, 0], + h = 3, + l = 6, + w = 10, +) diff --git a/rust/kcl-lib/tests/intersect_cubes/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/intersect_cubes/artifact_graph_flowchart.snap.md index 236ebe28b..332772bd5 100644 --- a/rust/kcl-lib/tests/intersect_cubes/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/intersect_cubes/artifact_graph_flowchart.snap.md @@ -20,7 +20,7 @@ flowchart LR 2["Plane
[33, 50, 0]"] 15["Sweep Extrusion
[328, 354, 0]"] 16["Sweep Extrusion
[328, 354, 0]"] - 17["CompositeSolid Intersect
[448, 477, 0]"] + 17["CompositeSolid Intersect
[480, 509, 0]"] 18[Wall] 19[Wall] 20[Wall] diff --git a/rust/kcl-lib/tests/intersect_cubes/ast.snap b/rust/kcl-lib/tests/intersect_cubes/ast.snap index 0920666c6..a84ec9b1b 100644 --- a/rust/kcl-lib/tests/intersect_cubes/ast.snap +++ b/rust/kcl-lib/tests/intersect_cubes/ast.snap @@ -819,48 +819,68 @@ description: Result of parsing intersect_cubes.kcl "init": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } } } ], @@ -882,8 +902,9 @@ description: Result of parsing intersect_cubes.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -911,48 +932,68 @@ description: Result of parsing intersect_cubes.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "7", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 7.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "7", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "raw": "5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } } ], @@ -974,8 +1015,9 @@ description: Result of parsing intersect_cubes.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/intersect_cubes/input.kcl b/rust/kcl-lib/tests/intersect_cubes/input.kcl index ec430fd43..2554ea55d 100644 --- a/rust/kcl-lib/tests/intersect_cubes/input.kcl +++ b/rust/kcl-lib/tests/intersect_cubes/input.kcl @@ -8,8 +8,8 @@ fn cube(center, size) { |> extrude(length = 2 * size) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(center = [0, 0], size = 10) +part002 = cube(center = [7, 3], size = 5) |> translate(z = 1) fullPart = intersect([part001, part002]) diff --git a/rust/kcl-lib/tests/intersect_cubes/ops.snap b/rust/kcl-lib/tests/intersect_cubes/ops.snap index 205968529..9b09eb6d1 100644 --- a/rust/kcl-lib/tests/intersect_cubes/ops.snap +++ b/rust/kcl-lib/tests/intersect_cubes/ops.snap @@ -104,7 +104,58 @@ description: Operations executed intersect_cubes.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "center": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "size": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -115,7 +166,58 @@ description: Operations executed intersect_cubes.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "center": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 7.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "size": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/intersect_cubes/unparsed.snap b/rust/kcl-lib/tests/intersect_cubes/unparsed.snap index cdb0aadae..50fe3af4b 100644 --- a/rust/kcl-lib/tests/intersect_cubes/unparsed.snap +++ b/rust/kcl-lib/tests/intersect_cubes/unparsed.snap @@ -12,8 +12,8 @@ fn cube(center, size) { |> extrude(length = 2 * size) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(center = [0, 0], size = 10) +part002 = cube(center = [7, 3], size = 5) |> translate(z = 1) fullPart = intersect([part001, part002]) diff --git a/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap b/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap index e3f073482..c9d7cf90f 100644 --- a/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap @@ -9474,60 +9474,90 @@ description: Result of parsing 80-20-rail.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.5, - "suffix": "None" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" } }, { - "commentStart": 0, - "end": 0, - "raw": "48", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 48.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.5, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "railLength", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "48", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 48.0, + "suffix": "None" + } } } ], @@ -9549,8 +9579,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "preComments": [ "", diff --git a/rust/kcl-lib/tests/kcl_samples/80-20-rail/ops.snap b/rust/kcl-lib/tests/kcl_samples/80-20-rail/ops.snap index 6f8db391b..895eeadd7 100644 --- a/rust/kcl-lib/tests/kcl_samples/80-20-rail/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/80-20-rail/ops.snap @@ -290,7 +290,74 @@ description: Operations executed 80-20-rail.kcl "name": "rail8020", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "railHeight": { + "value": { + "type": "Number", + "value": 1.5, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "railLength": { + "value": { + "type": "Number", + "value": 48.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md index 1c1175c73..3a0811db8 100644 --- a/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md @@ -177,7 +177,7 @@ flowchart LR 129["Sweep Extrusion
[333, 353, 10]"] 130["Sweep Extrusion
[543, 564, 10]"] 131["Sweep Revolve
[764, 846, 11]"] - 132["Sweep Loft
[2259, 2379, 11]"] + 132["Sweep Loft
[2454, 2473, 11]"] 133[Wall] 134[Wall] 135[Wall] @@ -605,19 +605,19 @@ flowchart LR 84 --- 147 84 --- 233 87 --- 169 - 87 x--> 183 + 87 x--> 184 87 --- 212 87 --- 257 89 --- 168 - 89 x--> 183 + 89 x--> 184 89 --- 214 89 --- 258 90 --- 167 - 90 x--> 183 + 90 x--> 184 90 --- 211 90 --- 256 92 --- 166 - 92 x--> 183 + 92 x--> 184 92 --- 213 92 --- 259 119 --- 162 @@ -865,10 +865,10 @@ flowchart LR 221 <--x 181 222 <--x 181 193 <--x 182 - 211 <--x 184 - 212 <--x 184 - 213 <--x 184 - 214 <--x 184 + 211 <--x 183 + 212 <--x 183 + 213 <--x 183 + 214 <--x 183 203 <--x 186 204 <--x 186 205 <--x 186 diff --git a/rust/kcl-lib/tests/kcl_samples/bench/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/bench/artifact_graph_flowchart.snap.md index 4ee7e0899..7db77e92a 100644 --- a/rust/kcl-lib/tests/kcl_samples/bench/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/bench/artifact_graph_flowchart.snap.md @@ -1,275 +1,275 @@ ```mermaid flowchart LR subgraph path24 [Path] - 24["Path
[361, 394, 8]"] - 44["Segment
[402, 428, 8]"] - 49["Segment
[436, 498, 8]"] - 57["Segment
[506, 568, 8]"] - 62["Segment
[576, 639, 8]"] - 69["Segment
[647, 672, 8]"] - 70["Segment
[680, 700, 8]"] - 79["Segment
[708, 732, 8]"] - 84["Segment
[740, 802, 8]"] - 88["Segment
[810, 835, 8]"] - 98["Segment
[843, 863, 8]"] - 104["Segment
[871, 895, 8]"] - 107["Segment
[903, 964, 8]"] - 112["Segment
[972, 1033, 8]"] - 122["Segment
[1041, 1066, 8]"] - 129["Segment
[1074, 1098, 8]"] - 133["Segment
[1106, 1168, 8]"] - 141["Segment
[1176, 1201, 8]"] - 144["Segment
[1209, 1236, 8]"] - 149["Segment
[1244, 1305, 8]"] - 155["Segment
[1313, 1357, 8]"] - 160["Segment
[1365, 1372, 8]"] + 24["Path
[362, 395, 8]"] + 44["Segment
[403, 429, 8]"] + 49["Segment
[437, 499, 8]"] + 57["Segment
[507, 569, 8]"] + 62["Segment
[577, 640, 8]"] + 69["Segment
[648, 673, 8]"] + 70["Segment
[681, 701, 8]"] + 79["Segment
[709, 733, 8]"] + 84["Segment
[741, 803, 8]"] + 88["Segment
[811, 836, 8]"] + 98["Segment
[844, 864, 8]"] + 104["Segment
[872, 896, 8]"] + 107["Segment
[904, 965, 8]"] + 112["Segment
[973, 1034, 8]"] + 122["Segment
[1042, 1067, 8]"] + 129["Segment
[1075, 1099, 8]"] + 133["Segment
[1107, 1169, 8]"] + 141["Segment
[1177, 1202, 8]"] + 144["Segment
[1210, 1237, 8]"] + 149["Segment
[1245, 1306, 8]"] + 155["Segment
[1314, 1358, 8]"] + 160["Segment
[1366, 1373, 8]"] 212[Solid2d] end subgraph path25 [Path] - 25["Path
[361, 394, 8]"] - 40["Segment
[402, 428, 8]"] - 51["Segment
[436, 498, 8]"] - 56["Segment
[506, 568, 8]"] - 59["Segment
[576, 639, 8]"] - 67["Segment
[647, 672, 8]"] - 74["Segment
[680, 700, 8]"] - 81["Segment
[708, 732, 8]"] - 82["Segment
[740, 802, 8]"] - 90["Segment
[810, 835, 8]"] - 99["Segment
[843, 863, 8]"] - 105["Segment
[871, 895, 8]"] - 109["Segment
[903, 964, 8]"] - 113["Segment
[972, 1033, 8]"] - 119["Segment
[1041, 1066, 8]"] - 124["Segment
[1074, 1098, 8]"] - 132["Segment
[1106, 1168, 8]"] - 140["Segment
[1176, 1201, 8]"] - 143["Segment
[1209, 1236, 8]"] - 150["Segment
[1244, 1305, 8]"] - 154["Segment
[1313, 1357, 8]"] - 164["Segment
[1365, 1372, 8]"] + 25["Path
[362, 395, 8]"] + 40["Segment
[403, 429, 8]"] + 51["Segment
[437, 499, 8]"] + 56["Segment
[507, 569, 8]"] + 59["Segment
[577, 640, 8]"] + 67["Segment
[648, 673, 8]"] + 74["Segment
[681, 701, 8]"] + 81["Segment
[709, 733, 8]"] + 82["Segment
[741, 803, 8]"] + 90["Segment
[811, 836, 8]"] + 99["Segment
[844, 864, 8]"] + 105["Segment
[872, 896, 8]"] + 109["Segment
[904, 965, 8]"] + 113["Segment
[973, 1034, 8]"] + 119["Segment
[1042, 1067, 8]"] + 124["Segment
[1075, 1099, 8]"] + 132["Segment
[1107, 1169, 8]"] + 140["Segment
[1177, 1202, 8]"] + 143["Segment
[1210, 1237, 8]"] + 150["Segment
[1245, 1306, 8]"] + 154["Segment
[1314, 1358, 8]"] + 164["Segment
[1366, 1373, 8]"] 217[Solid2d] end subgraph path26 [Path] - 26["Path
[361, 394, 8]"] - 43["Segment
[402, 428, 8]"] - 50["Segment
[436, 498, 8]"] - 54["Segment
[506, 568, 8]"] - 61["Segment
[576, 639, 8]"] - 65["Segment
[647, 672, 8]"] - 71["Segment
[680, 700, 8]"] - 80["Segment
[708, 732, 8]"] - 87["Segment
[740, 802, 8]"] - 92["Segment
[810, 835, 8]"] - 94["Segment
[843, 863, 8]"] - 101["Segment
[871, 895, 8]"] - 111["Segment
[903, 964, 8]"] - 117["Segment
[972, 1033, 8]"] - 123["Segment
[1041, 1066, 8]"] - 125["Segment
[1074, 1098, 8]"] - 134["Segment
[1106, 1168, 8]"] - 136["Segment
[1176, 1201, 8]"] - 147["Segment
[1209, 1236, 8]"] - 148["Segment
[1244, 1305, 8]"] - 156["Segment
[1313, 1357, 8]"] - 165["Segment
[1365, 1372, 8]"] + 26["Path
[362, 395, 8]"] + 43["Segment
[403, 429, 8]"] + 50["Segment
[437, 499, 8]"] + 54["Segment
[507, 569, 8]"] + 61["Segment
[577, 640, 8]"] + 65["Segment
[648, 673, 8]"] + 71["Segment
[681, 701, 8]"] + 80["Segment
[709, 733, 8]"] + 87["Segment
[741, 803, 8]"] + 92["Segment
[811, 836, 8]"] + 94["Segment
[844, 864, 8]"] + 101["Segment
[872, 896, 8]"] + 111["Segment
[904, 965, 8]"] + 117["Segment
[973, 1034, 8]"] + 123["Segment
[1042, 1067, 8]"] + 125["Segment
[1075, 1099, 8]"] + 134["Segment
[1107, 1169, 8]"] + 136["Segment
[1177, 1202, 8]"] + 147["Segment
[1210, 1237, 8]"] + 148["Segment
[1245, 1306, 8]"] + 156["Segment
[1314, 1358, 8]"] + 165["Segment
[1366, 1373, 8]"] 218[Solid2d] end subgraph path27 [Path] - 27["Path
[361, 394, 8]"] - 42["Segment
[402, 428, 8]"] - 47["Segment
[436, 498, 8]"] - 53["Segment
[506, 568, 8]"] - 58["Segment
[576, 639, 8]"] - 68["Segment
[647, 672, 8]"] - 73["Segment
[680, 700, 8]"] - 77["Segment
[708, 732, 8]"] - 83["Segment
[740, 802, 8]"] - 91["Segment
[810, 835, 8]"] - 95["Segment
[843, 863, 8]"] - 100["Segment
[871, 895, 8]"] - 108["Segment
[903, 964, 8]"] - 114["Segment
[972, 1033, 8]"] - 120["Segment
[1041, 1066, 8]"] - 126["Segment
[1074, 1098, 8]"] - 135["Segment
[1106, 1168, 8]"] - 139["Segment
[1176, 1201, 8]"] - 142["Segment
[1209, 1236, 8]"] - 151["Segment
[1244, 1305, 8]"] - 157["Segment
[1313, 1357, 8]"] - 161["Segment
[1365, 1372, 8]"] + 27["Path
[362, 395, 8]"] + 42["Segment
[403, 429, 8]"] + 47["Segment
[437, 499, 8]"] + 53["Segment
[507, 569, 8]"] + 58["Segment
[577, 640, 8]"] + 68["Segment
[648, 673, 8]"] + 73["Segment
[681, 701, 8]"] + 77["Segment
[709, 733, 8]"] + 83["Segment
[741, 803, 8]"] + 91["Segment
[811, 836, 8]"] + 95["Segment
[844, 864, 8]"] + 100["Segment
[872, 896, 8]"] + 108["Segment
[904, 965, 8]"] + 114["Segment
[973, 1034, 8]"] + 120["Segment
[1042, 1067, 8]"] + 126["Segment
[1075, 1099, 8]"] + 135["Segment
[1107, 1169, 8]"] + 139["Segment
[1177, 1202, 8]"] + 142["Segment
[1210, 1237, 8]"] + 151["Segment
[1245, 1306, 8]"] + 157["Segment
[1314, 1358, 8]"] + 161["Segment
[1366, 1373, 8]"] 219[Solid2d] end subgraph path28 [Path] - 28["Path
[361, 394, 8]"] - 45["Segment
[402, 428, 8]"] - 46["Segment
[436, 498, 8]"] - 52["Segment
[506, 568, 8]"] - 63["Segment
[576, 639, 8]"] - 66["Segment
[647, 672, 8]"] - 72["Segment
[680, 700, 8]"] - 78["Segment
[708, 732, 8]"] - 86["Segment
[740, 802, 8]"] - 89["Segment
[810, 835, 8]"] - 96["Segment
[843, 863, 8]"] - 102["Segment
[871, 895, 8]"] - 106["Segment
[903, 964, 8]"] - 116["Segment
[972, 1033, 8]"] - 118["Segment
[1041, 1066, 8]"] - 128["Segment
[1074, 1098, 8]"] - 130["Segment
[1106, 1168, 8]"] - 137["Segment
[1176, 1201, 8]"] - 145["Segment
[1209, 1236, 8]"] - 152["Segment
[1244, 1305, 8]"] - 158["Segment
[1313, 1357, 8]"] - 162["Segment
[1365, 1372, 8]"] + 28["Path
[362, 395, 8]"] + 45["Segment
[403, 429, 8]"] + 46["Segment
[437, 499, 8]"] + 52["Segment
[507, 569, 8]"] + 63["Segment
[577, 640, 8]"] + 66["Segment
[648, 673, 8]"] + 72["Segment
[681, 701, 8]"] + 78["Segment
[709, 733, 8]"] + 86["Segment
[741, 803, 8]"] + 89["Segment
[811, 836, 8]"] + 96["Segment
[844, 864, 8]"] + 102["Segment
[872, 896, 8]"] + 106["Segment
[904, 965, 8]"] + 116["Segment
[973, 1034, 8]"] + 118["Segment
[1042, 1067, 8]"] + 128["Segment
[1075, 1099, 8]"] + 130["Segment
[1107, 1169, 8]"] + 137["Segment
[1177, 1202, 8]"] + 145["Segment
[1210, 1237, 8]"] + 152["Segment
[1245, 1306, 8]"] + 158["Segment
[1314, 1358, 8]"] + 162["Segment
[1366, 1373, 8]"] 220[Solid2d] end subgraph path29 [Path] - 29["Path
[361, 394, 8]"] - 41["Segment
[402, 428, 8]"] - 48["Segment
[436, 498, 8]"] - 55["Segment
[506, 568, 8]"] - 60["Segment
[576, 639, 8]"] - 64["Segment
[647, 672, 8]"] - 75["Segment
[680, 700, 8]"] - 76["Segment
[708, 732, 8]"] - 85["Segment
[740, 802, 8]"] - 93["Segment
[810, 835, 8]"] - 97["Segment
[843, 863, 8]"] - 103["Segment
[871, 895, 8]"] - 110["Segment
[903, 964, 8]"] - 115["Segment
[972, 1033, 8]"] - 121["Segment
[1041, 1066, 8]"] - 127["Segment
[1074, 1098, 8]"] - 131["Segment
[1106, 1168, 8]"] - 138["Segment
[1176, 1201, 8]"] - 146["Segment
[1209, 1236, 8]"] - 153["Segment
[1244, 1305, 8]"] - 159["Segment
[1313, 1357, 8]"] - 163["Segment
[1365, 1372, 8]"] + 29["Path
[362, 395, 8]"] + 41["Segment
[403, 429, 8]"] + 48["Segment
[437, 499, 8]"] + 55["Segment
[507, 569, 8]"] + 60["Segment
[577, 640, 8]"] + 64["Segment
[648, 673, 8]"] + 75["Segment
[681, 701, 8]"] + 76["Segment
[709, 733, 8]"] + 85["Segment
[741, 803, 8]"] + 93["Segment
[811, 836, 8]"] + 97["Segment
[844, 864, 8]"] + 103["Segment
[872, 896, 8]"] + 110["Segment
[904, 965, 8]"] + 115["Segment
[973, 1034, 8]"] + 121["Segment
[1042, 1067, 8]"] + 127["Segment
[1075, 1099, 8]"] + 131["Segment
[1107, 1169, 8]"] + 138["Segment
[1177, 1202, 8]"] + 146["Segment
[1210, 1237, 8]"] + 153["Segment
[1245, 1306, 8]"] + 159["Segment
[1314, 1358, 8]"] + 163["Segment
[1366, 1373, 8]"] 221[Solid2d] end subgraph path30 [Path] - 30["Path
[1762, 1786, 8]"] + 30["Path
[1765, 1789, 8]"] end subgraph path31 [Path] - 31["Path
[1762, 1786, 8]"] + 31["Path
[1765, 1789, 8]"] end subgraph path32 [Path] - 32["Path
[1794, 1920, 8]"] - 169["Segment
[1794, 1920, 8]"] - 170["Segment
[1794, 1920, 8]"] - 171["Segment
[1794, 1920, 8]"] - 172["Segment
[1794, 1920, 8]"] - 176["Segment
[1794, 1920, 8]"] - 178["Segment
[1794, 1920, 8]"] - 179["Segment
[1794, 1920, 8]"] + 32["Path
[1797, 1923, 8]"] + 169["Segment
[1797, 1923, 8]"] + 170["Segment
[1797, 1923, 8]"] + 171["Segment
[1797, 1923, 8]"] + 172["Segment
[1797, 1923, 8]"] + 176["Segment
[1797, 1923, 8]"] + 178["Segment
[1797, 1923, 8]"] + 179["Segment
[1797, 1923, 8]"] 215[Solid2d] end subgraph path33 [Path] - 33["Path
[1794, 1920, 8]"] - 166["Segment
[1794, 1920, 8]"] - 167["Segment
[1794, 1920, 8]"] - 168["Segment
[1794, 1920, 8]"] - 173["Segment
[1794, 1920, 8]"] - 174["Segment
[1794, 1920, 8]"] - 175["Segment
[1794, 1920, 8]"] - 177["Segment
[1794, 1920, 8]"] + 33["Path
[1797, 1923, 8]"] + 166["Segment
[1797, 1923, 8]"] + 167["Segment
[1797, 1923, 8]"] + 168["Segment
[1797, 1923, 8]"] + 173["Segment
[1797, 1923, 8]"] + 174["Segment
[1797, 1923, 8]"] + 175["Segment
[1797, 1923, 8]"] + 177["Segment
[1797, 1923, 8]"] 222[Solid2d] end subgraph path34 [Path] - 34["Path
[2196, 2223, 8]"] - 180["Segment
[2231, 2253, 8]"] - 181["Segment
[2261, 2283, 8]"] - 182["Segment
[2291, 2313, 8]"] - 183["Segment
[2321, 2344, 8]"] - 184["Segment
[2352, 2375, 8]"] - 185["Segment
[2383, 2418, 8]"] - 186["Segment
[2426, 2433, 8]"] + 34["Path
[2217, 2244, 8]"] + 180["Segment
[2252, 2274, 8]"] + 181["Segment
[2282, 2304, 8]"] + 182["Segment
[2312, 2334, 8]"] + 183["Segment
[2342, 2365, 8]"] + 184["Segment
[2373, 2396, 8]"] + 185["Segment
[2404, 2439, 8]"] + 186["Segment
[2447, 2454, 8]"] 223[Solid2d] end subgraph path35 [Path] - 35["Path
[2705, 2734, 8]"] - 187["Segment
[2742, 2777, 8]"] - 188["Segment
[2785, 2810, 8]"] - 189["Segment
[2818, 2854, 8]"] - 190["Segment
[2862, 2886, 8]"] - 191["Segment
[2894, 2928, 8]"] - 192["Segment
[2936, 2971, 8]"] - 193["Segment
[2979, 2986, 8]"] + 35["Path
[2728, 2757, 8]"] + 187["Segment
[2765, 2800, 8]"] + 188["Segment
[2808, 2833, 8]"] + 189["Segment
[2841, 2877, 8]"] + 190["Segment
[2885, 2909, 8]"] + 191["Segment
[2917, 2951, 8]"] + 192["Segment
[2959, 2994, 8]"] + 193["Segment
[3002, 3009, 8]"] 214[Solid2d] end subgraph path36 [Path] - 36["Path
[3261, 3288, 8]"] - 195["Segment
[3296, 3315, 8]"] - 197["Segment
[3323, 3372, 8]"] + 36["Path
[3286, 3313, 8]"] + 195["Segment
[3321, 3340, 8]"] + 197["Segment
[3348, 3397, 8]"] end subgraph path37 [Path] - 37["Path
[3261, 3288, 8]"] - 194["Segment
[3296, 3315, 8]"] - 196["Segment
[3323, 3372, 8]"] + 37["Path
[3286, 3313, 8]"] + 194["Segment
[3321, 3340, 8]"] + 196["Segment
[3348, 3397, 8]"] end subgraph path38 [Path] - 38["Path
[3472, 3505, 8]"] - 199["Segment
[3513, 3532, 8]"] - 200["Segment
[3540, 3562, 8]"] - 202["Segment
[3570, 3593, 8]"] - 204["Segment
[3601, 3621, 8]"] - 206["Segment
[3629, 3653, 8]"] - 209["Segment
[3661, 3684, 8]"] - 211["Segment
[3692, 3699, 8]"] + 38["Path
[3498, 3531, 8]"] + 199["Segment
[3539, 3558, 8]"] + 200["Segment
[3566, 3588, 8]"] + 202["Segment
[3596, 3619, 8]"] + 204["Segment
[3627, 3647, 8]"] + 206["Segment
[3655, 3679, 8]"] + 209["Segment
[3687, 3710, 8]"] + 211["Segment
[3718, 3725, 8]"] 213[Solid2d] end subgraph path39 [Path] - 39["Path
[3472, 3505, 8]"] - 198["Segment
[3513, 3532, 8]"] - 201["Segment
[3540, 3562, 8]"] - 203["Segment
[3570, 3593, 8]"] - 205["Segment
[3601, 3621, 8]"] - 207["Segment
[3629, 3653, 8]"] - 208["Segment
[3661, 3684, 8]"] - 210["Segment
[3692, 3699, 8]"] + 39["Path
[3498, 3531, 8]"] + 198["Segment
[3539, 3558, 8]"] + 201["Segment
[3566, 3588, 8]"] + 203["Segment
[3596, 3619, 8]"] + 205["Segment
[3627, 3647, 8]"] + 207["Segment
[3655, 3679, 8]"] + 208["Segment
[3687, 3710, 8]"] + 210["Segment
[3718, 3725, 8]"] 216[Solid2d] end 1["Plane
[823, 864, 0]"] 2["Plane
[874, 916, 0]"] 3["Plane
[975, 1017, 0]"] - 4["Plane
[1068, 1135, 0]"] - 5["Plane
[1205, 1272, 0]"] - 6["Plane
[333, 353, 8]"] - 7["Plane
[333, 353, 8]"] - 8["Plane
[3780, 3815, 8]"] - 9["Plane
[3780, 3815, 8]"] - 10["Plane
[3846, 3875, 8]"] - 11["Plane
[3846, 3875, 8]"] - 12["StartSketchOnPlane
[2677, 2697, 8]"] - 13["StartSketchOnPlane
[1734, 1754, 8]"] - 14["StartSketchOnPlane
[3233, 3253, 8]"] - 15["StartSketchOnPlane
[1734, 1754, 8]"] - 16["StartSketchOnPlane
[333, 353, 8]"] - 17["StartSketchOnPlane
[3444, 3464, 8]"] - 18["StartSketchOnPlane
[3444, 3464, 8]"] - 19["StartSketchOnPlane
[333, 353, 8]"] - 20["StartSketchOnPlane
[333, 353, 8]"] - 21["StartSketchOnPlane
[3233, 3253, 8]"] - 22["StartSketchOnPlane
[333, 353, 8]"] - 23["StartSketchOnPlane
[2168, 2188, 8]"] - 224["Sweep Extrusion
[1460, 1498, 8]"] - 225["Sweep Extrusion
[1460, 1498, 8]"] - 226["Sweep Extrusion
[1460, 1498, 8]"] - 227["Sweep Extrusion
[1536, 1575, 8]"] - 228["Sweep Extrusion
[1536, 1575, 8]"] - 229["Sweep Extrusion
[1536, 1575, 8]"] - 230["Sweep Extrusion
[2022, 2046, 8]"] - 231["Sweep Extrusion
[2088, 2112, 8]"] - 232["Sweep Extrusion
[2596, 2620, 8]"] - 233["Sweep Extrusion
[2596, 2620, 8]"] - 234["Sweep Extrusion
[2596, 2620, 8]"] - 235["Sweep Extrusion
[3156, 3180, 8]"] - 236["Sweep Extrusion
[3156, 3180, 8]"] - 237["Sweep Sweep
[3888, 3915, 8]"] - 238["Sweep Sweep
[3888, 3915, 8]"] + 4["Plane
[1077, 1144, 0]"] + 5["Plane
[1223, 1290, 0]"] + 6["Plane
[334, 354, 8]"] + 7["Plane
[334, 354, 8]"] + 8["Plane
[3807, 3842, 8]"] + 9["Plane
[3807, 3842, 8]"] + 10["Plane
[3873, 3902, 8]"] + 11["Plane
[3873, 3902, 8]"] + 12["StartSketchOnPlane
[2700, 2720, 8]"] + 13["StartSketchOnPlane
[1737, 1757, 8]"] + 14["StartSketchOnPlane
[3258, 3278, 8]"] + 15["StartSketchOnPlane
[1737, 1757, 8]"] + 16["StartSketchOnPlane
[334, 354, 8]"] + 17["StartSketchOnPlane
[3470, 3490, 8]"] + 18["StartSketchOnPlane
[3470, 3490, 8]"] + 19["StartSketchOnPlane
[334, 354, 8]"] + 20["StartSketchOnPlane
[334, 354, 8]"] + 21["StartSketchOnPlane
[3258, 3278, 8]"] + 22["StartSketchOnPlane
[334, 354, 8]"] + 23["StartSketchOnPlane
[2189, 2209, 8]"] + 224["Sweep Extrusion
[1462, 1500, 8]"] + 225["Sweep Extrusion
[1462, 1500, 8]"] + 226["Sweep Extrusion
[1462, 1500, 8]"] + 227["Sweep Extrusion
[1538, 1577, 8]"] + 228["Sweep Extrusion
[1538, 1577, 8]"] + 229["Sweep Extrusion
[1538, 1577, 8]"] + 230["Sweep Extrusion
[2034, 2058, 8]"] + 231["Sweep Extrusion
[2108, 2132, 8]"] + 232["Sweep Extrusion
[2618, 2642, 8]"] + 233["Sweep Extrusion
[2618, 2642, 8]"] + 234["Sweep Extrusion
[2618, 2642, 8]"] + 235["Sweep Extrusion
[3180, 3204, 8]"] + 236["Sweep Extrusion
[3180, 3204, 8]"] + 237["Sweep Sweep
[3924, 3951, 8]"] + 238["Sweep Sweep
[3924, 3951, 8]"] 239[Wall] 240[Wall] 241[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/bench/ast.snap b/rust/kcl-lib/tests/kcl_samples/bench/ast.snap index 55c770099..5bf496b5b 100644 --- a/rust/kcl-lib/tests/kcl_samples/bench/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/bench/ast.snap @@ -526,17 +526,247 @@ description: Result of parsing bench.kcl "expression": { "arguments": [ { - "arguments": [ - { - "type": "LabeledArg", - "label": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "benchLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "connector", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offset", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "benchLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "commentStart": 0, "end": 0, - "name": "offset", + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "offsetPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "YZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + }, + "preComments": [ + "", + "", + "// Create the connectors to join the dividers" + ], + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "benchLength", "start": 0, "type": "Identifier" }, - "arg": { + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "dividerThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seatSlats", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offset", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, "left": { @@ -579,54 +809,78 @@ description: Result of parsing bench.kcl "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "dividerThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "offsetPlane", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "YZ", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" } - }, - { + ], + "callee": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "benchLength", + "name": "offsetPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "YZ", "start": 0, "type": "Identifier" }, @@ -635,241 +889,7 @@ description: Result of parsing bench.kcl "type": "Name", "type": "Name" } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "connector", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "preComments": [ - "", - "", - "// Create the connectors to join the dividers" - ], - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "offset", - "start": 0, - "type": "Identifier" - }, - "arg": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "benchLength", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "dividerThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "offsetPlane", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "YZ", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "benchLength", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "dividerThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "seatSlats", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" + } }, "preComments": [ "", @@ -886,182 +906,54 @@ description: Result of parsing bench.kcl "expression": { "arguments": [ { - "arguments": [ - { - "type": "LabeledArg", - "label": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "name": "offset", + "name": "benchLength", "start": 0, "type": "Identifier" }, - "arg": { + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "benchLength", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "dividerThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, + "name": "dividerThickness", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "offsetPlane", + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "YZ", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" } - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "benchLength", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "dividerThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" } ], "callee": { @@ -1082,8 +974,146 @@ description: Result of parsing bench.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offset", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "benchLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "dividerThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "offsetPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "YZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } }, "preComments": [ "", @@ -1100,56 +1130,50 @@ description: Result of parsing bench.kcl "expression": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "YZ", + "name": "offset", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "arg": { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "benchLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "benchLength", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -1170,8 +1194,24 @@ description: Result of parsing bench.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "YZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, "preComments": [ "", @@ -1188,64 +1228,58 @@ description: Result of parsing bench.kcl "expression": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "YZ", + "name": "offset", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "benchLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "benchLength", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -1266,8 +1300,24 @@ description: Result of parsing bench.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "YZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, "start": 0, "type": "ExpressionStatement", diff --git a/rust/kcl-lib/tests/kcl_samples/bench/ops.snap b/rust/kcl-lib/tests/kcl_samples/bench/ops.snap index 5446674ad..46787e6d8 100644 --- a/rust/kcl-lib/tests/kcl_samples/bench/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/bench/ops.snap @@ -111,8 +111,31 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "connector", "functionSourceRange": [], - "unlabeledArg": null, - "labeledArgs": {} + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "labeledArgs": { + "length": { + "value": { + "type": "Number", + "value": 56.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -152,8 +175,31 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "seatSlats", "functionSourceRange": [], - "unlabeledArg": null, - "labeledArgs": {} + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "labeledArgs": { + "length": { + "value": { + "type": "Number", + "value": 60.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -193,8 +239,31 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "backSlats", "functionSourceRange": [], - "unlabeledArg": null, - "labeledArgs": {} + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "labeledArgs": { + "length": { + "value": { + "type": "Number", + "value": 60.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -234,8 +303,31 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "armRest", "functionSourceRange": [], - "unlabeledArg": null, - "labeledArgs": {} + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "labeledArgs": { + "offset": { + "value": { + "type": "Number", + "value": 28.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -245,8 +337,31 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "armRest", "functionSourceRange": [], - "unlabeledArg": null, - "labeledArgs": {} + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "labeledArgs": { + "offset": { + "value": { + "type": "Number", + "value": -28.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -928,8 +1043,49 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "connectorSketch", "functionSourceRange": [], - "unlabeledArg": null, - "labeledArgs": {} + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "labeledArgs": { + "start": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": -12.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 8.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -971,8 +1127,49 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "connectorSketch", "functionSourceRange": [], - "unlabeledArg": null, - "labeledArgs": {} + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "labeledArgs": { + "start": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 16.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 8.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -1300,8 +1497,31 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "armRestProfile", "functionSourceRange": [], - "unlabeledArg": null, - "labeledArgs": {} + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "labeledArgs": { + "offset": { + "value": { + "type": "Number", + "value": -28.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -1311,8 +1531,31 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "armRestProfile", "functionSourceRange": [], - "unlabeledArg": null, - "labeledArgs": {} + "unlabeledArg": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "labeledArgs": { + "offset": { + "value": { + "type": "Number", + "value": 28.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/car-wheel-assembly/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/car-wheel-assembly/artifact_graph_flowchart.snap.md index 7bfdcf81c..c783af76a 100644 --- a/rust/kcl-lib/tests/kcl_samples/car-wheel-assembly/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/car-wheel-assembly/artifact_graph_flowchart.snap.md @@ -67,31 +67,31 @@ flowchart LR 149[Solid2d] end subgraph path21 [Path] - 21["Path
[4279, 4374, 8]"] - 60["Segment
[4380, 4413, 8]"] - 61["Segment
[4419, 4470, 8]"] - 62["Segment
[4476, 4509, 8]"] - 63["Segment
[4515, 4565, 8]"] - 64["Segment
[4571, 4612, 8]"] - 65["Segment
[4618, 4667, 8]"] - 66["Segment
[4673, 4706, 8]"] - 67["Segment
[4712, 4746, 8]"] - 68["Segment
[4752, 4786, 8]"] - 69["Segment
[4792, 4844, 8]"] - 70["Segment
[4850, 4884, 8]"] - 71["Segment
[4890, 4966, 8]"] - 72["Segment
[4972, 5005, 8]"] - 73["Segment
[5011, 5087, 8]"] - 74["Segment
[5093, 5127, 8]"] - 75["Segment
[5133, 5207, 8]"] - 76["Segment
[5213, 5247, 8]"] - 77["Segment
[5253, 5304, 8]"] - 78["Segment
[5310, 5372, 8]"] - 79["Segment
[5378, 5429, 8]"] - 80["Segment
[5435, 5469, 8]"] - 81["Segment
[5475, 5508, 8]"] - 82["Segment
[5514, 5547, 8]"] - 83["Segment
[5553, 5560, 8]"] + 21["Path
[4361, 4456, 8]"] + 60["Segment
[4462, 4495, 8]"] + 61["Segment
[4501, 4552, 8]"] + 62["Segment
[4558, 4591, 8]"] + 63["Segment
[4597, 4647, 8]"] + 64["Segment
[4653, 4694, 8]"] + 65["Segment
[4700, 4749, 8]"] + 66["Segment
[4755, 4788, 8]"] + 67["Segment
[4794, 4828, 8]"] + 68["Segment
[4834, 4868, 8]"] + 69["Segment
[4874, 4926, 8]"] + 70["Segment
[4932, 4966, 8]"] + 71["Segment
[4972, 5048, 8]"] + 72["Segment
[5054, 5087, 8]"] + 73["Segment
[5093, 5169, 8]"] + 74["Segment
[5175, 5209, 8]"] + 75["Segment
[5215, 5289, 8]"] + 76["Segment
[5295, 5329, 8]"] + 77["Segment
[5335, 5386, 8]"] + 78["Segment
[5392, 5454, 8]"] + 79["Segment
[5460, 5511, 8]"] + 80["Segment
[5517, 5551, 8]"] + 81["Segment
[5557, 5590, 8]"] + 82["Segment
[5596, 5629, 8]"] + 83["Segment
[5635, 5642, 8]"] 158[Solid2d] end subgraph path22 [Path] @@ -204,7 +204,7 @@ flowchart LR 3["Plane
[2084, 2101, 8]"] 4["Plane
[2860, 2883, 8]"] 5["Plane
[2860, 2883, 8]"] - 6["Plane
[4256, 4273, 8]"] + 6["Plane
[4338, 4355, 8]"] 7["Plane
[548, 565, 10]"] 8["Plane
[488, 505, 11]"] 9["Plane
[659, 685, 12]"] @@ -225,7 +225,7 @@ flowchart LR 177["Sweep Revolve
[2416, 2433, 8]"] 178["Sweep Extrusion
[3799, 3845, 8]"] 179["Sweep Extrusion
[3799, 3845, 8]"] - 180["Sweep Revolve
[5566, 5583, 8]"] + 180["Sweep Revolve
[5648, 5665, 8]"] 181["Sweep Extrusion
[631, 687, 10]"] 182["Sweep Extrusion
[881, 943, 10]"] 183["Sweep Extrusion
[1198, 1277, 10]"] diff --git a/rust/kcl-lib/tests/kcl_samples/color-cube/ast.snap b/rust/kcl-lib/tests/kcl_samples/color-cube/ast.snap index fe4e47391..d4f37a9bb 100644 --- a/rust/kcl-lib/tests/kcl_samples/color-cube/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/color-cube/ast.snap @@ -1636,29 +1636,49 @@ description: Result of parsing color-cube.kcl "expression": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "bluePlane", + "name": "profile", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "bluePlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "raw": "'#0000FF'", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": "#0000FF" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "'#0000FF'", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": "#0000FF" + } } ], "callee": { @@ -1679,8 +1699,9 @@ description: Result of parsing color-cube.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "preComments": [ "", @@ -1697,29 +1718,49 @@ description: Result of parsing color-cube.kcl "expression": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "yellowPlane", + "name": "profile", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "yellowPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "raw": "'#FFFF00'", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": "#FFFF00" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "'#FFFF00'", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": "#FFFF00" + } } ], "callee": { @@ -1740,8 +1781,9 @@ description: Result of parsing color-cube.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -1753,29 +1795,49 @@ description: Result of parsing color-cube.kcl "expression": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "greenPlane", + "name": "profile", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "greenPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "raw": "'#00FF00'", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": "#00FF00" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "'#00FF00'", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": "#00FF00" + } } ], "callee": { @@ -1796,8 +1858,9 @@ description: Result of parsing color-cube.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -1809,29 +1872,49 @@ description: Result of parsing color-cube.kcl "expression": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "redPlane", + "name": "profile", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "redPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "raw": "'#FF0000'", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": "#FF0000" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "'#FF0000'", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": "#FF0000" + } } ], "callee": { @@ -1852,8 +1935,9 @@ description: Result of parsing color-cube.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -1865,29 +1949,49 @@ description: Result of parsing color-cube.kcl "expression": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "tealPlane", + "name": "profile", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "tealPlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "raw": "'#00FFFF'", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": "#00FFFF" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "'#00FFFF'", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": "#00FFFF" + } } ], "callee": { @@ -1908,8 +2012,9 @@ description: Result of parsing color-cube.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -1921,29 +2026,49 @@ description: Result of parsing color-cube.kcl "expression": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "purplePlane", + "name": "profile", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "purplePlane", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "raw": "'#FF00FF'", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": "#FF00FF" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "'#FF00FF'", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": "#FF00FF" + } } ], "callee": { @@ -1964,8 +2089,9 @@ description: Result of parsing color-cube.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", diff --git a/rust/kcl-lib/tests/kcl_samples/color-cube/ops.snap b/rust/kcl-lib/tests/kcl_samples/color-cube/ops.snap index 34ebf684e..1e1efa4bc 100644 --- a/rust/kcl-lib/tests/kcl_samples/color-cube/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/color-cube/ops.snap @@ -382,7 +382,22 @@ description: Operations executed color-cube.kcl "name": "sketchRectangle", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#0000FF" + }, + "sourceRange": [] + }, + "profile": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -393,7 +408,22 @@ description: Operations executed color-cube.kcl "name": "sketchRectangle", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#FFFF00" + }, + "sourceRange": [] + }, + "profile": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -404,7 +434,22 @@ description: Operations executed color-cube.kcl "name": "sketchRectangle", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#00FF00" + }, + "sourceRange": [] + }, + "profile": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -415,7 +460,22 @@ description: Operations executed color-cube.kcl "name": "sketchRectangle", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#FF0000" + }, + "sourceRange": [] + }, + "profile": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -426,7 +486,22 @@ description: Operations executed color-cube.kcl "name": "sketchRectangle", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#00FFFF" + }, + "sourceRange": [] + }, + "profile": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -437,7 +512,22 @@ description: Operations executed color-cube.kcl "name": "sketchRectangle", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#FF00FF" + }, + "sourceRange": [] + }, + "profile": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/artifact_graph_flowchart.snap.md index e83796570..f524cb9b5 100644 --- a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/artifact_graph_flowchart.snap.md @@ -1,54 +1,54 @@ ```mermaid flowchart LR subgraph path7 [Path] - 7["Path
[644, 834, 0]"] - 13["Segment
[844, 928, 0]"] - 16["Segment
[938, 990, 0]"] - 17["Segment
[1000, 1047, 0]"] - 19["Segment
[1057, 1109, 0]"] - 21["Segment
[1119, 1166, 0]"] - 23["Segment
[1176, 1241, 0]"] - 27["Segment
[1251, 1259, 0]"] + 7["Path
[645, 835, 0]"] + 13["Segment
[845, 929, 0]"] + 16["Segment
[939, 991, 0]"] + 17["Segment
[1001, 1048, 0]"] + 19["Segment
[1058, 1110, 0]"] + 21["Segment
[1120, 1167, 0]"] + 23["Segment
[1177, 1242, 0]"] + 27["Segment
[1252, 1260, 0]"] 31[Solid2d] end subgraph path8 [Path] - 8["Path
[644, 834, 0]"] - 26["Segment
[1251, 1259, 0]"] + 8["Path
[645, 835, 0]"] + 26["Segment
[1252, 1260, 0]"] 32[Solid2d] end subgraph path9 [Path] - 9["Path
[644, 834, 0]"] - 14["Segment
[844, 928, 0]"] - 15["Segment
[938, 990, 0]"] - 18["Segment
[1000, 1047, 0]"] - 20["Segment
[1057, 1109, 0]"] - 22["Segment
[1119, 1166, 0]"] - 24["Segment
[1176, 1241, 0]"] - 25["Segment
[1251, 1259, 0]"] + 9["Path
[645, 835, 0]"] + 14["Segment
[845, 929, 0]"] + 15["Segment
[939, 991, 0]"] + 18["Segment
[1001, 1048, 0]"] + 20["Segment
[1058, 1110, 0]"] + 22["Segment
[1120, 1167, 0]"] + 24["Segment
[1177, 1242, 0]"] + 25["Segment
[1252, 1260, 0]"] 36[Solid2d] end subgraph path10 [Path] - 10["Path
[1287, 1337, 0]"] - 29["Segment
[1287, 1337, 0]"] + 10["Path
[1288, 1338, 0]"] + 29["Segment
[1288, 1338, 0]"] 33[Solid2d] end subgraph path11 [Path] - 11["Path
[1287, 1337, 0]"] - 30["Segment
[1287, 1337, 0]"] + 11["Path
[1288, 1338, 0]"] + 30["Segment
[1288, 1338, 0]"] 34[Solid2d] end subgraph path12 [Path] - 12["Path
[1287, 1337, 0]"] - 28["Segment
[1287, 1337, 0]"] + 12["Path
[1288, 1338, 0]"] + 28["Segment
[1288, 1338, 0]"] 35[Solid2d] end - 1["Plane
[600, 633, 0]"] - 2["Plane
[600, 633, 0]"] - 3["Plane
[600, 633, 0]"] - 4["StartSketchOnPlane
[586, 634, 0]"] - 5["StartSketchOnPlane
[586, 634, 0]"] - 6["StartSketchOnPlane
[586, 634, 0]"] - 37["Sweep Loft
[1464, 1553, 0]"] + 1["Plane
[601, 634, 0]"] + 2["Plane
[601, 634, 0]"] + 3["Plane
[601, 634, 0]"] + 4["StartSketchOnPlane
[587, 635, 0]"] + 5["StartSketchOnPlane
[587, 635, 0]"] + 6["StartSketchOnPlane
[587, 635, 0]"] + 37["Sweep Loft
[1465, 1554, 0]"] 38[Wall] 39[Wall] 40[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap index f8d92cbb6..e476b1877 100644 --- a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap @@ -1436,7 +1436,8 @@ description: Result of parsing cycloidal-gear.kcl "name": "gHeight", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, @@ -1760,60 +1761,100 @@ description: Result of parsing cycloidal-gear.kcl "expression": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": ".3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.3, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.5, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.297", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.297, - "suffix": "None" - } - }, - { - "argument": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "raw": "80", + "name": "gearPitch", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": ".3", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 80.0, + "value": 0.3, "suffix": "None" } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "gearHeight", + "start": 0, + "type": "Identifier" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.5, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "holeDiameter", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.297", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.297, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "helixAngle", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "80", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 80.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } } ], "callee": { @@ -1834,8 +1875,9 @@ description: Result of parsing cycloidal-gear.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "preComments": [ "", diff --git a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap index 70a1f6793..720703856 100644 --- a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap @@ -419,7 +419,72 @@ description: Operations executed cycloidal-gear.kcl "name": "cycloidalGear", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "gearHeight": { + "value": { + "type": "Number", + "value": 1.5, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "gearPitch": { + "value": { + "type": "Number", + "value": 0.3, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "helixAngle": { + "value": { + "type": "Number", + "value": -80.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "holeDiameter": { + "value": { + "type": "Number", + "value": 0.297, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/dodecahedron/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/dodecahedron/artifact_graph_flowchart.snap.md index b9cd50cee..295b778fe 100644 --- a/rust/kcl-lib/tests/kcl_samples/dodecahedron/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/dodecahedron/artifact_graph_flowchart.snap.md @@ -1,136 +1,136 @@ ```mermaid flowchart LR subgraph path13 [Path] - 13["Path
[496, 547, 0]"] - 31["Segment
[555, 606, 0]"] - 38["Segment
[614, 664, 0]"] - 59["Segment
[672, 723, 0]"] - 67["Segment
[731, 738, 0]"] + 13["Path
[497, 548, 0]"] + 31["Segment
[556, 607, 0]"] + 38["Segment
[615, 665, 0]"] + 59["Segment
[673, 724, 0]"] + 67["Segment
[732, 739, 0]"] 73[Solid2d] end subgraph path14 [Path] - 14["Path
[496, 547, 0]"] - 27["Segment
[555, 606, 0]"] - 45["Segment
[614, 664, 0]"] - 50["Segment
[672, 723, 0]"] - 65["Segment
[731, 738, 0]"] + 14["Path
[497, 548, 0]"] + 27["Segment
[556, 607, 0]"] + 45["Segment
[615, 665, 0]"] + 50["Segment
[673, 724, 0]"] + 65["Segment
[732, 739, 0]"] 74[Solid2d] end subgraph path15 [Path] - 15["Path
[496, 547, 0]"] - 32["Segment
[555, 606, 0]"] - 48["Segment
[614, 664, 0]"] - 51["Segment
[672, 723, 0]"] - 71["Segment
[731, 738, 0]"] + 15["Path
[497, 548, 0]"] + 32["Segment
[556, 607, 0]"] + 48["Segment
[615, 665, 0]"] + 51["Segment
[673, 724, 0]"] + 71["Segment
[732, 739, 0]"] 75[Solid2d] end subgraph path16 [Path] - 16["Path
[496, 547, 0]"] - 29["Segment
[555, 606, 0]"] - 40["Segment
[614, 664, 0]"] - 56["Segment
[672, 723, 0]"] - 69["Segment
[731, 738, 0]"] + 16["Path
[497, 548, 0]"] + 29["Segment
[556, 607, 0]"] + 40["Segment
[615, 665, 0]"] + 56["Segment
[673, 724, 0]"] + 69["Segment
[732, 739, 0]"] 76[Solid2d] end subgraph path17 [Path] - 17["Path
[496, 547, 0]"] - 26["Segment
[555, 606, 0]"] - 44["Segment
[614, 664, 0]"] - 52["Segment
[672, 723, 0]"] - 63["Segment
[731, 738, 0]"] + 17["Path
[497, 548, 0]"] + 26["Segment
[556, 607, 0]"] + 44["Segment
[615, 665, 0]"] + 52["Segment
[673, 724, 0]"] + 63["Segment
[732, 739, 0]"] 77[Solid2d] end subgraph path18 [Path] - 18["Path
[496, 547, 0]"] - 28["Segment
[555, 606, 0]"] - 47["Segment
[614, 664, 0]"] - 58["Segment
[672, 723, 0]"] - 64["Segment
[731, 738, 0]"] + 18["Path
[497, 548, 0]"] + 28["Segment
[556, 607, 0]"] + 47["Segment
[615, 665, 0]"] + 58["Segment
[673, 724, 0]"] + 64["Segment
[732, 739, 0]"] 78[Solid2d] end subgraph path19 [Path] - 19["Path
[496, 547, 0]"] - 35["Segment
[555, 606, 0]"] - 41["Segment
[614, 664, 0]"] - 57["Segment
[672, 723, 0]"] - 66["Segment
[731, 738, 0]"] + 19["Path
[497, 548, 0]"] + 35["Segment
[556, 607, 0]"] + 41["Segment
[615, 665, 0]"] + 57["Segment
[673, 724, 0]"] + 66["Segment
[732, 739, 0]"] 79[Solid2d] end subgraph path20 [Path] - 20["Path
[496, 547, 0]"] - 34["Segment
[555, 606, 0]"] - 42["Segment
[614, 664, 0]"] - 55["Segment
[672, 723, 0]"] - 68["Segment
[731, 738, 0]"] + 20["Path
[497, 548, 0]"] + 34["Segment
[556, 607, 0]"] + 42["Segment
[615, 665, 0]"] + 55["Segment
[673, 724, 0]"] + 68["Segment
[732, 739, 0]"] 80[Solid2d] end subgraph path21 [Path] - 21["Path
[496, 547, 0]"] - 30["Segment
[555, 606, 0]"] - 39["Segment
[614, 664, 0]"] - 60["Segment
[672, 723, 0]"] - 70["Segment
[731, 738, 0]"] + 21["Path
[497, 548, 0]"] + 30["Segment
[556, 607, 0]"] + 39["Segment
[615, 665, 0]"] + 60["Segment
[673, 724, 0]"] + 70["Segment
[732, 739, 0]"] 81[Solid2d] end subgraph path22 [Path] - 22["Path
[496, 547, 0]"] - 25["Segment
[555, 606, 0]"] - 46["Segment
[614, 664, 0]"] - 54["Segment
[672, 723, 0]"] - 72["Segment
[731, 738, 0]"] + 22["Path
[497, 548, 0]"] + 25["Segment
[556, 607, 0]"] + 46["Segment
[615, 665, 0]"] + 54["Segment
[673, 724, 0]"] + 72["Segment
[732, 739, 0]"] 82[Solid2d] end subgraph path23 [Path] - 23["Path
[496, 547, 0]"] - 36["Segment
[555, 606, 0]"] - 37["Segment
[614, 664, 0]"] - 49["Segment
[672, 723, 0]"] - 62["Segment
[731, 738, 0]"] + 23["Path
[497, 548, 0]"] + 36["Segment
[556, 607, 0]"] + 37["Segment
[615, 665, 0]"] + 49["Segment
[673, 724, 0]"] + 62["Segment
[732, 739, 0]"] 83[Solid2d] end subgraph path24 [Path] - 24["Path
[496, 547, 0]"] - 33["Segment
[555, 606, 0]"] - 43["Segment
[614, 664, 0]"] - 53["Segment
[672, 723, 0]"] - 61["Segment
[731, 738, 0]"] + 24["Path
[497, 548, 0]"] + 33["Segment
[556, 607, 0]"] + 43["Segment
[615, 665, 0]"] + 53["Segment
[673, 724, 0]"] + 61["Segment
[732, 739, 0]"] 84[Solid2d] end - 1["Plane
[471, 488, 0]"] - 2["Plane
[471, 488, 0]"] - 3["Plane
[471, 488, 0]"] - 4["Plane
[471, 488, 0]"] - 5["Plane
[471, 488, 0]"] - 6["Plane
[471, 488, 0]"] - 7["Plane
[471, 488, 0]"] - 8["Plane
[471, 488, 0]"] - 9["Plane
[471, 488, 0]"] - 10["Plane
[471, 488, 0]"] - 11["Plane
[471, 488, 0]"] - 12["Plane
[471, 488, 0]"] - 85["Sweep Extrusion
[752, 802, 0]"] - 86["Sweep Extrusion
[752, 802, 0]"] - 87["Sweep Extrusion
[752, 802, 0]"] - 88["Sweep Extrusion
[752, 802, 0]"] - 89["Sweep Extrusion
[752, 802, 0]"] - 90["Sweep Extrusion
[752, 802, 0]"] - 91["Sweep Extrusion
[752, 802, 0]"] - 92["Sweep Extrusion
[752, 802, 0]"] - 93["Sweep Extrusion
[752, 802, 0]"] - 94["Sweep Extrusion
[752, 802, 0]"] - 95["Sweep Extrusion
[752, 802, 0]"] - 96["Sweep Extrusion
[752, 802, 0]"] - 97["CompositeSolid Intersect
[1997, 2027, 0]"] - 98["CompositeSolid Intersect
[1997, 2027, 0]"] - 99["CompositeSolid Intersect
[1997, 2027, 0]"] - 100["CompositeSolid Intersect
[1997, 2027, 0]"] - 101["CompositeSolid Intersect
[1997, 2027, 0]"] - 102["CompositeSolid Intersect
[1997, 2027, 0]"] - 103["CompositeSolid Intersect
[1997, 2027, 0]"] - 104["CompositeSolid Intersect
[1997, 2027, 0]"] - 105["CompositeSolid Intersect
[1997, 2027, 0]"] - 106["CompositeSolid Intersect
[1997, 2027, 0]"] - 107["CompositeSolid Intersect
[1997, 2027, 0]"] + 1["Plane
[472, 489, 0]"] + 2["Plane
[472, 489, 0]"] + 3["Plane
[472, 489, 0]"] + 4["Plane
[472, 489, 0]"] + 5["Plane
[472, 489, 0]"] + 6["Plane
[472, 489, 0]"] + 7["Plane
[472, 489, 0]"] + 8["Plane
[472, 489, 0]"] + 9["Plane
[472, 489, 0]"] + 10["Plane
[472, 489, 0]"] + 11["Plane
[472, 489, 0]"] + 12["Plane
[472, 489, 0]"] + 85["Sweep Extrusion
[753, 803, 0]"] + 86["Sweep Extrusion
[753, 803, 0]"] + 87["Sweep Extrusion
[753, 803, 0]"] + 88["Sweep Extrusion
[753, 803, 0]"] + 89["Sweep Extrusion
[753, 803, 0]"] + 90["Sweep Extrusion
[753, 803, 0]"] + 91["Sweep Extrusion
[753, 803, 0]"] + 92["Sweep Extrusion
[753, 803, 0]"] + 93["Sweep Extrusion
[753, 803, 0]"] + 94["Sweep Extrusion
[753, 803, 0]"] + 95["Sweep Extrusion
[753, 803, 0]"] + 96["Sweep Extrusion
[753, 803, 0]"] + 97["CompositeSolid Intersect
[2000, 2030, 0]"] + 98["CompositeSolid Intersect
[2000, 2030, 0]"] + 99["CompositeSolid Intersect
[2000, 2030, 0]"] + 100["CompositeSolid Intersect
[2000, 2030, 0]"] + 101["CompositeSolid Intersect
[2000, 2030, 0]"] + 102["CompositeSolid Intersect
[2000, 2030, 0]"] + 103["CompositeSolid Intersect
[2000, 2030, 0]"] + 104["CompositeSolid Intersect
[2000, 2030, 0]"] + 105["CompositeSolid Intersect
[2000, 2030, 0]"] + 106["CompositeSolid Intersect
[2000, 2030, 0]"] + 107["CompositeSolid Intersect
[2000, 2030, 0]"] 108[Wall] 109[Wall] 110[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/dodecahedron/ast.snap b/rust/kcl-lib/tests/kcl_samples/dodecahedron/ast.snap index 58b8b5562..af524641d 100644 --- a/rust/kcl-lib/tests/kcl_samples/dodecahedron/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/dodecahedron/ast.snap @@ -943,7 +943,8 @@ description: Result of parsing dodecahedron.kcl "name": "dither", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, @@ -2501,7 +2502,8 @@ description: Result of parsing dodecahedron.kcl "name": "arr", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, @@ -2963,7 +2965,8 @@ description: Result of parsing dodecahedron.kcl "name": "solids", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/enclosure/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/enclosure/artifact_graph_flowchart.snap.md index cb12580a7..c55bad230 100644 --- a/rust/kcl-lib/tests/kcl_samples/enclosure/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/enclosure/artifact_graph_flowchart.snap.md @@ -10,117 +10,117 @@ flowchart LR 67[Solid2d] end subgraph path9 [Path] - 9["Path
[1597, 1680, 0]"] - 33["Segment
[1597, 1680, 0]"] + 9["Path
[1598, 1681, 0]"] + 33["Segment
[1598, 1681, 0]"] 59[Solid2d] end subgraph path10 [Path] - 10["Path
[1597, 1680, 0]"] - 32["Segment
[1597, 1680, 0]"] + 10["Path
[1598, 1681, 0]"] + 32["Segment
[1598, 1681, 0]"] 60[Solid2d] end subgraph path11 [Path] - 11["Path
[1597, 1680, 0]"] - 34["Segment
[1597, 1680, 0]"] + 11["Path
[1598, 1681, 0]"] + 34["Segment
[1598, 1681, 0]"] 66[Solid2d] end subgraph path12 [Path] - 12["Path
[1597, 1680, 0]"] - 35["Segment
[1597, 1680, 0]"] + 12["Path
[1598, 1681, 0]"] + 35["Segment
[1598, 1681, 0]"] 75[Solid2d] end subgraph path13 [Path] - 13["Path
[1706, 1773, 0]"] - 37["Segment
[1706, 1773, 0]"] + 13["Path
[1707, 1774, 0]"] + 37["Segment
[1707, 1774, 0]"] 62[Solid2d] end subgraph path14 [Path] - 14["Path
[1706, 1773, 0]"] - 36["Segment
[1706, 1773, 0]"] + 14["Path
[1707, 1774, 0]"] + 36["Segment
[1707, 1774, 0]"] 70[Solid2d] end subgraph path15 [Path] - 15["Path
[1706, 1773, 0]"] - 39["Segment
[1706, 1773, 0]"] + 15["Path
[1707, 1774, 0]"] + 39["Segment
[1707, 1774, 0]"] 72[Solid2d] end subgraph path16 [Path] - 16["Path
[1706, 1773, 0]"] - 38["Segment
[1706, 1773, 0]"] + 16["Path
[1707, 1774, 0]"] + 38["Segment
[1707, 1774, 0]"] 73[Solid2d] end subgraph path17 [Path] - 17["Path
[2341, 2376, 0]"] - 40["Segment
[2382, 2448, 0]"] - 41["Segment
[2454, 2553, 0]"] - 42["Segment
[2559, 2676, 0]"] - 43["Segment
[2682, 2767, 0]"] - 44["Segment
[2773, 2780, 0]"] + 17["Path
[2342, 2377, 0]"] + 40["Segment
[2383, 2449, 0]"] + 41["Segment
[2455, 2554, 0]"] + 42["Segment
[2560, 2677, 0]"] + 43["Segment
[2683, 2768, 0]"] + 44["Segment
[2774, 2781, 0]"] 63[Solid2d] end subgraph path18 [Path] - 18["Path
[2804, 2960, 0]"] - 45["Segment
[2804, 2960, 0]"] + 18["Path
[2805, 2961, 0]"] + 45["Segment
[2805, 2961, 0]"] 74[Solid2d] end subgraph path19 [Path] - 19["Path
[2985, 3152, 0]"] - 46["Segment
[2985, 3152, 0]"] + 19["Path
[2986, 3153, 0]"] + 46["Segment
[2986, 3153, 0]"] 76[Solid2d] end subgraph path20 [Path] - 20["Path
[3177, 3335, 0]"] - 47["Segment
[3177, 3335, 0]"] + 20["Path
[3178, 3336, 0]"] + 47["Segment
[3178, 3336, 0]"] 64[Solid2d] end subgraph path21 [Path] - 21["Path
[3360, 3529, 0]"] - 48["Segment
[3360, 3529, 0]"] + 21["Path
[3361, 3530, 0]"] + 48["Segment
[3361, 3530, 0]"] 61[Solid2d] end subgraph path22 [Path] - 22["Path
[3972, 4056, 0]"] - 49["Segment
[4062, 4150, 0]"] - 50["Segment
[4156, 4277, 0]"] - 51["Segment
[4283, 4400, 0]"] - 52["Segment
[4406, 4491, 0]"] - 53["Segment
[4497, 4504, 0]"] + 22["Path
[3973, 4057, 0]"] + 49["Segment
[4063, 4151, 0]"] + 50["Segment
[4157, 4278, 0]"] + 51["Segment
[4284, 4401, 0]"] + 52["Segment
[4407, 4492, 0]"] + 53["Segment
[4498, 4505, 0]"] 65[Solid2d] end subgraph path23 [Path] - 23["Path
[4528, 4700, 0]"] - 54["Segment
[4528, 4700, 0]"] + 23["Path
[4529, 4701, 0]"] + 54["Segment
[4529, 4701, 0]"] 58[Solid2d] end subgraph path24 [Path] - 24["Path
[4725, 4908, 0]"] - 55["Segment
[4725, 4908, 0]"] + 24["Path
[4726, 4909, 0]"] + 55["Segment
[4726, 4909, 0]"] 71[Solid2d] end subgraph path25 [Path] - 25["Path
[4933, 5107, 0]"] - 56["Segment
[4933, 5107, 0]"] + 25["Path
[4934, 5108, 0]"] + 56["Segment
[4934, 5108, 0]"] 68[Solid2d] end subgraph path26 [Path] - 26["Path
[5132, 5317, 0]"] - 57["Segment
[5132, 5317, 0]"] + 26["Path
[5133, 5318, 0]"] + 57["Segment
[5133, 5318, 0]"] 69[Solid2d] end 1["Plane
[264, 281, 0]"] - 2["Plane
[1566, 1589, 0]"] - 3["Plane
[1566, 1589, 0]"] - 4["Plane
[1566, 1589, 0]"] - 5["Plane
[1566, 1589, 0]"] - 6["Plane
[2318, 2335, 0]"] - 7["StartSketchOnFace
[3929, 3966, 0]"] + 2["Plane
[1567, 1590, 0]"] + 3["Plane
[1567, 1590, 0]"] + 4["Plane
[1567, 1590, 0]"] + 5["Plane
[1567, 1590, 0]"] + 6["Plane
[2319, 2336, 0]"] + 7["StartSketchOnFace
[3930, 3967, 0]"] 77["Sweep Extrusion
[730, 765, 0]"] - 78["Sweep Extrusion
[1790, 1841, 0]"] - 79["Sweep Extrusion
[1790, 1841, 0]"] - 80["Sweep Extrusion
[1790, 1841, 0]"] - 81["Sweep Extrusion
[1790, 1841, 0]"] - 82["Sweep Extrusion
[3544, 3586, 0]"] - 83["Sweep Extrusion
[5332, 5374, 0]"] + 78["Sweep Extrusion
[1791, 1842, 0]"] + 79["Sweep Extrusion
[1791, 1842, 0]"] + 80["Sweep Extrusion
[1791, 1842, 0]"] + 81["Sweep Extrusion
[1791, 1842, 0]"] + 82["Sweep Extrusion
[3545, 3587, 0]"] + 83["Sweep Extrusion
[5333, 5375, 0]"] 84[Wall] 85[Wall] 86[Wall] @@ -187,14 +187,14 @@ flowchart LR 147["EdgeCut Fillet
[771, 1053, 0]"] 148["EdgeCut Fillet
[771, 1053, 0]"] 149["EdgeCut Fillet
[771, 1053, 0]"] - 150["EdgeCut Fillet
[3592, 3874, 0]"] - 151["EdgeCut Fillet
[3592, 3874, 0]"] - 152["EdgeCut Fillet
[3592, 3874, 0]"] - 153["EdgeCut Fillet
[3592, 3874, 0]"] - 154["EdgeCut Fillet
[5380, 5662, 0]"] - 155["EdgeCut Fillet
[5380, 5662, 0]"] - 156["EdgeCut Fillet
[5380, 5662, 0]"] - 157["EdgeCut Fillet
[5380, 5662, 0]"] + 150["EdgeCut Fillet
[3593, 3875, 0]"] + 151["EdgeCut Fillet
[3593, 3875, 0]"] + 152["EdgeCut Fillet
[3593, 3875, 0]"] + 153["EdgeCut Fillet
[3593, 3875, 0]"] + 154["EdgeCut Fillet
[5381, 5663, 0]"] + 155["EdgeCut Fillet
[5381, 5663, 0]"] + 156["EdgeCut Fillet
[5381, 5663, 0]"] + 157["EdgeCut Fillet
[5381, 5663, 0]"] 1 --- 8 2 --- 9 2 --- 14 diff --git a/rust/kcl-lib/tests/kcl_samples/enclosure/ast.snap b/rust/kcl-lib/tests/kcl_samples/enclosure/ast.snap index ca6cbd65a..3c4839dd4 100644 --- a/rust/kcl-lib/tests/kcl_samples/enclosure/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/enclosure/ast.snap @@ -2143,7 +2143,8 @@ description: Result of parsing enclosure.kcl "name": "originStart", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/enclosure/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/enclosure/program_memory.snap index 3cb92e862..a5da9d76e 100644 --- a/rust/kcl-lib/tests/kcl_samples/enclosure/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/enclosure/program_memory.snap @@ -354,9 +354,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2426, - "end": 2447, - "start": 2426, + "commentStart": 2427, + "end": 2448, + "start": 2427, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -367,9 +367,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2531, - "end": 2552, - "start": 2531, + "commentStart": 2532, + "end": 2553, + "start": 2532, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -380,9 +380,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2654, - "end": 2675, - "start": 2654, + "commentStart": 2655, + "end": 2676, + "start": 2655, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -393,9 +393,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2745, - "end": 2766, - "start": 2745, + "commentStart": 2746, + "end": 2767, + "start": 2746, "type": "TagDeclarator", "value": "rectangleSegmentD002" }, @@ -416,9 +416,9 @@ description: Variables in memory after executing enclosure.kcl 0.0 ], "tag": { - "commentStart": 2426, - "end": 2447, - "start": 2426, + "commentStart": 2427, + "end": 2448, + "start": 2427, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -441,9 +441,9 @@ description: Variables in memory after executing enclosure.kcl 0.0 ], "tag": { - "commentStart": 2531, - "end": 2552, - "start": 2531, + "commentStart": 2532, + "end": 2553, + "start": 2532, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -466,9 +466,9 @@ description: Variables in memory after executing enclosure.kcl 175.0 ], "tag": { - "commentStart": 2654, - "end": 2675, - "start": 2654, + "commentStart": 2655, + "end": 2676, + "start": 2655, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -491,9 +491,9 @@ description: Variables in memory after executing enclosure.kcl 175.0 ], "tag": { - "commentStart": 2745, - "end": 2766, - "start": 2745, + "commentStart": 2746, + "end": 2767, + "start": 2746, "type": "TagDeclarator", "value": "rectangleSegmentD002" }, @@ -693,9 +693,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4128, - "end": 4149, - "start": 4128, + "commentStart": 4129, + "end": 4150, + "start": 4129, "type": "TagDeclarator", "value": "rectangleSegmentA003" }, @@ -706,9 +706,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4255, - "end": 4276, - "start": 4255, + "commentStart": 4256, + "end": 4277, + "start": 4256, "type": "TagDeclarator", "value": "rectangleSegmentB003" }, @@ -719,9 +719,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4378, - "end": 4399, - "start": 4378, + "commentStart": 4379, + "end": 4400, + "start": 4379, "type": "TagDeclarator", "value": "rectangleSegmentC003" }, @@ -732,9 +732,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4469, - "end": 4490, - "start": 4469, + "commentStart": 4470, + "end": 4491, + "start": 4470, "type": "TagDeclarator", "value": "rectangleSegmentD003" }, @@ -755,9 +755,9 @@ description: Variables in memory after executing enclosure.kcl 3.0 ], "tag": { - "commentStart": 4128, - "end": 4149, - "start": 4128, + "commentStart": 4129, + "end": 4150, + "start": 4129, "type": "TagDeclarator", "value": "rectangleSegmentA003" }, @@ -780,9 +780,9 @@ description: Variables in memory after executing enclosure.kcl 3.0 ], "tag": { - "commentStart": 4255, - "end": 4276, - "start": 4255, + "commentStart": 4256, + "end": 4277, + "start": 4256, "type": "TagDeclarator", "value": "rectangleSegmentB003" }, @@ -805,9 +805,9 @@ description: Variables in memory after executing enclosure.kcl 172.0 ], "tag": { - "commentStart": 4378, - "end": 4399, - "start": 4378, + "commentStart": 4379, + "end": 4400, + "start": 4379, "type": "TagDeclarator", "value": "rectangleSegmentC003" }, @@ -830,9 +830,9 @@ description: Variables in memory after executing enclosure.kcl 172.0 ], "tag": { - "commentStart": 4469, - "end": 4490, - "start": 4469, + "commentStart": 4470, + "end": 4491, + "start": 4470, "type": "TagDeclarator", "value": "rectangleSegmentD003" }, @@ -896,9 +896,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2426, - "end": 2447, - "start": 2426, + "commentStart": 2427, + "end": 2448, + "start": 2427, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -909,9 +909,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2531, - "end": 2552, - "start": 2531, + "commentStart": 2532, + "end": 2553, + "start": 2532, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -922,9 +922,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2654, - "end": 2675, - "start": 2654, + "commentStart": 2655, + "end": 2676, + "start": 2655, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -935,9 +935,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2745, - "end": 2766, - "start": 2745, + "commentStart": 2746, + "end": 2767, + "start": 2746, "type": "TagDeclarator", "value": "rectangleSegmentD002" }, @@ -958,9 +958,9 @@ description: Variables in memory after executing enclosure.kcl 0.0 ], "tag": { - "commentStart": 2426, - "end": 2447, - "start": 2426, + "commentStart": 2427, + "end": 2448, + "start": 2427, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -983,9 +983,9 @@ description: Variables in memory after executing enclosure.kcl 0.0 ], "tag": { - "commentStart": 2531, - "end": 2552, - "start": 2531, + "commentStart": 2532, + "end": 2553, + "start": 2532, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -1008,9 +1008,9 @@ description: Variables in memory after executing enclosure.kcl 175.0 ], "tag": { - "commentStart": 2654, - "end": 2675, - "start": 2654, + "commentStart": 2655, + "end": 2676, + "start": 2655, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -1033,9 +1033,9 @@ description: Variables in memory after executing enclosure.kcl 175.0 ], "tag": { - "commentStart": 2745, - "end": 2766, - "start": 2745, + "commentStart": 2746, + "end": 2767, + "start": 2746, "type": "TagDeclarator", "value": "rectangleSegmentD002" }, @@ -1668,9 +1668,9 @@ description: Variables in memory after executing enclosure.kcl 0.0 ], "tag": { - "commentStart": 2426, - "end": 2447, - "start": 2426, + "commentStart": 2427, + "end": 2448, + "start": 2427, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -1693,9 +1693,9 @@ description: Variables in memory after executing enclosure.kcl 0.0 ], "tag": { - "commentStart": 2531, - "end": 2552, - "start": 2531, + "commentStart": 2532, + "end": 2553, + "start": 2532, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -1718,9 +1718,9 @@ description: Variables in memory after executing enclosure.kcl 175.0 ], "tag": { - "commentStart": 2654, - "end": 2675, - "start": 2654, + "commentStart": 2655, + "end": 2676, + "start": 2655, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -1743,9 +1743,9 @@ description: Variables in memory after executing enclosure.kcl 175.0 ], "tag": { - "commentStart": 2745, - "end": 2766, - "start": 2745, + "commentStart": 2746, + "end": 2767, + "start": 2746, "type": "TagDeclarator", "value": "rectangleSegmentD002" }, @@ -1867,9 +1867,9 @@ description: Variables in memory after executing enclosure.kcl 3.0 ], "tag": { - "commentStart": 4128, - "end": 4149, - "start": 4128, + "commentStart": 4129, + "end": 4150, + "start": 4129, "type": "TagDeclarator", "value": "rectangleSegmentA003" }, @@ -1892,9 +1892,9 @@ description: Variables in memory after executing enclosure.kcl 3.0 ], "tag": { - "commentStart": 4255, - "end": 4276, - "start": 4255, + "commentStart": 4256, + "end": 4277, + "start": 4256, "type": "TagDeclarator", "value": "rectangleSegmentB003" }, @@ -1917,9 +1917,9 @@ description: Variables in memory after executing enclosure.kcl 172.0 ], "tag": { - "commentStart": 4378, - "end": 4399, - "start": 4378, + "commentStart": 4379, + "end": 4400, + "start": 4379, "type": "TagDeclarator", "value": "rectangleSegmentC003" }, @@ -1942,9 +1942,9 @@ description: Variables in memory after executing enclosure.kcl 172.0 ], "tag": { - "commentStart": 4469, - "end": 4490, - "start": 4469, + "commentStart": 4470, + "end": 4491, + "start": 4470, "type": "TagDeclarator", "value": "rectangleSegmentD003" }, @@ -2008,9 +2008,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2426, - "end": 2447, - "start": 2426, + "commentStart": 2427, + "end": 2448, + "start": 2427, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -2021,9 +2021,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2531, - "end": 2552, - "start": 2531, + "commentStart": 2532, + "end": 2553, + "start": 2532, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -2034,9 +2034,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2654, - "end": 2675, - "start": 2654, + "commentStart": 2655, + "end": 2676, + "start": 2655, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -2047,9 +2047,9 @@ description: Variables in memory after executing enclosure.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2745, - "end": 2766, - "start": 2745, + "commentStart": 2746, + "end": 2767, + "start": 2746, "type": "TagDeclarator", "value": "rectangleSegmentD002" }, @@ -2070,9 +2070,9 @@ description: Variables in memory after executing enclosure.kcl 0.0 ], "tag": { - "commentStart": 2426, - "end": 2447, - "start": 2426, + "commentStart": 2427, + "end": 2448, + "start": 2427, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -2095,9 +2095,9 @@ description: Variables in memory after executing enclosure.kcl 0.0 ], "tag": { - "commentStart": 2531, - "end": 2552, - "start": 2531, + "commentStart": 2532, + "end": 2553, + "start": 2532, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -2120,9 +2120,9 @@ description: Variables in memory after executing enclosure.kcl 175.0 ], "tag": { - "commentStart": 2654, - "end": 2675, - "start": 2654, + "commentStart": 2655, + "end": 2676, + "start": 2655, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -2145,9 +2145,9 @@ description: Variables in memory after executing enclosure.kcl 175.0 ], "tag": { - "commentStart": 2745, - "end": 2766, - "start": 2745, + "commentStart": 2746, + "end": 2767, + "start": 2746, "type": "TagDeclarator", "value": "rectangleSegmentD002" }, diff --git a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/artifact_graph_flowchart.snap.md index e9badc19a..e21d5f637 100644 --- a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/artifact_graph_flowchart.snap.md @@ -73,64 +73,64 @@ flowchart LR 100[Solid2d] end subgraph path22 [Path] - 22["Path
[1667, 1702, 0]"] - 59["Segment
[1708, 1742, 0]"] - 60["Segment
[1748, 1787, 0]"] - 61["Segment
[1793, 1831, 0]"] - 62["Segment
[1837, 1876, 0]"] - 63["Segment
[1882, 1916, 0]"] - 64["Segment
[1922, 1965, 0]"] - 65["Segment
[1971, 2004, 0]"] - 66["Segment
[2010, 2049, 0]"] - 67["Segment
[2055, 2094, 0]"] - 68["Segment
[2100, 2139, 0]"] - 69["Segment
[2145, 2188, 0]"] - 70["Segment
[2194, 2245, 0]"] - 71["Segment
[2251, 2295, 0]"] - 72["Segment
[2301, 2340, 0]"] - 73["Segment
[2346, 2384, 0]"] - 74["Segment
[2390, 2455, 0]"] - 75["Segment
[2461, 2468, 0]"] + 22["Path
[1923, 1958, 0]"] + 59["Segment
[1964, 1998, 0]"] + 60["Segment
[2004, 2043, 0]"] + 61["Segment
[2049, 2087, 0]"] + 62["Segment
[2093, 2132, 0]"] + 63["Segment
[2138, 2172, 0]"] + 64["Segment
[2178, 2221, 0]"] + 65["Segment
[2227, 2260, 0]"] + 66["Segment
[2266, 2305, 0]"] + 67["Segment
[2311, 2350, 0]"] + 68["Segment
[2356, 2395, 0]"] + 69["Segment
[2401, 2444, 0]"] + 70["Segment
[2450, 2501, 0]"] + 71["Segment
[2507, 2551, 0]"] + 72["Segment
[2557, 2596, 0]"] + 73["Segment
[2602, 2640, 0]"] + 74["Segment
[2646, 2711, 0]"] + 75["Segment
[2717, 2724, 0]"] 96[Solid2d] end subgraph path23 [Path] - 23["Path
[2553, 2626, 0]"] - 76["Segment
[2553, 2626, 0]"] + 23["Path
[2809, 2882, 0]"] + 76["Segment
[2809, 2882, 0]"] 86[Solid2d] end subgraph path24 [Path] - 24["Path
[2651, 2724, 0]"] - 77["Segment
[2651, 2724, 0]"] + 24["Path
[2907, 2980, 0]"] + 77["Segment
[2907, 2980, 0]"] 98[Solid2d] end subgraph path25 [Path] - 25["Path
[2749, 2822, 0]"] - 78["Segment
[2749, 2822, 0]"] + 25["Path
[3005, 3078, 0]"] + 78["Segment
[3005, 3078, 0]"] 85[Solid2d] end subgraph path26 [Path] - 26["Path
[2847, 2920, 0]"] - 79["Segment
[2847, 2920, 0]"] + 26["Path
[3103, 3176, 0]"] + 79["Segment
[3103, 3176, 0]"] 94[Solid2d] end subgraph path27 [Path] - 27["Path
[2984, 3123, 0]"] - 80["Segment
[2984, 3123, 0]"] + 27["Path
[3240, 3379, 0]"] + 80["Segment
[3240, 3379, 0]"] 87[Solid2d] end subgraph path28 [Path] - 28["Path
[3148, 3285, 0]"] - 81["Segment
[3148, 3285, 0]"] + 28["Path
[3404, 3541, 0]"] + 81["Segment
[3404, 3541, 0]"] 99[Solid2d] end subgraph path29 [Path] - 29["Path
[3310, 3457, 0]"] - 82["Segment
[3310, 3457, 0]"] + 29["Path
[3566, 3713, 0]"] + 82["Segment
[3566, 3713, 0]"] 90[Solid2d] end subgraph path30 [Path] - 30["Path
[3482, 3628, 0]"] - 83["Segment
[3482, 3628, 0]"] + 30["Path
[3738, 3884, 0]"] + 83["Segment
[3738, 3884, 0]"] 97[Solid2d] end 1["Plane
[702, 727, 0]"] @@ -141,12 +141,12 @@ flowchart LR 6["Plane
[1152, 1169, 0]"] 7["Plane
[1152, 1169, 0]"] 8["Plane
[1152, 1169, 0]"] - 9["Plane
[1644, 1661, 0]"] + 9["Plane
[1900, 1917, 0]"] 101["Sweep Sweep
[1352, 1375, 0]"] 102["Sweep Sweep
[1352, 1375, 0]"] 103["Sweep Sweep
[1352, 1375, 0]"] 104["Sweep Sweep
[1352, 1375, 0]"] - 105["Sweep Extrusion
[3681, 3710, 0]"] + 105["Sweep Extrusion
[3937, 3966, 0]"] 106[Wall] 107[Wall] 108[Wall] @@ -217,10 +217,10 @@ flowchart LR 173["SweepEdge Adjacent"] 174["SweepEdge Adjacent"] 175["SweepEdge Adjacent"] - 176["EdgeCut Fillet
[3716, 3850, 0]"] - 177["EdgeCut Fillet
[3716, 3850, 0]"] - 178["EdgeCut Fillet
[3856, 3990, 0]"] - 179["EdgeCut Fillet
[3856, 3990, 0]"] + 176["EdgeCut Fillet
[3972, 4106, 0]"] + 177["EdgeCut Fillet
[3972, 4106, 0]"] + 178["EdgeCut Fillet
[4112, 4246, 0]"] + 179["EdgeCut Fillet
[4112, 4246, 0]"] 1 --- 11 2 --- 10 3 --- 13 diff --git a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap index 294891695..41a010275 100644 --- a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap @@ -1717,63 +1717,113 @@ description: Result of parsing exhaust-manifold.kcl "expression": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "n", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle001", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length001", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 6.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length002", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length003", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } } ], @@ -1795,8 +1845,9 @@ description: Result of parsing exhaust-manifold.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "preComments": [ "", @@ -1813,63 +1864,113 @@ description: Result of parsing exhaust-manifold.kcl "expression": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "n", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle001", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length001", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 6.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length002", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length003", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } } ], @@ -1891,8 +1992,9 @@ description: Result of parsing exhaust-manifold.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -1904,63 +2006,113 @@ description: Result of parsing exhaust-manifold.kcl "expression": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "n", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "24.3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 24.3, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle001", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "24.3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 24.3, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length001", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length002", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length003", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } } } ], @@ -1982,8 +2134,9 @@ description: Result of parsing exhaust-manifold.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -1995,63 +2148,113 @@ description: Result of parsing exhaust-manifold.kcl "expression": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "n", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "25.2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 25.2, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angle001", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "25.2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 25.2, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length001", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length002", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length003", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } } } ], @@ -2073,8 +2276,9 @@ description: Result of parsing exhaust-manifold.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", diff --git a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap index 8b8aca410..98e45cf55 100644 --- a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap @@ -1086,7 +1086,88 @@ description: Operations executed exhaust-manifold.kcl "name": "primaryTube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "angle001": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length001": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length002": { + "value": { + "type": "Number", + "value": 6.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length003": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "n": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -1097,7 +1178,88 @@ description: Operations executed exhaust-manifold.kcl "name": "primaryTube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "angle001": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length001": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length002": { + "value": { + "type": "Number", + "value": 6.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length003": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "n": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -1108,7 +1270,88 @@ description: Operations executed exhaust-manifold.kcl "name": "primaryTube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "angle001": { + "value": { + "type": "Number", + "value": 24.3, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length001": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length002": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length003": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "n": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -1119,7 +1362,88 @@ description: Operations executed exhaust-manifold.kcl "name": "primaryTube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "angle001": { + "value": { + "type": "Number", + "value": 25.2, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length001": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length002": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "length003": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "n": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/program_memory.snap index c1bc78139..5e2167296 100644 --- a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/program_memory.snap @@ -28,9 +28,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1735, - "end": 1741, - "start": 1735, + "commentStart": 1991, + "end": 1997, + "start": 1991, "type": "TagDeclarator", "value": "seg01" }, @@ -62,9 +62,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1909, - "end": 1915, - "start": 1909, + "commentStart": 2165, + "end": 2171, + "start": 2165, "type": "TagDeclarator", "value": "seg03" }, @@ -75,9 +75,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1958, - "end": 1964, - "start": 1958, + "commentStart": 2214, + "end": 2220, + "start": 2214, "type": "TagDeclarator", "value": "seg04" }, @@ -88,9 +88,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1997, - "end": 2003, - "start": 1997, + "commentStart": 2253, + "end": 2259, + "start": 2253, "type": "TagDeclarator", "value": "seg05" }, @@ -122,9 +122,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2181, - "end": 2187, - "start": 2181, + "commentStart": 2437, + "end": 2443, + "start": 2437, "type": "TagDeclarator", "value": "seg07" }, @@ -135,9 +135,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2238, - "end": 2244, - "start": 2238, + "commentStart": 2494, + "end": 2500, + "start": 2494, "type": "TagDeclarator", "value": "seg08" }, @@ -148,9 +148,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2288, - "end": 2294, - "start": 2288, + "commentStart": 2544, + "end": 2550, + "start": 2544, "type": "TagDeclarator", "value": "seg09" }, @@ -192,9 +192,9 @@ description: Variables in memory after executing exhaust-manifold.kcl -1.25 ], "tag": { - "commentStart": 1735, - "end": 1741, - "start": 1735, + "commentStart": 1991, + "end": 1997, + "start": 1991, "type": "TagDeclarator", "value": "seg01" }, @@ -289,9 +289,9 @@ description: Variables in memory after executing exhaust-manifold.kcl -1.25 ], "tag": { - "commentStart": 1909, - "end": 1915, - "start": 1909, + "commentStart": 2165, + "end": 2171, + "start": 2165, "type": "TagDeclarator", "value": "seg03" }, @@ -314,9 +314,9 @@ description: Variables in memory after executing exhaust-manifold.kcl -1.25 ], "tag": { - "commentStart": 1958, - "end": 1964, - "start": 1958, + "commentStart": 2214, + "end": 2220, + "start": 2214, "type": "TagDeclarator", "value": "seg04" }, @@ -339,9 +339,9 @@ description: Variables in memory after executing exhaust-manifold.kcl 1.35 ], "tag": { - "commentStart": 1997, - "end": 2003, - "start": 1997, + "commentStart": 2253, + "end": 2259, + "start": 2253, "type": "TagDeclarator", "value": "seg05" }, @@ -436,9 +436,9 @@ description: Variables in memory after executing exhaust-manifold.kcl 1.35 ], "tag": { - "commentStart": 2181, - "end": 2187, - "start": 2181, + "commentStart": 2437, + "end": 2443, + "start": 2437, "type": "TagDeclarator", "value": "seg07" }, @@ -461,9 +461,9 @@ description: Variables in memory after executing exhaust-manifold.kcl 1.35 ], "tag": { - "commentStart": 2238, - "end": 2244, - "start": 2238, + "commentStart": 2494, + "end": 2500, + "start": 2494, "type": "TagDeclarator", "value": "seg08" }, @@ -486,9 +486,9 @@ description: Variables in memory after executing exhaust-manifold.kcl -1.25 ], "tag": { - "commentStart": 2288, - "end": 2294, - "start": 2288, + "commentStart": 2544, + "end": 2550, + "start": 2544, "type": "TagDeclarator", "value": "seg09" }, diff --git a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/artifact_graph_flowchart.snap.md index 220914521..19175abde 100644 --- a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/artifact_graph_flowchart.snap.md @@ -1,68 +1,68 @@ ```mermaid flowchart LR subgraph path6 [Path] - 6["Path
[1234, 1272, 0]"] - 13["Segment
[1280, 1330, 0]"] - 14["Segment
[1338, 1387, 0]"] - 15["Segment
[1395, 1447, 0]"] - 16["Segment
[1455, 1503, 0]"] - 17["Segment
[1511, 1555, 0]"] - 18["Segment
[1563, 1608, 0]"] - 19["Segment
[1616, 1665, 0]"] - 20["Segment
[1673, 1692, 0]"] + 6["Path
[813, 851, 0]"] + 13["Segment
[859, 909, 0]"] + 14["Segment
[917, 966, 0]"] + 15["Segment
[974, 1026, 0]"] + 16["Segment
[1034, 1082, 0]"] + 17["Segment
[1090, 1134, 0]"] + 18["Segment
[1142, 1187, 0]"] + 19["Segment
[1195, 1244, 0]"] + 20["Segment
[1252, 1271, 0]"] 42[Solid2d] end subgraph path7 [Path] - 7["Path
[2383, 2437, 0]"] - 21["Segment
[2443, 2496, 0]"] - 22["Segment
[2502, 2552, 0]"] - 23["Segment
[2558, 2612, 0]"] - 24["Segment
[2618, 2638, 0]"] + 7["Path
[1974, 2028, 0]"] + 21["Segment
[2034, 2087, 0]"] + 22["Segment
[2093, 2143, 0]"] + 23["Segment
[2149, 2203, 0]"] + 24["Segment
[2209, 2229, 0]"] 38[Solid2d] end subgraph path8 [Path] - 8["Path
[2662, 2825, 0]"] - 25["Segment
[2662, 2825, 0]"] + 8["Path
[2253, 2416, 0]"] + 25["Segment
[2253, 2416, 0]"] 40[Solid2d] end subgraph path9 [Path] - 9["Path
[3207, 3262, 0]"] - 26["Segment
[3268, 3322, 0]"] - 27["Segment
[3328, 3378, 0]"] - 28["Segment
[3384, 3437, 0]"] - 29["Segment
[3443, 3463, 0]"] + 9["Path
[2798, 2853, 0]"] + 26["Segment
[2859, 2913, 0]"] + 27["Segment
[2919, 2969, 0]"] + 28["Segment
[2975, 3028, 0]"] + 29["Segment
[3034, 3054, 0]"] 39[Solid2d] end subgraph path10 [Path] - 10["Path
[3487, 3653, 0]"] - 30["Segment
[3487, 3653, 0]"] + 10["Path
[3078, 3244, 0]"] + 30["Segment
[3078, 3244, 0]"] 43[Solid2d] end subgraph path11 [Path] - 11["Path
[4233, 4274, 0]"] - 31["Segment
[4280, 4300, 0]"] - 32["Segment
[4306, 4329, 0]"] - 33["Segment
[4335, 4342, 0]"] + 11["Path
[3824, 3865, 0]"] + 31["Segment
[3871, 3891, 0]"] + 32["Segment
[3897, 3920, 0]"] + 33["Segment
[3926, 3933, 0]"] 41[Solid2d] end subgraph path12 [Path] - 12["Path
[4457, 4497, 0]"] - 34["Segment
[4503, 4523, 0]"] - 35["Segment
[4529, 4550, 0]"] - 36["Segment
[4556, 4577, 0]"] - 37["Segment
[4583, 4590, 0]"] + 12["Path
[4048, 4088, 0]"] + 34["Segment
[4094, 4114, 0]"] + 35["Segment
[4120, 4141, 0]"] + 36["Segment
[4147, 4168, 0]"] + 37["Segment
[4174, 4181, 0]"] 44[Solid2d] end - 1["Plane
[1199, 1226, 0]"] - 2["Plane
[2354, 2377, 0]"] - 3["Plane
[3178, 3201, 0]"] - 4["Plane
[4204, 4227, 0]"] - 5["Plane
[4428, 4451, 0]"] - 45["Sweep Extrusion
[1800, 1834, 0]"] - 46["Sweep Extrusion
[2832, 2857, 0]"] - 47["Sweep Extrusion
[3660, 3685, 0]"] - 48["Sweep Extrusion
[4348, 4376, 0]"] - 49["Sweep Extrusion
[4596, 4624, 0]"] + 1["Plane
[778, 805, 0]"] + 2["Plane
[1945, 1968, 0]"] + 3["Plane
[2769, 2792, 0]"] + 4["Plane
[3795, 3818, 0]"] + 5["Plane
[4019, 4042, 0]"] + 45["Sweep Extrusion
[1391, 1425, 0]"] + 46["Sweep Extrusion
[2423, 2448, 0]"] + 47["Sweep Extrusion
[3251, 3276, 0]"] + 48["Sweep Extrusion
[3939, 3967, 0]"] + 49["Sweep Extrusion
[4187, 4215, 0]"] 50[Wall] 51[Wall] 52[Wall] @@ -142,14 +142,14 @@ flowchart LR 126["SweepEdge Adjacent"] 127["SweepEdge Adjacent"] 128["SweepEdge Adjacent"] - 129["EdgeCut Fillet
[1840, 2099, 0]"] - 130["EdgeCut Fillet
[1840, 2099, 0]"] - 131["EdgeCut Fillet
[1840, 2099, 0]"] - 132["EdgeCut Fillet
[1840, 2099, 0]"] - 133["EdgeCut Fillet
[2863, 3008, 0]"] - 134["EdgeCut Fillet
[2863, 3008, 0]"] - 135["EdgeCut Fillet
[3691, 3836, 0]"] - 136["EdgeCut Fillet
[3691, 3836, 0]"] + 129["EdgeCut Fillet
[1431, 1690, 0]"] + 130["EdgeCut Fillet
[1431, 1690, 0]"] + 131["EdgeCut Fillet
[1431, 1690, 0]"] + 132["EdgeCut Fillet
[1431, 1690, 0]"] + 133["EdgeCut Fillet
[2454, 2599, 0]"] + 134["EdgeCut Fillet
[2454, 2599, 0]"] + 135["EdgeCut Fillet
[3282, 3427, 0]"] + 136["EdgeCut Fillet
[3282, 3427, 0]"] 1 --- 6 2 --- 7 2 --- 8 diff --git a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ast.snap b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ast.snap index 6126a74e1..dfb05b962 100644 --- a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ast.snap @@ -305,1020 +305,6 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "type": "VariableDeclaration", "type": "VariableDeclaration" }, - { - "commentStart": 0, - "declaration": { - "commentStart": 0, - "end": 0, - "id": { - "commentStart": 0, - "end": 0, - "name": "rectShape", - "start": 0, - "type": "Identifier" - }, - "init": { - "body": { - "body": [ - { - "commentStart": 0, - "declaration": { - "commentStart": 0, - "end": 0, - "id": { - "commentStart": 0, - "end": 0, - "name": "rr", - "start": 0, - "type": "Identifier" - }, - "init": { - "body": [ - { - "arguments": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "XY", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "startSketchOn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "at", - "start": 0, - "type": "Identifier" - }, - "arg": { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "w", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "startProfile", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": null - }, - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "endAbsolute", - "start": 0, - "type": "Identifier" - }, - "arg": { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "w", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "tag", - "start": 0, - "type": "Identifier" - }, - "arg": { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "TagDeclarator", - "type": "TagDeclarator", - "value": "edge01" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "line", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": null - }, - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "endAbsolute", - "start": 0, - "type": "Identifier" - }, - "arg": { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "w", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "tag", - "start": 0, - "type": "Identifier" - }, - "arg": { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "TagDeclarator", - "type": "TagDeclarator", - "value": "edge02" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "line", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": null - }, - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "endAbsolute", - "start": 0, - "type": "Identifier" - }, - "arg": { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "w", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "tag", - "start": 0, - "type": "Identifier" - }, - "arg": { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "TagDeclarator", - "type": "TagDeclarator", - "value": "edge03" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "line", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": null - }, - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "tag", - "start": 0, - "type": "Identifier" - }, - "arg": { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "TagDeclarator", - "type": "TagDeclarator", - "value": "edge04" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "close", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": null - } - ], - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeExpression", - "type": "PipeExpression" - }, - "start": 0, - "type": "VariableDeclarator" - }, - "end": 0, - "kind": "const", - "start": 0, - "type": "VariableDeclaration", - "type": "VariableDeclaration" - }, - { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "rr", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "ReturnStatement", - "type": "ReturnStatement" - } - ], - "commentStart": 0, - "end": 0, - "start": 0 - }, - "commentStart": 0, - "end": 0, - "params": [ - { - "type": "Parameter", - "identifier": { - "commentStart": 0, - "end": 0, - "name": "pos", - "start": 0, - "type": "Identifier" - } - }, - { - "type": "Parameter", - "identifier": { - "commentStart": 0, - "end": 0, - "name": "w", - "start": 0, - "type": "Identifier" - } - }, - { - "type": "Parameter", - "identifier": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - } - } - ], - "start": 0, - "type": "FunctionExpression", - "type": "FunctionExpression" - }, - "start": 0, - "type": "VariableDeclarator" - }, - "end": 0, - "kind": "fn", - "preComments": [ - "", - "", - "// Define a rectangular shape func" - ], - "start": 0, - "type": "VariableDeclaration", - "type": "VariableDeclaration" - }, { "commentStart": 0, "declaration": { @@ -3147,52 +2133,82 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "width", + "name": "w", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "depth", + "name": "d", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "thk", + "name": "t", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "thk", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -3213,8 +2229,9 @@ description: Result of parsing focusrite-scarlett-mounting-bracket.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ops.snap b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ops.snap index 7ca435454..5e03346f3 100644 --- a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ops.snap @@ -202,7 +202,56 @@ description: Operations executed focusrite-scarlett-mounting-bracket.kcl "name": "bracketSketch", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "d": { + "value": { + "type": "Number", + "value": 45.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "t": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "w": { + "value": { + "type": "Number", + "value": 144.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/program_memory.snap index 95ee6572e..4316f42af 100644 --- a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/program_memory.snap @@ -15,9 +15,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1323, - "end": 1329, - "start": 1323, + "commentStart": 902, + "end": 908, + "start": 902, "type": "TagDeclarator", "value": "edge1" }, @@ -28,9 +28,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1380, - "end": 1386, - "start": 1380, + "commentStart": 959, + "end": 965, + "start": 959, "type": "TagDeclarator", "value": "edge2" }, @@ -41,9 +41,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1440, - "end": 1446, - "start": 1440, + "commentStart": 1019, + "end": 1025, + "start": 1019, "type": "TagDeclarator", "value": "edge3" }, @@ -54,9 +54,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1496, - "end": 1502, - "start": 1496, + "commentStart": 1075, + "end": 1081, + "start": 1075, "type": "TagDeclarator", "value": "edge4" }, @@ -67,9 +67,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1548, - "end": 1554, - "start": 1548, + "commentStart": 1127, + "end": 1133, + "start": 1127, "type": "TagDeclarator", "value": "edge5" }, @@ -80,9 +80,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1601, - "end": 1607, - "start": 1601, + "commentStart": 1180, + "end": 1186, + "start": 1180, "type": "TagDeclarator", "value": "edge6" }, @@ -93,9 +93,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1658, - "end": 1664, - "start": 1658, + "commentStart": 1237, + "end": 1243, + "start": 1237, "type": "TagDeclarator", "value": "edge7" }, @@ -106,9 +106,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1685, - "end": 1691, - "start": 1685, + "commentStart": 1264, + "end": 1270, + "start": 1264, "type": "TagDeclarator", "value": "edge8" }, @@ -129,9 +129,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 49.0 ], "tag": { - "commentStart": 1323, - "end": 1329, - "start": 1323, + "commentStart": 902, + "end": 908, + "start": 902, "type": "TagDeclarator", "value": "edge1" }, @@ -154,9 +154,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra -4.0 ], "tag": { - "commentStart": 1380, - "end": 1386, - "start": 1380, + "commentStart": 959, + "end": 965, + "start": 959, "type": "TagDeclarator", "value": "edge2" }, @@ -179,9 +179,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra -4.0 ], "tag": { - "commentStart": 1440, - "end": 1446, - "start": 1440, + "commentStart": 1019, + "end": 1025, + "start": 1019, "type": "TagDeclarator", "value": "edge3" }, @@ -204,9 +204,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 49.0 ], "tag": { - "commentStart": 1496, - "end": 1502, - "start": 1496, + "commentStart": 1075, + "end": 1081, + "start": 1075, "type": "TagDeclarator", "value": "edge4" }, @@ -229,9 +229,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 49.0 ], "tag": { - "commentStart": 1548, - "end": 1554, - "start": 1548, + "commentStart": 1127, + "end": 1133, + "start": 1127, "type": "TagDeclarator", "value": "edge5" }, @@ -254,9 +254,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 0.0 ], "tag": { - "commentStart": 1601, - "end": 1607, - "start": 1601, + "commentStart": 1180, + "end": 1186, + "start": 1180, "type": "TagDeclarator", "value": "edge6" }, @@ -279,9 +279,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 0.0 ], "tag": { - "commentStart": 1658, - "end": 1664, - "start": 1658, + "commentStart": 1237, + "end": 1243, + "start": 1237, "type": "TagDeclarator", "value": "edge7" }, @@ -304,9 +304,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 49.0 ], "tag": { - "commentStart": 1685, - "end": 1691, - "start": 1685, + "commentStart": 1264, + "end": 1270, + "start": 1264, "type": "TagDeclarator", "value": "edge8" }, @@ -691,9 +691,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 49.0 ], "tag": { - "commentStart": 1323, - "end": 1329, - "start": 1323, + "commentStart": 902, + "end": 908, + "start": 902, "type": "TagDeclarator", "value": "edge1" }, @@ -716,9 +716,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra -4.0 ], "tag": { - "commentStart": 1380, - "end": 1386, - "start": 1380, + "commentStart": 959, + "end": 965, + "start": 959, "type": "TagDeclarator", "value": "edge2" }, @@ -741,9 +741,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra -4.0 ], "tag": { - "commentStart": 1440, - "end": 1446, - "start": 1440, + "commentStart": 1019, + "end": 1025, + "start": 1019, "type": "TagDeclarator", "value": "edge3" }, @@ -766,9 +766,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 49.0 ], "tag": { - "commentStart": 1496, - "end": 1502, - "start": 1496, + "commentStart": 1075, + "end": 1081, + "start": 1075, "type": "TagDeclarator", "value": "edge4" }, @@ -791,9 +791,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 49.0 ], "tag": { - "commentStart": 1548, - "end": 1554, - "start": 1548, + "commentStart": 1127, + "end": 1133, + "start": 1127, "type": "TagDeclarator", "value": "edge5" }, @@ -816,9 +816,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 0.0 ], "tag": { - "commentStart": 1601, - "end": 1607, - "start": 1601, + "commentStart": 1180, + "end": 1186, + "start": 1180, "type": "TagDeclarator", "value": "edge6" }, @@ -841,9 +841,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 0.0 ], "tag": { - "commentStart": 1658, - "end": 1664, - "start": 1658, + "commentStart": 1237, + "end": 1243, + "start": 1237, "type": "TagDeclarator", "value": "edge7" }, @@ -866,9 +866,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 49.0 ], "tag": { - "commentStart": 1685, - "end": 1691, - "start": 1685, + "commentStart": 1264, + "end": 1270, + "start": 1264, "type": "TagDeclarator", "value": "edge8" }, @@ -1103,9 +1103,6 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra } } }, - "rectShape": { - "type": "Function" - }, "retBack": { "type": "Solid", "value": { @@ -1856,9 +1853,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3314, - "end": 3321, - "start": 3314, + "commentStart": 2905, + "end": 2912, + "start": 2905, "type": "TagDeclarator", "value": "edge21" }, @@ -1869,9 +1866,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3370, - "end": 3377, - "start": 3370, + "commentStart": 2961, + "end": 2968, + "start": 2961, "type": "TagDeclarator", "value": "edge22" }, @@ -1882,9 +1879,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3429, - "end": 3436, - "start": 3429, + "commentStart": 3020, + "end": 3027, + "start": 3020, "type": "TagDeclarator", "value": "edge23" }, @@ -1895,9 +1892,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3455, - "end": 3462, - "start": 3455, + "commentStart": 3046, + "end": 3053, + "start": 3046, "type": "TagDeclarator", "value": "edge24" }, @@ -1918,9 +1915,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 44.0 ], "tag": { - "commentStart": 3314, - "end": 3321, - "start": 3314, + "commentStart": 2905, + "end": 2912, + "start": 2905, "type": "TagDeclarator", "value": "edge21" }, @@ -1943,9 +1940,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 35.6667 ], "tag": { - "commentStart": 3370, - "end": 3377, - "start": 3370, + "commentStart": 2961, + "end": 2968, + "start": 2961, "type": "TagDeclarator", "value": "edge22" }, @@ -1968,9 +1965,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 19.0 ], "tag": { - "commentStart": 3429, - "end": 3436, - "start": 3429, + "commentStart": 3020, + "end": 3027, + "start": 3020, "type": "TagDeclarator", "value": "edge23" }, @@ -1993,9 +1990,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 10.6667 ], "tag": { - "commentStart": 3455, - "end": 3462, - "start": 3455, + "commentStart": 3046, + "end": 3053, + "start": 3046, "type": "TagDeclarator", "value": "edge24" }, @@ -2140,9 +2137,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3314, - "end": 3321, - "start": 3314, + "commentStart": 2905, + "end": 2912, + "start": 2905, "type": "TagDeclarator", "value": "edge21" }, @@ -2153,9 +2150,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3370, - "end": 3377, - "start": 3370, + "commentStart": 2961, + "end": 2968, + "start": 2961, "type": "TagDeclarator", "value": "edge22" }, @@ -2166,9 +2163,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3429, - "end": 3436, - "start": 3429, + "commentStart": 3020, + "end": 3027, + "start": 3020, "type": "TagDeclarator", "value": "edge23" }, @@ -2179,9 +2176,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3455, - "end": 3462, - "start": 3455, + "commentStart": 3046, + "end": 3053, + "start": 3046, "type": "TagDeclarator", "value": "edge24" }, @@ -2202,9 +2199,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 44.0 ], "tag": { - "commentStart": 3314, - "end": 3321, - "start": 3314, + "commentStart": 2905, + "end": 2912, + "start": 2905, "type": "TagDeclarator", "value": "edge21" }, @@ -2227,9 +2224,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 35.6667 ], "tag": { - "commentStart": 3370, - "end": 3377, - "start": 3370, + "commentStart": 2961, + "end": 2968, + "start": 2961, "type": "TagDeclarator", "value": "edge22" }, @@ -2252,9 +2249,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 19.0 ], "tag": { - "commentStart": 3429, - "end": 3436, - "start": 3429, + "commentStart": 3020, + "end": 3027, + "start": 3020, "type": "TagDeclarator", "value": "edge23" }, @@ -2277,9 +2274,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 10.6667 ], "tag": { - "commentStart": 3455, - "end": 3462, - "start": 3455, + "commentStart": 3046, + "end": 3053, + "start": 3046, "type": "TagDeclarator", "value": "edge24" }, @@ -2429,9 +2426,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2488, - "end": 2495, - "start": 2488, + "commentStart": 2079, + "end": 2086, + "start": 2079, "type": "TagDeclarator", "value": "edge11" }, @@ -2442,9 +2439,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2544, - "end": 2551, - "start": 2544, + "commentStart": 2135, + "end": 2142, + "start": 2135, "type": "TagDeclarator", "value": "edge12" }, @@ -2455,9 +2452,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2604, - "end": 2611, - "start": 2604, + "commentStart": 2195, + "end": 2202, + "start": 2195, "type": "TagDeclarator", "value": "edge13" }, @@ -2468,9 +2465,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2630, - "end": 2637, - "start": 2630, + "commentStart": 2221, + "end": 2228, + "start": 2221, "type": "TagDeclarator", "value": "edge14" }, @@ -2491,9 +2488,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 44.0 ], "tag": { - "commentStart": 2488, - "end": 2495, - "start": 2488, + "commentStart": 2079, + "end": 2086, + "start": 2079, "type": "TagDeclarator", "value": "edge11" }, @@ -2516,9 +2513,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 35.6667 ], "tag": { - "commentStart": 2544, - "end": 2551, - "start": 2544, + "commentStart": 2135, + "end": 2142, + "start": 2135, "type": "TagDeclarator", "value": "edge12" }, @@ -2541,9 +2538,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 19.0 ], "tag": { - "commentStart": 2604, - "end": 2611, - "start": 2604, + "commentStart": 2195, + "end": 2202, + "start": 2195, "type": "TagDeclarator", "value": "edge13" }, @@ -2566,9 +2563,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 10.6667 ], "tag": { - "commentStart": 2630, - "end": 2637, - "start": 2630, + "commentStart": 2221, + "end": 2228, + "start": 2221, "type": "TagDeclarator", "value": "edge14" }, @@ -2713,9 +2710,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2488, - "end": 2495, - "start": 2488, + "commentStart": 2079, + "end": 2086, + "start": 2079, "type": "TagDeclarator", "value": "edge11" }, @@ -2726,9 +2723,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2544, - "end": 2551, - "start": 2544, + "commentStart": 2135, + "end": 2142, + "start": 2135, "type": "TagDeclarator", "value": "edge12" }, @@ -2739,9 +2736,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2604, - "end": 2611, - "start": 2604, + "commentStart": 2195, + "end": 2202, + "start": 2195, "type": "TagDeclarator", "value": "edge13" }, @@ -2752,9 +2749,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2630, - "end": 2637, - "start": 2630, + "commentStart": 2221, + "end": 2228, + "start": 2221, "type": "TagDeclarator", "value": "edge14" }, @@ -2775,9 +2772,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 44.0 ], "tag": { - "commentStart": 2488, - "end": 2495, - "start": 2488, + "commentStart": 2079, + "end": 2086, + "start": 2079, "type": "TagDeclarator", "value": "edge11" }, @@ -2800,9 +2797,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 35.6667 ], "tag": { - "commentStart": 2544, - "end": 2551, - "start": 2544, + "commentStart": 2135, + "end": 2142, + "start": 2135, "type": "TagDeclarator", "value": "edge12" }, @@ -2825,9 +2822,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 19.0 ], "tag": { - "commentStart": 2604, - "end": 2611, - "start": 2604, + "commentStart": 2195, + "end": 2202, + "start": 2195, "type": "TagDeclarator", "value": "edge13" }, @@ -2850,9 +2847,9 @@ description: Variables in memory after executing focusrite-scarlett-mounting-bra 10.6667 ], "tag": { - "commentStart": 2630, - "end": 2637, - "start": 2630, + "commentStart": 2221, + "end": 2228, + "start": 2221, "type": "TagDeclarator", "value": "edge14" }, diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md index 54e7fbd11..6e8bbf853 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md @@ -46,38 +46,38 @@ flowchart LR 57[Solid2d] end subgraph path11 [Path] - 11["Path
[2744, 2800, 0]"] - 38["Segment
[2806, 2865, 0]"] - 39["Segment
[2871, 2906, 0]"] - 40["Segment
[2912, 2945, 0]"] - 41["Segment
[2951, 3010, 0]"] - 42["Segment
[3016, 3052, 0]"] - 43["Segment
[3058, 3082, 0]"] - 44["Segment
[3088, 3095, 0]"] + 11["Path
[2873, 2929, 0]"] + 38["Segment
[2935, 2994, 0]"] + 39["Segment
[3000, 3035, 0]"] + 40["Segment
[3041, 3074, 0]"] + 41["Segment
[3080, 3139, 0]"] + 42["Segment
[3145, 3181, 0]"] + 43["Segment
[3187, 3211, 0]"] + 44["Segment
[3217, 3224, 0]"] 54[Solid2d] end subgraph path12 [Path] - 12["Path
[3690, 3740, 0]"] - 45["Segment
[3746, 3796, 0]"] - 46["Segment
[3802, 3868, 0]"] - 47["Segment
[3874, 3925, 0]"] - 48["Segment
[3931, 3996, 0]"] - 49["Segment
[4002, 4055, 0]"] - 50["Segment
[4061, 4128, 0]"] - 51["Segment
[4134, 4208, 0]"] - 52["Segment
[4214, 4282, 0]"] - 53["Segment
[4288, 4295, 0]"] + 12["Path
[3819, 3869, 0]"] + 45["Segment
[3875, 3925, 0]"] + 46["Segment
[3931, 3997, 0]"] + 47["Segment
[4003, 4054, 0]"] + 48["Segment
[4060, 4125, 0]"] + 49["Segment
[4131, 4184, 0]"] + 50["Segment
[4190, 4257, 0]"] + 51["Segment
[4263, 4337, 0]"] + 52["Segment
[4343, 4411, 0]"] + 53["Segment
[4417, 4424, 0]"] 55[Solid2d] end 1["Plane
[1379, 1396, 0]"] - 2["Plane
[2641, 2683, 0]"] - 3["Plane
[3616, 3642, 0]"] - 4["StartSketchOnPlane
[2627, 2684, 0]"] - 5["StartSketchOnFace
[4452, 4491, 0]"] - 61["Sweep Extrusion
[2318, 2368, 0]"] - 62["Sweep Extrusion
[3129, 3173, 0]"] - 63["Sweep Extrusion
[4351, 4393, 0]"] - 64["Sweep Extrusion
[4628, 4678, 0]"] + 2["Plane
[2770, 2812, 0]"] + 3["Plane
[3745, 3771, 0]"] + 4["StartSketchOnPlane
[2756, 2813, 0]"] + 5["StartSketchOnFace
[4581, 4620, 0]"] + 61["Sweep Extrusion
[2447, 2497, 0]"] + 62["Sweep Extrusion
[3258, 3302, 0]"] + 63["Sweep Extrusion
[4480, 4522, 0]"] + 64["Sweep Extrusion
[4800, 4850, 0]"] 65[Wall] 66[Wall] 67[Wall] @@ -156,10 +156,10 @@ flowchart LR 140["SweepEdge Adjacent"] 141["SweepEdge Adjacent"] 142["SweepEdge Adjacent"] - 143["EdgeCut Fillet
[2405, 2546, 0]"] - 144["EdgeCut Fillet
[2405, 2546, 0]"] - 145["EdgeCut Fillet
[3216, 3347, 0]"] - 146["EdgeCut Fillet
[3216, 3347, 0]"] + 143["EdgeCut Fillet
[2534, 2675, 0]"] + 144["EdgeCut Fillet
[2534, 2675, 0]"] + 145["EdgeCut Fillet
[3345, 3476, 0]"] + 146["EdgeCut Fillet
[3345, 3476, 0]"] 1 --- 6 1 --- 8 1 --- 9 diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap index 5cd7c5112..ee8461378 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap @@ -2863,118 +2863,158 @@ description: Result of parsing food-service-spatula.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "flipperSketch", + "name": "sketch1", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "flipperSketch", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "start", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "25", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 25.0, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "25", + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 25.0, + "value": 0.0, "suffix": "None" } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "end", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "55", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 55.0, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "55", + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 55.0, + "value": 0.0, "suffix": "None" } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "flipperSlotWidth", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "flipperSlotWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -2995,8 +3035,9 @@ description: Result of parsing food-service-spatula.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -3022,118 +3063,158 @@ description: Result of parsing food-service-spatula.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "flipperSketch", + "name": "sketch1", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "flipperSketch", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "start", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "25", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 25.0, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "25", + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "18", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 25.0, + "value": 18.0, "suffix": "None" } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "18", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 18.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "elements": [ - { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "end", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "55", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 55.0, + "suffix": "None" + } + }, "commentStart": 0, "end": 0, - "raw": "55", + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "19", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 55.0, + "value": 19.0, "suffix": "None" } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "19", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 19.0, - "suffix": "None" } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "flipperSlotWidth", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "flipperSlotWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -3154,8 +3235,9 @@ description: Result of parsing food-service-spatula.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -3186,134 +3268,174 @@ description: Result of parsing food-service-spatula.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "flipperSketch", + "name": "sketch1", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "elements": [ - { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "25", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 25.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "18", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 18.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "elements": [ - { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "55", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 55.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "19", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 19.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "flipperSlotWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "flipperSketch", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "start", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "25", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 25.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "18", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 18.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "end", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "55", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 55.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "19", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 19.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "flipperSlotWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -3334,8 +3456,9 @@ description: Result of parsing food-service-spatula.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -6403,102 +6526,142 @@ description: Result of parsing food-service-spatula.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "holeSketch", + "name": "sketch1", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "200", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 200.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "210", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 210.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "gripSlotWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "holeSketch", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "start", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "200", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 200.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "end", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "210", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 210.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "gripSlotWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -6519,8 +6682,9 @@ description: Result of parsing food-service-spatula.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap index c1e8fac73..c82d647ef 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap @@ -223,7 +223,99 @@ description: Operations executed food-service-spatula.kcl "name": "slot", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "end": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": -55.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "sketch1": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "start": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": -25.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -234,7 +326,99 @@ description: Operations executed food-service-spatula.kcl "name": "slot", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "end": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": -55.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 19.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "sketch1": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "start": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": -25.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 18.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -245,7 +429,99 @@ description: Operations executed food-service-spatula.kcl "name": "slot", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "end": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": -55.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": -19.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "sketch1": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "start": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": -25.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": -18.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -784,7 +1060,99 @@ description: Operations executed food-service-spatula.kcl "name": "slot", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "end": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 210.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "sketch1": { + "value": { + "type": "Face", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "start": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 200.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 8.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap index 7d7ed191f..8f6389f8b 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap @@ -551,9 +551,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4195, - "end": 4207, - "start": 4195, + "commentStart": 4324, + "end": 4336, + "start": 4324, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -713,9 +713,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4195, - "end": 4207, - "start": 4195, + "commentStart": 4324, + "end": 4336, + "start": 4324, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1058,9 +1058,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4195, - "end": 4207, - "start": 4195, + "commentStart": 4324, + "end": 4336, + "start": 4324, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1220,9 +1220,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4195, - "end": 4207, - "start": 4195, + "commentStart": 4324, + "end": 4336, + "start": 4324, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1538,9 +1538,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4195, - "end": 4207, - "start": 4195, + "commentStart": 4324, + "end": 4336, + "start": 4324, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1729,9 +1729,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2847, - "end": 2864, - "start": 2847, + "commentStart": 2976, + "end": 2993, + "start": 2976, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -1756,9 +1756,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2995, - "end": 3009, - "start": 2995, + "commentStart": 3124, + "end": 3138, + "start": 3124, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -1800,9 +1800,9 @@ description: Variables in memory after executing food-service-spatula.kcl 3.5 ], "tag": { - "commentStart": 2847, - "end": 2864, - "start": 2847, + "commentStart": 2976, + "end": 2993, + "start": 2976, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -1863,9 +1863,9 @@ description: Variables in memory after executing food-service-spatula.kcl 91.3213 ], "tag": { - "commentStart": 2995, - "end": 3009, - "start": 2995, + "commentStart": 3124, + "end": 3138, + "start": 3124, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -2211,9 +2211,9 @@ description: Variables in memory after executing food-service-spatula.kcl 3.5 ], "tag": { - "commentStart": 2847, - "end": 2864, - "start": 2847, + "commentStart": 2976, + "end": 2993, + "start": 2976, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -2274,9 +2274,9 @@ description: Variables in memory after executing food-service-spatula.kcl 91.3213 ], "tag": { - "commentStart": 2995, - "end": 3009, - "start": 2995, + "commentStart": 3124, + "end": 3138, + "start": 3124, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -2536,9 +2536,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4195, - "end": 4207, - "start": 4195, + "commentStart": 4324, + "end": 4336, + "start": 4324, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -2698,9 +2698,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4195, - "end": 4207, - "start": 4195, + "commentStart": 4324, + "end": 4336, + "start": 4324, "type": "TagDeclarator", "value": "gripEdgeTop" }, diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/artifact_graph_flowchart.snap.md index 967a84bfe..9a0f43ac2 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/artifact_graph_flowchart.snap.md @@ -1,100 +1,100 @@ ```mermaid flowchart LR subgraph path11 [Path] - 11["Path
[922, 947, 0]"] - 18["Segment
[955, 977, 0]"] - 21["Segment
[985, 1029, 0]"] - 23["Segment
[1037, 1064, 0]"] - 24["Segment
[1072, 1116, 0]"] - 26["Segment
[1124, 1131, 0]"] + 11["Path
[923, 948, 0]"] + 18["Segment
[956, 978, 0]"] + 21["Segment
[986, 1030, 0]"] + 23["Segment
[1038, 1065, 0]"] + 24["Segment
[1073, 1117, 0]"] + 26["Segment
[1125, 1132, 0]"] 74[Solid2d] end subgraph path12 [Path] - 12["Path
[922, 947, 0]"] - 19["Segment
[955, 977, 0]"] - 20["Segment
[985, 1029, 0]"] - 22["Segment
[1037, 1064, 0]"] - 25["Segment
[1072, 1116, 0]"] - 27["Segment
[1124, 1131, 0]"] + 12["Path
[923, 948, 0]"] + 19["Segment
[956, 978, 0]"] + 20["Segment
[986, 1030, 0]"] + 22["Segment
[1038, 1065, 0]"] + 25["Segment
[1073, 1117, 0]"] + 27["Segment
[1125, 1132, 0]"] 77[Solid2d] end subgraph path13 [Path] - 13["Path
[2723, 2810, 0]"] - 28["Segment
[2818, 2897, 0]"] - 30["Segment
[2905, 2970, 0]"] - 32["Segment
[2978, 3060, 0]"] - 34["Segment
[3068, 3114, 0]"] - 37["Segment
[3122, 3201, 0]"] - 38["Segment
[3209, 3276, 0]"] - 40["Segment
[3284, 3363, 0]"] - 42["Segment
[3371, 3417, 0]"] - 44["Segment
[3425, 3507, 0]"] - 46["Segment
[3515, 3583, 0]"] - 49["Segment
[3591, 3670, 0]"] - 50["Segment
[3678, 3743, 0]"] - 52["Segment
[3751, 3833, 0]"] - 55["Segment
[3841, 3909, 0]"] - 56["Segment
[3917, 3999, 0]"] - 59["Segment
[4007, 4056, 0]"] - 61["Segment
[4064, 4071, 0]"] + 13["Path
[2725, 2812, 0]"] + 28["Segment
[2820, 2899, 0]"] + 30["Segment
[2907, 2972, 0]"] + 32["Segment
[2980, 3062, 0]"] + 34["Segment
[3070, 3116, 0]"] + 37["Segment
[3124, 3203, 0]"] + 38["Segment
[3211, 3278, 0]"] + 40["Segment
[3286, 3365, 0]"] + 42["Segment
[3373, 3419, 0]"] + 44["Segment
[3427, 3509, 0]"] + 46["Segment
[3517, 3585, 0]"] + 49["Segment
[3593, 3672, 0]"] + 50["Segment
[3680, 3745, 0]"] + 52["Segment
[3753, 3835, 0]"] + 55["Segment
[3843, 3911, 0]"] + 56["Segment
[3919, 4001, 0]"] + 59["Segment
[4009, 4058, 0]"] + 61["Segment
[4066, 4073, 0]"] 71[Solid2d] end subgraph path14 [Path] - 14["Path
[2723, 2810, 0]"] - 29["Segment
[2818, 2897, 0]"] - 31["Segment
[2905, 2970, 0]"] - 33["Segment
[2978, 3060, 0]"] - 35["Segment
[3068, 3114, 0]"] - 36["Segment
[3122, 3201, 0]"] - 39["Segment
[3209, 3276, 0]"] - 41["Segment
[3284, 3363, 0]"] - 43["Segment
[3371, 3417, 0]"] - 45["Segment
[3425, 3507, 0]"] - 47["Segment
[3515, 3583, 0]"] - 48["Segment
[3591, 3670, 0]"] - 51["Segment
[3678, 3743, 0]"] - 53["Segment
[3751, 3833, 0]"] - 54["Segment
[3841, 3909, 0]"] - 57["Segment
[3917, 3999, 0]"] - 58["Segment
[4007, 4056, 0]"] - 60["Segment
[4064, 4071, 0]"] + 14["Path
[2725, 2812, 0]"] + 29["Segment
[2820, 2899, 0]"] + 31["Segment
[2907, 2972, 0]"] + 33["Segment
[2980, 3062, 0]"] + 35["Segment
[3070, 3116, 0]"] + 36["Segment
[3124, 3203, 0]"] + 39["Segment
[3211, 3278, 0]"] + 41["Segment
[3286, 3365, 0]"] + 43["Segment
[3373, 3419, 0]"] + 45["Segment
[3427, 3509, 0]"] + 47["Segment
[3517, 3585, 0]"] + 48["Segment
[3593, 3672, 0]"] + 51["Segment
[3680, 3745, 0]"] + 53["Segment
[3753, 3835, 0]"] + 54["Segment
[3843, 3911, 0]"] + 57["Segment
[3919, 4001, 0]"] + 58["Segment
[4009, 4058, 0]"] + 60["Segment
[4066, 4073, 0]"] 72[Solid2d] end subgraph path15 [Path] - 15["Path
[4214, 4239, 0]"] - 62["Segment
[4247, 4288, 0]"] - 64["Segment
[4296, 4337, 0]"] - 67["Segment
[4345, 4398, 0]"] - 68["Segment
[4406, 4427, 0]"] + 15["Path
[4217, 4242, 0]"] + 62["Segment
[4250, 4291, 0]"] + 64["Segment
[4299, 4340, 0]"] + 67["Segment
[4348, 4401, 0]"] + 68["Segment
[4409, 4430, 0]"] 73[Solid2d] end subgraph path16 [Path] - 16["Path
[4214, 4239, 0]"] - 63["Segment
[4247, 4288, 0]"] - 65["Segment
[4296, 4337, 0]"] - 66["Segment
[4345, 4398, 0]"] - 69["Segment
[4406, 4427, 0]"] + 16["Path
[4217, 4242, 0]"] + 63["Segment
[4250, 4291, 0]"] + 65["Segment
[4299, 4340, 0]"] + 66["Segment
[4348, 4401, 0]"] + 69["Segment
[4409, 4430, 0]"] 76[Solid2d] end subgraph path17 [Path] - 17["Path
[4593, 4673, 0]"] - 70["Segment
[4593, 4673, 0]"] + 17["Path
[4596, 4676, 0]"] + 70["Segment
[4596, 4676, 0]"] 75[Solid2d] end - 1["Plane
[1217, 1255, 0]"] - 2["Plane
[1711, 1749, 0]"] - 3["Plane
[2695, 2715, 0]"] - 4["Plane
[4186, 4206, 0]"] - 5["Plane
[4570, 4587, 0]"] - 6["Plane
[5562, 5597, 0]"] - 7["StartSketchOnPlane
[894, 914, 0]"] - 8["StartSketchOnPlane
[894, 914, 0]"] - 9["StartSketchOnPlane
[4186, 4206, 0]"] - 10["StartSketchOnPlane
[2695, 2715, 0]"] - 78["Sweep Extrusion
[1204, 1298, 0]"] - 79["Sweep Revolve
[1698, 1780, 0]"] - 80["Sweep Extrusion
[5026, 5068, 0]"] - 81["Sweep Extrusion
[5680, 5731, 0]"] + 1["Plane
[1218, 1256, 0]"] + 2["Plane
[1712, 1750, 0]"] + 3["Plane
[2697, 2717, 0]"] + 4["Plane
[4189, 4209, 0]"] + 5["Plane
[4573, 4590, 0]"] + 6["Plane
[5565, 5600, 0]"] + 7["StartSketchOnPlane
[895, 915, 0]"] + 8["StartSketchOnPlane
[895, 915, 0]"] + 9["StartSketchOnPlane
[4189, 4209, 0]"] + 10["StartSketchOnPlane
[2697, 2717, 0]"] + 78["Sweep Extrusion
[1205, 1299, 0]"] + 79["Sweep Revolve
[1699, 1781, 0]"] + 80["Sweep Extrusion
[5029, 5071, 0]"] + 81["Sweep Extrusion
[5683, 5734, 0]"] 82[Wall] 83[Wall] 84[Wall] @@ -157,14 +157,14 @@ flowchart LR 141["SweepEdge Adjacent"] 142["SweepEdge Adjacent"] 143["SweepEdge Adjacent"] - 144["EdgeCut Fillet
[5131, 5470, 0]"] - 145["EdgeCut Fillet
[5131, 5470, 0]"] - 146["EdgeCut Fillet
[5131, 5470, 0]"] - 147["EdgeCut Fillet
[5131, 5470, 0]"] - 148["EdgeCut Fillet
[5795, 6139, 0]"] - 149["EdgeCut Fillet
[5795, 6139, 0]"] - 150["EdgeCut Fillet
[5795, 6139, 0]"] - 151["EdgeCut Fillet
[5795, 6139, 0]"] + 144["EdgeCut Fillet
[5134, 5473, 0]"] + 145["EdgeCut Fillet
[5134, 5473, 0]"] + 146["EdgeCut Fillet
[5134, 5473, 0]"] + 147["EdgeCut Fillet
[5134, 5473, 0]"] + 148["EdgeCut Fillet
[5798, 6142, 0]"] + 149["EdgeCut Fillet
[5798, 6142, 0]"] + 150["EdgeCut Fillet
[5798, 6142, 0]"] + 151["EdgeCut Fillet
[5798, 6142, 0]"] 1 <--x 8 1 --- 12 2 <--x 7 diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap index 88bdae3e5..4bdf56835 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap @@ -920,7 +920,8 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "name": "plane", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, @@ -5192,7 +5193,8 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "name": "plane", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, @@ -5740,7 +5742,8 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "name": "plane", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/program_memory.snap index 365060f12..56fe619bc 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/program_memory.snap @@ -10955,9 +10955,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4279, - "end": 4287, - "start": 4279, + "commentStart": 4282, + "end": 4290, + "start": 4282, "type": "TagDeclarator", "value": "line001" }, @@ -10968,9 +10968,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4328, - "end": 4336, - "start": 4328, + "commentStart": 4331, + "end": 4339, + "start": 4331, "type": "TagDeclarator", "value": "line002" }, @@ -10981,9 +10981,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4389, - "end": 4397, - "start": 4389, + "commentStart": 4392, + "end": 4400, + "start": 4392, "type": "TagDeclarator", "value": "line003" }, @@ -10994,9 +10994,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4418, - "end": 4426, - "start": 4418, + "commentStart": 4421, + "end": 4429, + "start": 4421, "type": "TagDeclarator", "value": "line004" }, @@ -11017,9 +11017,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4279, - "end": 4287, - "start": 4279, + "commentStart": 4282, + "end": 4290, + "start": 4282, "type": "TagDeclarator", "value": "line001" }, @@ -11042,9 +11042,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4328, - "end": 4336, - "start": 4328, + "commentStart": 4331, + "end": 4339, + "start": 4331, "type": "TagDeclarator", "value": "line002" }, @@ -11067,9 +11067,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4389, - "end": 4397, - "start": 4389, + "commentStart": 4392, + "end": 4400, + "start": 4392, "type": "TagDeclarator", "value": "line003" }, @@ -11092,9 +11092,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4418, - "end": 4426, - "start": 4418, + "commentStart": 4421, + "end": 4429, + "start": 4421, "type": "TagDeclarator", "value": "line004" }, @@ -11201,9 +11201,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4279, - "end": 4287, - "start": 4279, + "commentStart": 4282, + "end": 4290, + "start": 4282, "type": "TagDeclarator", "value": "line001" }, @@ -11214,9 +11214,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4328, - "end": 4336, - "start": 4328, + "commentStart": 4331, + "end": 4339, + "start": 4331, "type": "TagDeclarator", "value": "line002" }, @@ -11227,9 +11227,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4389, - "end": 4397, - "start": 4389, + "commentStart": 4392, + "end": 4400, + "start": 4392, "type": "TagDeclarator", "value": "line003" }, @@ -11240,9 +11240,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4418, - "end": 4426, - "start": 4418, + "commentStart": 4421, + "end": 4429, + "start": 4421, "type": "TagDeclarator", "value": "line004" }, @@ -11263,9 +11263,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4279, - "end": 4287, - "start": 4279, + "commentStart": 4282, + "end": 4290, + "start": 4282, "type": "TagDeclarator", "value": "line001" }, @@ -11288,9 +11288,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4328, - "end": 4336, - "start": 4328, + "commentStart": 4331, + "end": 4339, + "start": 4331, "type": "TagDeclarator", "value": "line002" }, @@ -11313,9 +11313,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4389, - "end": 4397, - "start": 4389, + "commentStart": 4392, + "end": 4400, + "start": 4392, "type": "TagDeclarator", "value": "line003" }, @@ -11338,9 +11338,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4418, - "end": 4426, - "start": 4418, + "commentStart": 4421, + "end": 4429, + "start": 4421, "type": "TagDeclarator", "value": "line004" }, @@ -11521,9 +11521,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4279, - "end": 4287, - "start": 4279, + "commentStart": 4282, + "end": 4290, + "start": 4282, "type": "TagDeclarator", "value": "line001" }, @@ -11534,9 +11534,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4328, - "end": 4336, - "start": 4328, + "commentStart": 4331, + "end": 4339, + "start": 4331, "type": "TagDeclarator", "value": "line002" }, @@ -11547,9 +11547,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4389, - "end": 4397, - "start": 4389, + "commentStart": 4392, + "end": 4400, + "start": 4392, "type": "TagDeclarator", "value": "line003" }, @@ -11560,9 +11560,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4418, - "end": 4426, - "start": 4418, + "commentStart": 4421, + "end": 4429, + "start": 4421, "type": "TagDeclarator", "value": "line004" }, @@ -11583,9 +11583,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4279, - "end": 4287, - "start": 4279, + "commentStart": 4282, + "end": 4290, + "start": 4282, "type": "TagDeclarator", "value": "line001" }, @@ -11608,9 +11608,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4328, - "end": 4336, - "start": 4328, + "commentStart": 4331, + "end": 4339, + "start": 4331, "type": "TagDeclarator", "value": "line002" }, @@ -11633,9 +11633,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4389, - "end": 4397, - "start": 4389, + "commentStart": 4392, + "end": 4400, + "start": 4392, "type": "TagDeclarator", "value": "line003" }, @@ -11658,9 +11658,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4418, - "end": 4426, - "start": 4418, + "commentStart": 4421, + "end": 4429, + "start": 4421, "type": "TagDeclarator", "value": "line004" }, @@ -11767,9 +11767,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4279, - "end": 4287, - "start": 4279, + "commentStart": 4282, + "end": 4290, + "start": 4282, "type": "TagDeclarator", "value": "line001" }, @@ -11780,9 +11780,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4328, - "end": 4336, - "start": 4328, + "commentStart": 4331, + "end": 4339, + "start": 4331, "type": "TagDeclarator", "value": "line002" }, @@ -11793,9 +11793,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4389, - "end": 4397, - "start": 4389, + "commentStart": 4392, + "end": 4400, + "start": 4392, "type": "TagDeclarator", "value": "line003" }, @@ -11806,9 +11806,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4418, - "end": 4426, - "start": 4418, + "commentStart": 4421, + "end": 4429, + "start": 4421, "type": "TagDeclarator", "value": "line004" }, @@ -11829,9 +11829,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4279, - "end": 4287, - "start": 4279, + "commentStart": 4282, + "end": 4290, + "start": 4282, "type": "TagDeclarator", "value": "line001" }, @@ -11854,9 +11854,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4328, - "end": 4336, - "start": 4328, + "commentStart": 4331, + "end": 4339, + "start": 4331, "type": "TagDeclarator", "value": "line002" }, @@ -11879,9 +11879,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4389, - "end": 4397, - "start": 4389, + "commentStart": 4392, + "end": 4400, + "start": 4392, "type": "TagDeclarator", "value": "line003" }, @@ -11904,9 +11904,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4418, - "end": 4426, - "start": 4418, + "commentStart": 4421, + "end": 4429, + "start": 4421, "type": "TagDeclarator", "value": "line004" }, @@ -12091,9 +12091,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4279, - "end": 4287, - "start": 4279, + "commentStart": 4282, + "end": 4290, + "start": 4282, "type": "TagDeclarator", "value": "line001" }, @@ -12116,9 +12116,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4328, - "end": 4336, - "start": 4328, + "commentStart": 4331, + "end": 4339, + "start": 4331, "type": "TagDeclarator", "value": "line002" }, @@ -12141,9 +12141,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4389, - "end": 4397, - "start": 4389, + "commentStart": 4392, + "end": 4400, + "start": 4392, "type": "TagDeclarator", "value": "line003" }, @@ -12166,9 +12166,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4418, - "end": 4426, - "start": 4418, + "commentStart": 4421, + "end": 4429, + "start": 4421, "type": "TagDeclarator", "value": "line004" }, @@ -12271,9 +12271,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4279, - "end": 4287, - "start": 4279, + "commentStart": 4282, + "end": 4290, + "start": 4282, "type": "TagDeclarator", "value": "line001" }, @@ -12296,9 +12296,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4328, - "end": 4336, - "start": 4328, + "commentStart": 4331, + "end": 4339, + "start": 4331, "type": "TagDeclarator", "value": "line002" }, @@ -12321,9 +12321,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4389, - "end": 4397, - "start": 4389, + "commentStart": 4392, + "end": 4400, + "start": 4392, "type": "TagDeclarator", "value": "line003" }, @@ -12346,9 +12346,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4418, - "end": 4426, - "start": 4418, + "commentStart": 4421, + "end": 4429, + "start": 4421, "type": "TagDeclarator", "value": "line004" }, diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/artifact_graph_flowchart.snap.md index e40763c70..52c29e483 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/artifact_graph_flowchart.snap.md @@ -1,29 +1,29 @@ ```mermaid flowchart LR subgraph path5 [Path] - 5["Path
[799, 824, 0]"] - 7["Segment
[832, 854, 0]"] - 10["Segment
[862, 906, 0]"] - 12["Segment
[914, 941, 0]"] - 13["Segment
[949, 993, 0]"] - 15["Segment
[1001, 1008, 0]"] + 5["Path
[800, 825, 0]"] + 7["Segment
[833, 855, 0]"] + 10["Segment
[863, 907, 0]"] + 12["Segment
[915, 942, 0]"] + 13["Segment
[950, 994, 0]"] + 15["Segment
[1002, 1009, 0]"] 17[Solid2d] end subgraph path6 [Path] - 6["Path
[799, 824, 0]"] - 8["Segment
[832, 854, 0]"] - 9["Segment
[862, 906, 0]"] - 11["Segment
[914, 941, 0]"] - 14["Segment
[949, 993, 0]"] - 16["Segment
[1001, 1008, 0]"] + 6["Path
[800, 825, 0]"] + 8["Segment
[833, 855, 0]"] + 9["Segment
[863, 907, 0]"] + 11["Segment
[915, 942, 0]"] + 14["Segment
[950, 994, 0]"] + 16["Segment
[1002, 1009, 0]"] 18[Solid2d] end - 1["Plane
[1094, 1132, 0]"] - 2["Plane
[1588, 1626, 0]"] - 3["StartSketchOnPlane
[771, 791, 0]"] - 4["StartSketchOnPlane
[771, 791, 0]"] - 19["Sweep Extrusion
[1081, 1175, 0]"] - 20["Sweep Revolve
[1575, 1657, 0]"] + 1["Plane
[1095, 1133, 0]"] + 2["Plane
[1589, 1627, 0]"] + 3["StartSketchOnPlane
[772, 792, 0]"] + 4["StartSketchOnPlane
[772, 792, 0]"] + 19["Sweep Extrusion
[1082, 1176, 0]"] + 20["Sweep Revolve
[1576, 1658, 0]"] 21[Wall] 22[Wall] 23[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ast.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ast.snap index 8ebb63b09..3399ab139 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ast.snap @@ -821,7 +821,8 @@ description: Result of parsing gridfinity-baseplate.kcl "name": "plane", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/artifact_graph_flowchart.snap.md index bae105a17..a808a7124 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/artifact_graph_flowchart.snap.md @@ -1,118 +1,118 @@ ```mermaid flowchart LR subgraph path13 [Path] - 13["Path
[1187, 1233, 0]"] - 22["Segment
[1241, 1263, 0]"] - 25["Segment
[1271, 1301, 0]"] - 26["Segment
[1309, 1353, 0]"] - 28["Segment
[1361, 1388, 0]"] - 30["Segment
[1396, 1440, 0]"] - 32["Segment
[1448, 1455, 0]"] + 13["Path
[1188, 1234, 0]"] + 22["Segment
[1242, 1264, 0]"] + 25["Segment
[1272, 1302, 0]"] + 26["Segment
[1310, 1354, 0]"] + 28["Segment
[1362, 1389, 0]"] + 30["Segment
[1397, 1441, 0]"] + 32["Segment
[1449, 1456, 0]"] 79[Solid2d] end subgraph path14 [Path] - 14["Path
[1187, 1233, 0]"] - 23["Segment
[1241, 1263, 0]"] - 24["Segment
[1271, 1301, 0]"] - 27["Segment
[1309, 1353, 0]"] - 29["Segment
[1361, 1388, 0]"] - 31["Segment
[1396, 1440, 0]"] - 33["Segment
[1448, 1455, 0]"] + 14["Path
[1188, 1234, 0]"] + 23["Segment
[1242, 1264, 0]"] + 24["Segment
[1272, 1302, 0]"] + 27["Segment
[1310, 1354, 0]"] + 29["Segment
[1362, 1389, 0]"] + 31["Segment
[1397, 1441, 0]"] + 33["Segment
[1449, 1456, 0]"] 80[Solid2d] end subgraph path15 [Path] - 15["Path
[2496, 2584, 0]"] - 34["Segment
[2590, 2654, 0]"] - 35["Segment
[2660, 2724, 0]"] - 36["Segment
[2730, 2783, 0]"] - 37["Segment
[2789, 2810, 0]"] + 15["Path
[2497, 2585, 0]"] + 34["Segment
[2591, 2655, 0]"] + 35["Segment
[2661, 2725, 0]"] + 36["Segment
[2731, 2784, 0]"] + 37["Segment
[2790, 2811, 0]"] 77[Solid2d] end subgraph path16 [Path] - 16["Path
[3141, 3307, 0]"] - 38["Segment
[3141, 3307, 0]"] + 16["Path
[3142, 3308, 0]"] + 38["Segment
[3142, 3308, 0]"] 76[Solid2d] end subgraph path17 [Path] - 17["Path
[4591, 4616, 0]"] - 39["Segment
[4622, 4694, 0]"] - 40["Segment
[4700, 4773, 0]"] - 41["Segment
[4779, 4832, 0]"] - 42["Segment
[4838, 4859, 0]"] + 17["Path
[4592, 4617, 0]"] + 39["Segment
[4623, 4695, 0]"] + 40["Segment
[4701, 4774, 0]"] + 41["Segment
[4780, 4833, 0]"] + 42["Segment
[4839, 4860, 0]"] 75[Solid2d] end subgraph path18 [Path] - 18["Path
[5326, 5351, 0]"] - 45["Segment
[5411, 5454, 0]"] - 49["Segment
[5462, 5582, 0]"] - 53["Segment
[5645, 5694, 0]"] - 56["Segment
[5702, 5727, 0]"] - 60["Segment
[5735, 5778, 0]"] - 65["Segment
[5786, 5811, 0]"] - 68["Segment
[5819, 5863, 0]"] - 74["Segment
[5871, 5878, 0]"] + 18["Path
[5328, 5353, 0]"] + 45["Segment
[5413, 5456, 0]"] + 49["Segment
[5464, 5584, 0]"] + 53["Segment
[5647, 5696, 0]"] + 56["Segment
[5704, 5729, 0]"] + 60["Segment
[5737, 5780, 0]"] + 65["Segment
[5788, 5813, 0]"] + 68["Segment
[5821, 5865, 0]"] + 74["Segment
[5873, 5880, 0]"] 78[Solid2d] end subgraph path19 [Path] - 19["Path
[5326, 5351, 0]"] - 43["Segment
[5411, 5454, 0]"] - 47["Segment
[5462, 5582, 0]"] - 51["Segment
[5645, 5694, 0]"] - 57["Segment
[5702, 5727, 0]"] - 59["Segment
[5735, 5778, 0]"] - 63["Segment
[5786, 5811, 0]"] - 67["Segment
[5819, 5863, 0]"] - 72["Segment
[5871, 5878, 0]"] + 19["Path
[5328, 5353, 0]"] + 43["Segment
[5413, 5456, 0]"] + 47["Segment
[5464, 5584, 0]"] + 51["Segment
[5647, 5696, 0]"] + 57["Segment
[5704, 5729, 0]"] + 59["Segment
[5737, 5780, 0]"] + 63["Segment
[5788, 5813, 0]"] + 67["Segment
[5821, 5865, 0]"] + 72["Segment
[5873, 5880, 0]"] 81[Solid2d] end subgraph path20 [Path] - 20["Path
[5326, 5351, 0]"] - 44["Segment
[5411, 5454, 0]"] - 48["Segment
[5462, 5582, 0]"] - 52["Segment
[5645, 5694, 0]"] - 58["Segment
[5702, 5727, 0]"] - 61["Segment
[5735, 5778, 0]"] - 64["Segment
[5786, 5811, 0]"] - 69["Segment
[5819, 5863, 0]"] - 73["Segment
[5871, 5878, 0]"] + 20["Path
[5328, 5353, 0]"] + 44["Segment
[5413, 5456, 0]"] + 48["Segment
[5464, 5584, 0]"] + 52["Segment
[5647, 5696, 0]"] + 58["Segment
[5704, 5729, 0]"] + 61["Segment
[5737, 5780, 0]"] + 64["Segment
[5788, 5813, 0]"] + 69["Segment
[5821, 5865, 0]"] + 73["Segment
[5873, 5880, 0]"] 82[Solid2d] end subgraph path21 [Path] - 21["Path
[5326, 5351, 0]"] - 46["Segment
[5411, 5454, 0]"] - 50["Segment
[5462, 5582, 0]"] - 54["Segment
[5645, 5694, 0]"] - 55["Segment
[5702, 5727, 0]"] - 62["Segment
[5735, 5778, 0]"] - 66["Segment
[5786, 5811, 0]"] - 70["Segment
[5819, 5863, 0]"] - 71["Segment
[5871, 5878, 0]"] + 21["Path
[5328, 5353, 0]"] + 46["Segment
[5413, 5456, 0]"] + 50["Segment
[5464, 5584, 0]"] + 54["Segment
[5647, 5696, 0]"] + 55["Segment
[5704, 5729, 0]"] + 62["Segment
[5737, 5780, 0]"] + 66["Segment
[5788, 5813, 0]"] + 70["Segment
[5821, 5865, 0]"] + 71["Segment
[5873, 5880, 0]"] 83[Solid2d] end - 1["Plane
[1541, 1588, 0]"] - 2["Plane
[2120, 2167, 0]"] - 3["Plane
[2473, 2490, 0]"] - 4["Plane
[4552, 4584, 0]"] - 5["Plane
[5298, 5318, 0]"] - 6["Plane
[5298, 5318, 0]"] - 7["Plane
[5298, 5318, 0]"] - 8["Plane
[5298, 5318, 0]"] - 9["StartSketchOnPlane
[4538, 4585, 0]"] - 10["StartSketchOnPlane
[1159, 1179, 0]"] - 11["StartSketchOnPlane
[1159, 1179, 0]"] - 12["StartSketchOnFace
[3093, 3135, 0]"] - 84["Sweep Extrusion
[1528, 1631, 0]"] - 85["Sweep Revolve
[2107, 2198, 0]"] - 86["Sweep Extrusion
[2816, 2840, 0]"] - 87["Sweep Extrusion
[3529, 3556, 0]"] - 88["Sweep Extrusion
[3529, 3556, 0]"] - 89["Sweep Extrusion
[3529, 3556, 0]"] - 90["Sweep Extrusion
[3529, 3556, 0]"] - 91["Sweep Extrusion
[4865, 4909, 0]"] - 92["Sweep Extrusion
[6516, 6628, 0]"] - 93["Sweep Extrusion
[6694, 6808, 0]"] - 94["Sweep Revolve
[7634, 7689, 0]"] - 95["Sweep Revolve
[7751, 7805, 0]"] + 1["Plane
[1542, 1589, 0]"] + 2["Plane
[2121, 2168, 0]"] + 3["Plane
[2474, 2491, 0]"] + 4["Plane
[4553, 4585, 0]"] + 5["Plane
[5300, 5320, 0]"] + 6["Plane
[5300, 5320, 0]"] + 7["Plane
[5300, 5320, 0]"] + 8["Plane
[5300, 5320, 0]"] + 9["StartSketchOnPlane
[4539, 4586, 0]"] + 10["StartSketchOnPlane
[1160, 1180, 0]"] + 11["StartSketchOnPlane
[1160, 1180, 0]"] + 12["StartSketchOnFace
[3094, 3136, 0]"] + 84["Sweep Extrusion
[1529, 1632, 0]"] + 85["Sweep Revolve
[2108, 2199, 0]"] + 86["Sweep Extrusion
[2817, 2841, 0]"] + 87["Sweep Extrusion
[3530, 3557, 0]"] + 88["Sweep Extrusion
[3530, 3557, 0]"] + 89["Sweep Extrusion
[3530, 3557, 0]"] + 90["Sweep Extrusion
[3530, 3557, 0]"] + 91["Sweep Extrusion
[4866, 4910, 0]"] + 92["Sweep Extrusion
[6518, 6630, 0]"] + 93["Sweep Extrusion
[6696, 6810, 0]"] + 94["Sweep Revolve
[7636, 7691, 0]"] + 95["Sweep Revolve
[7753, 7807, 0]"] 96[Wall] 97[Wall] 98[Wall] @@ -283,14 +283,14 @@ flowchart LR 263["SweepEdge Adjacent"] 264["SweepEdge Adjacent"] 265["SweepEdge Adjacent"] - 266["EdgeCut Fillet
[2846, 3076, 0]"] - 267["EdgeCut Fillet
[2846, 3076, 0]"] - 268["EdgeCut Fillet
[2846, 3076, 0]"] - 269["EdgeCut Fillet
[2846, 3076, 0]"] - 270["EdgeCut Fillet
[4915, 5148, 0]"] - 271["EdgeCut Fillet
[4915, 5148, 0]"] - 272["EdgeCut Fillet
[4915, 5148, 0]"] - 273["EdgeCut Fillet
[4915, 5148, 0]"] + 266["EdgeCut Fillet
[2847, 3077, 0]"] + 267["EdgeCut Fillet
[2847, 3077, 0]"] + 268["EdgeCut Fillet
[2847, 3077, 0]"] + 269["EdgeCut Fillet
[2847, 3077, 0]"] + 270["EdgeCut Fillet
[4916, 5149, 0]"] + 271["EdgeCut Fillet
[4916, 5149, 0]"] + 272["EdgeCut Fillet
[4916, 5149, 0]"] + 273["EdgeCut Fillet
[4916, 5149, 0]"] 1 <--x 10 1 --- 14 2 <--x 11 diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap index b9cbd0d43..5640a569a 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap @@ -1503,7 +1503,8 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl "name": "plane", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, @@ -7495,7 +7496,8 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl "name": "plane", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/program_memory.snap index cd0583966..a2b890012 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/program_memory.snap @@ -5575,9 +5575,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -5588,9 +5588,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -5601,9 +5601,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -5614,9 +5614,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -5637,9 +5637,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -5662,9 +5662,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -5687,9 +5687,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -5712,9 +5712,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -5895,9 +5895,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -5908,9 +5908,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -5921,9 +5921,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -5934,9 +5934,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -5957,9 +5957,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -5982,9 +5982,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -6007,9 +6007,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -6032,9 +6032,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -6215,9 +6215,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -6228,9 +6228,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -6241,9 +6241,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -6254,9 +6254,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -6277,9 +6277,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -6302,9 +6302,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -6327,9 +6327,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -6352,9 +6352,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -6535,9 +6535,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -6548,9 +6548,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -6561,9 +6561,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -6574,9 +6574,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -6597,9 +6597,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -6622,9 +6622,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -6647,9 +6647,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -6672,9 +6672,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -6855,9 +6855,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -6868,9 +6868,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -6881,9 +6881,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -6894,9 +6894,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -6917,9 +6917,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -6942,9 +6942,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -6967,9 +6967,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -6992,9 +6992,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -7175,9 +7175,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -7188,9 +7188,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -7201,9 +7201,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -7214,9 +7214,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -7237,9 +7237,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -7262,9 +7262,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -7287,9 +7287,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -7312,9 +7312,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -12954,9 +12954,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4685, - "end": 4693, - "start": 4685, + "commentStart": 4686, + "end": 4694, + "start": 4686, "type": "TagDeclarator", "value": "line010" }, @@ -12967,9 +12967,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4764, - "end": 4772, - "start": 4764, + "commentStart": 4765, + "end": 4773, + "start": 4765, "type": "TagDeclarator", "value": "line011" }, @@ -12980,9 +12980,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4823, - "end": 4831, - "start": 4823, + "commentStart": 4824, + "end": 4832, + "start": 4824, "type": "TagDeclarator", "value": "line012" }, @@ -12993,9 +12993,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4850, - "end": 4858, - "start": 4850, + "commentStart": 4851, + "end": 4859, + "start": 4851, "type": "TagDeclarator", "value": "line013" }, @@ -13016,9 +13016,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 4685, - "end": 4693, - "start": 4685, + "commentStart": 4686, + "end": 4694, + "start": 4686, "type": "TagDeclarator", "value": "line010" }, @@ -13041,9 +13041,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 4764, - "end": 4772, - "start": 4764, + "commentStart": 4765, + "end": 4773, + "start": 4765, "type": "TagDeclarator", "value": "line011" }, @@ -13066,9 +13066,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 126.0 ], "tag": { - "commentStart": 4823, - "end": 4831, - "start": 4823, + "commentStart": 4824, + "end": 4832, + "start": 4824, "type": "TagDeclarator", "value": "line012" }, @@ -13091,9 +13091,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 126.0 ], "tag": { - "commentStart": 4850, - "end": 4858, - "start": 4850, + "commentStart": 4851, + "end": 4859, + "start": 4851, "type": "TagDeclarator", "value": "line013" }, @@ -14303,9 +14303,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -14316,9 +14316,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -14329,9 +14329,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -14387,9 +14387,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -14418,9 +14418,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -14443,9 +14443,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -14643,9 +14643,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -14656,9 +14656,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -14669,9 +14669,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -14727,9 +14727,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -14758,9 +14758,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -14783,9 +14783,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -14988,9 +14988,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -15001,9 +15001,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -15014,9 +15014,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -15072,9 +15072,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -15103,9 +15103,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -15128,9 +15128,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -15328,9 +15328,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -15341,9 +15341,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -15354,9 +15354,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -15412,9 +15412,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -15443,9 +15443,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -15468,9 +15468,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -15689,9 +15689,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -15702,9 +15702,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -15715,9 +15715,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -15773,9 +15773,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -15804,9 +15804,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -15829,9 +15829,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -16029,9 +16029,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -16042,9 +16042,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -16055,9 +16055,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -16113,9 +16113,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -16144,9 +16144,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -16169,9 +16169,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -16384,9 +16384,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -16397,9 +16397,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -16410,9 +16410,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -16468,9 +16468,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -16499,9 +16499,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -16524,9 +16524,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -16724,9 +16724,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -16737,9 +16737,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -16750,9 +16750,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -16808,9 +16808,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -16839,9 +16839,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -16864,9 +16864,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -17064,9 +17064,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -17077,9 +17077,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -17090,9 +17090,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -17148,9 +17148,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -17179,9 +17179,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -17204,9 +17204,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -17404,9 +17404,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -17417,9 +17417,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -17430,9 +17430,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -17488,9 +17488,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -17519,9 +17519,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -17544,9 +17544,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -17812,9 +17812,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -17825,9 +17825,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -17838,9 +17838,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -17896,9 +17896,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -17927,9 +17927,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -17952,9 +17952,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -18152,9 +18152,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -18165,9 +18165,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -18178,9 +18178,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -18236,9 +18236,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 0.0 ], "tag": { - "commentStart": 5445, - "end": 5453, - "start": 5445, + "commentStart": 5447, + "end": 5455, + "start": 5447, "type": "TagDeclarator", "value": "line000" }, @@ -18267,9 +18267,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5565, - "end": 5572, - "start": 5565, + "commentStart": 5567, + "end": 5574, + "start": 5567, "type": "TagDeclarator", "value": "arc000" }, @@ -18292,9 +18292,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5685, - "end": 5693, - "start": 5685, + "commentStart": 5687, + "end": 5695, + "start": 5687, "type": "TagDeclarator", "value": "line001" }, @@ -18561,9 +18561,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -18574,9 +18574,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -18587,9 +18587,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -18600,9 +18600,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -18623,9 +18623,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -18648,9 +18648,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -18673,9 +18673,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -18698,9 +18698,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -18981,9 +18981,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -18994,9 +18994,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -19007,9 +19007,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -19020,9 +19020,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -19043,9 +19043,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -19068,9 +19068,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -19093,9 +19093,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -19118,9 +19118,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -19401,9 +19401,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -19414,9 +19414,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -19427,9 +19427,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -19440,9 +19440,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -19463,9 +19463,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -19488,9 +19488,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -19513,9 +19513,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -19538,9 +19538,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -19821,9 +19821,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -19834,9 +19834,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -19847,9 +19847,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -19860,9 +19860,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -19883,9 +19883,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -19908,9 +19908,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -19933,9 +19933,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -19958,9 +19958,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -21547,9 +21547,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -21560,9 +21560,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -21573,9 +21573,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -21586,9 +21586,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, @@ -21609,9 +21609,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2645, - "end": 2653, - "start": 2645, + "commentStart": 2646, + "end": 2654, + "start": 2646, "type": "TagDeclarator", "value": "line000" }, @@ -21634,9 +21634,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 3.2 ], "tag": { - "commentStart": 2715, - "end": 2723, - "start": 2715, + "commentStart": 2716, + "end": 2724, + "start": 2716, "type": "TagDeclarator", "value": "line001" }, @@ -21659,9 +21659,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2774, - "end": 2782, - "start": 2774, + "commentStart": 2775, + "end": 2783, + "start": 2775, "type": "TagDeclarator", "value": "line002" }, @@ -21684,9 +21684,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 38.8 ], "tag": { - "commentStart": 2801, - "end": 2809, - "start": 2801, + "commentStart": 2802, + "end": 2810, + "start": 2802, "type": "TagDeclarator", "value": "line003" }, diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/artifact_graph_flowchart.snap.md index 592595582..09937ad1b 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/artifact_graph_flowchart.snap.md @@ -1,62 +1,62 @@ ```mermaid flowchart LR subgraph path9 [Path] - 9["Path
[928, 974, 0]"] - 14["Segment
[982, 1004, 0]"] - 17["Segment
[1012, 1042, 0]"] - 18["Segment
[1050, 1094, 0]"] - 20["Segment
[1102, 1129, 0]"] - 22["Segment
[1137, 1181, 0]"] - 24["Segment
[1189, 1196, 0]"] + 9["Path
[929, 975, 0]"] + 14["Segment
[983, 1005, 0]"] + 17["Segment
[1013, 1043, 0]"] + 18["Segment
[1051, 1095, 0]"] + 20["Segment
[1103, 1130, 0]"] + 22["Segment
[1138, 1182, 0]"] + 24["Segment
[1190, 1197, 0]"] 38[Solid2d] end subgraph path10 [Path] - 10["Path
[928, 974, 0]"] - 15["Segment
[982, 1004, 0]"] - 16["Segment
[1012, 1042, 0]"] - 19["Segment
[1050, 1094, 0]"] - 21["Segment
[1102, 1129, 0]"] - 23["Segment
[1137, 1181, 0]"] - 25["Segment
[1189, 1196, 0]"] + 10["Path
[929, 975, 0]"] + 15["Segment
[983, 1005, 0]"] + 16["Segment
[1013, 1043, 0]"] + 19["Segment
[1051, 1095, 0]"] + 21["Segment
[1103, 1130, 0]"] + 23["Segment
[1138, 1182, 0]"] + 25["Segment
[1190, 1197, 0]"] 39[Solid2d] end subgraph path11 [Path] - 11["Path
[2237, 2325, 0]"] - 26["Segment
[2331, 2395, 0]"] - 27["Segment
[2401, 2465, 0]"] - 28["Segment
[2471, 2524, 0]"] - 29["Segment
[2530, 2551, 0]"] + 11["Path
[2238, 2326, 0]"] + 26["Segment
[2332, 2396, 0]"] + 27["Segment
[2402, 2466, 0]"] + 28["Segment
[2472, 2525, 0]"] + 29["Segment
[2531, 2552, 0]"] 37[Solid2d] end subgraph path12 [Path] - 12["Path
[2882, 3048, 0]"] - 30["Segment
[2882, 3048, 0]"] + 12["Path
[2883, 3049, 0]"] + 30["Segment
[2883, 3049, 0]"] 36[Solid2d] end subgraph path13 [Path] - 13["Path
[4361, 4386, 0]"] - 31["Segment
[4392, 4464, 0]"] - 32["Segment
[4470, 4543, 0]"] - 33["Segment
[4549, 4602, 0]"] - 34["Segment
[4608, 4629, 0]"] + 13["Path
[4362, 4387, 0]"] + 31["Segment
[4393, 4465, 0]"] + 32["Segment
[4471, 4544, 0]"] + 33["Segment
[4550, 4603, 0]"] + 34["Segment
[4609, 4630, 0]"] 35[Solid2d] end - 1["Plane
[1282, 1329, 0]"] - 2["Plane
[1861, 1908, 0]"] - 3["Plane
[2214, 2231, 0]"] - 4["Plane
[4322, 4354, 0]"] - 5["StartSketchOnPlane
[4308, 4355, 0]"] - 6["StartSketchOnPlane
[900, 920, 0]"] - 7["StartSketchOnPlane
[900, 920, 0]"] - 8["StartSketchOnFace
[2834, 2876, 0]"] - 40["Sweep Extrusion
[1269, 1372, 0]"] - 41["Sweep Revolve
[1848, 1939, 0]"] - 42["Sweep Extrusion
[2557, 2581, 0]"] - 43["Sweep Extrusion
[3270, 3297, 0]"] - 44["Sweep Extrusion
[3270, 3297, 0]"] - 45["Sweep Extrusion
[3270, 3297, 0]"] - 46["Sweep Extrusion
[3270, 3297, 0]"] - 47["Sweep Extrusion
[4635, 4679, 0]"] + 1["Plane
[1283, 1330, 0]"] + 2["Plane
[1862, 1909, 0]"] + 3["Plane
[2215, 2232, 0]"] + 4["Plane
[4323, 4355, 0]"] + 5["StartSketchOnPlane
[4309, 4356, 0]"] + 6["StartSketchOnPlane
[901, 921, 0]"] + 7["StartSketchOnPlane
[901, 921, 0]"] + 8["StartSketchOnFace
[2835, 2877, 0]"] + 40["Sweep Extrusion
[1270, 1373, 0]"] + 41["Sweep Revolve
[1849, 1940, 0]"] + 42["Sweep Extrusion
[2558, 2582, 0]"] + 43["Sweep Extrusion
[3271, 3298, 0]"] + 44["Sweep Extrusion
[3271, 3298, 0]"] + 45["Sweep Extrusion
[3271, 3298, 0]"] + 46["Sweep Extrusion
[3271, 3298, 0]"] + 47["Sweep Extrusion
[4636, 4680, 0]"] 48[Wall] 49[Wall] 50[Wall] @@ -123,14 +123,14 @@ flowchart LR 111["SweepEdge Adjacent"] 112["SweepEdge Adjacent"] 113["SweepEdge Adjacent"] - 114["EdgeCut Fillet
[2587, 2817, 0]"] - 115["EdgeCut Fillet
[2587, 2817, 0]"] - 116["EdgeCut Fillet
[2587, 2817, 0]"] - 117["EdgeCut Fillet
[2587, 2817, 0]"] - 118["EdgeCut Fillet
[4685, 4918, 0]"] - 119["EdgeCut Fillet
[4685, 4918, 0]"] - 120["EdgeCut Fillet
[4685, 4918, 0]"] - 121["EdgeCut Fillet
[4685, 4918, 0]"] + 114["EdgeCut Fillet
[2588, 2818, 0]"] + 115["EdgeCut Fillet
[2588, 2818, 0]"] + 116["EdgeCut Fillet
[2588, 2818, 0]"] + 117["EdgeCut Fillet
[2588, 2818, 0]"] + 118["EdgeCut Fillet
[4686, 4919, 0]"] + 119["EdgeCut Fillet
[4686, 4919, 0]"] + 120["EdgeCut Fillet
[4686, 4919, 0]"] + 121["EdgeCut Fillet
[4686, 4919, 0]"] 1 <--x 6 1 --- 10 2 <--x 7 diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ast.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ast.snap index 2e34fea9d..edcc79ed9 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ast.snap @@ -1172,7 +1172,8 @@ description: Result of parsing gridfinity-bins.kcl "name": "plane", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/program_memory.snap index ca16115d2..7a7f73293 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/program_memory.snap @@ -5503,9 +5503,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -5516,9 +5516,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -5529,9 +5529,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -5542,9 +5542,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -5565,9 +5565,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -5590,9 +5590,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -5615,9 +5615,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -5640,9 +5640,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -5823,9 +5823,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -5836,9 +5836,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -5849,9 +5849,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -5862,9 +5862,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -5885,9 +5885,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -5910,9 +5910,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -5935,9 +5935,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -5960,9 +5960,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -6143,9 +6143,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -6156,9 +6156,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -6169,9 +6169,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -6182,9 +6182,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -6205,9 +6205,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -6230,9 +6230,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -6255,9 +6255,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -6280,9 +6280,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -6463,9 +6463,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -6476,9 +6476,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -6489,9 +6489,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -6502,9 +6502,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -6525,9 +6525,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -6550,9 +6550,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -6575,9 +6575,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -6600,9 +6600,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -6783,9 +6783,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -6796,9 +6796,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -6809,9 +6809,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -6822,9 +6822,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -6845,9 +6845,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -6870,9 +6870,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -6895,9 +6895,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -6920,9 +6920,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -7103,9 +7103,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -7116,9 +7116,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -7129,9 +7129,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -7142,9 +7142,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -7165,9 +7165,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -7190,9 +7190,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -7215,9 +7215,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -7240,9 +7240,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -12882,9 +12882,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4455, - "end": 4463, - "start": 4455, + "commentStart": 4456, + "end": 4464, + "start": 4456, "type": "TagDeclarator", "value": "line010" }, @@ -12895,9 +12895,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4534, - "end": 4542, - "start": 4534, + "commentStart": 4535, + "end": 4543, + "start": 4535, "type": "TagDeclarator", "value": "line011" }, @@ -12908,9 +12908,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4593, - "end": 4601, - "start": 4593, + "commentStart": 4594, + "end": 4602, + "start": 4594, "type": "TagDeclarator", "value": "line012" }, @@ -12921,9 +12921,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4620, - "end": 4628, - "start": 4620, + "commentStart": 4621, + "end": 4629, + "start": 4621, "type": "TagDeclarator", "value": "line013" }, @@ -12944,9 +12944,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 0.0 ], "tag": { - "commentStart": 4455, - "end": 4463, - "start": 4455, + "commentStart": 4456, + "end": 4464, + "start": 4456, "type": "TagDeclarator", "value": "line010" }, @@ -12969,9 +12969,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 0.0 ], "tag": { - "commentStart": 4534, - "end": 4542, - "start": 4534, + "commentStart": 4535, + "end": 4543, + "start": 4535, "type": "TagDeclarator", "value": "line011" }, @@ -12994,9 +12994,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 126.0 ], "tag": { - "commentStart": 4593, - "end": 4601, - "start": 4593, + "commentStart": 4594, + "end": 4602, + "start": 4594, "type": "TagDeclarator", "value": "line012" }, @@ -13019,9 +13019,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 126.0 ], "tag": { - "commentStart": 4620, - "end": 4628, - "start": 4620, + "commentStart": 4621, + "end": 4629, + "start": 4621, "type": "TagDeclarator", "value": "line013" }, @@ -14295,9 +14295,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -14308,9 +14308,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -14321,9 +14321,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -14334,9 +14334,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -14357,9 +14357,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -14382,9 +14382,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -14407,9 +14407,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -14432,9 +14432,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -14715,9 +14715,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -14728,9 +14728,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -14741,9 +14741,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -14754,9 +14754,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -14777,9 +14777,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -14802,9 +14802,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -14827,9 +14827,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -14852,9 +14852,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -15135,9 +15135,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -15148,9 +15148,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -15161,9 +15161,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -15174,9 +15174,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -15197,9 +15197,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -15222,9 +15222,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -15247,9 +15247,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -15272,9 +15272,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -15555,9 +15555,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -15568,9 +15568,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -15581,9 +15581,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -15594,9 +15594,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -15617,9 +15617,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -15642,9 +15642,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -15667,9 +15667,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -15692,9 +15692,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -16870,9 +16870,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -16883,9 +16883,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -16896,9 +16896,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -16909,9 +16909,9 @@ description: Variables in memory after executing gridfinity-bins.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, @@ -16932,9 +16932,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2386, - "end": 2394, - "start": 2386, + "commentStart": 2387, + "end": 2395, + "start": 2387, "type": "TagDeclarator", "value": "line000" }, @@ -16957,9 +16957,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 3.2 ], "tag": { - "commentStart": 2456, - "end": 2464, - "start": 2456, + "commentStart": 2457, + "end": 2465, + "start": 2457, "type": "TagDeclarator", "value": "line001" }, @@ -16982,9 +16982,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2515, - "end": 2523, - "start": 2515, + "commentStart": 2516, + "end": 2524, + "start": 2516, "type": "TagDeclarator", "value": "line002" }, @@ -17007,9 +17007,9 @@ description: Variables in memory after executing gridfinity-bins.kcl 38.8 ], "tag": { - "commentStart": 2542, - "end": 2550, - "start": 2542, + "commentStart": 2543, + "end": 2551, + "start": 2543, "type": "TagDeclarator", "value": "line003" }, diff --git a/rust/kcl-lib/tests/kcl_samples/hex-nut/ast.snap b/rust/kcl-lib/tests/kcl_samples/hex-nut/ast.snap index 1c4d95584..aac74b806 100644 --- a/rust/kcl-lib/tests/kcl_samples/hex-nut/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/hex-nut/ast.snap @@ -1050,69 +1050,99 @@ description: Result of parsing hex-nut.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "start", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "thk", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "raw": "0", + "name": "thickness", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } + "type": "Identifier" }, - { + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "innerDia", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "raw": "0", + "name": "diameter", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "thickness", + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "diameter", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -1133,8 +1163,9 @@ description: Result of parsing hex-nut.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "preComments": [ "", diff --git a/rust/kcl-lib/tests/kcl_samples/hex-nut/ops.snap b/rust/kcl-lib/tests/kcl_samples/hex-nut/ops.snap index 175c5cc1b..67140e3eb 100644 --- a/rust/kcl-lib/tests/kcl_samples/hex-nut/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/hex-nut/ops.snap @@ -82,7 +82,74 @@ description: Operations executed hex-nut.kcl "name": "hexNut", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "innerDia": { + "value": { + "type": "Number", + "value": 0.3125, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "start": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "thk": { + "value": { + "type": "Number", + "value": 0.266, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md index 9be4a16d7..f1940494d 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md @@ -303,55 +303,55 @@ flowchart LR 320[Solid2d] end subgraph path55 [Path] - 55["Path
[4901, 4988, 0]"] - 258["Segment
[4996, 5025, 0]"] - 259["Segment
[5033, 5061, 0]"] - 260["Segment
[5069, 5147, 0]"] - 261["Segment
[5155, 5202, 0]"] - 262["Segment
[5210, 5238, 0]"] - 263["Segment
[5246, 5275, 0]"] - 264["Segment
[5283, 5312, 0]"] - 265["Segment
[5320, 5386, 0]"] - 266["Segment
[5394, 5422, 0]"] - 267["Segment
[5430, 5459, 0]"] - 268["Segment
[5467, 5529, 0]"] - 269["Segment
[5537, 5565, 0]"] - 270["Segment
[5573, 5607, 0]"] - 271["Segment
[5615, 5645, 0]"] - 272["Segment
[5653, 5721, 0]"] - 273["Segment
[5729, 5736, 0]"] + 55["Path
[6329, 6416, 0]"] + 258["Segment
[6424, 6453, 0]"] + 259["Segment
[6461, 6489, 0]"] + 260["Segment
[6497, 6575, 0]"] + 261["Segment
[6583, 6630, 0]"] + 262["Segment
[6638, 6666, 0]"] + 263["Segment
[6674, 6703, 0]"] + 264["Segment
[6711, 6740, 0]"] + 265["Segment
[6748, 6814, 0]"] + 266["Segment
[6822, 6850, 0]"] + 267["Segment
[6858, 6887, 0]"] + 268["Segment
[6895, 6957, 0]"] + 269["Segment
[6965, 6993, 0]"] + 270["Segment
[7001, 7035, 0]"] + 271["Segment
[7043, 7073, 0]"] + 272["Segment
[7081, 7149, 0]"] + 273["Segment
[7157, 7164, 0]"] 294[Solid2d] end subgraph path56 [Path] - 56["Path
[5936, 6034, 0]"] - 274["Segment
[6042, 6120, 0]"] - 276["Segment
[6128, 6175, 0]"] - 279["Segment
[6183, 6263, 0]"] - 281["Segment
[6271, 6278, 0]"] + 56["Path
[7364, 7462, 0]"] + 274["Segment
[7470, 7548, 0]"] + 276["Segment
[7556, 7603, 0]"] + 279["Segment
[7611, 7691, 0]"] + 281["Segment
[7699, 7706, 0]"] 299[Solid2d] end subgraph path57 [Path] - 57["Path
[5936, 6034, 0]"] - 275["Segment
[6042, 6120, 0]"] - 277["Segment
[6128, 6175, 0]"] - 278["Segment
[6183, 6263, 0]"] - 280["Segment
[6271, 6278, 0]"] + 57["Path
[7364, 7462, 0]"] + 275["Segment
[7470, 7548, 0]"] + 277["Segment
[7556, 7603, 0]"] + 278["Segment
[7611, 7691, 0]"] + 280["Segment
[7699, 7706, 0]"] 313[Solid2d] end subgraph path58 [Path] - 58["Path
[6386, 6483, 0]"] - 282["Segment
[6491, 6569, 0]"] - 285["Segment
[6577, 6625, 0]"] - 287["Segment
[6633, 6713, 0]"] - 289["Segment
[6721, 6728, 0]"] + 58["Path
[7814, 7911, 0]"] + 282["Segment
[7919, 7997, 0]"] + 285["Segment
[8005, 8053, 0]"] + 287["Segment
[8061, 8141, 0]"] + 289["Segment
[8149, 8156, 0]"] 306[Solid2d] end subgraph path59 [Path] - 59["Path
[6386, 6483, 0]"] - 283["Segment
[6491, 6569, 0]"] - 284["Segment
[6577, 6625, 0]"] - 286["Segment
[6633, 6713, 0]"] - 288["Segment
[6721, 6728, 0]"] + 59["Path
[7814, 7911, 0]"] + 283["Segment
[7919, 7997, 0]"] + 284["Segment
[8005, 8053, 0]"] + 286["Segment
[8061, 8141, 0]"] + 288["Segment
[8149, 8156, 0]"] 309[Solid2d] end 1["Plane
[532, 549, 0]"] @@ -376,11 +376,11 @@ flowchart LR 20["Plane
[1946, 1969, 0]"] 21["Plane
[1946, 1969, 0]"] 22["Plane
[1946, 1969, 0]"] - 23["Plane
[4870, 4893, 0]"] - 24["Plane
[5905, 5928, 0]"] - 25["Plane
[5905, 5928, 0]"] - 26["Plane
[6355, 6378, 0]"] - 27["Plane
[6355, 6378, 0]"] + 23["Plane
[6298, 6321, 0]"] + 24["Plane
[7333, 7356, 0]"] + 25["Plane
[7333, 7356, 0]"] + 26["Plane
[7783, 7806, 0]"] + 27["Plane
[7783, 7806, 0]"] 28["StartSketchOnFace
[1151, 1189, 0]"] 321["Sweep Extrusion
[851, 873, 0]"] 322["Sweep Extrusion
[1472, 1570, 0]"] @@ -408,11 +408,11 @@ flowchart LR 344["Sweep Extrusion
[2685, 2711, 0]"] 345["Sweep Extrusion
[2685, 2711, 0]"] 346["Sweep Extrusion
[2685, 2711, 0]"] - 347["Sweep Extrusion
[5744, 5768, 0]"] - 348["Sweep Extrusion
[6286, 6310, 0]"] - 349["Sweep Extrusion
[6286, 6310, 0]"] - 350["Sweep Extrusion
[6736, 6760, 0]"] - 351["Sweep Extrusion
[6736, 6760, 0]"] + 347["Sweep Extrusion
[7172, 7196, 0]"] + 348["Sweep Extrusion
[7714, 7738, 0]"] + 349["Sweep Extrusion
[7714, 7738, 0]"] + 350["Sweep Extrusion
[8164, 8188, 0]"] + 351["Sweep Extrusion
[8164, 8188, 0]"] 352[Wall] 353[Wall] 354[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap b/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap index a25c82c2d..cafb642d5 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap @@ -4145,97 +4145,147 @@ description: Result of parsing keyboard.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0.3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.3, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": "row1", + "raw": "0.3", "start": 0, - "type": "Identifier" + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.3, + "suffix": "None" + } }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.1, - "suffix": "None" + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.1, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, "name": "keyHeight", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "highlightColor2", + "name": "repeats", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor2", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -4256,8 +4306,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "preComments": [ "", @@ -4274,97 +4325,147 @@ description: Result of parsing keyboard.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "1.5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.5, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "1.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.5, + "suffix": "None" + } + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.8, - "suffix": "None" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.8, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, "name": "keyHeight", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "highlightColor1", + "name": "repeats", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -4385,8 +4486,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -4398,684 +4500,18 @@ description: Result of parsing keyboard.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "spacing", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "7", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 7.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3.5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.5, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "5.2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.2, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "keyHeight", + "name": "originStart", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { "commentStart": 0, - "end": 0, - "name": "highlightColor2", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "spacing", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 8.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "8.7", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 8.7, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.8, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "spacing", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 8.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "9.6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 9.6, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.8, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "spacing", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "10.3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.3, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.1, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "elements": [ + { "commentStart": 0, "end": 0, "left": { @@ -5101,12 +4537,669 @@ description: Result of parsing keyboard.kcl "right": { "commentStart": 0, "end": 0, - "raw": "12", + "raw": "7", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 12.0, + "value": 7.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.5, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5.2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.2, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor2", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 8.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "8.7", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 8.7, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.8, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 8.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "9.6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 9.6, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.8, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, "suffix": "None" } }, @@ -5131,146 +5224,14 @@ description: Result of parsing keyboard.kcl "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.8, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor2", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "spacing", + "name": "row1", "start": 0, "type": "Identifier" }, @@ -5278,101 +5239,109 @@ description: Result of parsing keyboard.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row2", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.7", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.7, - "suffix": "None" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.1, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, "name": "keyHeight", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "highlightColor2", + "name": "repeats", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -5393,14 +5362,10 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, - "preComments": [ - "", - "", - "// Build the second row of keys" - ], "start": 0, "type": "ExpressionStatement", "type": "ExpressionStatement" @@ -5411,12 +5376,257 @@ description: Result of parsing keyboard.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "12", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 12.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "10.3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.3, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.8, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "left": { + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor2", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { @@ -5439,12 +5649,12 @@ description: Result of parsing keyboard.kcl "right": { "commentStart": 0, "end": 0, - "raw": "4", + "raw": "3", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 4.0, + "value": 3.0, "suffix": "None" } }, @@ -5452,100 +5662,124 @@ description: Result of parsing keyboard.kcl "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { + { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "1.7", + "name": { + "commentStart": 0, + "end": 0, + "name": "row2", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.7, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row2", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.8, - "suffix": "None" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1.7", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.7, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, "name": "keyHeight", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "9", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 9.0, - "suffix": "None" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "highlightColor1", + "name": "repeats", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor2", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -5566,9 +5800,15 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, + "preComments": [ + "", + "", + "// Build the second row of keys" + ], "start": 0, "type": "ExpressionStatement", "type": "ExpressionStatement" @@ -5579,12 +5819,18 @@ description: Result of parsing keyboard.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { @@ -5610,12 +5856,12 @@ description: Result of parsing keyboard.kcl "right": { "commentStart": 0, "end": 0, - "raw": "14", + "raw": "4", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 14.0, + "value": 4.0, "suffix": "None" } }, @@ -5640,120 +5886,124 @@ description: Result of parsing keyboard.kcl "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { + { + "abs_path": false, "commentStart": 0, "end": 0, - "left": { + "name": { "commentStart": 0, "end": 0, - "raw": "0.8", + "name": "row2", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.8, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Identifier" }, + "path": [], "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row2", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "2.2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.2, - "suffix": "None" + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.8, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, "name": "keyHeight", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "highlightColor2", + "name": "repeats", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "9", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 9.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -5774,8 +6024,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -5787,19 +6038,121 @@ description: Result of parsing keyboard.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "14", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 14.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1.7", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.7, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.8, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "spacing", + "name": "row2", "start": 0, "type": "Identifier" }, @@ -5807,121 +6160,109 @@ description: Result of parsing keyboard.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row3", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "raw": "1.1", + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "2.2", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 1.1, + "value": 2.2, "suffix": "None" } - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": ".1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.1, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, "name": "keyHeight", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "highlightColor1", + "name": "repeats", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor2", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -5942,8 +6283,228 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row3", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "1.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.1, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": ".1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "preComments": [ "", @@ -5960,12 +6521,1805 @@ description: Result of parsing keyboard.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.1, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": ".1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row3", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.8, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "left": { + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "11.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 11.1, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": ".1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row3", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "1.4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.4, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": ".4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.4, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor2", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row4", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.9", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.9, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "preComments": [ + "", + "", + "// Build the fourth row of keys" + ], + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "0.9", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.9, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row4", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.8, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "11", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 11.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "11.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 11.8, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row4", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1.2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.2, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row5", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.8, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "12", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 12.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "preComments": [ + "", + "", + "// Build the fifth row of keys" + ], + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "11.7", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 11.7, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row5", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1.3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.3, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor2", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "spacing", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row6", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.1, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": ".6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.6, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "color", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor2", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "keyFn", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "preComments": [ + "", + "", + "// Build the sixth row of keys" + ], + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { @@ -6021,31 +8375,71 @@ description: Result of parsing keyboard.kcl "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { + { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": ".1", + "name": { + "commentStart": 0, + "end": 0, + "name": "row6", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.1, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.8", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.8, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyHeight", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "row3", + "name": "keyHeight", "start": 0, "type": "Identifier" }, @@ -6053,68 +8447,72 @@ description: Result of parsing keyboard.kcl "start": 0, "type": "Name", "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": ".6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.6, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "11", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 11.0, + "suffix": "None" } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.8, - "suffix": "None" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "keyHeight", + "name": "color", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "highlightColor1", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" } ], "callee": { @@ -6135,8 +8533,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -6148,12 +8547,18 @@ description: Result of parsing keyboard.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "originStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "left": { @@ -6196,12 +8601,12 @@ description: Result of parsing keyboard.kcl "right": { "commentStart": 0, "end": 0, - "raw": "11.1", + "raw": "12", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 11.1, + "value": 12.0, "suffix": "None" } }, @@ -6209,166 +8614,14 @@ description: Result of parsing keyboard.kcl "type": "BinaryExpression", "type": "BinaryExpression" }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": ".1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.1, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row3", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "1.4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.4, - "suffix": "None" - } - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": ".4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.4, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor2", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "spacing", + "name": "row6", "start": 0, "type": "Identifier" }, @@ -6376,205 +8629,56 @@ description: Result of parsing keyboard.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row4", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.9", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.9, - "suffix": "None" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "keyWidth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, "name": "keyHeight", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { "commentStart": 0, "end": 0, - "name": "highlightColor1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "preComments": [ - "", - "", - "// Build the fourth row of keys" - ], - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "spacing", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "0.9", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.9, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "row4", + "name": "keyHeight", "start": 0, "type": "Identifier" }, @@ -6582,673 +8686,64 @@ description: Result of parsing keyboard.kcl "start": 0, "type": "Name", "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.8, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "11", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 11.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "spacing", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "11.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 11.8, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" }, - { - "abs_path": false, + "operator": "*", + "right": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row4", - "start": 0, - "type": "Identifier" - }, - "path": [], + "raw": ".6", "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.2, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "spacing", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.6, + "suffix": "None" + } }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row5", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "repeats", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.8, - "suffix": "None" } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "keyHeight", + "name": "color", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "12", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 12.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "preComments": [ - "", - "", - "// Build the fifth row of keys" - ], - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "spacing", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "11.7", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 11.7, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row5", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.3, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor2", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "spacing", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row6", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.1, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "left": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "keyHeight", + "name": "highlightColor2", "start": 0, "type": "Identifier" }, @@ -7256,51 +8751,7 @@ description: Result of parsing keyboard.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": ".6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.6, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor2", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" } ], "callee": { @@ -7321,389 +8772,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "preComments": [ - "", - "", - "// Build the sixth row of keys" - ], - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "spacing", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "1.1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.1, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row6", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.8", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.8, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": ".6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.6, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "11", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 11.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "spacing", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "12", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 12.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row6", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": ".6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.6, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "highlightColor2", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "keyFn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", @@ -11608,60 +12679,90 @@ description: Result of parsing keyboard.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "2.3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.3, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "origin", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "2.3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.3, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "1.3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.3, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "1.3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.3, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": ".4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.4, - "suffix": "None" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" } }, { - "commentStart": 0, - "end": 0, - "raw": "0.03", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.03, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": ".4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.4, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.03", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.03, + "suffix": "None" + } } } ], @@ -11683,8 +12784,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "preComments": [ "", @@ -11701,124 +12803,18 @@ description: Result of parsing keyboard.kcl "expression": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "8.71", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 8.71, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "row4", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": ".08", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.08, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.4, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.03", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.03, - "suffix": "None" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "o", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "ExpressionStatement", - "type": "ExpressionStatement" - }, - { - "commentStart": 0, - "end": 0, - "expression": { - "arguments": [ - { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "origin", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, "raw": "8.71", @@ -11830,87 +12826,91 @@ description: Result of parsing keyboard.kcl "suffix": "None" } }, - "operator": "+", - "right": { + { "commentStart": 0, "end": 0, - "raw": "0.9", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.9, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "row4", + "name": { + "commentStart": 0, + "end": 0, + "name": "row4", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": ".08", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.08, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": ".08", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.08, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0.4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.4, - "suffix": "None" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" } }, { - "commentStart": 0, - "end": 0, - "raw": "0.03", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.03, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.4, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.03", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.03, + "suffix": "None" + } } } ], @@ -11932,8 +12932,172 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + }, + "start": 0, + "type": "ExpressionStatement", + "type": "ExpressionStatement" + }, + { + "commentStart": 0, + "end": 0, + "expression": { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "origin", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "8.71", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 8.71, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "0.9", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.9, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "row4", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": ".08", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.08, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.4, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.03", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.03, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "o", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "ExpressionStatement", diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap b/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap index 7a5b8cadc..7da35ce75 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap @@ -6799,7 +6799,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#23af93" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 1.1, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.3, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6810,7 +6900,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 1.5, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6821,7 +7001,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#23af93" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 5.2, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 4.2, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6832,7 +7102,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 9.5, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6843,7 +7203,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 10.4, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6854,7 +7304,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 1.1, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 11.3, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6865,7 +7405,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#23af93" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 12.5, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6876,7 +7506,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#23af93" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 1.7, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 1.2000000000000002, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6887,7 +7607,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 2.1, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 1.2000000000000002, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 9.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6898,7 +7708,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#23af93" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 2.2, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 11.1, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 1.2000000000000002, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6909,7 +7809,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 1.2000000000000002, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 2.1, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6920,7 +7910,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 1.6, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 2.1, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6931,7 +8011,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#23af93" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 1.7999999999999998, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 11.5, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 2.1, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6942,7 +8112,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 0.9, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 3.0000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6953,7 +8213,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 1.3, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 3.0000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 11.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6964,7 +8314,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 1.2, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 12.100000000000001, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 3.0000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6975,7 +8415,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 3.900000000000001, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 12.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6986,7 +8516,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#23af93" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 1.3, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 12.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 3.900000000000001, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -6997,7 +8617,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#23af93" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.48, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 1.1, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.30000000000000004, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 4.800000000000001, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -7008,7 +8718,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#b0b0b0" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.48, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 0.8, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 1.5, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 4.800000000000001, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 11.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -7019,7 +8819,97 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "color": { + "value": { + "type": "String", + "value": "#23af93" + }, + "sourceRange": [] + }, + "keyHeight": { + "value": { + "type": "Number", + "value": 0.48, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "keyWidth": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "originStart": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 12.3, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 4.800000000000001, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "repeats": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -8136,7 +10026,74 @@ description: Operations executed keyboard.kcl "name": "z", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 0.03, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "origin": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 2.3, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 1.3, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "scale": { + "value": { + "type": "Number", + "value": 0.4, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -8147,7 +10104,74 @@ description: Operations executed keyboard.kcl "name": "o", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 0.03, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "origin": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 8.71, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 3.0800000000000005, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "scale": { + "value": { + "type": "Number", + "value": 0.4, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -8158,7 +10182,74 @@ description: Operations executed keyboard.kcl "name": "o", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 0.03, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "origin": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 9.610000000000001, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 3.0800000000000005, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "scale": { + "value": { + "type": "Number", + "value": 0.4, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/kitt/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/kitt/artifact_graph_flowchart.snap.md index cf1e35820..8ffcf8b44 100644 --- a/rust/kcl-lib/tests/kcl_samples/kitt/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/kitt/artifact_graph_flowchart.snap.md @@ -352,60 +352,60 @@ flowchart LR 338[Solid2d] end subgraph path83 [Path] - 83["Path
[1506, 1562, 0]"] - 282["Segment
[1568, 1586, 0]"] - 283["Segment
[1616, 1635, 0]"] - 284["Segment
[1667, 1697, 0]"] - 285["Segment
[1719, 1737, 0]"] - 286["Segment
[1770, 1788, 0]"] - 287["Segment
[1818, 1847, 0]"] - 288["Segment
[1873, 1892, 0]"] - 289["Segment
[1925, 1943, 0]"] - 290["Segment
[1977, 2008, 0]"] - 291["Segment
[2033, 2052, 0]"] - 292["Segment
[2085, 2104, 0]"] - 293["Segment
[2137, 2193, 0]"] - 294["Segment
[2199, 2206, 0]"] + 83["Path
[1598, 1654, 0]"] + 282["Segment
[1660, 1678, 0]"] + 283["Segment
[1708, 1727, 0]"] + 284["Segment
[1759, 1789, 0]"] + 285["Segment
[1811, 1829, 0]"] + 286["Segment
[1862, 1880, 0]"] + 287["Segment
[1910, 1939, 0]"] + 288["Segment
[1965, 1984, 0]"] + 289["Segment
[2017, 2035, 0]"] + 290["Segment
[2069, 2100, 0]"] + 291["Segment
[2125, 2144, 0]"] + 292["Segment
[2177, 2196, 0]"] + 293["Segment
[2229, 2285, 0]"] + 294["Segment
[2291, 2298, 0]"] 318[Solid2d] end subgraph path84 [Path] - 84["Path
[2887, 2928, 0]"] - 295["Segment
[2941, 2959, 0]"] - 296["Segment
[2982, 3000, 0]"] - 297["Segment
[3026, 3044, 0]"] - 298["Segment
[3065, 3084, 0]"] - 299["Segment
[3109, 3127, 0]"] - 300["Segment
[3150, 3168, 0]"] - 301["Segment
[3193, 3212, 0]"] - 302["Segment
[3238, 3257, 0]"] - 303["Segment
[3283, 3302, 0]"] - 304["Segment
[3325, 3343, 0]"] - 305["Segment
[3370, 3389, 0]"] - 306["Segment
[3415, 3471, 0]"] - 307["Segment
[3477, 3484, 0]"] + 84["Path
[3347, 3388, 0]"] + 295["Segment
[3401, 3419, 0]"] + 296["Segment
[3442, 3460, 0]"] + 297["Segment
[3486, 3504, 0]"] + 298["Segment
[3525, 3544, 0]"] + 299["Segment
[3569, 3587, 0]"] + 300["Segment
[3610, 3628, 0]"] + 301["Segment
[3653, 3672, 0]"] + 302["Segment
[3698, 3717, 0]"] + 303["Segment
[3743, 3762, 0]"] + 304["Segment
[3785, 3803, 0]"] + 305["Segment
[3830, 3849, 0]"] + 306["Segment
[3875, 3931, 0]"] + 307["Segment
[3937, 3944, 0]"] 351[Solid2d] end subgraph path85 [Path] - 85["Path
[6208, 6259, 0]"] - 309["Segment
[6267, 6296, 0]"] - 310["Segment
[6304, 6335, 0]"] - 312["Segment
[6343, 6373, 0]"] - 315["Segment
[6381, 6437, 0]"] - 316["Segment
[6445, 6452, 0]"] + 85["Path
[7864, 7915, 0]"] + 309["Segment
[7923, 7952, 0]"] + 310["Segment
[7960, 7991, 0]"] + 312["Segment
[7999, 8029, 0]"] + 315["Segment
[8037, 8093, 0]"] + 316["Segment
[8101, 8108, 0]"] 343[Solid2d] end subgraph path86 [Path] - 86["Path
[6208, 6259, 0]"] - 308["Segment
[6267, 6296, 0]"] - 311["Segment
[6304, 6335, 0]"] - 313["Segment
[6343, 6373, 0]"] - 314["Segment
[6381, 6437, 0]"] - 317["Segment
[6445, 6452, 0]"] + 86["Path
[7864, 7915, 0]"] + 308["Segment
[7923, 7952, 0]"] + 311["Segment
[7960, 7991, 0]"] + 313["Segment
[7999, 8029, 0]"] + 314["Segment
[8037, 8093, 0]"] + 317["Segment
[8101, 8108, 0]"] 348[Solid2d] end 1["Plane
[609, 626, 0]"] - 2["Plane
[6183, 6200, 0]"] - 3["Plane
[6183, 6200, 0]"] + 2["Plane
[7839, 7856, 0]"] + 3["Plane
[7839, 7856, 0]"] 4["StartSketchOnFace
[183, 227, 0]"] 5["StartSketchOnFace
[183, 227, 0]"] 6["StartSketchOnFace
[183, 227, 0]"] @@ -429,8 +429,8 @@ flowchart LR 24["StartSketchOnFace
[183, 227, 0]"] 25["StartSketchOnFace
[183, 227, 0]"] 26["StartSketchOnFace
[183, 227, 0]"] - 27["StartSketchOnFace
[1466, 1500, 0]"] - 28["StartSketchOnFace
[2845, 2881, 0]"] + 27["StartSketchOnFace
[1558, 1592, 0]"] + 28["StartSketchOnFace
[3305, 3341, 0]"] 29["StartSketchOnFace
[183, 227, 0]"] 30["StartSketchOnFace
[183, 227, 0]"] 31["StartSketchOnFace
[183, 227, 0]"] @@ -485,10 +485,10 @@ flowchart LR 397["Sweep Extrusion
[456, 479, 0]"] 398["Sweep Extrusion
[456, 479, 0]"] 399["Sweep Extrusion
[905, 935, 0]"] - 400["Sweep Extrusion
[2212, 2243, 0]"] - 401["Sweep Extrusion
[3490, 3519, 0]"] - 402["Sweep Extrusion
[6466, 6511, 0]"] - 403["Sweep Extrusion
[6466, 6511, 0]"] + 400["Sweep Extrusion
[2304, 2335, 0]"] + 401["Sweep Extrusion
[3950, 3979, 0]"] + 402["Sweep Extrusion
[8122, 8167, 0]"] + 403["Sweep Extrusion
[8122, 8167, 0]"] 404[Wall] 405[Wall] 406[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/kitt/ast.snap b/rust/kcl-lib/tests/kcl_samples/kitt/ast.snap index 2a311a73d..40a0875c8 100644 --- a/rust/kcl-lib/tests/kcl_samples/kitt/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/kitt/ast.snap @@ -1791,144 +1791,214 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "END", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, + "name": { "commentStart": 0, "end": 0, - "name": { + "name": "kitBody", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "END", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitHeadWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitHeadWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitHeadElevation", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitHeadWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitHeadElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitHeadHeight", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitHeadWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitHeadDepth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitHeadHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitHeadDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -1949,8 +2019,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -3630,7 +3701,7 @@ description: Result of parsing kitt.kcl "id": { "commentStart": 0, "end": 0, - "name": "kitEyeHeihgt", + "name": "kitEyeHeight", "start": 0, "type": "Identifier" }, @@ -3727,46 +3798,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitFace", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "START", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitEyeOffset", + "name": "kitFace", "start": 0, "type": "Identifier" }, @@ -3774,69 +3821,163 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitEyeHeihgt", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" } }, { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEyeDepth", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "START", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -3857,8 +3998,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -3889,49 +4031,131 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitFace", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "START", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFace", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "START", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "left": { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitEyeOffset", + "name": "kitEyeHeight", "start": 0, "type": "Identifier" }, @@ -3940,15 +4164,56 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "operator": "-", + "name": "width", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "Identifier" }, - "operator": "+", - "right": { + "arg": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { "commentStart": 0, "end": 0, "raw": "1", @@ -3959,22 +4224,25 @@ description: Result of parsing kitt.kcl "value": 1.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitEyeHeihgt", + "name": "kitEyeDepth", "start": 0, "type": "Identifier" }, @@ -3982,63 +4250,7 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" } - }, - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitEyeDepth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" } ], "callee": { @@ -4059,8 +4271,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -4091,136 +4304,206 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitFace", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "START", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, + "name": { "commentStart": 0, "end": 0, - "name": { + "name": "kitFace", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "START", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitEyeOffset", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "+", - "right": { + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "raw": "4", + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 4.0, + "value": 1.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitEyeHeihgt", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" } }, { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEyeDepth", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -4241,8 +4524,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -4268,48 +4552,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitFace", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "START", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitEyeOffset", + "name": "kitFace", "start": 0, "type": "Identifier" }, @@ -4317,35 +4575,25 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", + "start": 0, + "type": "Identifier" + }, + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitEyeHeihgt", + "name": "START", "start": 0, "type": "Identifier" }, @@ -4353,63 +4601,169 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "-", - "right": { + } + }, + { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "raw": "1", + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "2", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 1.0, + "value": 2.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" } }, { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEyeDepth", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -4430,8 +4784,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -4464,7 +4819,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "kitEyeHeihgt", + "name": "kitEyeHeight", "start": 0, "type": "Identifier" }, @@ -5872,7 +6227,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "kitEyeHeihgt", + "name": "kitEyeHeight", "start": 0, "type": "Identifier" }, @@ -5922,46 +6277,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitFace", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "START", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitMouthOffset", + "name": "kitFace", "start": 0, "type": "Identifier" }, @@ -5969,69 +6300,163 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitMouthHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" } }, { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEyeDepth", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "START", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitMouthOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitMouthHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -6052,8 +6477,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -6079,49 +6505,131 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitFace", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "START", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFace", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "START", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "left": { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitMouthOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitMouthOffset", + "name": "kitMouthHeight", "start": 0, "type": "Identifier" }, @@ -6130,15 +6638,34 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "operator": "-", + "name": "width", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "Identifier" }, - "operator": "+", - "right": { + "arg": { "commentStart": 0, "end": 0, "raw": "1", @@ -6149,22 +6676,47 @@ description: Result of parsing kitt.kcl "value": 1.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitMouthHeight", + "name": "kitEyeDepth", "start": 0, "type": "Identifier" }, @@ -6172,63 +6724,7 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" } - }, - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitEyeDepth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" } ], "callee": { @@ -6249,8 +6745,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -6281,108 +6778,178 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitFace", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "START", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFace", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitMouthOffset", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitMouthHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" + "type": "Name", + "type": "Name" } }, { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEyeDepth", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "START", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitMouthOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitMouthHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -6403,8 +6970,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -6430,48 +6998,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitFace", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "START", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitMouthOffset", + "name": "kitFace", "start": 0, "type": "Identifier" }, @@ -6479,9 +7021,136 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", + "start": 0, + "type": "Identifier" }, - "operator": "-", - "right": { + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "START", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitMouthOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitMouthHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { "commentStart": 0, "end": 0, "raw": "1", @@ -6492,32 +7161,18 @@ description: Result of parsing kitt.kcl "value": 1.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitMouthHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], + "name": "height", "start": 0, - "type": "Name", - "type": "Name" + "type": "Identifier" }, - "operator": "-", - "right": { + "arg": { "commentStart": 0, "end": 0, "raw": "1", @@ -6528,50 +7183,33 @@ description: Result of parsing kitt.kcl "value": 1.0, "suffix": "None" } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" } }, { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEyeDepth", + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEyeDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -6592,8 +7230,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -6836,144 +7475,214 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "END", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, + "name": { "commentStart": 0, "end": 0, - "name": { + "name": "kitBody", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "END", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitBellyWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBellyWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBellyElevation", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitBellyWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBellyElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitBellyHeight", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBellyWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitBellyDepth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBellyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBellyDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -6994,8 +7703,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -7182,144 +7892,214 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBelly", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "END", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, + "name": { "commentStart": 0, "end": 0, - "name": { + "name": "kitBelly", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "END", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitVHSwidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVHSwidth", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "Name", - "type": "Name" + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitVHSelevation", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitVHSwidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVHSelevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitVHSheight", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVHSwidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitVHSdepth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVHSheight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVHSdepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -7340,8 +8120,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -7600,46 +8381,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBelly", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "END", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitFloppyOffset", + "name": "kitBelly", "start": 0, "type": "Identifier" }, @@ -7647,71 +8404,25 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitFloppyElevation", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitFloppyWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitFloppyHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitFloppyDepth", + "name": "END", "start": 0, "type": "Identifier" }, @@ -7719,13 +8430,153 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } } ], "callee": { @@ -7746,8 +8597,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -7778,46 +8630,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBelly", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "END", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitFloppyOffset", + "name": "kitBelly", "start": 0, "type": "Identifier" }, @@ -7825,25 +8653,25 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", + "start": 0, + "type": "Identifier" + }, + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitFloppyElevation", + "name": "END", "start": 0, "type": "Identifier" }, @@ -7851,65 +8679,105 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitFloppyWidth", + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "commentStart": 0, "end": 0, - "name": "kitFloppyHeight", + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } }, { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitFloppyDepth", + "name": "kitFloppyWidth", "start": 0, "type": "Identifier" }, @@ -7917,13 +8785,67 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } } ], "callee": { @@ -7944,8 +8866,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -7971,78 +8894,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBelly", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "END", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitFloppyOffset", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitFloppyElevation", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitFloppyWidth", + "name": "kitBelly", "start": 0, "type": "Identifier" }, @@ -8050,39 +8917,25 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitFloppyHeight", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitFloppyDepth", + "name": "END", "start": 0, "type": "Identifier" }, @@ -8090,13 +8943,153 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } } ], "callee": { @@ -8117,8 +9110,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -8406,46 +9400,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "END", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitBellyButtonOffset", + "name": "kitBody", "start": 0, "type": "Identifier" }, @@ -8453,77 +9423,171 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBellyButtonElevation", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitBellyButtonWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "END", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBellyButtonOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "commentStart": 0, "end": 0, - "name": "kitBellyButtonHeight", + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitBellyButtonDepth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBellyButtonElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBellyButtonWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBellyButtonHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBellyButtonDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -8544,8 +9608,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -8731,64 +9796,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBelly", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "END", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitFloppyOffset", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitFloppyElevation", + "name": "kitBelly", "start": 0, "type": "Identifier" }, @@ -8796,73 +9819,25 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "argument": { - "abs_path": false, + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitButtonWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitButtonHeight", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitButtonDepth", + "name": "END", "start": 0, "type": "Identifier" }, @@ -8870,13 +9845,173 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitButtonWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitButtonHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitButtonDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } } ], "callee": { @@ -8897,8 +10032,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -8924,41 +10060,137 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBelly", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "END", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBelly", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "END", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitButtonWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { "commentStart": 0, "end": 0, "left": { @@ -8968,7 +10200,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "kitFloppyOffset", + "name": "kitFloppyElevation", "start": 0, "type": "Identifier" }, @@ -8977,8 +10209,35 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "operator": "-", + "operator": "+", "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "abs_path": false, "commentStart": 0, "end": 0, @@ -8994,112 +10253,31 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "-", - "right": { "commentStart": 0, "end": 0, - "raw": "1", + "operator": "-", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "UnaryExpression", + "type": "UnaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitFloppyElevation", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitButtonWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitButtonHeight", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitButtonDepth", + "name": "kitButtonHeight", "start": 0, "type": "Identifier" }, @@ -9107,13 +10285,41 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitButtonDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } } ], "callee": { @@ -9134,8 +10340,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -9166,48 +10373,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBelly", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "END", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitFloppyOffset", + "name": "kitBelly", "start": 0, "type": "Identifier" }, @@ -9215,12 +10396,154 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", + "start": 0, + "type": "Identifier" }, - "operator": "-", - "right": { + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "END", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { "commentStart": 0, "end": 0, "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitButtonWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitFloppyElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { "commentStart": 0, "end": 0, "raw": "2", @@ -9232,136 +10555,62 @@ description: Result of parsing kitt.kcl "suffix": "None" } }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitButtonWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitFloppyElevation", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitButtonWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitButtonHeight", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitButtonWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } }, { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitButtonDepth", + "name": "kitButtonHeight", "start": 0, "type": "Identifier" }, @@ -9369,13 +10618,41 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitButtonDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } } ], "callee": { @@ -9396,8 +10673,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -10545,116 +11823,186 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitShoe", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitShoe", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "END", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "END", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitPantsOffsetSide", + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitPantsOffsetSide", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitPantsOffsetFront", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitPantsOffsetFront", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitPantsFrontWidth", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitPantsFrontWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitPantsWidth", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitPantsWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitPantsHeight", + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitPantsHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -10675,8 +12023,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -10860,32 +12209,52 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitLegOffset", + "name": "offsetFront", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offsetSide", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitLegOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -10906,8 +12275,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -10933,29 +12303,72 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offsetFront", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "left": { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offsetSide", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitLegOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "-", + "right": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitLegOffset", + "name": "kitShoeWidth", "start": 0, "type": "Identifier" }, @@ -10964,33 +12377,10 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "commentStart": 0, - "end": 0, - "operator": "-", "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitShoeWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -11011,8 +12401,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -11307,94 +12698,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "seg01", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitNewEarOffsetSide", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitNewEarOffsetFront", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitEarWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitEarDepth", + "name": "kitBody", "start": 0, "type": "Identifier" }, @@ -11402,29 +12721,171 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEarHeight", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg01", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitNewEarOffsetSide", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitNewEarOffsetFront", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -11445,8 +12906,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -11505,137 +12967,87 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "baseVolume", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "END", + "name": { + "commentStart": 0, + "end": 0, + "name": "baseVolume", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "END", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitNewEarOffsetSide", - "start": 0, - "type": "Identifier" - }, - "path": [], + "name": "positionY", "start": 0, - "type": "Name", - "type": "Name" + "type": "Identifier" }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "secondOffset", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitNewEarOffsetFront", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "0.01", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.01, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitEarWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "-", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitNewEarOffsetSide", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { "abs_path": false, "commentStart": 0, "end": 0, @@ -11651,39 +13063,31 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitEarDepth", + "name": "kitNewEarOffsetFront", "start": 0, "type": "Identifier" }, @@ -11692,15 +13096,34 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "commentStart": 0, - "end": 0, "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "0.01", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.01, + "suffix": "None" + } + }, "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" }, - "operator": "+", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { @@ -11710,7 +13133,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "secondOffset", + "name": "kitEarWidth", "start": 0, "type": "Identifier" }, @@ -11719,42 +13142,151 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "operator": "*", + "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "secondOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEarHeight", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "secondOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -11775,8 +13307,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -11835,137 +13368,87 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "secondLevel", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "END", + "name": { + "commentStart": 0, + "end": 0, + "name": "secondLevel", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "END", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitNewEarOffsetSide", - "start": 0, - "type": "Identifier" - }, - "path": [], + "name": "positionY", "start": 0, - "type": "Name", - "type": "Name" + "type": "Identifier" }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "thirdOffset", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitNewEarOffsetFront", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "0.02", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.02, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitEarWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "-", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitNewEarOffsetSide", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { "abs_path": false, "commentStart": 0, "end": 0, @@ -11981,39 +13464,31 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitEarDepth", + "name": "kitNewEarOffsetFront", "start": 0, "type": "Identifier" }, @@ -12022,15 +13497,34 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "commentStart": 0, - "end": 0, "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "0.02", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.02, + "suffix": "None" + } + }, "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" }, - "operator": "+", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { @@ -12040,7 +13534,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "thirdOffset", + "name": "kitEarWidth", "start": 0, "type": "Identifier" }, @@ -12049,42 +13543,151 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "operator": "*", + "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "thirdOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEarHeight", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "thirdOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -12105,8 +13708,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -12165,137 +13769,87 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "thirdLevel", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "END", + "name": { + "commentStart": 0, + "end": 0, + "name": "thirdLevel", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "END", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitNewEarOffsetSide", - "start": 0, - "type": "Identifier" - }, - "path": [], + "name": "positionY", "start": 0, - "type": "Name", - "type": "Name" + "type": "Identifier" }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "fourthOffset", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitNewEarOffsetFront", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "0.03", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.03, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitEarWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "-", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitNewEarOffsetSide", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { "abs_path": false, "commentStart": 0, "end": 0, @@ -12311,39 +13865,31 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { - "argument": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitEarDepth", + "name": "kitNewEarOffsetFront", "start": 0, "type": "Identifier" }, @@ -12352,15 +13898,34 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "commentStart": 0, - "end": 0, "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "0.03", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.03, + "suffix": "None" + } + }, "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" }, - "operator": "+", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { @@ -12370,7 +13935,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "fourthOffset", + "name": "kitEarWidth", "start": 0, "type": "Identifier" }, @@ -12379,42 +13944,151 @@ description: Result of parsing kitt.kcl "type": "Name", "type": "Name" }, - "operator": "*", + "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "fourthOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEarHeight", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "argument": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "fourthOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -12435,8 +14109,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -12642,36 +14317,56 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEarOffsetFront", + "name": "earOffsetFront", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarOffsetFront", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEarOffsetSide", + "name": "earOffsetSide", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarOffsetSide", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -12692,8 +14387,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -12719,42 +14415,82 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitEarOffsetFront", + "name": "earOffsetFront", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarOffsetFront", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "earOffsetSide", + "start": 0, + "type": "Identifier" + }, + "arg": { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitBodyWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBodyWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitEarWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, "operator": "-", "right": { @@ -12764,7 +14500,7 @@ description: Result of parsing kitt.kcl "name": { "commentStart": 0, "end": 0, - "name": "kitEarWidth", + "name": "kitEarOffsetSide", "start": 0, "type": "Identifier" }, @@ -12776,27 +14512,7 @@ description: Result of parsing kitt.kcl "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitEarOffsetSide", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } } ], "callee": { @@ -12817,8 +14533,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -13445,116 +15162,186 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBody", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "seg02", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillRowA", + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillRowA", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillColumnB", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillColumnB", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleDepth", + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -13575,8 +15362,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -13602,116 +15390,186 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBody", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "seg02", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillRowA", + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillRowA", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillColumnD", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillColumnD", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleDepth", + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -13732,8 +15590,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -13759,116 +15618,186 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBody", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "seg02", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillRowB", + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillRowB", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillColumnA", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillColumnA", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleDepth", + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -13889,8 +15818,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -13916,116 +15846,186 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBody", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "seg02", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillRowB", + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillRowB", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillColumnC", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillColumnC", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleDepth", + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -14046,8 +16046,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -14073,116 +16074,186 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBody", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "seg02", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillRowB", + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillRowB", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillColumnE", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillColumnE", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleDepth", + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -14203,8 +16274,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -14230,116 +16302,186 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBody", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "seg02", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillRowC", + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillRowC", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillColumnB", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillColumnB", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleDepth", + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -14360,8 +16502,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -14387,116 +16530,186 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBody", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "seg02", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillRowC", + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillRowC", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillColumnD", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillColumnD", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleSize", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleSize", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "grillHoleDepth", + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "grillHoleDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -14517,8 +16730,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -14742,116 +16956,186 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitBody", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "seg02", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitVentElevation", + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitVentOffset", + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitVentHoleHeight", + "name": "width", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentHoleHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitVentHoleWidth", + "name": "height", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentHoleWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitVentHoleDepth", + "name": "depth", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentHoleDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -14872,8 +17156,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -14899,64 +17184,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "seg02", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitVentElevation", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitVentOffset", + "name": "kitBody", "start": 0, "type": "Identifier" }, @@ -14964,71 +17207,183 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitVentHoleHeight", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitVentHoleWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitVentHoleDepth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentHoleHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentHoleWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentHoleDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -15049,8 +17404,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -15076,64 +17432,22 @@ description: Result of parsing kitt.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitBody", + "name": "kitExtrude", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "seg02", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "kitVentElevation", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "left": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "kitVentOffset", + "name": "kitBody", "start": 0, "type": "Identifier" }, @@ -15141,71 +17455,183 @@ description: Result of parsing kitt.kcl "start": 0, "type": "Name", "type": "Name" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } }, { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "kitVentHoleHeight", + "name": "extrudeTag", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitVentHoleWidth", + "name": { + "commentStart": 0, + "end": 0, + "name": "seg02", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "kitVentHoleDepth", + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentElevation", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "positionZ", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentOffset", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "width", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentHoleHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "height", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentHoleWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "depth", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "kitVentHoleDepth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -15226,8 +17652,9 @@ description: Result of parsing kitt.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/kcl_samples/kitt/ops.snap b/rust/kcl-lib/tests/kcl_samples/kitt/ops.snap index a7e582991..685980d0e 100644 --- a/rust/kcl-lib/tests/kcl_samples/kitt/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/kitt/ops.snap @@ -2159,7 +2159,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 16.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -12.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 14.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 24.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2225,7 +2322,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 0.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "start" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -7.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 23.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2236,7 +2430,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 0.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "start" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -6.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 24.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2247,7 +2538,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 0.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "start" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 23.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2258,7 +2646,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 0.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "start" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 22.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2324,7 +2809,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 0.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "start" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 20.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2335,7 +2917,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 0.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "start" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 19.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2346,7 +3025,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 0.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "start" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 20.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2357,7 +3133,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 0.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "start" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 19.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2368,7 +3241,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 6.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -12.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 7.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 24.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2379,7 +3349,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 8.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 8.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2390,7 +3457,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -11.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 8.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2401,7 +3565,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -11.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2412,7 +3673,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 11.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 8.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": -5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2423,7 +3781,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -9.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 13.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2434,7 +3889,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 11.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": -1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2445,7 +3997,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 9.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": -1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2456,7 +4105,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 7.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": -1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2561,7 +4307,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": -10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2572,7 +4415,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -9.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": -10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2583,7 +4523,40 @@ description: Operations executed kitt.kcl "name": "kitLeg", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "offsetFront": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "offsetSide": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2594,7 +4567,40 @@ description: Operations executed kitt.kcl "name": "kitLeg", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "offsetFront": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "offsetSide": { + "value": { + "type": "Number", + "value": -10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2605,7 +4611,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg01", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": -8.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -12.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 14.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 8.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2616,7 +4720,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg01", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": -8.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 14.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 8.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2627,7 +4829,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": -6.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -11.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 13.99, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 6.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2638,7 +4937,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": -6.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 13.99, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 6.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2649,7 +5045,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": -4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 13.98, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2660,7 +5153,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": -4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 6.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 13.98, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2671,7 +5261,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": -9.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 13.97, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2682,7 +5369,104 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "String", + "value": "end" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 7.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 13.97, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2693,7 +5477,40 @@ description: Operations executed kitt.kcl "name": "kitEar", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "earOffsetFront": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "earOffsetSide": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2704,7 +5521,40 @@ description: Operations executed kitt.kcl "name": "kitEar", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "earOffsetFront": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "earOffsetSide": { + "value": { + "type": "Number", + "value": 17.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2715,7 +5565,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg02", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 27.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 13.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2726,7 +5674,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg02", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 27.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 11.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2737,7 +5783,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg02", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 25.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 14.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2748,7 +5892,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg02", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 25.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 12.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2759,7 +6001,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg02", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 25.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2770,7 +6110,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg02", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 23.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 13.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2781,7 +6219,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg02", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 23.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 11.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2792,7 +6328,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg02", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 7.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2803,7 +6437,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg02", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 7.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -2814,7 +6546,105 @@ description: Operations executed kitt.kcl "name": "pixelBox", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "depth": { + "value": { + "type": "Number", + "value": -2.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "extrudeTag": { + "value": { + "type": "TagIdentifier", + "value": "seg02", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "height": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "kitExtrude": { + "value": { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + "sourceRange": [] + }, + "positionY": { + "value": { + "type": "Number", + "value": 7.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "positionZ": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "width": { + "value": { + "type": "Number", + "value": 4.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/kitt/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/kitt/program_memory.snap index 74bacabc7..2e66ddb34 100644 --- a/rust/kcl-lib/tests/kcl_samples/kitt/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/kitt/program_memory.snap @@ -6342,7 +6342,7 @@ description: Variables in memory after executing kitt.kcl } } }, - "kitEyeHeihgt": { + "kitEyeHeight": { "type": "Number", "value": 23.0, "ty": { diff --git a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md index 47ebd30d2..db485420b 100644 --- a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md @@ -36,27 +36,27 @@ flowchart LR 54[Solid2d] end subgraph path26 [Path] - 26["Path
[1228, 1283, 0]"] - 38["Segment
[1228, 1283, 0]"] + 26["Path
[1312, 1367, 0]"] + 38["Segment
[1312, 1367, 0]"] 47[Solid2d] end subgraph path27 [Path] - 27["Path
[1228, 1283, 0]"] - 37["Segment
[1228, 1283, 0]"] + 27["Path
[1312, 1367, 0]"] + 37["Segment
[1312, 1367, 0]"] 52[Solid2d] end subgraph path28 [Path] - 28["Path
[1676, 1739, 0]"] - 39["Segment
[1676, 1739, 0]"] + 28["Path
[1816, 1879, 0]"] + 39["Segment
[1816, 1879, 0]"] 45[Solid2d] end subgraph path29 [Path] - 29["Path
[1785, 1844, 0]"] - 40["Segment
[1852, 1876, 0]"] - 41["Segment
[1884, 1984, 0]"] - 42["Segment
[1992, 2016, 0]"] - 43["Segment
[2024, 2202, 0]"] - 44["Segment
[2210, 2217, 0]"] + 29["Path
[1925, 1984, 0]"] + 40["Segment
[1992, 2016, 0]"] + 41["Segment
[2024, 2124, 0]"] + 42["Segment
[2132, 2156, 0]"] + 43["Segment
[2164, 2342, 0]"] + 44["Segment
[2350, 2357, 0]"] 55[Solid2d] end 1["Plane
[547, 574, 0]"] @@ -66,10 +66,10 @@ flowchart LR 5["Plane
[547, 574, 0]"] 6["Plane
[547, 574, 0]"] 7["Plane
[547, 574, 0]"] - 8["Plane
[1200, 1220, 0]"] - 9["Plane
[1200, 1220, 0]"] - 10["Plane
[1612, 1662, 0]"] - 11["StartSketchOnPlane
[1596, 1663, 0]"] + 8["Plane
[1284, 1304, 0]"] + 9["Plane
[1284, 1304, 0]"] + 10["Plane
[1752, 1802, 0]"] + 11["StartSketchOnPlane
[1736, 1803, 0]"] 12["StartSketchOnPlane
[533, 575, 0]"] 13["StartSketchOnPlane
[533, 575, 0]"] 14["StartSketchOnPlane
[533, 575, 0]"] @@ -84,10 +84,10 @@ flowchart LR 60["Sweep Extrusion
[636, 665, 0]"] 61["Sweep Extrusion
[636, 665, 0]"] 62["Sweep Extrusion
[636, 665, 0]"] - 63["Sweep Extrusion
[1291, 1318, 0]"] - 64["Sweep Extrusion
[1291, 1318, 0]"] - 65["Sweep Extrusion
[1747, 1770, 0]"] - 66["Sweep Extrusion
[2225, 2248, 0]"] + 63["Sweep Extrusion
[1375, 1402, 0]"] + 64["Sweep Extrusion
[1375, 1402, 0]"] + 65["Sweep Extrusion
[1887, 1910, 0]"] + 66["Sweep Extrusion
[2365, 2388, 0]"] 67[Wall] 68[Wall] 69[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap index b488d5676..2da0e6f84 100644 --- a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap @@ -804,39 +804,69 @@ description: Result of parsing makeup-mirror.kcl "init": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "x", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "y", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "z", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } } ], @@ -858,8 +888,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -885,68 +916,98 @@ description: Result of parsing makeup-mirror.kcl "init": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "x", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "y", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "hingeHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], + "name": "z", "start": 0, - "type": "Name", - "type": "Name" + "type": "Identifier" }, - "operator": "+", - "right": { - "abs_path": false, + "arg": { "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "hingeGap", + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -967,8 +1028,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -994,108 +1056,138 @@ description: Result of parsing makeup-mirror.kcl "init": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "x", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "y", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "z", + "start": 0, + "type": "Identifier" + }, + "arg": { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "hingeHeight", + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "*", + "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "hingeGap", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } } ], "callee": { @@ -1116,8 +1208,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -1143,72 +1236,102 @@ description: Result of parsing makeup-mirror.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "armLength", + "name": "x", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "armLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" } }, { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "hingeHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], + "name": "y", "start": 0, - "type": "Name", - "type": "Name" + "type": "Identifier" }, - "operator": "+", - "right": { - "abs_path": false, + "arg": { "commentStart": 0, "end": 0, - "name": { + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "z", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "hingeGap", + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -1229,8 +1352,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -1256,112 +1380,142 @@ description: Result of parsing makeup-mirror.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "armLength", + "name": "x", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "armLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "y", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "z", + "start": 0, + "type": "Identifier" + }, + "arg": { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "hingeHeight", + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "*", + "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "hingeGap", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } } ], "callee": { @@ -1382,8 +1536,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -1409,23 +1564,15 @@ description: Result of parsing makeup-mirror.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "armLength", + "name": "x", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, @@ -1440,28 +1587,26 @@ description: Result of parsing makeup-mirror.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "left": { + "name": "y", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "hingeHeight", + "name": "armLength", "start": 0, "type": "Identifier" }, @@ -1470,63 +1615,103 @@ description: Result of parsing makeup-mirror.kcl "type": "Name", "type": "Name" }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "z", + "start": 0, + "type": "Identifier" }, - "operator": "+", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "hingeGap", + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "*", + "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "2", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } } ], "callee": { @@ -1547,8 +1732,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -1574,23 +1760,15 @@ description: Result of parsing makeup-mirror.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "armLength", + "name": "x", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "argument": { + "arg": { "abs_path": false, "commentStart": 0, "end": 0, @@ -1605,28 +1783,26 @@ description: Result of parsing makeup-mirror.kcl "start": 0, "type": "Name", "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "left": { + "name": "y", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "hingeHeight", + "name": "armLength", "start": 0, "type": "Identifier" }, @@ -1635,63 +1811,103 @@ description: Result of parsing makeup-mirror.kcl "type": "Name", "type": "Name" }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - }, + "commentStart": 0, + "end": 0, + "operator": "-", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "z", + "start": 0, + "type": "Identifier" }, - "operator": "+", - "right": { + "arg": { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "hingeGap", + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "*", + "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "3", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } } ], "callee": { @@ -1712,8 +1928,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -2057,47 +2274,110 @@ description: Result of parsing makeup-mirror.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "YZ", + "name": "plane", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "YZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offset", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "altitude", + "start": 0, + "type": "Identifier" + }, + "arg": { "commentStart": 0, "end": 0, "left": { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "1.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.5, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "hingeHeight", + "name": "hingeGap", "start": 0, "type": "Identifier" }, @@ -2106,43 +2386,10 @@ description: Result of parsing makeup-mirror.kcl "type": "Name", "type": "Name" }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "1.5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.5, - "suffix": "None" - } - }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "hingeGap", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } } ], "callee": { @@ -2163,8 +2410,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -2190,116 +2438,146 @@ description: Result of parsing makeup-mirror.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "XZ", + "name": "plane", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "armLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "XZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offset", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "armLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "altitude", + "start": 0, + "type": "Identifier" + }, + "arg": { "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "hingeHeight", + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.5, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "*", + "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "2.5", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.5, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "hingeGap", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + } } ], "callee": { @@ -2320,8 +2598,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -3562,57 +3841,93 @@ description: Result of parsing makeup-mirror.kcl "init": { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "XZ", + "name": "plane", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "armLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "XZ", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offsetX", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "arg": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "armLength", + "name": { + "commentStart": 0, + "end": 0, + "name": "armLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "offsetY", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "armLength", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { - "commentStart": 0, - "end": 0, - "left": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "altitude", + "start": 0, + "type": "Identifier" + }, + "arg": { "commentStart": 0, "end": 0, "left": { @@ -3625,33 +3940,77 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "left": { - "abs_path": false, "commentStart": 0, "end": 0, - "name": { + "left": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "hingeHeight", + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } }, - "path": [], "start": 0, - "type": "Name", - "type": "Name" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "operator": "*", + "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "4", + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "hingeGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "*", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, "start": 0, "type": "BinaryExpression", @@ -3659,40 +4018,20 @@ description: Result of parsing makeup-mirror.kcl }, "operator": "+", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "left": { - "abs_path": false, + "name": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "hingeGap", - "start": 0, - "type": "Identifier" - }, - "path": [], + "name": "mirrorRadius", "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "*", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } + "type": "Identifier" }, + "path": [], "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -3706,7 +4045,7 @@ description: Result of parsing makeup-mirror.kcl "name": { "commentStart": 0, "end": 0, - "name": "mirrorRadius", + "name": "archToMirrorGap", "start": 0, "type": "Identifier" }, @@ -3727,7 +4066,7 @@ description: Result of parsing makeup-mirror.kcl "name": { "commentStart": 0, "end": 0, - "name": "archToMirrorGap", + "name": "archThickness", "start": 0, "type": "Identifier" }, @@ -3739,9 +4078,96 @@ description: Result of parsing makeup-mirror.kcl "start": 0, "type": "BinaryExpression", "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" }, - "operator": "+", - "right": { + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "mirrorRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tiefe", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "mirrorThickness", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "gestellR", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "archRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "gestellD", + "start": 0, + "type": "Identifier" + }, + "arg": { "abs_path": false, "commentStart": 0, "end": 0, @@ -3756,74 +4182,7 @@ description: Result of parsing makeup-mirror.kcl "start": 0, "type": "Name", "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "mirrorRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "mirrorThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "archRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "archThickness", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + } } ], "callee": { @@ -3844,8 +4203,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap index 4f9393450..6e3b98f48 100644 --- a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap @@ -549,7 +549,56 @@ description: Operations executed makeup-mirror.kcl "name": "hingeFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "x": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "y": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "z": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -560,7 +609,56 @@ description: Operations executed makeup-mirror.kcl "name": "hingeFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "x": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "y": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "z": { + "value": { + "type": "Number", + "value": 24.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -571,7 +669,56 @@ description: Operations executed makeup-mirror.kcl "name": "hingeFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "x": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "y": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "z": { + "value": { + "type": "Number", + "value": 49.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -582,7 +729,56 @@ description: Operations executed makeup-mirror.kcl "name": "hingeFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "x": { + "value": { + "type": "Number", + "value": 170.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "y": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "z": { + "value": { + "type": "Number", + "value": 24.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -593,7 +789,56 @@ description: Operations executed makeup-mirror.kcl "name": "hingeFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "x": { + "value": { + "type": "Number", + "value": 170.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "y": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "z": { + "value": { + "type": "Number", + "value": 49.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -604,7 +849,56 @@ description: Operations executed makeup-mirror.kcl "name": "hingeFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "x": { + "value": { + "type": "Number", + "value": 170.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "y": { + "value": { + "type": "Number", + "value": -170.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "z": { + "value": { + "type": "Number", + "value": 49.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -615,7 +909,56 @@ description: Operations executed makeup-mirror.kcl "name": "hingeFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "x": { + "value": { + "type": "Number", + "value": 170.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "y": { + "value": { + "type": "Number", + "value": -170.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "z": { + "value": { + "type": "Number", + "value": 73.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -720,7 +1063,47 @@ description: Operations executed makeup-mirror.kcl "name": "armFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "altitude": { + "value": { + "type": "Number", + "value": 36.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "offset": { + "value": { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "plane": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -731,7 +1114,47 @@ description: Operations executed makeup-mirror.kcl "name": "armFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "altitude": { + "value": { + "type": "Number", + "value": 61.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "offset": { + "value": { + "type": "Number", + "value": 170.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "plane": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -851,7 +1274,127 @@ description: Operations executed makeup-mirror.kcl "name": "mirrorFn", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "altitude": { + "value": { + "type": "Number", + "value": 188.5, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "gestellD": { + "value": { + "type": "Number", + "value": 1.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "gestellR": { + "value": { + "type": "Number", + "value": 90.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "offsetX": { + "value": { + "type": "Number", + "value": 170.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "offsetY": { + "value": { + "type": "Number", + "value": 170.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "plane": { + "value": { + "type": "Plane", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "radius": { + "value": { + "type": "Number", + "value": 85.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "tiefe": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/mounting-plate/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/mounting-plate/artifact_graph_flowchart.snap.md index d02a033bf..d2bf428b2 100644 --- a/rust/kcl-lib/tests/kcl_samples/mounting-plate/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/mounting-plate/artifact_graph_flowchart.snap.md @@ -9,32 +9,32 @@ flowchart LR 20[Solid2d] end subgraph path3 [Path] - 3["Path
[1118, 1263, 0]"] - 12["Segment
[1118, 1263, 0]"] + 3["Path
[1132, 1277, 0]"] + 12["Segment
[1132, 1277, 0]"] 19[Solid2d] end subgraph path4 [Path] - 4["Path
[1288, 1432, 0]"] - 13["Segment
[1288, 1432, 0]"] + 4["Path
[1302, 1446, 0]"] + 13["Segment
[1302, 1446, 0]"] 22[Solid2d] end subgraph path5 [Path] - 5["Path
[1457, 1603, 0]"] - 14["Segment
[1457, 1603, 0]"] + 5["Path
[1471, 1617, 0]"] + 14["Segment
[1471, 1617, 0]"] 21[Solid2d] end subgraph path6 [Path] - 6["Path
[1628, 1773, 0]"] - 15["Segment
[1628, 1773, 0]"] + 6["Path
[1642, 1787, 0]"] + 15["Segment
[1642, 1787, 0]"] 17[Solid2d] end subgraph path7 [Path] - 7["Path
[1798, 1850, 0]"] - 16["Segment
[1798, 1850, 0]"] + 7["Path
[1812, 1864, 0]"] + 16["Segment
[1812, 1864, 0]"] 18[Solid2d] end 1["Plane
[541, 558, 0]"] - 23["Sweep Extrusion
[1857, 1889, 0]"] + 23["Sweep Extrusion
[1871, 1903, 0]"] 24[Wall] 25[Wall] 26[Wall] @@ -49,10 +49,10 @@ flowchart LR 35["SweepEdge Adjacent"] 36["SweepEdge Adjacent"] 37["SweepEdge Adjacent"] - 38["EdgeCut Fillet
[1895, 2160, 0]"] - 39["EdgeCut Fillet
[1895, 2160, 0]"] - 40["EdgeCut Fillet
[1895, 2160, 0]"] - 41["EdgeCut Fillet
[1895, 2160, 0]"] + 38["EdgeCut Fillet
[1909, 2174, 0]"] + 39["EdgeCut Fillet
[1909, 2174, 0]"] + 40["EdgeCut Fillet
[1909, 2174, 0]"] + 41["EdgeCut Fillet
[1909, 2174, 0]"] 1 --- 2 1 --- 3 1 --- 4 diff --git a/rust/kcl-lib/tests/kcl_samples/mounting-plate/ast.snap b/rust/kcl-lib/tests/kcl_samples/mounting-plate/ast.snap index dbca783eb..30cdd4bbc 100644 --- a/rust/kcl-lib/tests/kcl_samples/mounting-plate/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/mounting-plate/ast.snap @@ -1273,69 +1273,99 @@ description: Result of parsing mounting-plate.kcl "init": { "arguments": [ { - "commentStart": 0, - "elements": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "w", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "raw": "0", + "name": "plateWidth", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } + "type": "Identifier" }, - { + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "l", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "raw": "0", + "name": "plateLength", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "plateWidth", + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "plateLength", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -1356,8 +1386,9 @@ description: Result of parsing mounting-plate.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/kcl_samples/mounting-plate/ops.snap b/rust/kcl-lib/tests/kcl_samples/mounting-plate/ops.snap index 535e5383c..30085d16c 100644 --- a/rust/kcl-lib/tests/kcl_samples/mounting-plate/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/mounting-plate/ops.snap @@ -25,7 +25,74 @@ description: Operations executed mounting-plate.kcl "name": "rectShape", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "l": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + }, + "pos": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "w": { + "value": { + "type": "Number", + "value": 6.0, + "ty": { + "type": "Default", + "len": { + "type": "Inches" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/kcl_samples/walkie-talkie/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/walkie-talkie/artifact_graph_flowchart.snap.md index 3a04bc2ff..c939454cd 100644 --- a/rust/kcl-lib/tests/kcl_samples/walkie-talkie/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/walkie-talkie/artifact_graph_flowchart.snap.md @@ -183,11 +183,11 @@ flowchart LR 2["Plane
[455, 472, 10]"] 3["Plane
[957, 974, 10]"] 4["Plane
[1418, 1435, 10]"] - 5["Plane
[2557, 2574, 10]"] - 6["Plane
[2627, 2644, 10]"] - 7["Plane
[2699, 2716, 10]"] - 8["Plane
[2770, 2787, 10]"] - 9["Plane
[2841, 2858, 10]"] + 5["Plane
[2567, 2584, 10]"] + 6["Plane
[2664, 2681, 10]"] + 7["Plane
[2763, 2780, 10]"] + 8["Plane
[2861, 2878, 10]"] + 9["Plane
[2959, 2976, 10]"] 10["Plane
[307, 324, 12]"] 11["Plane
[535, 574, 12]"] 12["Plane
[238, 255, 13]"] @@ -200,7 +200,7 @@ flowchart LR 158["Sweep Extrusion
[1749, 1792, 9]"] 159["Sweep Extrusion
[2151, 2194, 9]"] 160["Sweep Extrusion
[2446, 2479, 9]"] - 161["Sweep Extrusion
[2882, 2913, 10]"] + 161["Sweep Extrusion
[3017, 3048, 10]"] 162["Sweep Loft
[914, 957, 12]"] 163["Sweep Extrusion
[591, 643, 13]"] 164["Sweep Revolve
[522, 539, 14]"] diff --git a/rust/kcl-lib/tests/loop_tag/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/loop_tag/artifact_graph_flowchart.snap.md index 70d8a10d4..9e1bec20f 100644 --- a/rust/kcl-lib/tests/loop_tag/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/loop_tag/artifact_graph_flowchart.snap.md @@ -1,61 +1,61 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[732, 768, 0]"] - 3["Segment
[922, 986, 0]"] - 4["Segment
[922, 986, 0]"] - 5["Segment
[922, 986, 0]"] - 6["Segment
[922, 986, 0]"] - 7["Segment
[922, 986, 0]"] - 8["Segment
[922, 986, 0]"] - 9["Segment
[922, 986, 0]"] - 10["Segment
[922, 986, 0]"] - 11["Segment
[922, 986, 0]"] - 12["Segment
[922, 986, 0]"] - 13["Segment
[922, 986, 0]"] - 14["Segment
[922, 986, 0]"] - 15["Segment
[922, 986, 0]"] - 16["Segment
[922, 986, 0]"] - 17["Segment
[922, 986, 0]"] - 18["Segment
[922, 986, 0]"] - 19["Segment
[922, 986, 0]"] - 20["Segment
[922, 986, 0]"] - 21["Segment
[922, 986, 0]"] - 22["Segment
[922, 986, 0]"] - 23["Segment
[922, 986, 0]"] - 24["Segment
[922, 986, 0]"] - 25["Segment
[922, 986, 0]"] - 26["Segment
[922, 986, 0]"] - 27["Segment
[922, 986, 0]"] - 28["Segment
[922, 986, 0]"] - 29["Segment
[922, 986, 0]"] - 30["Segment
[922, 986, 0]"] - 31["Segment
[922, 986, 0]"] - 32["Segment
[922, 986, 0]"] - 33["Segment
[922, 986, 0]"] - 34["Segment
[922, 986, 0]"] - 35["Segment
[922, 986, 0]"] - 36["Segment
[922, 986, 0]"] - 37["Segment
[922, 986, 0]"] - 38["Segment
[922, 986, 0]"] - 39["Segment
[922, 986, 0]"] - 40["Segment
[922, 986, 0]"] - 41["Segment
[922, 986, 0]"] - 42["Segment
[922, 986, 0]"] - 43["Segment
[922, 986, 0]"] - 44["Segment
[922, 986, 0]"] - 45["Segment
[922, 986, 0]"] - 46["Segment
[922, 986, 0]"] - 47["Segment
[922, 986, 0]"] - 48["Segment
[922, 986, 0]"] - 49["Segment
[922, 986, 0]"] - 50["Segment
[922, 986, 0]"] - 51["Segment
[922, 986, 0]"] - 52["Segment
[1050, 1068, 0]"] + 2["Path
[733, 769, 0]"] + 3["Segment
[923, 987, 0]"] + 4["Segment
[923, 987, 0]"] + 5["Segment
[923, 987, 0]"] + 6["Segment
[923, 987, 0]"] + 7["Segment
[923, 987, 0]"] + 8["Segment
[923, 987, 0]"] + 9["Segment
[923, 987, 0]"] + 10["Segment
[923, 987, 0]"] + 11["Segment
[923, 987, 0]"] + 12["Segment
[923, 987, 0]"] + 13["Segment
[923, 987, 0]"] + 14["Segment
[923, 987, 0]"] + 15["Segment
[923, 987, 0]"] + 16["Segment
[923, 987, 0]"] + 17["Segment
[923, 987, 0]"] + 18["Segment
[923, 987, 0]"] + 19["Segment
[923, 987, 0]"] + 20["Segment
[923, 987, 0]"] + 21["Segment
[923, 987, 0]"] + 22["Segment
[923, 987, 0]"] + 23["Segment
[923, 987, 0]"] + 24["Segment
[923, 987, 0]"] + 25["Segment
[923, 987, 0]"] + 26["Segment
[923, 987, 0]"] + 27["Segment
[923, 987, 0]"] + 28["Segment
[923, 987, 0]"] + 29["Segment
[923, 987, 0]"] + 30["Segment
[923, 987, 0]"] + 31["Segment
[923, 987, 0]"] + 32["Segment
[923, 987, 0]"] + 33["Segment
[923, 987, 0]"] + 34["Segment
[923, 987, 0]"] + 35["Segment
[923, 987, 0]"] + 36["Segment
[923, 987, 0]"] + 37["Segment
[923, 987, 0]"] + 38["Segment
[923, 987, 0]"] + 39["Segment
[923, 987, 0]"] + 40["Segment
[923, 987, 0]"] + 41["Segment
[923, 987, 0]"] + 42["Segment
[923, 987, 0]"] + 43["Segment
[923, 987, 0]"] + 44["Segment
[923, 987, 0]"] + 45["Segment
[923, 987, 0]"] + 46["Segment
[923, 987, 0]"] + 47["Segment
[923, 987, 0]"] + 48["Segment
[923, 987, 0]"] + 49["Segment
[923, 987, 0]"] + 50["Segment
[923, 987, 0]"] + 51["Segment
[923, 987, 0]"] + 52["Segment
[1051, 1069, 0]"] 53[Solid2d] end - 1["Plane
[709, 726, 0]"] - 54["Sweep Extrusion
[1122, 1160, 0]"] + 1["Plane
[710, 727, 0]"] + 54["Sweep Extrusion
[1123, 1161, 0]"] 55[Wall] 56[Wall] 57[Wall] diff --git a/rust/kcl-lib/tests/loop_tag/ast.snap b/rust/kcl-lib/tests/loop_tag/ast.snap index 0e850230b..5b0641237 100644 --- a/rust/kcl-lib/tests/loop_tag/ast.snap +++ b/rust/kcl-lib/tests/loop_tag/ast.snap @@ -474,7 +474,8 @@ description: Result of parsing loop_tag.kcl "name": "index", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/loop_tag/input.kcl b/rust/kcl-lib/tests/loop_tag/input.kcl index 4e7af6ee5..c7e1f9f0c 100644 --- a/rust/kcl-lib/tests/loop_tag/input.kcl +++ b/rust/kcl-lib/tests/loop_tag/input.kcl @@ -12,7 +12,7 @@ numSides = 50 angleIncrement = 360 / numSides // Function to calculate the coordinates of a point on the circle -fn calculatePoint(index) { +fn calculatePoint(@index) { angle = index * angleIncrement x = radius * cos(angle) y = radius * sin(angle) diff --git a/rust/kcl-lib/tests/loop_tag/program_memory.snap b/rust/kcl-lib/tests/loop_tag/program_memory.snap index a7e15b8f4..8d588bce1 100644 --- a/rust/kcl-lib/tests/loop_tag/program_memory.snap +++ b/rust/kcl-lib/tests/loop_tag/program_memory.snap @@ -35,9 +35,9 @@ description: Variables in memory after executing loop_tag.kcl 0.0 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -60,9 +60,9 @@ description: Variables in memory after executing loop_tag.kcl 1.2533 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -85,9 +85,9 @@ description: Variables in memory after executing loop_tag.kcl 3.7402 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -110,9 +110,9 @@ description: Variables in memory after executing loop_tag.kcl 7.4215 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -135,9 +135,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -160,9 +160,9 @@ description: Variables in memory after executing loop_tag.kcl 18.1169 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -185,9 +185,9 @@ description: Variables in memory after executing loop_tag.kcl 24.9623 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -210,9 +210,9 @@ description: Variables in memory after executing loop_tag.kcl 32.6675 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -235,9 +235,9 @@ description: Variables in memory after executing loop_tag.kcl 41.1107 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -260,9 +260,9 @@ description: Variables in memory after executing loop_tag.kcl 50.159 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -285,9 +285,9 @@ description: Variables in memory after executing loop_tag.kcl 59.6696 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -310,9 +310,9 @@ description: Variables in memory after executing loop_tag.kcl 69.4925 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -335,9 +335,9 @@ description: Variables in memory after executing loop_tag.kcl 79.4727 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -360,9 +360,9 @@ description: Variables in memory after executing loop_tag.kcl 89.453 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -385,9 +385,9 @@ description: Variables in memory after executing loop_tag.kcl 99.2759 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -410,9 +410,9 @@ description: Variables in memory after executing loop_tag.kcl 108.7864 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -435,9 +435,9 @@ description: Variables in memory after executing loop_tag.kcl 117.8347 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -460,9 +460,9 @@ description: Variables in memory after executing loop_tag.kcl 126.278 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -485,9 +485,9 @@ description: Variables in memory after executing loop_tag.kcl 133.9831 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -510,9 +510,9 @@ description: Variables in memory after executing loop_tag.kcl 140.8286 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -535,9 +535,9 @@ description: Variables in memory after executing loop_tag.kcl 146.7064 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -560,9 +560,9 @@ description: Variables in memory after executing loop_tag.kcl 151.524 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -585,9 +585,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -610,9 +610,9 @@ description: Variables in memory after executing loop_tag.kcl 157.6921 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -635,9 +635,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -660,9 +660,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -685,9 +685,9 @@ description: Variables in memory after executing loop_tag.kcl 157.6921 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -710,9 +710,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -735,9 +735,9 @@ description: Variables in memory after executing loop_tag.kcl 151.524 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -760,9 +760,9 @@ description: Variables in memory after executing loop_tag.kcl 146.7064 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -785,9 +785,9 @@ description: Variables in memory after executing loop_tag.kcl 140.8286 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -810,9 +810,9 @@ description: Variables in memory after executing loop_tag.kcl 133.9831 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -835,9 +835,9 @@ description: Variables in memory after executing loop_tag.kcl 126.278 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -860,9 +860,9 @@ description: Variables in memory after executing loop_tag.kcl 117.8347 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -885,9 +885,9 @@ description: Variables in memory after executing loop_tag.kcl 108.7864 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -910,9 +910,9 @@ description: Variables in memory after executing loop_tag.kcl 99.2759 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -935,9 +935,9 @@ description: Variables in memory after executing loop_tag.kcl 89.453 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -960,9 +960,9 @@ description: Variables in memory after executing loop_tag.kcl 79.4727 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -985,9 +985,9 @@ description: Variables in memory after executing loop_tag.kcl 69.4925 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1010,9 +1010,9 @@ description: Variables in memory after executing loop_tag.kcl 59.6696 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1035,9 +1035,9 @@ description: Variables in memory after executing loop_tag.kcl 50.159 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1060,9 +1060,9 @@ description: Variables in memory after executing loop_tag.kcl 41.1107 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1085,9 +1085,9 @@ description: Variables in memory after executing loop_tag.kcl 32.6675 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1110,9 +1110,9 @@ description: Variables in memory after executing loop_tag.kcl 24.9623 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1135,9 +1135,9 @@ description: Variables in memory after executing loop_tag.kcl 18.1169 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1160,9 +1160,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1185,9 +1185,9 @@ description: Variables in memory after executing loop_tag.kcl 7.4215 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1210,9 +1210,9 @@ description: Variables in memory after executing loop_tag.kcl 3.7402 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1235,9 +1235,9 @@ description: Variables in memory after executing loop_tag.kcl 1.2533 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1343,9 +1343,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1356,9 +1356,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1369,9 +1369,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1382,9 +1382,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1395,9 +1395,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1408,9 +1408,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1421,9 +1421,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1434,9 +1434,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1447,9 +1447,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1460,9 +1460,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1473,9 +1473,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1486,9 +1486,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1499,9 +1499,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1512,9 +1512,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1525,9 +1525,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1538,9 +1538,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1551,9 +1551,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1564,9 +1564,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1577,9 +1577,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1590,9 +1590,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1603,9 +1603,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1616,9 +1616,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1629,9 +1629,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1642,9 +1642,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1655,9 +1655,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1668,9 +1668,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1681,9 +1681,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1694,9 +1694,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1707,9 +1707,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1720,9 +1720,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1733,9 +1733,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1746,9 +1746,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1759,9 +1759,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1772,9 +1772,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1785,9 +1785,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1798,9 +1798,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1811,9 +1811,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1824,9 +1824,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1837,9 +1837,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1850,9 +1850,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1863,9 +1863,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1876,9 +1876,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1889,9 +1889,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1902,9 +1902,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1915,9 +1915,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1928,9 +1928,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1941,9 +1941,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1954,9 +1954,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1967,9 +1967,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1997,9 +1997,9 @@ description: Variables in memory after executing loop_tag.kcl 0.0 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2022,9 +2022,9 @@ description: Variables in memory after executing loop_tag.kcl 1.2533 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2047,9 +2047,9 @@ description: Variables in memory after executing loop_tag.kcl 3.7402 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2072,9 +2072,9 @@ description: Variables in memory after executing loop_tag.kcl 7.4215 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2097,9 +2097,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2122,9 +2122,9 @@ description: Variables in memory after executing loop_tag.kcl 18.1169 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2147,9 +2147,9 @@ description: Variables in memory after executing loop_tag.kcl 24.9623 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2172,9 +2172,9 @@ description: Variables in memory after executing loop_tag.kcl 32.6675 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2197,9 +2197,9 @@ description: Variables in memory after executing loop_tag.kcl 41.1107 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2222,9 +2222,9 @@ description: Variables in memory after executing loop_tag.kcl 50.159 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2247,9 +2247,9 @@ description: Variables in memory after executing loop_tag.kcl 59.6696 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2272,9 +2272,9 @@ description: Variables in memory after executing loop_tag.kcl 69.4925 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2297,9 +2297,9 @@ description: Variables in memory after executing loop_tag.kcl 79.4727 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2322,9 +2322,9 @@ description: Variables in memory after executing loop_tag.kcl 89.453 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2347,9 +2347,9 @@ description: Variables in memory after executing loop_tag.kcl 99.2759 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2372,9 +2372,9 @@ description: Variables in memory after executing loop_tag.kcl 108.7864 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2397,9 +2397,9 @@ description: Variables in memory after executing loop_tag.kcl 117.8347 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2422,9 +2422,9 @@ description: Variables in memory after executing loop_tag.kcl 126.278 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2447,9 +2447,9 @@ description: Variables in memory after executing loop_tag.kcl 133.9831 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2472,9 +2472,9 @@ description: Variables in memory after executing loop_tag.kcl 140.8286 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2497,9 +2497,9 @@ description: Variables in memory after executing loop_tag.kcl 146.7064 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2522,9 +2522,9 @@ description: Variables in memory after executing loop_tag.kcl 151.524 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2547,9 +2547,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2572,9 +2572,9 @@ description: Variables in memory after executing loop_tag.kcl 157.6921 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2597,9 +2597,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2622,9 +2622,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2647,9 +2647,9 @@ description: Variables in memory after executing loop_tag.kcl 157.6921 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2672,9 +2672,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2697,9 +2697,9 @@ description: Variables in memory after executing loop_tag.kcl 151.524 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2722,9 +2722,9 @@ description: Variables in memory after executing loop_tag.kcl 146.7064 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2747,9 +2747,9 @@ description: Variables in memory after executing loop_tag.kcl 140.8286 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2772,9 +2772,9 @@ description: Variables in memory after executing loop_tag.kcl 133.9831 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2797,9 +2797,9 @@ description: Variables in memory after executing loop_tag.kcl 126.278 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2822,9 +2822,9 @@ description: Variables in memory after executing loop_tag.kcl 117.8347 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2847,9 +2847,9 @@ description: Variables in memory after executing loop_tag.kcl 108.7864 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2872,9 +2872,9 @@ description: Variables in memory after executing loop_tag.kcl 99.2759 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2897,9 +2897,9 @@ description: Variables in memory after executing loop_tag.kcl 89.453 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2922,9 +2922,9 @@ description: Variables in memory after executing loop_tag.kcl 79.4727 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2947,9 +2947,9 @@ description: Variables in memory after executing loop_tag.kcl 69.4925 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2972,9 +2972,9 @@ description: Variables in memory after executing loop_tag.kcl 59.6696 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2997,9 +2997,9 @@ description: Variables in memory after executing loop_tag.kcl 50.159 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3022,9 +3022,9 @@ description: Variables in memory after executing loop_tag.kcl 41.1107 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3047,9 +3047,9 @@ description: Variables in memory after executing loop_tag.kcl 32.6675 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3072,9 +3072,9 @@ description: Variables in memory after executing loop_tag.kcl 24.9623 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3097,9 +3097,9 @@ description: Variables in memory after executing loop_tag.kcl 18.1169 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3122,9 +3122,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3147,9 +3147,9 @@ description: Variables in memory after executing loop_tag.kcl 7.4215 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3172,9 +3172,9 @@ description: Variables in memory after executing loop_tag.kcl 3.7402 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3197,9 +3197,9 @@ description: Variables in memory after executing loop_tag.kcl 1.2533 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3317,9 +3317,9 @@ description: Variables in memory after executing loop_tag.kcl 0.0 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3342,9 +3342,9 @@ description: Variables in memory after executing loop_tag.kcl 1.2533 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3367,9 +3367,9 @@ description: Variables in memory after executing loop_tag.kcl 3.7402 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3392,9 +3392,9 @@ description: Variables in memory after executing loop_tag.kcl 7.4215 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3417,9 +3417,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3442,9 +3442,9 @@ description: Variables in memory after executing loop_tag.kcl 18.1169 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3467,9 +3467,9 @@ description: Variables in memory after executing loop_tag.kcl 24.9623 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3492,9 +3492,9 @@ description: Variables in memory after executing loop_tag.kcl 32.6675 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3517,9 +3517,9 @@ description: Variables in memory after executing loop_tag.kcl 41.1107 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3542,9 +3542,9 @@ description: Variables in memory after executing loop_tag.kcl 50.159 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3567,9 +3567,9 @@ description: Variables in memory after executing loop_tag.kcl 59.6696 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3592,9 +3592,9 @@ description: Variables in memory after executing loop_tag.kcl 69.4925 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3617,9 +3617,9 @@ description: Variables in memory after executing loop_tag.kcl 79.4727 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3642,9 +3642,9 @@ description: Variables in memory after executing loop_tag.kcl 89.453 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3667,9 +3667,9 @@ description: Variables in memory after executing loop_tag.kcl 99.2759 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3692,9 +3692,9 @@ description: Variables in memory after executing loop_tag.kcl 108.7864 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3717,9 +3717,9 @@ description: Variables in memory after executing loop_tag.kcl 117.8347 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3742,9 +3742,9 @@ description: Variables in memory after executing loop_tag.kcl 126.278 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3767,9 +3767,9 @@ description: Variables in memory after executing loop_tag.kcl 133.9831 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3792,9 +3792,9 @@ description: Variables in memory after executing loop_tag.kcl 140.8286 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3817,9 +3817,9 @@ description: Variables in memory after executing loop_tag.kcl 146.7064 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3842,9 +3842,9 @@ description: Variables in memory after executing loop_tag.kcl 151.524 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3867,9 +3867,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3892,9 +3892,9 @@ description: Variables in memory after executing loop_tag.kcl 157.6921 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3917,9 +3917,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3942,9 +3942,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3967,9 +3967,9 @@ description: Variables in memory after executing loop_tag.kcl 157.6921 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3992,9 +3992,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4017,9 +4017,9 @@ description: Variables in memory after executing loop_tag.kcl 151.524 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4042,9 +4042,9 @@ description: Variables in memory after executing loop_tag.kcl 146.7064 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4067,9 +4067,9 @@ description: Variables in memory after executing loop_tag.kcl 140.8286 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4092,9 +4092,9 @@ description: Variables in memory after executing loop_tag.kcl 133.9831 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4117,9 +4117,9 @@ description: Variables in memory after executing loop_tag.kcl 126.278 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4142,9 +4142,9 @@ description: Variables in memory after executing loop_tag.kcl 117.8347 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4167,9 +4167,9 @@ description: Variables in memory after executing loop_tag.kcl 108.7864 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4192,9 +4192,9 @@ description: Variables in memory after executing loop_tag.kcl 99.2759 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4217,9 +4217,9 @@ description: Variables in memory after executing loop_tag.kcl 89.453 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4242,9 +4242,9 @@ description: Variables in memory after executing loop_tag.kcl 79.4727 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4267,9 +4267,9 @@ description: Variables in memory after executing loop_tag.kcl 69.4925 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4292,9 +4292,9 @@ description: Variables in memory after executing loop_tag.kcl 59.6696 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4317,9 +4317,9 @@ description: Variables in memory after executing loop_tag.kcl 50.159 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4342,9 +4342,9 @@ description: Variables in memory after executing loop_tag.kcl 41.1107 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4367,9 +4367,9 @@ description: Variables in memory after executing loop_tag.kcl 32.6675 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4392,9 +4392,9 @@ description: Variables in memory after executing loop_tag.kcl 24.9623 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4417,9 +4417,9 @@ description: Variables in memory after executing loop_tag.kcl 18.1169 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4442,9 +4442,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4467,9 +4467,9 @@ description: Variables in memory after executing loop_tag.kcl 7.4215 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4492,9 +4492,9 @@ description: Variables in memory after executing loop_tag.kcl 3.7402 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4517,9 +4517,9 @@ description: Variables in memory after executing loop_tag.kcl 1.2533 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 971, + "end": 986, + "start": 971, "type": "TagDeclarator", "value": "problematicTag" }, diff --git a/rust/kcl-lib/tests/loop_tag/unparsed.snap b/rust/kcl-lib/tests/loop_tag/unparsed.snap index 369b68bae..f85f36e00 100644 --- a/rust/kcl-lib/tests/loop_tag/unparsed.snap +++ b/rust/kcl-lib/tests/loop_tag/unparsed.snap @@ -19,7 +19,7 @@ numSides = 50 angleIncrement = 360 / numSides // Function to calculate the coordinates of a point on the circle -fn calculatePoint(index) { +fn calculatePoint(@index) { angle = index * angleIncrement x = radius * cos(angle) y = radius * sin(angle) diff --git a/rust/kcl-lib/tests/misc/cube.kcl b/rust/kcl-lib/tests/misc/cube.kcl new file mode 100644 index 000000000..af78b233d --- /dev/null +++ b/rust/kcl-lib/tests/misc/cube.kcl @@ -0,0 +1,22 @@ +@settings(defaultLengthUnit = mm) + +fn cube(sideLength, center) { + l = sideLength / 2 + x = center[0] + y = center[1] + p0 = [-l + x, -l + y] + p1 = [-l + x, l + y] + p2 = [l + x, l + y] + p3 = [l + x, -l + y] + + return startSketchOn(XY) + |> startProfile(at = p0) + |> line(endAbsolute = p1) + |> line(endAbsolute = p2) + |> line(endAbsolute = p3) + |> line(endAbsolute = p0) + |> close() + |> extrude(length = sideLength) +} + +myCube = cube(sideLength = 40, center = [0, 0]) diff --git a/rust/kcl-lib/tests/multi_transform/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/multi_transform/artifact_graph_flowchart.snap.md index c2e0ce920..9f89ac3ca 100644 --- a/rust/kcl-lib/tests/multi_transform/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/multi_transform/artifact_graph_flowchart.snap.md @@ -1,19 +1,19 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[132, 157, 0]"] + 2["Path
[133, 158, 0]"] end subgraph path3 [Path] - 3["Path
[163, 269, 0]"] - 4["Segment
[163, 269, 0]"] - 5["Segment
[163, 269, 0]"] - 6["Segment
[163, 269, 0]"] - 7["Segment
[163, 269, 0]"] - 8["Segment
[163, 269, 0]"] + 3["Path
[164, 270, 0]"] + 4["Segment
[164, 270, 0]"] + 5["Segment
[164, 270, 0]"] + 6["Segment
[164, 270, 0]"] + 7["Segment
[164, 270, 0]"] + 8["Segment
[164, 270, 0]"] 9[Solid2d] end - 1["Plane
[109, 126, 0]"] - 10["Sweep Extrusion
[275, 294, 0]"] + 1["Plane
[110, 127, 0]"] + 10["Sweep Extrusion
[276, 295, 0]"] 11[Wall] 12[Wall] 13[Wall] diff --git a/rust/kcl-lib/tests/multi_transform/ast.snap b/rust/kcl-lib/tests/multi_transform/ast.snap index 2f5183e48..1763a21a7 100644 --- a/rust/kcl-lib/tests/multi_transform/ast.snap +++ b/rust/kcl-lib/tests/multi_transform/ast.snap @@ -223,7 +223,8 @@ description: Result of parsing multi_transform.kcl "name": "i", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/multi_transform/input.kcl b/rust/kcl-lib/tests/multi_transform/input.kcl index 351d57b37..d3b4679ac 100644 --- a/rust/kcl-lib/tests/multi_transform/input.kcl +++ b/rust/kcl-lib/tests/multi_transform/input.kcl @@ -1,4 +1,4 @@ -fn transform(i) { +fn transform(@i) { return [ { translate = [30 * i, 0, 0] }, { rotation = { angle = 45 * i } } diff --git a/rust/kcl-lib/tests/multi_transform/unparsed.snap b/rust/kcl-lib/tests/multi_transform/unparsed.snap index acc908239..68881b7f6 100644 --- a/rust/kcl-lib/tests/multi_transform/unparsed.snap +++ b/rust/kcl-lib/tests/multi_transform/unparsed.snap @@ -2,7 +2,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing multi_transform.kcl --- -fn transform(i) { +fn transform(@i) { return [ { translate = [30 * i, 0, 0] }, { rotation = { angle = 45 * i } } diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_angle_to_match_length_x0.png b/rust/kcl-lib/tests/outputs/serial_test_example_angle_to_match_length_x0.png deleted file mode 100644 index 5e10b3a04a486aac6c5c1cc2e49f61cf883e104f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59972 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 diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_angle_to_match_length_y0.png b/rust/kcl-lib/tests/outputs/serial_test_example_angle_to_match_length_y0.png deleted file mode 100644 index 01ba6d03861383796e67cbe5b01e160adb08e820..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57479 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 diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_angled_line_of_x_length0.png b/rust/kcl-lib/tests/outputs/serial_test_example_angled_line_of_x_length0.png deleted file mode 100644 index c9a36c911cea162071d86184cffbb0347b2369de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54928 zcmeIbeOy&#);@j!mGUJT%cv}<#Avd@$&yOs)Rd#-Ogw#?avGD9Suu?w8W|uj8?!RA z#IzzKp|NMinH(i^6jAWtE1DubIf({x02O>gUXHvS&N=&ct#$9c&)$clInVd^$M+BB zGr$Rfv+w&}>sr^k*1GR|@qaxvamc`%2bxT#Au*Gl_&+97f4ubn{;C1^Qju}|Ig{zg zl$a+T`+bUEQ)$4LVb6cMw^dHQ@Zr9LYhIr`V|_x^X665{eUSI*lLdMAkGbPQ_nU=( zp8vN+<7WO?5PkZwp!%=ZuHSmL_a}#W@psQonKtjo-k;i~VW0T^rLAY>yYKe>OY?q| zpZ&ehcfz~NYybX&uXn=tp*L^%5{UMiS!l~Y4;&D2x@AnN%H=}(k zW-$LgQ`Ff;pN|=AW9|Ar@Gt^@A9xrHqz^p$z@v|O=m}sSSJcl&9|<!VbCl8_ zHs$*(Uq~unXsq?bU9T${xr4h~g5;KF|C9~EX&Wk|(>l(tljKfGu9E5d6jvW8xdrbSQI_a#NNmfscIOt~^?x%$Yp)Tm){Rg)UzYj7 zn(w}7}!589lrF*MPUpzF|KWhv>UUqQEw$tOMgPIukLl$rExzC0 zlwKd6c?T`@sO|NmjvhaLYQift^5Wa*dtI$3$VKb^5|nY*mCw65z-!*6LSHLwn&e+g ze>k+oFVs{TpV<)a|02D$bLPDEec=)H7C)0eHcLJRXaF@itGv+da

>4ZIyxH%ex%K_X0#Z&t9{OGDiLz9D z9azdQqN~R$_t@Nvq^?D_ZvNb$Zvt@7@OFnOJ%|O>wykyV4v*_8%RFC}LKx!; zn`@3?FNZTGR;(+m`7SxLF}bZ^IspM2#;&oQ1e}*+ZXp7!{@6_RmFFO`MsDM{7#r@R#I#Ig!|%(_gUPhEdFy~ zvm6Rws~2}*t)!N5C5OkAjJ@J{ihDpGbqDF~_A9gFt0>o**v8D|Tk^v$biy$EWwF`P zHxlBmUvB!Qe95nenl`6CJ;}dxY{Wo%>dfGXxRdpJmTt?~|A(P-n0Mqn7TpQME<~7qx6=JTp{}R%+!xm*nPaMB zhX!4wm|c9ls^nJ5RVkIny8a#8y84@P>!%6s2WQ#IxBz%}8G;-A#uf7hxAoUSfV?eQ z3C>Y*Q4hE7)7fno*O*sfJ{GWr)1zSaBM!vM7h~;&`OcZg8Z7K;G&P8|?gttALmmIc zQ}iD`&!gVY)8^}W0+;U=mY(h`lcLBv*21EWAqZsh3ejV1QYXkc6Bu|)7J;CM!!V+v z-f>vOWCDg!x?t?GyyJyK`34+v{ZHsA!XdV8Hk?dLOMeT(g47XjcOoEQZvLn}6tCLw zEC95L0|Ofm0b}PjkKHP0w9e*O*Q~c;d9pV+f7Q#;5Fj2O+POkZPj&MvmX23aw-u(1 zb2|#;&-2}9@*CdSV6-0voPyqfQEQe&LAzJrx&&vCU-dTWk9wIj_$Oc}rk*h%5E%o8KMu>f04CFU+yM$7WOeap z`&4WDR9m@+GCeEjdPDcbZXI+pWCFV1Rs5apJKfzVMVl=42Q9nyED7$e{FV(`XGy%C z5&M4jnfPh!{A7k_TH#G^CU*VYGZh~^P&_!X^UcJ-(#G^djV+G~W70!_vV`(-*cD-U zT*oVxPl*Iz39rvWlG6NK76P2q)dZ8WIr8{*f`@3VcjWi;;<&bR`e>_JIf5;4iS5g; zWotpt*5V82w%^C#RN*{W(Lx5VEgyq{>V?IB*BckHq!1XH{~TJ#fh{~=%1ZX0wN?7S zXCOr!TwwDjiWJ)-@E*^}*-aHG10vo-sI#wL-Y?4&XF4~QTb~%(`?G0tcg_pNDIYBf zj%dq~x^s>;>|T5wMbcC7&(jNIkwH*U%(&v9C_m}#7ti&IIAHOnWs0-%yar^j3Fg}$ z&flfZAM;vujWy2@YywzDjOII7Br%*TW;XI~y&vv|pLw{Tu*E$kl*c6YY)(92bC%m$ z#+dD6#DaSv9K|I)uFz65o*0bs$j11J8V9oRPSuHfFa1aQr5~>6qUzEUA11tOeQOfn zg;E~>Qm{aij$AzHMJ@y-vfM$$$a05~7zNA$Gji8QxZkpNEwP$v4Mt$Oa4PP?j);zz zB07E&RQBhy<@RQ8CR%O5^PAmal2r!}DJMxOBj9R83ro!h^^E*>b zv@n8r3pU`x9*Xgds~O2vo2Be^u9e{Fh(IU)yvp+pJw(l)?iKvvuGbsvzHH}J2L2`@ z&7`5G2>bmJyQ;P~RkcM*_DFz~bFdO#3^dBizs^$jLe4)uDDB4oY$g|YJ*a!+6+LKY zT2*1j)VPLM;@-`79m_vOvWcL2y7;4Vt<yz@y()E-}CA%p|ne(UQ=qn^pxtNY3rlQQr-c-|&Q1dRdGHV?X zNQy#gJXL2KPbrY+5 zR;0QB0aHz5M$ICU7@X%T-1oq@q+K9vOm;obDl{1ZPfAb#(_^55I`$Tk@~HFEgHH6~ zz|4MoW#p1~78mHy^QX*{6Db{6Ii1mHt)%7juRRC4iA-USw;gyzS)GUF(32{W>tpqa z16chXRx89=%xdBGMsFEI&hUbQ3wq%UKd1v%Au=}IXI7nEyNnlFXj%F>+e3P{KN}ke_Z- zl2FEIzd6wNO?j;!#J3n%1I*W`wp3S)m50Xk{><8uMvkP#Or>dINjJ)uyYuahlDm;a z?za|=KR=zIJfj7nD8xxCQ*fm#Q?SSY?Jn8CJM=!HBS#^V)FkAG2-gpAlHws!PoZ>x zTwIad;3P^E@}Ln5CWM@xY?ILFB#}H7g$P9{=wBhfb2UD0kSyGiFGL!UWgtyTgaYWB zQgRDZhsQboYWbX&_5{g?MR0_BFB?wbfhn&>s!vS{S!#EVl-fH*PV(f;x|~#s zGU{S-zFzV^IWhBXs;ZcXTa$dp5{KS9G7grd4`w0&TrGOz%+QMRvGNU9;2v?mS9AP` zuQhOm9ThtdSfhH&A-;7zuiA`5KIO}=DHrg1bfgRcM6|mQyJnf7^=;1z-m5*hks3ff z)dz=&yVcwVuQcl?^FeX#ln-Tz#b%b5#(I<`dA>0LlS6&Ewk|nTtzQ6c(8c=^Ad110 z9@GrKmCy!{PLSkzU_BL6<{XKoXZA%NNtA)ihEVECIl224uOS3oZV0-(K^a2WVhWoL zf3-ON+TEQmr-Jah-zB+xsz6dDi7+mPm+z7Q3U=`*?BB$03sM|W4g z^BJB^#CDXROopUl4|%U*K6S&lFPNNjAH;R_@h=TM5CjbtM33);8Tn_C>d;8gLvij( zDuqUYOD^n1-AEbH`7P38En1WDn^Ml?WWH7dP3Y#V22%MxX^QsxltqYBu}A79_0l->wSTb;1?X@w2-U~C9SD4 zGa;^LlO-3`DC;Q-NvYF?15hsFi2{l^EpSznCzPd79DK6xVR$mqRXQ1MwkDv-5k{UT z=jsK}k3zeDkp}@3>`omCOh+J+nodQ1PkJPk8ZS^{q)tu+J&DWcM_#CX14B?XNHK4Y2O1KLN9tT!+0l#?Mifs%7U>Z?n*T3 zW-gnd6M%@}zt=<$(|k&}msgYwyE-e|@%QX{s5$8;A~Q$i+&8VhzbJqJ+7cB$DDo)* zXsYPS|D<@B>Q_u8~;Co;Nzb)X8ro!WI4zEbrJEm)!wPzd^ zUlj!OkV^QKhv4|)X5xFadaEB%^F{)bQN=q)&ABqgQNGU$4C8cQC~?CWNMLezlvE3c&Gl333_ zrvfDBm;(!1239wtEv=%9n;RTl9rwkb9R+V0bFXH7^_MW*|2DEkmG29konx0EK>;!T zwIwy@N>W-Dh91NKrItXcw4}4y<2?poVHKYIC}v(LbLfAKzKM%f7Lsq`aZwPFm~AxU_qHuQ_QQ{ zgDx3N6mIJs;+eXCTOP1VfgT?Ju(-NmJ}9HF)I+-7NV=pPLAuTrSlyefrZ{B?Lr=RL+NqUbS*3Xu& zto-Fcs~6AIWbf43VEm5`Wku+nDJlIgk+*QY(?isxAg`fkUw-JS;S0a!|LQgL-LcMo za@^FZQ%!8gI;u*L95|LBiff4^i5c3)0PWc&u!`WX=ZBIuFykC+eiQac5i9g zTt!uZ%~i8cC_J_o6^H$6WdY)`#waV)0gA>WiOQ-94O3dFYgdsC-COysTs&;&vY}UY z*S^!s!|ftF>h0kg8CQ``grz`=9Et7ECGJ@m>U{Bg*JuME!uL1x7o1GY0YF+1xF zJx!cO8s&C}Z0y^10NqD9md*kH~LbB~ynkTCc7yvn&vn<~HEv}w=0%4uZ* zglvRrwA>1^%{6lrBk_P}v=@2t*th4EV(FfQsqxLWlQB$SS{9kVAXbX6w`5&Gj?^w0 z%b4xv3iP5kx{tJ1TI8QBUGG@l^QGTlN)%5=HyO?K#EgGW^qW&LzO!Yr_2T5H$Qb98 zk9J$jbXE_PXORE?uak3BcvJ0PV=)xhIeXwF(Z~Ax;xn}V`$$0HoVVBFSLBWF`G8Z3 zb)raaOf2LZydeHlJ;b*RvRCM zJSr2ZphqeJdjP9Xmv5DEHG2{H3ME%|wO3j@JVgF7THqENnxnhX2Ky(|g`&m~tbgWW z`JUxn`A-ZD`j_JQKRW@QWQ|b32e;AVJT(as3V28W=|1EGYQ&3c9cKB+&^yl-;3F56 zH+mU>l305X(DZWK=9{f0aWr}1)eM*FI3A` z4KU~#q7RrT_t9r6I*B^->96B|%`Q&iWE zpoS7#Pl?|a*jzVs`H?8db`^vzmSa>50NYd94`D#RQZ9#L3(BVy5u%o9l`ArRy{=*~ zeUIP62{;m<3ik;WB~mka{0g~k73248dJ-|e$MX$UOLjCH`*dBMitxw0XOOjJke|0m z#?GMTv8;wu7Mo`6ObeKUE?_$a0q0a;;KDHXwuFR)4T=|#5vXzS>MR~MrSfX!PJw@- z`J#*=T;bB=SAI^JiJc6BAUqdEtzBf=ZSz}el4|u z=Fd7an>z>8LTGKE7|@k{=VJNluvW`!GiNSAYPWvdg-6tnyedRN27c8BZqU~Jk6!NY z3GQtpga?NCQ>gTxbawfTK?JXz6%`0uL zq25UIJUEC~!XqBWuqnZ# zJPKe}uX-O`Y~9@Kv|EDjd*Q{gxn$_+(T$YdKAk=P`iS=b6R~IV_LGxeM*?tve#Od)#uvc; zdt!b)bUFCpuZKq59W$wZ!pN&*ivJ#V`{LkF!opftFMm4>y+6x#qs>JBL$~9H?g~>r zFGiuk=Z_AIne>r2yT-{v_4Gpbk*I~2kCbisVzQNF8*Ph>endwm#9M$D7 zJw5Tucgxo=@3PIFIdf1Jtv~dzyhQ}Wg~yLi`az&0E0|vfa@gGv40~*3i+lAk`4JbOE`*@gNCe24AhvyUt*xrehjpmHpL#I945$J z3&~JvgJ=(3^g2qO>cW04M|u0SDya7=Ix31Bx69H_y8*TIxeMEXMlol>@R}%W-8kUB z7q*lVL$}E77W>C*qTU%4eBbD$BjAKDN9QLYw{89V#PRRv%>PGD{YXpO$RcQ2u=0Cu z7)12`=}9^hhoQrI#b+;bzn;wfNiuis7c@iHd_w!7>7O1LX(HE}cZ=vBT%>GEb7Xr} zR2r4-A%exAO~pfERDk!&<-b3G4I?eIztiMA)a<+_HnVL-cOe!%Fy@8!#Eo!oWW^Q4 zUq*zqUX@pcB#u^_&=m9Q>lpgl@Z{&+q!|Z)c8BooYTebU&vq zvUkT$w$gJUcuM+?V6Hgm08aH_O@p=Oq^``VqyA98u2r_~TN&X(e>YTK6*l+BC2-#* za$3!)X|$zgkk@`IIi%C=Fr%PUU( zL2uJLg46vxWh1SLK_TG^A4%gzVD8GWb+5A3#l+4Z3L1VJXgEe_FVw9eB_kGTe9*rT zs=&s!fQ@iUN?|MR+W&}xdTM3>v_QuuTIQ?D~| zPX|3MP@~lXOAVe>FFjJ_oc!+eT4%SNDb@bi%=^h#i{{k%?;1UNa6tT_FY0I$0wraC zjXV3-lz-&R|7D2l^u(m|M}K8P?)A1IfHL?{Kt=%71!OJCYT#o;D303d4{5OE{Cwv6 z)E3$<=pL+Mb)r|ZRF6I!U2aA+;@zBp?sjgj5HmtlTZ)KrCV#a1S$QKVjR1ipe5fcD z(1f}Ph}Z0r_UF_99Pqzf@72VwLmht!{SE{(b5~^gt{%~RpdNo9k2My2tp*X1_H_E} z;nWsBaCyJdDr(mz%QiWk6>=1IDMrfAhqc;%H*|`tvkKZ7C|n~x;uVkz{0RXU6)|dc z2Fb5vOYmqU2&tCYpa% z43iU4KDp%IlUtuGxcDTgssDU#6sd`W?)VuJsTnp%q{1|p^BJ%(z0%>AiT7zxhCHB_rji7c)W_i5F+=6UG4)>uuR{5Q z=oJF@v6`9&W!)PWfK>Q#tYtbvC`LO{M5I+{mLYQxNs>Y-J&IxQNyww=jy2LFe4s*T z+wGxk*Qz1bVmz?KQK>Hh@xFFq5!&KH0`(3=p04DZvnYI>AU!}ym8>hn+=UyNbo-?J0avx7@87Mapu4PimVz7Bsam{qwe8eB@B<@=`tA6fUd1%k&TG{MI2XUdti;4I`4vT^VqE+xw0vgCk(sRo)Gwgn<6vVF zN#4jCR1&WxwnX9$Ari+`s6S+2`sxq)ee=S7Bxz))pB#}Lz@km_9OV#`h?|Ww2g$YY*E}NEoe9xc}i{&Sw)BhGRrffsGw5h2nVOA23 zmTK8IF?zXXymTZ9u|fb)5wS$-k=3eH9t-uMPji}g76th9(~C0iI{d(K2WP9ioj|=7 z#dY8=+5?~-oie}98&QqfsgG4|rR{k{c3zdFe2eQx%PHuL^_Iy)D%zLvT!Z~#lCPHaW=%d9QpgxSR(r!A z*ZpDLbHzW5D*2(cyuAE`1Qd3RQ4QTX*dW8s-{E5-G(seHd@H?viV|JY+_OD`MdUIGb>PF-UgjxTDU zH8!t+zK)nFOSA0x(-q*wv1JP;Mz?*$>6^;`zCo4)J06&&^%jT<(xr@+yVTK}4l1xF z@e0CHAQ)mKygEoe8AT{JcsXF3}dJY<=MvHmok4C+V)ip0FIkrSr|r+=5b# z+#0nO>+&%7nq?riX~!C@KaC#zg;~m*nppA)?JBP&>xC7^m&7GGF1`lKBxaPIdGV`M zYRKo^K;*c4UfS`}2At!Qa~ZKraQ(|rqKb;wi~7}42C>wVRQ_O)8(P}od~E_o8!_o& zJ*&s2jBcMBf8f7r)u_5T1KZ+KsdVCYN7KgLJ&a1=g?|PrJxR>>n{xSq&8gFgE#TNB z;zX(c{wico63I=(6!7s1MoH5Xto4ofDij#l5O=CXUwqvB@oS&YcHw*zN2hVWsP~aS z%1Jw-Ca5!5)k=lPq+4P>k&m~IQ)R^E%E;`9mp;W;_a>3Yqhl=P z;y9x%psK2>8YkgJeXsZ-`6Bhl%s;nIIV0^#w3O;*>ULtEWRlRqgy9-BA#)m3;(2>~ znXWn*!4_05%TUv=lupB<-Dh-8&o@?UMUb;J2#Kfs3uG)4hRT&lQioSLEz@)5dv=YU z<94R9A71?L@Ky@1_Qr~haRoQMyI@TGp*bX@ot|j^oER~0=t-q0i#PD&z2O>RCu!IR zrh0{0MM^^yHqkLqR2s;h4~t31HqUsPL`fA%$43~U>4?0p+@)i@CJI}em(p2z zuwZjbfVot<6ItmB9KctC6YZLDWY)`oC4waS0Pr&Ck{kg&i6%w;2-&A{d4r{TkXNmP z&82pmro+)6a&bSXdl?S5QrERuA4=U;J$bjAWxKA9=_`yrx|}ktMElspU3B1KM`vd@ z_QhrbyX3p!kH3aL$}i^1vr%pvva7V)-pFjA{<{2q*X4IT;hnK@9YMpSiDt+D@L5Vw zVbm1tidIz1)Be2ak8?@dKl4f4nXU&bU$EC2wf%?nHtmx11c|m`1Q^6Y)wn%i95xqn zGN)#=FP#vXnnj97iz4=7sAuvuo4fOoaeXAD7c!=(*2S?W7ssaGL5O_g0Q|$jm1C&Q zlTf`FjUW$j&iYlT>rdzsS`cQ`g}qF-mwkJ(R;VkHH7O$^ZRz&Kbcm>wLA#dK*b{Fc z{&M#EqK3}{xyvV6v@8-Bt2KNzK?gO~qO7M;6HZ-6r=@}S1f$Gk-evtX%)K_IUJ5`8 zkdKb*6$nZ1C*6aBW~BSpzdpZ zkpGRwMMV&*jOwCJ4(mBCX;sM1iagFWjQaYSR_npLbBw=}HA{cNgp=S^UqNUV>9MPE_kw zp2gD;OfzLJZmHCWerO2BFuc*Qs9K}R^EP{bcFyNU!Q z!jkDZkx)Nak_^xB_&%ydEu>VHMMg$u%Me7*RH*q}mVWbu9E!7u!LInc;jLV+A+*-c6Vyp8I_-s< zjOj4TL8YsbYxavXv=s74s%Yo22Fbt5IR*UU2o{uhMaqc}iCfTD4>`t>fp!uQv1eb@ z;XD-?ZZ6H<_H^7O`89EE(WW5U7E*-z@f?fiLti2Z$bzMMOQgvXXMIvZ|=_Ctg}=C$6l672iy7*K|S;kp_UJbJdA)Uj)MdaEnB3llAQc8 z&QQ`s-kfQdUL`f2^d?JbL=F~Zp2m4)jjNK|sCe&8!!j)ib4SuLwa&6zfj^^QrYrPj zT6cA9Etx4Fj#8A=_*wa@=g*%Xtq2hZXN2rJSA6JP3jq-+p<0$&e4BUS9EAg}s~gD^ zOcup*|CZ$u-OI~Hp3$E_;x-!t%37ZRMGKv3!A+e5H`ha&15 zzddqx-1UU-3(Z{%Ut2f+1WmMsySE zvG1uyI>qR9h>)O0dKiT`5~TI;>SKdCydZ3Kl8|YuoO`@aGO^XD^!aJ*7{yS9O~Sn-seoHaIa)t#L7uD2+j(Rs=J!oOywIOJwxF+ zqY_l45ud=Pa7IxaGOr8O57U{jb{cz>yEVJ9x+v+Nl`{{0@$fFR>QHInSJ|n9`Me-H z?E7_0F0{_)@411>N;`?7^bT#SiN|PQGJEZh1G93{_vb`qGC8BuU8Q%GVOtG-DDohk z%ay;nvC{o+V%Gq#YJyV8=41JIyP%2Bf+hLKgh9vFMrNLf?8=76LDaHMLQc{MjQ|@w z3t*nV73R5lU2;|VnxQLfwboZbja`f1-I)X=hybR((4#<^2oOjH}n2{!OCRTa`49(L!Xy9cg z?hYlG6isA?h!<{%c)7ZW_j&oN1+F2smLX~)VIlJ??QL?vlRgSRj^Z>__7kasW-(H5Y48e>G_wg%WLU}rk?|&2g6!1vp3Tw z3z{tM+To*bH)LnfDRL8sLLD*nwp6t+tywCS7^%VJ7uhMhd(mu%>~BDv!mS>}c`&y; zu4nl6y5T-fR54mBoglfh2d3)Z(p6^8vvqxFtL+B8eh_`&s5Gp1VB~T?m@3v3rkedS zkW^X3+}T?fQ%<$@%$?k`CsPx!a;XYr%J3P?cyoP{O29V<9bOO?`RnCbU z%LhT;F|6l_P&wsi){}sUH)fJYcg{& z>`-$T7zx?$eBr3@N0p4}Qa_OcFW{4X3p1(;`_~fPPu+Q4Ua9l|#40o|{s!cQO30B| z!9dO#qzAB&-3auW?)DDy#R7woO{&slO0(l^!A^P`bA{t^{WaK}|7*hW#XZ$zi z7*g@*bM2oa#imnJKP)r5TRA4uxpZl1X(oCK@MtQH@MLio_+wntkJRb-Sw&+tazQ-R zB|G(;FigTJbjQ7S!X&Oi5yhQ$=_Y;SsVi}gN645tHn*e$JtdJ^3D1X=LB82Zhu0T3 zRc*i51e3HLBA-I2cxL7_g})v)HFxfr@B^3 zI*Y@}YnGDT_|=9>ZQ(`8e9#EWNl!S5!pCu7-r=K+8)F1+j6gHMjGrA34m@3s`i3E- zS2r(=KD{u7cKtzGi7z?CC&4IvJ1)!H28rPr?@&&C5kH^oY{rSreDb}CZ-^nGfeNbI zpa>44rhr8W?r=1805jqtpbcQmkUqxRfHoZiRoN4Fe$SROf6GmoO{h-9gg}rKFZ!B_ z<0~``i5gYN;J#avJ`lHjWbCB`!Tg!RBqIz2I{&neK+hVR)Owm;<_fuRgUYkL?v0pJAEb$|>EfQmBh0^nh6Cb;mfxWjLIWz2Prf!DLJ}Cz@VBG(6uHM)MhB#$w;goWT&Hh zgB)K5)%ySpui^aC=Wz5Z!@*ewR|N-MF#Lcv+SYB z0G@_YunAstiN&D<(3Hioqx%|h3OqP3pGXtjc)yUB^)0xvQ8RCT(<|B%|M6W9Vz&|J z*0f?bTPEc)fO5soxEY@I!I107Xet>18^dbM!rH*p$i`@GNNP>Dm(vH4LVJ0n{ZS46 zkl}1m;V+Zn55%dW35UaQ~g*j*6jYdG2P znAympssE=Lj3Hr`-L_+_d<=ORzR==ejj%XQWf(~q3ZWgXQ@}Jp0QJPv{cuF56gW@> z*GwXRx7u27MMvD$cFLY=8u>IoW!I&<&`4?T^JWj&xi(%sd{cFQZFN)@ffZ^l<631$ zM;Dr=A7n@;fb$2yjle1;c~~GEDIR1{5L+n>iqEBnr6C=TFC}^lvd@y^fLc0hI`raW zp}YAA5gc8E4r|d5A~zW_t!;Ff+z+v=auBTbV(01*w8R;kN6lPLFDxu8aQ##;x9rwr zql(wAr3-q^{OT6(kgY~h+&+jS}{;BWM@rHh_z#;b?>do z)jP0>jS@!lCt;XBD+22p3<#yRc#K4$O0Yr&vJK=tL3$QyhbVZ z`y2?G?Md9DtBus*#3J^71HY5PxOoGj>Xx%Iwui)mIe5f3;t?VPq4+x+dDSiB-u!^Z zGj(>+JM=YhE1bu~)RwMxqs_o3w1ChNM0~kqua0Yn?LB>WtM!M8>ANSUSJu?jETkE^ z>GBF9*RJ?NB*pY>5NYc6ua_{6M1VWSq3|IUHWVHKctG}Bo!QewyBfyR zWS3G4{(ZDhWPM4;A8%OFzY^U^*%{|&q{7QH5US#qQaj6s9}Yogd|zIb#$%0btMXVw zn*S_0*7;4gGplOOY=mP;%TOWp*_NRKy+7Td!k3s4ry$Irt2sgU0->ngzE~awPC=() zB_iupV3Bk+Wu16@-IaeVs65})G`FXzkatN^4JClL%g~8|WlL|JvEdIW&_uQn8WJ;T zBp1V#YQz6<&kfW9Z6dNuH@Keobn5KX7IeaXU}fo4)!2S#VCvTIL^oCMw8V$N*4q^M z?ms6|MiSSsqbU$eh=44iWm?5UCDQ_m2>1XjMtu()ByAXvSl5u7*g#*4C`8i{+t@ox;K*!+*>$@8qtK_MM$qiR?9-I9XeQCI4mwH zq`TMV$LWsX5jPb*7RFs*IAba#OM7VBuCd5^RL+*WvgsW+ zZve#@cXThmm}NJwN|-fccoqM5`Lpu2W6D3^d(POG#Xo@T^9z(L=-ct%;4gfI9|T9H z|DH&HaRmN?{EJyLavK}z;lIGKuF3{hhwW``k;BtaTUt}$Ktt^_6t7GSgX(jmhR>{m zHtNtVg{I`{xq)cjG4DlAtoRqEts2QLX+l5g6rL`-{wb)oph_>JOE4d(UX+5L$A^j(|5-LJ2L?Y@Oyizqtv=~R>0M62{8 z%bq(hIM6h@{B*7Rgi_}K^6HWa4Tr6Jfm$Y3yVcN;aFuZIt!K^q_2^31H2J9{ zg{K!GkK9MJ7l6A5)-D})p_Xom?J9(w(G>hy%xJn%MzL94> z`&Fz4c|E6eh>$Olxsv&A0zmO2=P8Fq=p8;x@9=qT*DKnLs;vpTsBWf)L2;om`xo8w z4Cf^*`t#=0+W?@DRGuJy*bIKSA2}w9)5GBING@*@0>DT3f^UW(8VA%;C976Rs&wpT~_2UmsJ}##16< z2kb;Gi(^KjO`Lz$PRTqqC1twKH8BHuptup}ZTl2K4kyW26xRgYQME_O^WmD5?r$h} zA*99mi)>c88V=N3gX6&Yt144hbt*BJ`uh>b_*t~wj(Jt2Gk84|m9hzvmow$TT+j^7 zgBo<_Vkro8fq3a_A|WD!hlwi&Puj{J9NTBeL!Z#dOF+pXba$lzBwRP)a1|;db3ju9 z!=#}^hp|>&CN{nWbboc7?Z8;%q|$?ew4kQ}K3DQ5p_F zNn|VL?pr0+OC#PAX0+ZB)b>b${gGxD?k#+&z%|O+HcCtGRW8EZ$;)&&E|RMRv%7WY zf2UzTiJCX4PUsHjh>;80LN5pu=(h$CTz$@{H%aGkl+CAgoFAhIW6}uC*FsOi#OKwV zV;-O;>>6=mDLI91jisBla`8tg11`79rs^Su) zdeCb>asGy?XGPwj?*Erfn6LtSjkxO(6K3@{oFXL_QIun`Nh`3HF7IHn$UvjU(x+6k zzgIk58>wppDuK0tpPBo;B4tuYMNX%jY} zzm>#Y=)v5lP|a`ddLFYV?ZvS%%GoPg2Dktx@#mx!<(z23UN*n3Qx^9t6h#)`NN>0o zbwz?NgTqrPAc6=6qUcL_^3g;_wOk&#ZUqFv!JP6c4(tDSv8eNYv~q`NaVIwf(ybj6 zhy)2zM@%ygqE9}~&#w%qr5i+wC}qhO?x0`@O0AUmL;%Um==cuDgHU$>M@Gh2WhFm` z{?Xq{Dtuo9S4AciV1_Cnvs{IV*=QN`TNykXzN7Lo{oS6u7>fYZ-Lxi+%ybj@dNa{gpefXN-UyIdD5CG@2^W&-a1A3D7^UG;;zjE3$QOQvv>aIq z6kuk4QD!>-uYyX3el2uuB1tiPgzN?mE^sNtx=6%20J=*Ckgvm3C_Te?3W~kjQ{+|k z;-Kq17O{hRh82rI-)}^n`V8=LQ;OG2bW|lab|Z9xjO=GNhmAi}Er38b6t!O~ECMM9 z*V!PrPz?l@d5j?Mgh+7$x5^Wb!c|#dnDm5-n5c@4%BlGe+f7 zBtP^d8_VS|#5X(%dc)~S;1%Q?e?qpo^wx0$#O*bjQ1BZq)_x+`Q2}k5kmJTC)oxGsHL+GUGTb7{?T(0CI?sD=Ek$ zy8l+21gK%shv;JupzQ@gR<%tk_h~h+m);R@%LQhuW36>ymV)=-WJGwf=;BHfZcTAs z#s0aH0UwPuN$ARle}dJ*KUYBB!ND}iz0i9_XQ1wg#aa>C0hK!9Oc7jrF}80kiM1w3_(aM2NlJp2O{n@Zm6 zwfLMV3XmjHo%#IpXV2iX2SPj@> z_8fu-1IhBZ!yWTc`YWq&5b5T9ha&2Roc8$$I4af?B${7kk3d|HPW(L7}aG+iE94@rgI30lPjeJL!em1DOj0|teMqR>e17HpWK+yC@ zd`tUx^=^5On2|qms%JDyxCF^TE3|7t=)T8swJ%A1 zw7rj&Ww3clctyU3U4j(2(S;ygkHGyZQx2lQEOr4Ej%nF17*fz1WEphC-C#uxv@KN) z)HSH472dHi6H>=#;u#(#K4v1_a$NDQafD4D)4_riI9|Z{iZD4^5qKw-PP&66j4fyT zZ!CXS?&0KDb)zr&jNrMDs~~>SdpnHQ`5NhAUd2%nE@lE<{OIi06r3n*9rvVSC{clC5I?<{ zi!v&AxK-s2^Zmrko7}YgTDZpMTa3150YM^7cVhRaiFN3Hq$pXgkCMANW#4+%0{3r% z6=HMxT0vbXUW2-TJWOb(-8Uv8u)EZwKIHxyF!rYg^feVkDW+p=cm~i$a}25Zy@sDc z=Ra%DaJ3KzG26Hs_pA)DiXJ0Il=p$2`JUm2=!Y-)X~U1!4gVICk_H&8j&7 z+$$gsLY_gb!SFR1=WbC4ixQcz7D{;T+~N`ORHGZD8J)eAcD&^C1z%*uRAyD{XnfHV zn*@pn6o%p87`^#JAq#9|SzvzMtfXPE`8z~VLM7Q_^U8TZ<3qK{E)vD;X*k=IHXe#i zrBweU)pJGknH46wn52u=f?^A<|7-?51{XnoPlXN?=c&*!3|u)BL=n+YA&SVjs;lg`Zwv>v`88!NlfaYc*N=Exgiv9?yTrI>Jn|w>6E$+h$&6 z(#IUZ!p`u>zh3KJ1M&rZm);n0&p{+fwpu}XWMZHN=REwt;R%kaMMHI^yH zMIrAxUS<-#Z{*%600`Bbe<}Q0XV`njc8W{v$Vi+j>$7O(p}aF<6Y205`i`e8CJ za8;CLA$W?~7fQE5W@G%`C8H)tNwY6=%8!9EjRI{fr!Midwt5 zyVf&Yx)K}2j(KICX4bXjveAs}AXpUA-YOBNLIxu`P zunH`S}*#!Kq z5fWbaX0qjUXfaX)-?7=kx6W%Ok%CuMH&y@gDymYy<3sq zDq=4JhwUs{D6bX03bk_L+Px&_Rmv9x`s9ThRC_*J(dj>$Fry zTEI9m??>`uR1^4}kyO$Sp_p-1+Is?df1yNMy7usm~pL1!tudn zbdgR=1gm^DlF=c~tWm@n2u4DJ$2UO%fSjsi)19vrjqEldV~u1j<`_$5@zCTEN2%b} zi_BSmt=3=)MI_6^^@weBsUY`M_*xO{-BdUn6)mPSx_>y!z7uUpYe6*a5@L8bOPX9{ zLsTX9@-F38T-8-~WRBF#@C>&pi=;aeJ9*J`7&xCY3hKo4YoX$k6RkecC>T=RNg-{5 z#zH&B^_c4&GD^- zXMit&u7E#6M^`sAVU_K6>?*p-SU<47t2%xG*Yh*EhCnC$y-MmHMBPS8Z2h|Uf@-R+ z_XytbBD zv1LG_sgydn=Fq)$=(@lL|04<)R0nW}X)0YlZpy3;%;YGF!V6J_X<~^Xq2kcosmB`Lp>51AX!tS- zG=L2J0Fo3gM1l=J=OY1{sT6M=67OSBTMY={Ox&wW_8pQ%2_f?{Gt_nPTu}tKgN!nW zH6R~X#Ay60RDw(u+ZYP90yxUe^kc}C0fm&VGEFD4j9P6PpPfS|{;16a9_xz`oi5|s z{}FqNTItB@_mMCjfb)o20yw(EglQF4sHzcGLB1KsolqYJZs(Oz$$JJ)M}_=nf!q2==q(Z5+pvC+nnVLDRg&wP$@N?CQ+jmav@J-3y1$eBRhvK@7odJW*%+0 z8_V#9fiNQAWxvVt#8eyvW>e*fU{#)wi$zJFmcE#LTla=!W?FlR5>261(|Z=ovNtQb zoOP*|dnN-wMLM9K3p!kTpMQy}1Ak5ksU?Um0`bRbq)2*|Ji}JbRt1f$;&)5@RizolJ46?BTd^;76LG$lpRNnkYf&49TT#l>X-m$m=8H71k{R(Ua;?(z$0|)SSGPdRn!J2 zYu(9JaQ6(lYff56=S^Kr1dE0(P87o#<;&lOUXSOB`#oA8oioLcmXwT-`#n7zpC>3m zH(CQk3I{MD90+?EME9&4v>K~g=#bZ76BdrRX}RN}q=thFyQlCDii6f4R*s1e*}a5! zERB|*WYp}QV*Ht%;Llx^RF{))jm+0Wen|N@4 z<8fs9wSF=9y~dXx{Z9u+R^{GA{$SmUanKFT)!KhyRPYGPOq{1A@fzab5AZ5!iASGT zk#CBMNFZ7c^La6bzj6d{4Yj{HReY5+)A~da-Kx?tm{IPHK1z>oZ_?(*0kG zf6V291hTz#sW!QjYJxAiKfyT=_%e(q#9lxOwR;no^xkLX4LGXoqqhk#gz>=;v0nnd z9g#|h$&(ADsSWfNV(R^7OnC@nJ>~wN_-pB z8x1%ndg8IFF z=~-F7(#E%Q7ia}#<2zw~EfZ9+S_A;kZ#p#J_WmVMyym3(*Kz;w&jw_*m% z?=wZ6Z2*z`e9Qnlec)lh(?0O%1CPD{t*0M-%tJpL(AoRAqMknYkzoC7^s#%xZ1klq zeTimY25lgiYy0xCzI?1t%u$s$#>YNNWe^wpD3yUk^a-X06495B_2py#@2FJrRbQW) Y9BIAh;d@N@U(AH3o>>3u7vK8-0MyV`g8%>k diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_angled_line_of_y_length0.png b/rust/kcl-lib/tests/outputs/serial_test_example_angled_line_of_y_length0.png deleted file mode 100644 index 7fe8900e6f7d05982eec97ea7fcf067bbd9611ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62105 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 CxT5m_ diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_angled_line_to_x0.png b/rust/kcl-lib/tests/outputs/serial_test_example_angled_line_to_x0.png deleted file mode 100644 index 5c056bc069c7015d7d771ad49757f80ab0ad0060..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61015 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 Y?u*Q(G5;$9{~P<@uOHa(^T!wcA9irGXaE2J diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_angled_line_to_y0.png b/rust/kcl-lib/tests/outputs/serial_test_example_angled_line_to_y0.png deleted file mode 100644 index c6d65c6bd9964eae68094477803e63ac3e99ea67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57499 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

  • DJ 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 diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_assert_gte0.png b/rust/kcl-lib/tests/outputs/serial_test_example_assert_gte0.png deleted file mode 100644 index 6148ae43278779b7986fcf452545890b852f2298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19651 zcmeI4!7GDd9LHZon&jl-C?`jbifD_Wg*HnO<%C>TLrTg;TO6%imK>1PyBpbs3rUL0 zPI6f(DJusDD_-y9@O7zy<^`dWOJWi%OeMudj2T?$#d1Eo(R#^!J8Ws$MT@_Sz;=S8vX8ar^rAFg7%6FFu_7KIXR4sljZz zqqDX6v2;4Wda&8Gkk58M_cj%dGj{H!@>1$a+(e>N@qFdweZ6_d`=;EB)86iVQ#|iP z!k#U;tvi{cNw1dN_nheHnMe1^UH;1M$2_`M{-Dq4z*FUze#TikPckqgqI_dA{h5l! z++dB#+{oC7hYCO9Arl1gKs+E1698dFGa5j!MgzLntcSEkvQ5N8mkSxREElW+aX%0b z#Djc{djE0W62PRE xN<2F@{=~Cm<4-+1!~^jlA5)0rkJ=KSWhV+DQx8VLcnH3C#{C3~W#y8*Q5*+{l diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_assert_lt0.png b/rust/kcl-lib/tests/outputs/serial_test_example_assert_lt0.png deleted file mode 100644 index 6148ae43278779b7986fcf452545890b852f2298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19651 zcmeI4!7GDd9LHZon&jl-C?`jbifD_Wg*HnO<%C>TLrTg;TO6%imK>1PyBpbs3rUL0 zPI6f(DJusDD_-y9@O7zy<^`dWOJWi%OeMudj2T?$#d1Eo(R#^!J8Ws$MT@_Sz;=S8vX8ar^rAFg7%6FFu_7KIXR4sljZz zqqDX6v2;4Wda&8Gkk58M_cj%dGj{H!@>1$a+(e>N@qFdweZ6_d`=;EB)86iVQ#|iP z!k#U;tvi{cNw1dN_nheHnMe1^UH;1M$2_`M{-Dq4z*FUze#TikPckqgqI_dA{h5l! z++dB#+{oC7hYCO9Arl1gKs+E1698dFGa5j!MgzLntcSEkvQ5N8mkSxREElW+aX%0b z#Djc{djE0W62PRE xN<2F@{=~Cm<4-+1!~^jlA5)0rkJ=KSWhV+DQx8VLcnH3C#{C3~W#y8*Q5*+{l diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_assert_lte0.png b/rust/kcl-lib/tests/outputs/serial_test_example_assert_lte0.png deleted file mode 100644 index 6148ae43278779b7986fcf452545890b852f2298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19651 zcmeI4!7GDd9LHZon&jl-C?`jbifD_Wg*HnO<%C>TLrTg;TO6%imK>1PyBpbs3rUL0 zPI6f(DJusDD_-y9@O7zy<^`dWOJWi%OeMudj2T?$#d1Eo(R#^!J8Ws$MT@_Sz;=S8vX8ar^rAFg7%6FFu_7KIXR4sljZz zqqDX6v2;4Wda&8Gkk58M_cj%dGj{H!@>1$a+(e>N@qFdweZ6_d`=;EB)86iVQ#|iP z!k#U;tvi{cNw1dN_nheHnMe1^UH;1M$2_`M{-Dq4z*FUze#TikPckqgqI_dA{h5l! z++dB#+{oC7hYCO9Arl1gKs+E1698dFGa5j!MgzLntcSEkvQ5N8mkSxREElW+aX%0b z#Djc{djE0W62PRE xN<2F@{=~Cm<4-+1!~^jlA5)0rkJ=KSWhV+DQx8VLcnH3C#{C3~W#y8*Q5*+{l diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_assert_order0.png b/rust/kcl-lib/tests/outputs/serial_test_example_assert_order0.png deleted file mode 100644 index 6148ae43278779b7986fcf452545890b852f2298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19651 zcmeI4!7GDd9LHZon&jl-C?`jbifD_Wg*HnO<%C>TLrTg;TO6%imK>1PyBpbs3rUL0 zPI6f(DJusDD_-y9@O7zy<^`dWOJWi%OeMudj2T?$#d1Eo(R#^!J8Ws$MT@_Sz;=S8vX8ar^rAFg7%6FFu_7KIXR4sljZz zqqDX6v2;4Wda&8Gkk58M_cj%dGj{H!@>1$a+(e>N@qFdweZ6_d`=;EB)86iVQ#|iP z!k#U;tvi{cNw1dN_nheHnMe1^UH;1M$2_`M{-Dq4z*FUze#TikPckqgqI_dA{h5l! z++dB#+{oC7hYCO9Arl1gKs+E1698dFGa5j!MgzLntcSEkvQ5N8mkSxREElW+aX%0b z#Djc{djE0W62PRE xN<2F@{=~Cm<4-+1!~^jlA5)0rkJ=KSWhV+DQx8VLcnH3C#{C3~W#y8*Q5*+{l diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_atan0.png b/rust/kcl-lib/tests/outputs/serial_test_example_atan0.png deleted file mode 100644 index b6db63cd5f87acc19247d533b14c16017999cc47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58026 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 diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_e0.png b/rust/kcl-lib/tests/outputs/serial_test_example_e0.png deleted file mode 100644 index 5c79e062edd611431ad8d25eec7e2c355216149a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60211 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 diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_from_ft0.png b/rust/kcl-lib/tests/outputs/serial_test_example_from_ft0.png deleted file mode 100644 index 6148ae43278779b7986fcf452545890b852f2298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19651 zcmeI4!7GDd9LHZon&jl-C?`jbifD_Wg*HnO<%C>TLrTg;TO6%imK>1PyBpbs3rUL0 zPI6f(DJusDD_-y9@O7zy<^`dWOJWi%OeMudj2T?$#d1Eo(R#^!J8Ws$MT@_Sz;=S8vX8ar^rAFg7%6FFu_7KIXR4sljZz zqqDX6v2;4Wda&8Gkk58M_cj%dGj{H!@>1$a+(e>N@qFdweZ6_d`=;EB)86iVQ#|iP z!k#U;tvi{cNw1dN_nheHnMe1^UH;1M$2_`M{-Dq4z*FUze#TikPckqgqI_dA{h5l! z++dB#+{oC7hYCO9Arl1gKs+E1698dFGa5j!MgzLntcSEkvQ5N8mkSxREElW+aX%0b z#Djc{djE0W62PRE xN<2F@{=~Cm<4-+1!~^jlA5)0rkJ=KSWhV+DQx8VLcnH3C#{C3~W#y8*Q5*+{l diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_from_inches0.png b/rust/kcl-lib/tests/outputs/serial_test_example_from_inches0.png deleted file mode 100644 index 6148ae43278779b7986fcf452545890b852f2298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19651 zcmeI4!7GDd9LHZon&jl-C?`jbifD_Wg*HnO<%C>TLrTg;TO6%imK>1PyBpbs3rUL0 zPI6f(DJusDD_-y9@O7zy<^`dWOJWi%OeMudj2T?$#d1Eo(R#^!J8Ws$MT@_Sz;=S8vX8ar^rAFg7%6FFu_7KIXR4sljZz zqqDX6v2;4Wda&8Gkk58M_cj%dGj{H!@>1$a+(e>N@qFdweZ6_d`=;EB)86iVQ#|iP z!k#U;tvi{cNw1dN_nheHnMe1^UH;1M$2_`M{-Dq4z*FUze#TikPckqgqI_dA{h5l! z++dB#+{oC7hYCO9Arl1gKs+E1698dFGa5j!MgzLntcSEkvQ5N8mkSxREElW+aX%0b z#Djc{djE0W62PRE xN<2F@{=~Cm<4-+1!~^jlA5)0rkJ=KSWhV+DQx8VLcnH3C#{C3~W#y8*Q5*+{l diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_from_m0.png b/rust/kcl-lib/tests/outputs/serial_test_example_from_m0.png deleted file mode 100644 index 6148ae43278779b7986fcf452545890b852f2298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19651 zcmeI4!7GDd9LHZon&jl-C?`jbifD_Wg*HnO<%C>TLrTg;TO6%imK>1PyBpbs3rUL0 zPI6f(DJusDD_-y9@O7zy<^`dWOJWi%OeMudj2T?$#d1Eo(R#^!J8Ws$MT@_Sz;=S8vX8ar^rAFg7%6FFu_7KIXR4sljZz zqqDX6v2;4Wda&8Gkk58M_cj%dGj{H!@>1$a+(e>N@qFdweZ6_d`=;EB)86iVQ#|iP z!k#U;tvi{cNw1dN_nheHnMe1^UH;1M$2_`M{-Dq4z*FUze#TikPckqgqI_dA{h5l! z++dB#+{oC7hYCO9Arl1gKs+E1698dFGa5j!MgzLntcSEkvQ5N8mkSxREElW+aX%0b z#Djc{djE0W62PRE xN<2F@{=~Cm<4-+1!~^jlA5)0rkJ=KSWhV+DQx8VLcnH3C#{C3~W#y8*Q5*+{l diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_from_mm0.png b/rust/kcl-lib/tests/outputs/serial_test_example_from_mm0.png deleted file mode 100644 index 6148ae43278779b7986fcf452545890b852f2298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19651 zcmeI4!7GDd9LHZon&jl-C?`jbifD_Wg*HnO<%C>TLrTg;TO6%imK>1PyBpbs3rUL0 zPI6f(DJusDD_-y9@O7zy<^`dWOJWi%OeMudj2T?$#d1Eo(R#^!J8Ws$MT@_Sz;=S8vX8ar^rAFg7%6FFu_7KIXR4sljZz zqqDX6v2;4Wda&8Gkk58M_cj%dGj{H!@>1$a+(e>N@qFdweZ6_d`=;EB)86iVQ#|iP z!k#U;tvi{cNw1dN_nheHnMe1^UH;1M$2_`M{-Dq4z*FUze#TikPckqgqI_dA{h5l! z++dB#+{oC7hYCO9Arl1gKs+E1698dFGa5j!MgzLntcSEkvQ5N8mkSxREElW+aX%0b z#Djc{djE0W62PRE xN<2F@{=~Cm<4-+1!~^jlA5)0rkJ=KSWhV+DQx8VLcnH3C#{C3~W#y8*Q5*+{l diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_from_yd0.png b/rust/kcl-lib/tests/outputs/serial_test_example_from_yd0.png deleted file mode 100644 index 6148ae43278779b7986fcf452545890b852f2298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19651 zcmeI4!7GDd9LHZon&jl-C?`jbifD_Wg*HnO<%C>TLrTg;TO6%imK>1PyBpbs3rUL0 zPI6f(DJusDD_-y9@O7zy<^`dWOJWi%OeMudj2T?$#d1Eo(R#^!J8Ws$MT@_Sz;=S8vX8ar^rAFg7%6FFu_7KIXR4sljZz zqqDX6v2;4Wda&8Gkk58M_cj%dGj{H!@>1$a+(e>N@qFdweZ6_d`=;EB)86iVQ#|iP z!k#U;tvi{cNw1dN_nheHnMe1^UH;1M$2_`M{-Dq4z*FUze#TikPckqgqI_dA{h5l! z++dB#+{oC7hYCO9Arl1gKs+E1698dFGa5j!MgzLntcSEkvQ5N8mkSxREElW+aX%0b z#Djc{djE0W62PRE xN<2F@{=~Cm<4-+1!~^jlA5)0rkJ=KSWhV+DQx8VLcnH3C#{C3~W#y8*Q5*+{l diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_get_edge0.png b/rust/kcl-lib/tests/outputs/serial_test_example_get_edge0.png deleted file mode 100644 index 314ce69ad8a40845e159164f61647d7d29eb4c1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142503 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

    DmzAR#EY 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 SM+x%3tWo#>}RiauY28Vt!G#M`%R_m@w? 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%0A}y6ahrB-&9yv5~ zl#BwzLxJcOXKG2grG>R2CTVw@gWeLnIbx3jSMPnBqNUkg37Zmq&@uO{5I+v6RmY$o zO5=N~7Ps?>lHQCNq26XVe?BID^=)PSS`IUD%VGR%>on9GYfES%zWkif06QFJ5d05@ z27dM6n{GBOh?o3-*k63D3Pk=~KfC{Rmc zrtv)%-A4V_qE0gN{D;ChxzqYPU)BON^)gAF_rMxOw}nonI4!)qyNaAI#ZEEX9a3-x zFXQn=jWJs!rgwR(^j~d9*kZqy4_kIGG;BddV9i|WOQ6^}QffHzDECUBWt;6Ym{L<# zYJC%tJu6<5AvTM_)%GVX8X0FjX%W7s3!J@S1NnUL{kc~6ljelln$LTPWOkv!%8PV4 z{3A*w8u@m;bLF+|7@gg}q;-v(6;`sYe6e74%eM=2a)5?-bsViS3;iN7Zc50q#WpE1 zd89G)8TJu*UfK)MXJPoch=zDB0+e-z&xzDVgh}A$0QW|n9qvnQxfiG(VO;Pfs_^Zk z&$y_r!t?Sil$)t>))acfB!-^&K^818sIC=tr6rd%h$LjayMgG8NMF6B1j6&cxj`au zXs+1jYIe(O1OcY7ex2mt#H?=OIuEdoe7@|sk+3^Q68QVzaChG`^>9O?aaND1-Ct}q z|3mV0p&Sm+Q@PLeZkGNsRY05Xxtgkt=o-7st|7_(A$701tHaDq<>`5k<8X9)FN_R73$q8NS0XMeCJCD9Z8d9C{{5!>gP!LP;fzmrpEIo54Un_f|01miFz4MlLLYB^uIm@s zo*6b~lIegyO4IwJ?@&WV+qwMC8Qxcsu%Gb^VOTEDkLMyDcj;OEWBt^5#SD(-(jO9#gPm_s3L;%P&(V@&`o zriC1`e~kK1;4!j(XEenth3I$V$;wUey%(AqF_sF0JgmY&aOzX+PE$g7zY&5%IxX`a zZ?Zr$S=!SM&fU^?aCD-w;wxX&NXb*XU~<^BxMq?`OB55$dgHqqAWGopiq*+eJU8M< zZ~w%&QG@UZ%F3DTKKnBT1v707!}9Ilt?E2^919mPu|k=cWrOF6?TqIB`2gb=`Hi-w zm?2&kb$Hru7{HdX=lEvoS;AhvT`N7~-rBOVLnDNp(?){M$ybGCooKj4k!Ag|Irk@m z7M?T1*W~^5T1xr)Zhgb58qsbznIO(o?N`1SpyM0f_%0u_cli95&Ea2V)AMK%le8mOU|%J9ESFZue#%fEE>!v7CES2rpE diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_hole0.png b/rust/kcl-lib/tests/outputs/serial_test_example_hole0.png deleted file mode 100644 index 29c490844978fbefbd2842ee23a31dab6a411350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83525 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 diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_import0.png b/rust/kcl-lib/tests/outputs/serial_test_example_import0.png deleted file mode 100644 index c38b6868dad79bdc3142a71bc8f65444902fa547..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64536 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 diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_import1.png b/rust/kcl-lib/tests/outputs/serial_test_example_import1.png deleted file mode 100644 index 74b7216c146abd94852417af1e112cd5613ede85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64539 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�% 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 G+x`QVKV>5T diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_import5.png b/rust/kcl-lib/tests/outputs/serial_test_example_import5.png deleted file mode 100644 index 4e87e466c4eeac7053b03aa22af164ec1912c302..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25521 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 TncK$j&qcFl&wOmgm3RFQQ{C{` diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_line_to0.png b/rust/kcl-lib/tests/outputs/serial_test_example_line_to0.png deleted file mode 100644 index b7311cc6521e149b17a87aaa0ec1033e7d2e8546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58893 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 diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_pi0.png b/rust/kcl-lib/tests/outputs/serial_test_example_pi0.png deleted file mode 100644 index 971c03c9dca15d09fa375f3e303f73b56e9a94d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81095 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 diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_start_profile_at0.png b/rust/kcl-lib/tests/outputs/serial_test_example_start_profile_at0.png deleted file mode 100644 index a7cbc75e1c0b7883eae5c5783c31c2b00da0f09b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87003 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˧-?eZP3DnJ)iI~v{T&cWqZZ^N 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

    !t+;r959|`7bK#-Vphkfb z69>#y>Jn%A<5STK49@@04lK?lqZ#X|$8cUq zd}dWj7V!9y>Mj$M8j5NlOIx3LATD4>QrVb90rbCZ9SpVBG@xjGEV_7R&Ra`;3o&%d zto|$;5aQr1F=ST97r3>rk$_}I#WFE!eRz+N+}-i&;DzNI)abK;;LhK-H!$1UiKB`w<#Vp~@W-{Fe`EsF0cAbb0XLF%>dK7FLNDQ-(m)sp#K zp4`mXOy|n_v^k*{dy-6{>_(fm$lipRXw5E{D3P*{hiu^W2KjCGjz$|v^9-FjWWrgy z_7%~JRp{9mp+c1a?a7cIzWD?GhHL}?2&%a+C@7ha1wfaK2OEbHUTKJDn)~tMG1Yc+ z|2=8cb6mKi^!0@sFSjFSl^L)7q?PkVCmDXBICs5xbPMid+uD#p*<{j+D!IaNZWG%V zEPWfPHQmAgHd12zfuN3yFmlbXoEb`I$1J5nGCjZNnJn7u1GWpWqMTl*D!^$RS- z4ER9O@Z6N0Mwx}nGwZp&y_qn1q%@1BUE3rlCh?ffS`CK-9ih?FS(co6*(eDf&DxNJ ztH_j7MG_6xK~KiA0hM6Pk);hLZGJ71I`-VmMF&inVU_hAUI6nqSt+Le-l@@niM6H_ zmIB@77Rzb~d#+PW+6=A9Sw4dl_@9lmb(Az_}q`u>aMALYeD%%V)yu+VR41J0473Gggodx^)S1%Gc4%x zO}ExH0T#b}&-jlgBxl{)ws>RPg)5?-+TXeKqPH&{|6H`$n^|;_ruN7N3hLGXH+~s+gHj zdfk7tvRIYM-SAH7nZ>Ns7^;7}q2A#aE2(W*V^sqgHpNOD81}JBd>jrQl^{GEJcfhE zaDuL2mSN-(E;Mx1IE)o5(DeTY1i#rl^8Q`TzrS_-MIVjef0s?WV(Q~luDkoc^2G4_ diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_start_profile_at1.png b/rust/kcl-lib/tests/outputs/serial_test_example_start_profile_at1.png deleted file mode 100644 index d6e57761f46aeb94b1ad3f6594026389eddcf0b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83080 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 Z=cZq*nKJfV9sav-!2|dFYW`P${69#s5H|n- diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_start_profile_at2.png b/rust/kcl-lib/tests/outputs/serial_test_example_start_profile_at2.png deleted file mode 100644 index 6362e805dafcde6d50bc20417abf16ee2df66d5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76391 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 diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_std-math-rem0.png b/rust/kcl-lib/tests/outputs/serial_test_example_std-math-rem0.png deleted file mode 100644 index 6148ae43278779b7986fcf452545890b852f2298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19651 zcmeI4!7GDd9LHZon&jl-C?`jbifD_Wg*HnO<%C>TLrTg;TO6%imK>1PyBpbs3rUL0 zPI6f(DJusDD_-y9@O7zy<^`dWOJWi%OeMudj2T?$#d1Eo(R#^!J8Ws$MT@_Sz;=S8vX8ar^rAFg7%6FFu_7KIXR4sljZz zqqDX6v2;4Wda&8Gkk58M_cj%dGj{H!@>1$a+(e>N@qFdweZ6_d`=;EB)86iVQ#|iP z!k#U;tvi{cNw1dN_nheHnMe1^UH;1M$2_`M{-Dq4z*FUze#TikPckqgqI_dA{h5l! z++dB#+{oC7hYCO9Arl1gKs+E1698dFGa5j!MgzLntcSEkvQ5N8mkSxREElW+aX%0b z#Djc{djE0W62PRE xN<2F@{=~Cm<4-+1!~^jlA5)0rkJ=KSWhV+DQx8VLcnH3C#{C3~W#y8*Q5*+{l diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_std-sketch-circle0.png b/rust/kcl-lib/tests/outputs/serial_test_example_std-sketch-circle0.png deleted file mode 100644 index 5bd912447860c7ffd425987cef37f3616a6435b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82782 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 diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_std-sketch-circle1.png b/rust/kcl-lib/tests/outputs/serial_test_example_std-sketch-circle1.png deleted file mode 100644 index b085a4fc503d7aa88f12a86cf1b6906be83b7189..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107909 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 he<9TiBRf9%r_M9~ZTOJ21^zc~^yQcS>f&qe_ diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_tau0.png b/rust/kcl-lib/tests/outputs/serial_test_example_tau0.png deleted file mode 100644 index de171cb676381a9a62328f2d367ce2aa173d96ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62614 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[409, 460, 0]"] 10["Segment
    [468, 582, 0]"] - 13["Segment
    [590, 598, 0]"] + 13["Segment
    [590, 597, 0]"] 14[Solid2d] end subgraph path6 [Path] 6["Path
    [409, 460, 0]"] 11["Segment
    [468, 582, 0]"] - 12["Segment
    [590, 598, 0]"] + 12["Segment
    [590, 597, 0]"] 15[Solid2d] end 1["Plane
    [73, 90, 0]"] 2["StartSketchOnFace
    [372, 401, 0]"] 3["StartSketchOnFace
    [372, 401, 0]"] 16["Sweep Extrusion
    [309, 341, 0]"] - 17["Sweep Extrusion
    [641, 669, 0]"] - 18["Sweep Extrusion
    [841, 869, 0]"] + 17["Sweep Extrusion
    [651, 679, 0]"] + 18["Sweep Extrusion
    [862, 890, 0]"] 19[Wall] 20[Wall] 21[Wall] @@ -43,10 +43,10 @@ flowchart LR 35["SweepEdge Adjacent"] 36["SweepEdge Adjacent"] 37["SweepEdge Adjacent"] - 38["EdgeCut Fillet
    [675, 802, 0]"] - 39["EdgeCut Fillet
    [675, 802, 0]"] - 40["EdgeCut Fillet
    [875, 1002, 0]"] - 41["EdgeCut Fillet
    [875, 1002, 0]"] + 38["EdgeCut Fillet
    [685, 812, 0]"] + 39["EdgeCut Fillet
    [685, 812, 0]"] + 40["EdgeCut Fillet
    [896, 1023, 0]"] + 41["EdgeCut Fillet
    [896, 1023, 0]"] 1 --- 4 22 x--> 2 23 x--> 3 diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap b/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap index b865ec7ed..d929e89a9 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap @@ -917,15 +917,7 @@ description: Result of parsing pentagon_fillet_sugar.kcl "unlabeled": null }, { - "arguments": [ - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" - } - ], + "arguments": [], "callee": { "abs_path": false, "commentStart": 0, @@ -1017,40 +1009,60 @@ description: Result of parsing pentagon_fillet_sugar.kcl "init": { "arguments": [ { - "argument": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "raw": "200", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 200.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "c", + "name": "x", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "200", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 200.0, + "suffix": "None" + } + }, + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "face", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "c", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -1071,8 +1083,9 @@ description: Result of parsing pentagon_fillet_sugar.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -1365,32 +1378,52 @@ description: Result of parsing pentagon_fillet_sugar.kcl "init": { "arguments": [ { - "commentStart": 0, - "end": 0, - "raw": "200", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 200.0, - "suffix": "None" - } - }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "a", + "name": "x", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "200", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 200.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "face", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "a", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -1411,8 +1444,9 @@ description: Result of parsing pentagon_fillet_sugar.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl b/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl index 720347125..dad2bc07e 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl @@ -19,10 +19,10 @@ fn circl(x, face) { radius = radius, tag = $arc_tag, ) - |> close(%) + |> close() } -c1 = circl(-200, c) +c1 = circl(x = -200, face = c) plumbus1 = c1 |> extrude(length = plumbusLen) |> fillet( @@ -32,7 +32,7 @@ plumbus1 = c1 getOppositeEdge(c1.tags.arc_tag) ], ) -c2 = circl(200, a) +c2 = circl(x = 200, face = a) plumbus0 = c2 |> extrude(length = plumbusLen) |> fillet( diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/ops.snap b/rust/kcl-lib/tests/pentagon_fillet_sugar/ops.snap index 9317b7b70..47015bc73 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/ops.snap +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/ops.snap @@ -105,7 +105,32 @@ description: Operations executed pentagon_fillet_sugar.kcl "name": "circl", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "face": { + "value": { + "type": "TagIdentifier", + "value": "c", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "x": { + "value": { + "type": "Number", + "value": -200.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -197,7 +222,32 @@ description: Operations executed pentagon_fillet_sugar.kcl "name": "circl", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "face": { + "value": { + "type": "TagIdentifier", + "value": "a", + "artifact_id": "[uuid]" + }, + "sourceRange": [] + }, + "x": { + "value": { + "type": "Number", + "value": 200.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap b/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap index ad50e8395..fc3e30d85 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap @@ -23,10 +23,10 @@ fn circl(x, face) { radius = radius, tag = $arc_tag, ) - |> close(%) + |> close() } -c1 = circl(-200, c) +c1 = circl(x = -200, face = c) plumbus1 = c1 |> extrude(length = plumbusLen) |> fillet( @@ -36,7 +36,7 @@ plumbus1 = c1 getOppositeEdge(c1.tags.arc_tag) ], ) -c2 = circl(200, a) +c2 = circl(x = 200, face = a) plumbus0 = c2 |> extrude(length = plumbusLen) |> fillet( diff --git a/rust/kcl-lib/tests/pipe_as_arg/artifact_commands.snap b/rust/kcl-lib/tests/pipe_as_arg/artifact_commands.snap index 58df7301f..52128f84d 100644 --- a/rust/kcl-lib/tests/pipe_as_arg/artifact_commands.snap +++ b/rust/kcl-lib/tests/pipe_as_arg/artifact_commands.snap @@ -28,388 +28,5 @@ description: Artifact commands pipe_as_arg.kcl "object_id": "[uuid]", "hidden": true } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "make_plane", - "origin": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "x_axis": { - "x": 1.0, - "y": 0.0, - "z": 0.0 - }, - "y_axis": { - "x": 0.0, - "y": 1.0, - "z": 0.0 - }, - "size": 60.0, - "clobber": false, - "hide": true - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "enable_sketch_mode", - "entity_id": "[uuid]", - "ortho": false, - "animated": false, - "adjust_camera": false, - "planar_normal": { - "x": 0.0, - "y": 0.0, - "z": 1.0 - } - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "move_path_pen", - "path": "[uuid]", - "to": { - "x": -200.0, - "y": -200.0, - "z": 0.0 - } - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "sketch_mode_disable" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "start_path" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "extend_path", - "path": "[uuid]", - "segment": { - "type": "line", - "end": { - "x": -200.0, - "y": 200.0, - "z": 0.0 - }, - "relative": false - } - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "extend_path", - "path": "[uuid]", - "segment": { - "type": "line", - "end": { - "x": 200.0, - "y": 200.0, - "z": 0.0 - }, - "relative": false - } - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "extend_path", - "path": "[uuid]", - "segment": { - "type": "line", - "end": { - "x": 200.0, - "y": -200.0, - "z": 0.0 - }, - "relative": false - } - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "extend_path", - "path": "[uuid]", - "segment": { - "type": "line", - "end": { - "x": -200.0, - "y": -200.0, - "z": 0.0 - }, - "relative": false - } - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "close_path", - "path_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "enable_sketch_mode", - "entity_id": "[uuid]", - "ortho": false, - "animated": false, - "adjust_camera": false, - "planar_normal": { - "x": 0.0, - "y": 0.0, - "z": 1.0 - } - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "extrude", - "target": "[uuid]", - "distance": 400.0, - "faces": null, - "opposite": "None" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "object_bring_to_front", - "object_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "sketch_mode_disable" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_all_edge_faces", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_extrusion_face_info", - "object_id": "[uuid]", - "edge_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_next_adjacent_edge", - "object_id": "[uuid]", - "edge_id": "[uuid]", - "face_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_next_adjacent_edge", - "object_id": "[uuid]", - "edge_id": "[uuid]", - "face_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_next_adjacent_edge", - "object_id": "[uuid]", - "edge_id": "[uuid]", - "face_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_next_adjacent_edge", - "object_id": "[uuid]", - "edge_id": "[uuid]", - "face_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_opposite_edge", - "object_id": "[uuid]", - "edge_id": "[uuid]", - "face_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_opposite_edge", - "object_id": "[uuid]", - "edge_id": "[uuid]", - "face_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_opposite_edge", - "object_id": "[uuid]", - "edge_id": "[uuid]", - "face_id": "[uuid]" - } - }, - { - "cmdId": "[uuid]", - "range": [], - "command": { - "type": "solid3d_get_opposite_edge", - "object_id": "[uuid]", - "edge_id": "[uuid]", - "face_id": "[uuid]" - } } ] diff --git a/rust/kcl-lib/tests/pipe_as_arg/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/pipe_as_arg/artifact_graph_flowchart.snap.md index 745561a19..13e533509 100644 --- a/rust/kcl-lib/tests/pipe_as_arg/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/pipe_as_arg/artifact_graph_flowchart.snap.md @@ -1,82 +1,3 @@ ```mermaid flowchart LR - subgraph path2 [Path] - 2["Path
    [202, 223, 0]"] - 3["Segment
    [231, 253, 0]"] - 4["Segment
    [261, 283, 0]"] - 5["Segment
    [291, 313, 0]"] - 6["Segment
    [321, 343, 0]"] - 7["Segment
    [351, 359, 0]"] - 8[Solid2d] - end - 1["Plane
    [177, 194, 0]"] - 9["Sweep Extrusion
    [367, 391, 0]"] - 10[Wall] - 11[Wall] - 12[Wall] - 13[Wall] - 14["Cap Start"] - 15["Cap End"] - 16["SweepEdge Opposite"] - 17["SweepEdge Opposite"] - 18["SweepEdge Opposite"] - 19["SweepEdge Opposite"] - 20["SweepEdge Adjacent"] - 21["SweepEdge Adjacent"] - 22["SweepEdge Adjacent"] - 23["SweepEdge Adjacent"] - 1 --- 2 - 2 --- 3 - 2 --- 4 - 2 --- 5 - 2 --- 6 - 2 --- 7 - 2 --- 8 - 2 ---- 9 - 3 --- 13 - 3 x--> 14 - 3 --- 17 - 3 --- 20 - 4 --- 11 - 4 x--> 14 - 4 --- 18 - 4 --- 22 - 5 --- 10 - 5 x--> 14 - 5 --- 19 - 5 --- 21 - 6 --- 12 - 6 x--> 14 - 6 --- 16 - 6 --- 23 - 9 --- 10 - 9 --- 11 - 9 --- 12 - 9 --- 13 - 9 --- 14 - 9 --- 15 - 9 --- 16 - 9 --- 17 - 9 --- 18 - 9 --- 19 - 9 --- 20 - 9 --- 21 - 9 --- 22 - 9 --- 23 - 19 <--x 10 - 21 <--x 10 - 22 <--x 10 - 18 <--x 11 - 20 <--x 11 - 22 <--x 11 - 16 <--x 12 - 21 <--x 12 - 23 <--x 12 - 17 <--x 13 - 20 <--x 13 - 23 <--x 13 - 16 <--x 15 - 17 <--x 15 - 18 <--x 15 - 19 <--x 15 ``` diff --git a/rust/kcl-lib/tests/pipe_as_arg/ast.snap b/rust/kcl-lib/tests/pipe_as_arg/ast.snap index 06d8a6239..5f979a357 100644 --- a/rust/kcl-lib/tests/pipe_as_arg/ast.snap +++ b/rust/kcl-lib/tests/pipe_as_arg/ast.snap @@ -20,1019 +20,22 @@ description: Result of parsing pipe_as_arg.kcl "init": { "body": { "body": [ - { - "commentStart": 0, - "declaration": { - "commentStart": 0, - "end": 0, - "id": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "init": { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "length", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 2.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "start": 0, - "type": "VariableDeclarator" - }, - "end": 0, - "kind": "const", - "start": 0, - "type": "VariableDeclaration", - "type": "VariableDeclaration" - }, - { - "commentStart": 0, - "declaration": { - "commentStart": 0, - "end": 0, - "id": { - "commentStart": 0, - "end": 0, - "name": "x", - "start": 0, - "type": "Identifier" - }, - "init": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "center", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "start": 0, - "type": "VariableDeclarator" - }, - "end": 0, - "kind": "const", - "start": 0, - "type": "VariableDeclaration", - "type": "VariableDeclaration" - }, - { - "commentStart": 0, - "declaration": { - "commentStart": 0, - "end": 0, - "id": { - "commentStart": 0, - "end": 0, - "name": "y", - "start": 0, - "type": "Identifier" - }, - "init": { - "commentStart": 0, - "computed": false, - "end": 0, - "object": { - "commentStart": 0, - "end": 0, - "name": "center", - "start": 0, - "type": "Identifier", - "type": "Identifier" - }, - "property": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "start": 0, - "type": "MemberExpression", - "type": "MemberExpression" - }, - "start": 0, - "type": "VariableDeclarator" - }, - "end": 0, - "kind": "const", - "start": 0, - "type": "VariableDeclaration", - "type": "VariableDeclaration" - }, - { - "commentStart": 0, - "declaration": { - "commentStart": 0, - "end": 0, - "id": { - "commentStart": 0, - "end": 0, - "name": "p0", - "start": 0, - "type": "Identifier" - }, - "init": { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "x", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "y", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - "start": 0, - "type": "VariableDeclarator" - }, - "end": 0, - "kind": "const", - "start": 0, - "type": "VariableDeclaration", - "type": "VariableDeclaration" - }, - { - "commentStart": 0, - "declaration": { - "commentStart": 0, - "end": 0, - "id": { - "commentStart": 0, - "end": 0, - "name": "p1", - "start": 0, - "type": "Identifier" - }, - "init": { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "x", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "y", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - "start": 0, - "type": "VariableDeclarator" - }, - "end": 0, - "kind": "const", - "start": 0, - "type": "VariableDeclaration", - "type": "VariableDeclaration" - }, - { - "commentStart": 0, - "declaration": { - "commentStart": 0, - "end": 0, - "id": { - "commentStart": 0, - "end": 0, - "name": "p2", - "start": 0, - "type": "Identifier" - }, - "init": { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "x", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "y", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - "start": 0, - "type": "VariableDeclarator" - }, - "end": 0, - "kind": "const", - "start": 0, - "type": "VariableDeclaration", - "type": "VariableDeclaration" - }, - { - "commentStart": 0, - "declaration": { - "commentStart": 0, - "end": 0, - "id": { - "commentStart": 0, - "end": 0, - "name": "p3", - "start": 0, - "type": "Identifier" - }, - "init": { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "x", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - { - "commentStart": 0, - "end": 0, - "left": { - "argument": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "l", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "y", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - }, - "start": 0, - "type": "VariableDeclarator" - }, - "end": 0, - "kind": "const", - "start": 0, - "type": "VariableDeclaration", - "type": "VariableDeclaration" - }, { "argument": { - "body": [ - { - "arguments": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "XY", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "startSketchOn", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "at", - "start": 0, - "type": "Identifier" - }, - "arg": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "p0", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "startProfile", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": null - }, - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "endAbsolute", - "start": 0, - "type": "Identifier" - }, - "arg": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "p1", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "line", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": null - }, - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "endAbsolute", - "start": 0, - "type": "Identifier" - }, - "arg": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "p2", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "line", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": null - }, - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "endAbsolute", - "start": 0, - "type": "Identifier" - }, - "arg": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "p3", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "line", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": null - }, - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "endAbsolute", - "start": 0, - "type": "Identifier" - }, - "arg": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "p0", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "line", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": null - }, - { - "arguments": [ - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "close", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - { - "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "length", - "start": 0, - "type": "Identifier" - }, - "arg": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "length", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "extrude", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpressionKw", - "type": "CallExpressionKw", - "unlabeled": null - } - ], + "abs_path": false, "commentStart": 0, "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "PipeExpression", - "type": "PipeExpression" + "type": "Name", + "type": "Name" }, "commentStart": 0, "end": 0, @@ -1043,22 +46,6 @@ description: Result of parsing pipe_as_arg.kcl ], "commentStart": 0, "end": 0, - "nonCodeMeta": { - "nonCodeNodes": { - "6": [ - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "NonCodeNode", - "value": { - "type": "newLine" - } - } - ] - }, - "startNodes": [] - }, "start": 0 }, "commentStart": 0, @@ -1172,7 +159,8 @@ description: Result of parsing pipe_as_arg.kcl "name": "x", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, @@ -1258,89 +246,109 @@ description: Result of parsing pipe_as_arg.kcl "init": { "arguments": [ { - "body": [ - { - "commentStart": 0, - "end": 0, - "raw": "200", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 200.0, - "suffix": "None" - } - }, - { - "arguments": [ - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" - } - ], - "callee": { - "abs_path": false, + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "length", + "start": 0, + "type": "Identifier" + }, + "arg": { + "body": [ + { "commentStart": 0, "end": 0, - "name": { + "raw": "200", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 200.0, + "suffix": "None" + } + }, + { + "arguments": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeSubstitution", + "type": "PipeSubstitution" + } + ], + "callee": { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "double", + "name": { + "commentStart": 0, + "end": 0, + "name": "double", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name" }, - "path": [], + "commentStart": 0, + "end": 0, "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - } - ], - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeExpression", - "type": "PipeExpression" + "type": "CallExpression", + "type": "CallExpression" + } + ], + "commentStart": 0, + "end": 0, + "start": 0, + "type": "PipeExpression", + "type": "PipeExpression" + } }, { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -1361,8 +369,9 @@ description: Result of parsing pipe_as_arg.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/pipe_as_arg/input.kcl b/rust/kcl-lib/tests/pipe_as_arg/input.kcl index 5cbd93152..c5b42be62 100644 --- a/rust/kcl-lib/tests/pipe_as_arg/input.kcl +++ b/rust/kcl-lib/tests/pipe_as_arg/input.kcl @@ -1,28 +1,12 @@ fn cube(length, center) { - l = length / 2 - x = center[0] - y = center[1] - p0 = [-l + x, -l + y] - p1 = [-l + x, l + y] - p2 = [l + x, l + y] - p3 = [l + x, -l + y] - - return startSketchOn(XY) - |> startProfile(at = p0) - |> line(endAbsolute = p1) - |> line(endAbsolute = p2) - |> line(endAbsolute = p3) - |> line(endAbsolute = p0) - |> close(%) - |> extrude(length = length) + return length } -fn double(x) { +fn double(@x) { return x * 2 } fn width() { return 200 } -myCube = cube(200 - |> double(%), [0, 0]) +myCube = cube(length = 200 |> double(%), center = [0, 0]) diff --git a/rust/kcl-lib/tests/pipe_as_arg/ops.snap b/rust/kcl-lib/tests/pipe_as_arg/ops.snap index 732e831e2..20141fb5a 100644 --- a/rust/kcl-lib/tests/pipe_as_arg/ops.snap +++ b/rust/kcl-lib/tests/pipe_as_arg/ops.snap @@ -3,53 +3,6 @@ source: kcl-lib/src/simulation_tests.rs description: Operations executed pipe_as_arg.kcl --- [ - { - "labeledArgs": { - "planeOrSolid": { - "value": { - "type": "Plane", - "artifact_id": "[uuid]" - }, - "sourceRange": [] - } - }, - "name": "startSketchOn", - "sourceRange": [], - "type": "StdLibCall", - "unlabeledArg": null - }, - { - "labeledArgs": { - "length": { - "value": { - "type": "Number", - "value": 400.0, - "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } - } - }, - "sourceRange": [] - } - }, - "name": "extrude", - "sourceRange": [], - "type": "StdLibCall", - "unlabeledArg": { - "value": { - "type": "Sketch", - "value": { - "artifactId": "[uuid]" - } - }, - "sourceRange": [] - } - }, { "type": "GroupBegin", "group": { @@ -57,7 +10,58 @@ description: Operations executed pipe_as_arg.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "center": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "length": { + "value": { + "type": "Number", + "value": 400.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/pipe_as_arg/program_memory.snap b/rust/kcl-lib/tests/pipe_as_arg/program_memory.snap index 03a287531..4aba2f8a9 100644 --- a/rust/kcl-lib/tests/pipe_as_arg/program_memory.snap +++ b/rust/kcl-lib/tests/pipe_as_arg/program_memory.snap @@ -10,202 +10,16 @@ description: Variables in memory after executing pipe_as_arg.kcl "type": "Function" }, "myCube": { - "type": "Solid", - "value": { - "type": "Solid", - "id": "[uuid]", - "artifactId": "[uuid]", - "value": [ - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - } - ], - "sketch": { - "type": "Sketch", - "id": "[uuid]", - "paths": [ - { - "__geoMeta": { - "id": "[uuid]", - "sourceRange": [] - }, - "from": [ - -200.0, - -200.0 - ], - "tag": null, - "to": [ - -200.0, - 200.0 - ], - "type": "ToPoint", - "units": { - "type": "Mm" - } - }, - { - "__geoMeta": { - "id": "[uuid]", - "sourceRange": [] - }, - "from": [ - -200.0, - 200.0 - ], - "tag": null, - "to": [ - 200.0, - 200.0 - ], - "type": "ToPoint", - "units": { - "type": "Mm" - } - }, - { - "__geoMeta": { - "id": "[uuid]", - "sourceRange": [] - }, - "from": [ - 200.0, - 200.0 - ], - "tag": null, - "to": [ - 200.0, - -200.0 - ], - "type": "ToPoint", - "units": { - "type": "Mm" - } - }, - { - "__geoMeta": { - "id": "[uuid]", - "sourceRange": [] - }, - "from": [ - 200.0, - -200.0 - ], - "tag": null, - "to": [ - -200.0, - -200.0 - ], - "type": "ToPoint", - "units": { - "type": "Mm" - } - }, - { - "__geoMeta": { - "id": "[uuid]", - "sourceRange": [] - }, - "from": [ - -200.0, - -200.0 - ], - "tag": null, - "to": [ - -200.0, - -200.0 - ], - "type": "ToPoint", - "units": { - "type": "Mm" - } - } - ], - "on": { - "artifactId": "[uuid]", - "id": "[uuid]", - "origin": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "units": { - "type": "Mm" - } - }, - "type": "plane", - "value": "XY", - "xAxis": { - "x": 1.0, - "y": 0.0, - "z": 0.0, - "units": { - "type": "Unknown" - } - }, - "yAxis": { - "x": 0.0, - "y": 1.0, - "z": 0.0, - "units": { - "type": "Unknown" - } - } - }, - "start": { - "from": [ - -200.0, - -200.0 - ], - "to": [ - -200.0, - -200.0 - ], - "units": { - "type": "Mm" - }, - "tag": null, - "__geoMeta": { - "id": "[uuid]", - "sourceRange": [] - } - }, - "artifactId": "[uuid]", - "originalId": "[uuid]", - "units": { - "type": "Mm" - } - }, - "height": 400.0, - "startCapId": "[uuid]", - "endCapId": "[uuid]", - "units": { + "type": "Number", + "value": 400.0, + "ty": { + "type": "Default", + "len": { "type": "Mm" }, - "sectional": false + "angle": { + "type": "Degrees" + } } }, "width": { diff --git a/rust/kcl-lib/tests/pipe_as_arg/rendered_model.png b/rust/kcl-lib/tests/pipe_as_arg/rendered_model.png index 0a12783a0895d1bf81b5d63e2f09a8cb4ef9aacc..6148ae43278779b7986fcf452545890b852f2298 100644 GIT binary patch delta 100 zcmeCX#(H=r;{+vU2A{5tsxExnAEYr#uxvL-VLZV`8u^-8{HQ(C@<-hBBDrQhVgLe9 LS3j3^P6B9?Yyl(rLIZ=xhYDT#?B0W1wszJ%jP z5D76Tw%P`z(%Kypd8I_Ilqgt!pe8C-+qMA&DL+9)EfLG2imJ2kZ_c^a+H3D~O6~XF zG44MZgHfFNJbTYI=QE%A%(>QH@V~xu+Wz|;ykA8{#r|VX|K|TyQPGQ+d;RA=z4@gHAM-_L%t^rnBR zU-}Qn9rj-Pr42uy^@sVRCcjXB(wnFBd-bkm%O7~V^g~DWf~U?JckU%GlzwO}47joU zFFo*fa@0}ff9aAJlC!>7_MLe5WZ56jDfdo%Eg5&_>N1xnmt3sB{TF2}PySF>&8csc z-jm*EN8_*mc4Lu6|F&Wo_y3zKM!xa47|Zy^vgLmRk1X*24LmXq@;C7K8+iPUdBg

    7D<3^77T&9 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 n+c=iTQn@x7-GA!s-S startProfile(at = p0) - |> line(endAbsolute = p1) - |> line(endAbsolute = p2) - |> line(endAbsolute = p3) - |> line(endAbsolute = p0) - |> close(%) - |> extrude(length = length) + return length } -fn double(x) { +fn double(@x) { return x * 2 } fn width() { return 200 } -myCube = cube(200 - |> double(%), [0, 0]) +myCube = cube( + length = 200 + |> double(%), + center = [0, 0], +) diff --git a/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/ast.snap b/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/ast.snap index dc6339e0d..95d4a68f6 100644 --- a/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/ast.snap +++ b/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/ast.snap @@ -50,7 +50,8 @@ description: Result of parsing pipe_substitution_inside_function_called_from_pip "name": "ignored", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/input.kcl b/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/input.kcl index b56efda1f..5b31ef8db 100644 --- a/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/input.kcl +++ b/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/input.kcl @@ -1,5 +1,5 @@ // Make sure pipe value doesn't leak into the function call. -fn f(ignored) { +fn f(@ignored) { return % } diff --git a/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/unparsed.snap b/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/unparsed.snap index 0aaa2fa15..b0ff74f85 100644 --- a/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/unparsed.snap +++ b/rust/kcl-lib/tests/pipe_substitution_inside_function_called_from_pipeline/unparsed.snap @@ -3,7 +3,7 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing pipe_substitution_inside_function_called_from_pipeline.kcl --- // Make sure pipe value doesn't leak into the function call. -fn f(ignored) { +fn f(@ignored) { return % } diff --git a/rust/kcl-lib/tests/riddle_small/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/riddle_small/artifact_graph_flowchart.snap.md index b248f75f4..296b2c9e9 100644 --- a/rust/kcl-lib/tests/riddle_small/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/riddle_small/artifact_graph_flowchart.snap.md @@ -1,15 +1,15 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
    [164, 191, 0]"] - 3["Segment
    [197, 215, 0]"] - 4["Segment
    [221, 240, 0]"] - 5["Segment
    [246, 265, 0]"] - 6["Segment
    [271, 279, 0]"] + 2["Path
    [165, 192, 0]"] + 3["Segment
    [198, 216, 0]"] + 4["Segment
    [222, 241, 0]"] + 5["Segment
    [247, 266, 0]"] + 6["Segment
    [272, 280, 0]"] 7[Solid2d] end - 1["Plane
    [141, 158, 0]"] - 8["Sweep Extrusion
    [285, 304, 0]"] + 1["Plane
    [142, 159, 0]"] + 8["Sweep Extrusion
    [286, 305, 0]"] 9[Wall] 10[Wall] 11[Wall] diff --git a/rust/kcl-lib/tests/riddle_small/ast.snap b/rust/kcl-lib/tests/riddle_small/ast.snap index 29c7ad0f3..1c953c41b 100644 --- a/rust/kcl-lib/tests/riddle_small/ast.snap +++ b/rust/kcl-lib/tests/riddle_small/ast.snap @@ -156,7 +156,8 @@ description: Result of parsing riddle_small.kcl "name": "s", "start": 0, "type": "Identifier" - } + }, + "labeled": false } ], "start": 0, diff --git a/rust/kcl-lib/tests/riddle_small/input.kcl b/rust/kcl-lib/tests/riddle_small/input.kcl index eb583ecf8..5cea48d30 100644 --- a/rust/kcl-lib/tests/riddle_small/input.kcl +++ b/rust/kcl-lib/tests/riddle_small/input.kcl @@ -1,6 +1,6 @@ ANSWER = 41803 -fn t(s) { +fn t(@s) { return (ANSWER * s + 12345) % 214748 } diff --git a/rust/kcl-lib/tests/riddle_small/unparsed.snap b/rust/kcl-lib/tests/riddle_small/unparsed.snap index 961ad1c39..5f6b74abd 100644 --- a/rust/kcl-lib/tests/riddle_small/unparsed.snap +++ b/rust/kcl-lib/tests/riddle_small/unparsed.snap @@ -4,7 +4,7 @@ description: Result of unparsing riddle_small.kcl --- ANSWER = 41803 -fn t(s) { +fn t(@s) { return (ANSWER * s + 12345) % 214748 } diff --git a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/artifact_graph_flowchart.snap.md index 88f9fc92b..a7e8e0d35 100644 --- a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/artifact_graph_flowchart.snap.md @@ -5,18 +5,18 @@ flowchart LR 5["Segment
    [84, 106, 0]"] 6["Segment
    [114, 136, 0]"] 7["Segment
    [144, 167, 0]"] - 8["Segment
    [215, 223, 0]"] + 8["Segment
    [229, 237, 0]"] 11[Solid2d] end subgraph path4 [Path] - 4["Path
    [303, 355, 0]"] - 9["Segment
    [303, 355, 0]"] + 4["Path
    [317, 369, 0]"] + 9["Segment
    [317, 369, 0]"] 10[Solid2d] end 1["Plane
    [29, 46, 0]"] - 2["StartSketchOnFace
    [261, 297, 0]"] - 12["Sweep Extrusion
    [229, 249, 0]"] - 13["Sweep Extrusion
    [361, 380, 0]"] + 2["StartSketchOnFace
    [275, 311, 0]"] + 12["Sweep Extrusion
    [243, 263, 0]"] + 13["Sweep Extrusion
    [375, 394, 0]"] 14[Wall] 15[Wall] 16[Wall] diff --git a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ast.snap b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ast.snap index 6b2ff86d1..aa6d387f5 100644 --- a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ast.snap +++ b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ast.snap @@ -463,48 +463,68 @@ description: Result of parsing sketch_on_face_circle_tagged.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "raw": "20", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 20.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "20", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 20.0, + "suffix": "None" + } } } ], @@ -526,8 +546,9 @@ description: Result of parsing sketch_on_face_circle_tagged.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/input.kcl b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/input.kcl index faac37e54..ac8c9089a 100644 --- a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/input.kcl +++ b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/input.kcl @@ -7,7 +7,7 @@ fn cube(pos, scale) { return sg } -part001 = cube([0, 0], 20) +part001 = cube(pos = [0, 0], scale = 20) |> close(%) |> extrude(length = 20) diff --git a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ops.snap b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ops.snap index b70f3e7c6..66ecbd489 100644 --- a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ops.snap +++ b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/ops.snap @@ -25,7 +25,58 @@ description: Operations executed sketch_on_face_circle_tagged.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "pos": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "scale": { + "value": { + "type": "Number", + "value": 20.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/program_memory.snap b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/program_memory.snap index 2a979002b..1db537253 100644 --- a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/program_memory.snap +++ b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/program_memory.snap @@ -203,9 +203,9 @@ description: Variables in memory after executing sketch_on_face_circle_tagged.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 345, - "end": 354, - "start": 345, + "commentStart": 359, + "end": 368, + "start": 359, "type": "TagDeclarator", "value": "myCircle" }, @@ -232,9 +232,9 @@ description: Variables in memory after executing sketch_on_face_circle_tagged.kc ], "radius": 5.0, "tag": { - "commentStart": 345, - "end": 354, - "start": 345, + "commentStart": 359, + "end": 368, + "start": 359, "type": "TagDeclarator", "value": "myCircle" }, diff --git a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/unparsed.snap b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/unparsed.snap index a96849a0e..6511b57ef 100644 --- a/rust/kcl-lib/tests/sketch_on_face_circle_tagged/unparsed.snap +++ b/rust/kcl-lib/tests/sketch_on_face_circle_tagged/unparsed.snap @@ -11,7 +11,7 @@ fn cube(pos, scale) { return sg } -part001 = cube([0, 0], 20) +part001 = cube(pos = [0, 0], scale = 20) |> close(%) |> extrude(length = 20) diff --git a/rust/kcl-lib/tests/sketch_on_face_end/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/sketch_on_face_end/artifact_graph_flowchart.snap.md index d083432d7..a0d64a832 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/sketch_on_face_end/artifact_graph_flowchart.snap.md @@ -5,21 +5,21 @@ flowchart LR 5["Segment
    [84, 106, 0]"] 6["Segment
    [114, 136, 0]"] 7["Segment
    [144, 167, 0]"] - 8["Segment
    [215, 223, 0]"] + 8["Segment
    [229, 237, 0]"] 14[Solid2d] end subgraph path4 [Path] - 4["Path
    [303, 328, 0]"] - 9["Segment
    [334, 353, 0]"] - 10["Segment
    [359, 378, 0]"] - 11["Segment
    [384, 404, 0]"] - 12["Segment
    [410, 418, 0]"] + 4["Path
    [317, 342, 0]"] + 9["Segment
    [348, 367, 0]"] + 10["Segment
    [373, 392, 0]"] + 11["Segment
    [398, 418, 0]"] + 12["Segment
    [424, 432, 0]"] 13[Solid2d] end 1["Plane
    [29, 46, 0]"] - 2["StartSketchOnFace
    [261, 297, 0]"] - 15["Sweep Extrusion
    [229, 249, 0]"] - 16["Sweep Extrusion
    [424, 443, 0]"] + 2["StartSketchOnFace
    [275, 311, 0]"] + 15["Sweep Extrusion
    [243, 263, 0]"] + 16["Sweep Extrusion
    [438, 457, 0]"] 17[Wall] 18[Wall] 19[Wall] diff --git a/rust/kcl-lib/tests/sketch_on_face_end/ast.snap b/rust/kcl-lib/tests/sketch_on_face_end/ast.snap index f544205fc..5f3d4b503 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end/ast.snap +++ b/rust/kcl-lib/tests/sketch_on_face_end/ast.snap @@ -463,48 +463,68 @@ description: Result of parsing sketch_on_face_end.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "raw": "20", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 20.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "20", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 20.0, + "suffix": "None" + } } } ], @@ -526,8 +546,9 @@ description: Result of parsing sketch_on_face_end.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch_on_face_end/input.kcl b/rust/kcl-lib/tests/sketch_on_face_end/input.kcl index 7668af2fe..dc28207b2 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end/input.kcl +++ b/rust/kcl-lib/tests/sketch_on_face_end/input.kcl @@ -7,7 +7,7 @@ fn cube(pos, scale) { return sg } -part001 = cube([0, 0], 20) +part001 = cube(pos = [0, 0], scale = 20) |> close(%) |> extrude(length = 20) diff --git a/rust/kcl-lib/tests/sketch_on_face_end/ops.snap b/rust/kcl-lib/tests/sketch_on_face_end/ops.snap index e9a2e49cb..9a0e63dae 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end/ops.snap +++ b/rust/kcl-lib/tests/sketch_on_face_end/ops.snap @@ -25,7 +25,58 @@ description: Operations executed sketch_on_face_end.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "pos": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "scale": { + "value": { + "type": "Number", + "value": 20.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/sketch_on_face_end/unparsed.snap b/rust/kcl-lib/tests/sketch_on_face_end/unparsed.snap index 9c2d589b1..f3e49167d 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end/unparsed.snap +++ b/rust/kcl-lib/tests/sketch_on_face_end/unparsed.snap @@ -11,7 +11,7 @@ fn cube(pos, scale) { return sg } -part001 = cube([0, 0], 20) +part001 = cube(pos = [0, 0], scale = 20) |> close(%) |> extrude(length = 20) diff --git a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/artifact_graph_flowchart.snap.md index 0d88a7afb..c69af9076 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/artifact_graph_flowchart.snap.md @@ -5,21 +5,21 @@ flowchart LR 5["Segment
    [84, 106, 0]"] 6["Segment
    [114, 136, 0]"] 7["Segment
    [144, 167, 0]"] - 8["Segment
    [215, 223, 0]"] + 8["Segment
    [229, 237, 0]"] 14[Solid2d] end subgraph path4 [Path] - 4["Path
    [303, 328, 0]"] - 9["Segment
    [334, 353, 0]"] - 10["Segment
    [359, 378, 0]"] - 11["Segment
    [384, 404, 0]"] - 12["Segment
    [410, 418, 0]"] + 4["Path
    [317, 342, 0]"] + 9["Segment
    [348, 367, 0]"] + 10["Segment
    [373, 392, 0]"] + 11["Segment
    [398, 418, 0]"] + 12["Segment
    [424, 432, 0]"] 13[Solid2d] end 1["Plane
    [29, 46, 0]"] - 2["StartSketchOnFace
    [261, 297, 0]"] - 15["Sweep Extrusion
    [229, 249, 0]"] - 16["Sweep Extrusion
    [424, 444, 0]"] + 2["StartSketchOnFace
    [275, 311, 0]"] + 15["Sweep Extrusion
    [243, 263, 0]"] + 16["Sweep Extrusion
    [438, 458, 0]"] 17[Wall] 18[Wall] 19[Wall] diff --git a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ast.snap b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ast.snap index 56d327e69..79320517d 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ast.snap +++ b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ast.snap @@ -463,48 +463,68 @@ description: Result of parsing sketch_on_face_end_negative_extrude.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "raw": "20", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 20.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "20", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 20.0, + "suffix": "None" + } } } ], @@ -526,8 +546,9 @@ description: Result of parsing sketch_on_face_end_negative_extrude.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/input.kcl b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/input.kcl index a33dc453b..1eb6136ab 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/input.kcl +++ b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/input.kcl @@ -7,7 +7,7 @@ fn cube(pos, scale) { return sg } -part001 = cube([0, 0], 20) +part001 = cube(pos = [0, 0], scale = 20) |> close(%) |> extrude(length = 20) diff --git a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ops.snap b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ops.snap index ef2abb2d4..26238fd94 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ops.snap +++ b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/ops.snap @@ -25,7 +25,58 @@ description: Operations executed sketch_on_face_end_negative_extrude.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "pos": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "scale": { + "value": { + "type": "Number", + "value": 20.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/unparsed.snap b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/unparsed.snap index 3b968e94d..ecc4c4825 100644 --- a/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/unparsed.snap +++ b/rust/kcl-lib/tests/sketch_on_face_end_negative_extrude/unparsed.snap @@ -11,7 +11,7 @@ fn cube(pos, scale) { return sg } -part001 = cube([0, 0], 20) +part001 = cube(pos = [0, 0], scale = 20) |> close(%) |> extrude(length = 20) diff --git a/rust/kcl-lib/tests/sketch_on_face_start/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/sketch_on_face_start/artifact_graph_flowchart.snap.md index 7ffc24767..5c9b96399 100644 --- a/rust/kcl-lib/tests/sketch_on_face_start/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/sketch_on_face_start/artifact_graph_flowchart.snap.md @@ -5,21 +5,21 @@ flowchart LR 5["Segment
    [84, 106, 0]"] 6["Segment
    [114, 136, 0]"] 7["Segment
    [144, 167, 0]"] - 8["Segment
    [215, 223, 0]"] + 8["Segment
    [229, 237, 0]"] 14[Solid2d] end subgraph path4 [Path] - 4["Path
    [308, 333, 0]"] - 9["Segment
    [339, 358, 0]"] - 10["Segment
    [364, 383, 0]"] - 11["Segment
    [389, 409, 0]"] - 12["Segment
    [415, 423, 0]"] + 4["Path
    [322, 347, 0]"] + 9["Segment
    [353, 372, 0]"] + 10["Segment
    [378, 397, 0]"] + 11["Segment
    [403, 423, 0]"] + 12["Segment
    [429, 437, 0]"] 13[Solid2d] end 1["Plane
    [29, 46, 0]"] - 2["StartSketchOnFace
    [268, 302, 0]"] - 15["Sweep Extrusion
    [229, 249, 0]"] - 16["Sweep Extrusion
    [429, 448, 0]"] + 2["StartSketchOnFace
    [282, 316, 0]"] + 15["Sweep Extrusion
    [243, 263, 0]"] + 16["Sweep Extrusion
    [443, 462, 0]"] 17[Wall] 18[Wall] 19[Wall] diff --git a/rust/kcl-lib/tests/sketch_on_face_start/ast.snap b/rust/kcl-lib/tests/sketch_on_face_start/ast.snap index 767543dc2..e01341546 100644 --- a/rust/kcl-lib/tests/sketch_on_face_start/ast.snap +++ b/rust/kcl-lib/tests/sketch_on_face_start/ast.snap @@ -463,48 +463,68 @@ description: Result of parsing sketch_on_face_start.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "raw": "20", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 20.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "20", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 20.0, + "suffix": "None" + } } } ], @@ -526,8 +546,9 @@ description: Result of parsing sketch_on_face_start.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/sketch_on_face_start/input.kcl b/rust/kcl-lib/tests/sketch_on_face_start/input.kcl index 93df3c8f0..fb5b9f9aa 100644 --- a/rust/kcl-lib/tests/sketch_on_face_start/input.kcl +++ b/rust/kcl-lib/tests/sketch_on_face_start/input.kcl @@ -7,7 +7,7 @@ fn cube(pos, scale) { return sg } -part001 = cube([0, 0], 20) +part001 = cube(pos = [0, 0], scale = 20) |> close(%) |> extrude(length = 20) as foo diff --git a/rust/kcl-lib/tests/sketch_on_face_start/ops.snap b/rust/kcl-lib/tests/sketch_on_face_start/ops.snap index 1ae907dde..714253506 100644 --- a/rust/kcl-lib/tests/sketch_on_face_start/ops.snap +++ b/rust/kcl-lib/tests/sketch_on_face_start/ops.snap @@ -25,7 +25,58 @@ description: Operations executed sketch_on_face_start.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "pos": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "scale": { + "value": { + "type": "Number", + "value": 20.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/sketch_on_face_start/unparsed.snap b/rust/kcl-lib/tests/sketch_on_face_start/unparsed.snap index 6dd658d1b..eab366a6f 100644 --- a/rust/kcl-lib/tests/sketch_on_face_start/unparsed.snap +++ b/rust/kcl-lib/tests/sketch_on_face_start/unparsed.snap @@ -11,7 +11,7 @@ fn cube(pos, scale) { return sg } -part001 = cube([0, 0], 20) +part001 = cube(pos = [0, 0], scale = 20) |> close(%) |> extrude(length = 20) as foo diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_graph_flowchart.snap.md index 0d7009b03..d9deddde4 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_graph_flowchart.snap.md @@ -9,15 +9,15 @@ flowchart LR 11[Solid2d] end subgraph path4 [Path] - 4["Path
    [386, 421, 0]"] - 9["Segment
    [386, 421, 0]"] + 4["Path
    [395, 430, 0]"] + 9["Segment
    [395, 430, 0]"] 10[Solid2d] end 1["Plane
    [27, 44, 0]"] - 2["Plane
    [363, 380, 0]"] + 2["Plane
    [372, 389, 0]"] 12["Sweep Extrusion
    [306, 326, 0]"] - 13["Sweep Extrusion
    [427, 446, 0]"] - 14["CompositeSolid Subtract
    [459, 495, 0]"] + 13["Sweep Extrusion
    [436, 455, 0]"] + 14["CompositeSolid Subtract
    [468, 504, 0]"] 15[Wall] 16[Wall] 17[Wall] diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap b/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap index e6d0b7825..0503fffa8 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap @@ -753,37 +753,47 @@ description: Result of parsing subtract_cylinder_from_cube.kcl "init": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "center", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -804,8 +814,9 @@ description: Result of parsing subtract_cylinder_from_cube.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl b/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl index d0f24117d..9b9af9fff 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl @@ -8,7 +8,7 @@ fn cube(center) { |> extrude(length = 10) } -part001 = cube([0, 0]) +part001 = cube(center = [0, 0]) part002 = startSketchOn(XY) |> circle(center = [2, 2], radius = 2) |> extrude(length = 5) diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/ops.snap b/rust/kcl-lib/tests/subtract_cylinder_from_cube/ops.snap index 66b969814..0c5f00166 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/ops.snap +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/ops.snap @@ -57,7 +57,42 @@ description: Operations executed subtract_cylinder_from_cube.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "center": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap b/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap index 0f276364d..9ad56d457 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap @@ -12,7 +12,7 @@ fn cube(center) { |> extrude(length = 10) } -part001 = cube([0, 0]) +part001 = cube(center = [0, 0]) part002 = startSketchOn(XY) |> circle(center = [2, 2], radius = 2) |> extrude(length = 5) diff --git a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/artifact_graph_flowchart.snap.md index 890fd1a3d..15802af18 100644 --- a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/artifact_graph_flowchart.snap.md @@ -1,26 +1,26 @@ ```mermaid flowchart LR subgraph path3 [Path] - 3["Path
    [58, 113, 0]"] - 5["Segment
    [121, 177, 0]"] - 8["Segment
    [185, 241, 0]"] - 10["Segment
    [249, 305, 0]"] - 11["Segment
    [313, 320, 0]"] + 3["Path
    [56, 107, 0]"] + 5["Segment
    [115, 167, 0]"] + 8["Segment
    [175, 227, 0]"] + 10["Segment
    [235, 287, 0]"] + 11["Segment
    [295, 302, 0]"] 13[Solid2d] end subgraph path4 [Path] - 4["Path
    [58, 113, 0]"] - 6["Segment
    [121, 177, 0]"] - 7["Segment
    [185, 241, 0]"] - 9["Segment
    [249, 305, 0]"] - 12["Segment
    [313, 320, 0]"] + 4["Path
    [56, 107, 0]"] + 6["Segment
    [115, 167, 0]"] + 7["Segment
    [175, 227, 0]"] + 9["Segment
    [235, 287, 0]"] + 12["Segment
    [295, 302, 0]"] 14[Solid2d] end - 1["Plane
    [33, 50, 0]"] - 2["Plane
    [33, 50, 0]"] - 15["Sweep Extrusion
    [328, 348, 0]"] - 16["Sweep Extrusion
    [328, 348, 0]"] - 17["CompositeSolid Subtract
    [445, 479, 0]"] + 1["Plane
    [31, 48, 0]"] + 2["Plane
    [31, 48, 0]"] + 15["Sweep Extrusion
    [310, 330, 0]"] + 16["Sweep Extrusion
    [310, 330, 0]"] + 17["CompositeSolid Subtract
    [455, 489, 0]"] 18[Wall] 19[Wall] 20[Wall] diff --git a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ast.snap b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ast.snap index b36956f19..7c64169f4 100644 --- a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ast.snap +++ b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ast.snap @@ -87,7 +87,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -116,7 +116,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -139,7 +139,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -168,7 +168,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -235,7 +235,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -264,7 +264,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -287,7 +287,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -316,7 +316,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -383,7 +383,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -412,7 +412,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -435,7 +435,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -464,7 +464,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -531,7 +531,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -560,7 +560,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -583,7 +583,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -612,7 +612,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -751,7 +751,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "identifier": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier" } @@ -761,7 +761,7 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "identifier": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" } @@ -795,48 +795,68 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "init": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } } } ], @@ -858,8 +878,9 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -887,48 +908,68 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "7", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 7.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "7", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "raw": "5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } } ], @@ -950,8 +991,9 @@ description: Result of parsing subtract_doesnt_need_brackets.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/input.kcl b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/input.kcl index 262b67e32..37230ba7b 100644 --- a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/input.kcl +++ b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/input.kcl @@ -1,15 +1,15 @@ -fn cube(center, size) { +fn cube(pos, scale) { return startSketchOn(XY) - |> startProfile(at = [center[0] - size, center[1] - size]) - |> line(endAbsolute = [center[0] + size, center[1] - size]) - |> line(endAbsolute = [center[0] + size, center[1] + size]) - |> line(endAbsolute = [center[0] - size, center[1] + size]) + |> startProfile(at = [pos[0] - scale, pos[1] - scale]) + |> line(endAbsolute = [pos[0] + scale, pos[1] - scale]) + |> line(endAbsolute = [pos[0] + scale, pos[1] + scale]) + |> line(endAbsolute = [pos[0] - scale, pos[1] + scale]) |> close() |> extrude(length = 10) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(pos = [0, 0], scale = 10) +part002 = cube(pos = [7, 3], scale = 5) |> translate(z = 1) subtractedPart = subtract(part001, tools = part002) diff --git a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ops.snap b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ops.snap index cd52af6cb..fc28c1834 100644 --- a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ops.snap +++ b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ops.snap @@ -104,7 +104,58 @@ description: Operations executed subtract_doesnt_need_brackets.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "pos": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "scale": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -115,7 +166,58 @@ description: Operations executed subtract_doesnt_need_brackets.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "pos": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 7.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "scale": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/unparsed.snap b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/unparsed.snap index 0c2094a45..102b03474 100644 --- a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/unparsed.snap +++ b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/unparsed.snap @@ -2,18 +2,18 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing subtract_doesnt_need_brackets.kcl --- -fn cube(center, size) { +fn cube(pos, scale) { return startSketchOn(XY) - |> startProfile(at = [center[0] - size, center[1] - size]) - |> line(endAbsolute = [center[0] + size, center[1] - size]) - |> line(endAbsolute = [center[0] + size, center[1] + size]) - |> line(endAbsolute = [center[0] - size, center[1] + size]) + |> startProfile(at = [pos[0] - scale, pos[1] - scale]) + |> line(endAbsolute = [pos[0] + scale, pos[1] - scale]) + |> line(endAbsolute = [pos[0] + scale, pos[1] + scale]) + |> line(endAbsolute = [pos[0] - scale, pos[1] + scale]) |> close() |> extrude(length = 10) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(pos = [0, 0], scale = 10) +part002 = cube(pos = [7, 3], scale = 5) |> translate(z = 1) subtractedPart = subtract(part001, tools = part002) diff --git a/rust/kcl-lib/tests/union_cubes/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/union_cubes/artifact_graph_flowchart.snap.md index 72922f5d5..e99ad4c23 100644 --- a/rust/kcl-lib/tests/union_cubes/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/union_cubes/artifact_graph_flowchart.snap.md @@ -1,26 +1,26 @@ ```mermaid flowchart LR subgraph path3 [Path] - 3["Path
    [58, 113, 0]"] - 5["Segment
    [121, 177, 0]"] - 8["Segment
    [185, 241, 0]"] - 10["Segment
    [249, 305, 0]"] - 11["Segment
    [313, 320, 0]"] + 3["Path
    [56, 107, 0]"] + 5["Segment
    [115, 167, 0]"] + 8["Segment
    [175, 227, 0]"] + 10["Segment
    [235, 287, 0]"] + 11["Segment
    [295, 302, 0]"] 13[Solid2d] end subgraph path4 [Path] - 4["Path
    [58, 113, 0]"] - 6["Segment
    [121, 177, 0]"] - 7["Segment
    [185, 241, 0]"] - 9["Segment
    [249, 305, 0]"] - 12["Segment
    [313, 320, 0]"] + 4["Path
    [56, 107, 0]"] + 6["Segment
    [115, 167, 0]"] + 7["Segment
    [175, 227, 0]"] + 9["Segment
    [235, 287, 0]"] + 12["Segment
    [295, 302, 0]"] 14[Solid2d] end - 1["Plane
    [33, 50, 0]"] - 2["Plane
    [33, 50, 0]"] - 15["Sweep Extrusion
    [328, 354, 0]"] - 16["Sweep Extrusion
    [328, 354, 0]"] - 17["CompositeSolid Union
    [448, 473, 0]"] + 1["Plane
    [31, 48, 0]"] + 2["Plane
    [31, 48, 0]"] + 15["Sweep Extrusion
    [310, 337, 0]"] + 16["Sweep Extrusion
    [310, 337, 0]"] + 17["CompositeSolid Union
    [459, 484, 0]"] 18[Wall] 19[Wall] 20[Wall] diff --git a/rust/kcl-lib/tests/union_cubes/ast.snap b/rust/kcl-lib/tests/union_cubes/ast.snap index 2d7ba3777..72433b6c6 100644 --- a/rust/kcl-lib/tests/union_cubes/ast.snap +++ b/rust/kcl-lib/tests/union_cubes/ast.snap @@ -87,7 +87,7 @@ description: Result of parsing union_cubes.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -116,7 +116,7 @@ description: Result of parsing union_cubes.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -139,7 +139,7 @@ description: Result of parsing union_cubes.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -168,7 +168,7 @@ description: Result of parsing union_cubes.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -235,7 +235,7 @@ description: Result of parsing union_cubes.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -264,7 +264,7 @@ description: Result of parsing union_cubes.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -287,7 +287,7 @@ description: Result of parsing union_cubes.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -316,7 +316,7 @@ description: Result of parsing union_cubes.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -383,7 +383,7 @@ description: Result of parsing union_cubes.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -412,7 +412,7 @@ description: Result of parsing union_cubes.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -435,7 +435,7 @@ description: Result of parsing union_cubes.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -464,7 +464,7 @@ description: Result of parsing union_cubes.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -531,7 +531,7 @@ description: Result of parsing union_cubes.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -560,7 +560,7 @@ description: Result of parsing union_cubes.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -583,7 +583,7 @@ description: Result of parsing union_cubes.kcl "object": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier", "type": "Identifier" @@ -612,7 +612,7 @@ description: Result of parsing union_cubes.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -712,7 +712,7 @@ description: Result of parsing union_cubes.kcl "name": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" }, @@ -775,7 +775,7 @@ description: Result of parsing union_cubes.kcl "identifier": { "commentStart": 0, "end": 0, - "name": "center", + "name": "pos", "start": 0, "type": "Identifier" } @@ -785,7 +785,7 @@ description: Result of parsing union_cubes.kcl "identifier": { "commentStart": 0, "end": 0, - "name": "size", + "name": "scale", "start": 0, "type": "Identifier" } @@ -819,48 +819,68 @@ description: Result of parsing union_cubes.kcl "init": { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } } } ], @@ -882,8 +902,9 @@ description: Result of parsing union_cubes.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, "start": 0, "type": "VariableDeclarator" @@ -911,48 +932,68 @@ description: Result of parsing union_cubes.kcl { "arguments": [ { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "7", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 7.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "pos", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "7", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "raw": "5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 5.0, - "suffix": "None" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 5.0, + "suffix": "None" + } } } ], @@ -974,8 +1015,9 @@ description: Result of parsing union_cubes.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/union_cubes/input.kcl b/rust/kcl-lib/tests/union_cubes/input.kcl index 483681a95..8d1864797 100644 --- a/rust/kcl-lib/tests/union_cubes/input.kcl +++ b/rust/kcl-lib/tests/union_cubes/input.kcl @@ -1,15 +1,15 @@ -fn cube(center, size) { +fn cube(pos, scale) { return startSketchOn(XY) - |> startProfile(at = [center[0] - size, center[1] - size]) - |> line(endAbsolute = [center[0] + size, center[1] - size]) - |> line(endAbsolute = [center[0] + size, center[1] + size]) - |> line(endAbsolute = [center[0] - size, center[1] + size]) + |> startProfile(at = [pos[0] - scale, pos[1] - scale]) + |> line(endAbsolute = [pos[0] + scale, pos[1] - scale]) + |> line(endAbsolute = [pos[0] + scale, pos[1] + scale]) + |> line(endAbsolute = [pos[0] - scale, pos[1] + scale]) |> close() - |> extrude(length = 2 * size) + |> extrude(length = 2 * scale) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(pos = [0, 0], scale = 10) +part002 = cube(pos = [7, 3], scale = 5) |> translate(z = 1) fullPart = union([part001, part002]) diff --git a/rust/kcl-lib/tests/union_cubes/ops.snap b/rust/kcl-lib/tests/union_cubes/ops.snap index e6a7fba8a..f7691e42e 100644 --- a/rust/kcl-lib/tests/union_cubes/ops.snap +++ b/rust/kcl-lib/tests/union_cubes/ops.snap @@ -104,7 +104,58 @@ description: Operations executed union_cubes.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "pos": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 0.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "scale": { + "value": { + "type": "Number", + "value": 10.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, @@ -115,7 +166,58 @@ description: Operations executed union_cubes.kcl "name": "cube", "functionSourceRange": [], "unlabeledArg": null, - "labeledArgs": {} + "labeledArgs": { + "pos": { + "value": { + "type": "Array", + "value": [ + { + "type": "Number", + "value": 7.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + { + "type": "Number", + "value": 3.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + } + ] + }, + "sourceRange": [] + }, + "scale": { + "value": { + "type": "Number", + "value": 5.0, + "ty": { + "type": "Default", + "len": { + "type": "Mm" + }, + "angle": { + "type": "Degrees" + } + } + }, + "sourceRange": [] + } + } }, "sourceRange": [] }, diff --git a/rust/kcl-lib/tests/union_cubes/unparsed.snap b/rust/kcl-lib/tests/union_cubes/unparsed.snap index d32d14cec..e880eb802 100644 --- a/rust/kcl-lib/tests/union_cubes/unparsed.snap +++ b/rust/kcl-lib/tests/union_cubes/unparsed.snap @@ -2,18 +2,18 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing union_cubes.kcl --- -fn cube(center, size) { +fn cube(pos, scale) { return startSketchOn(XY) - |> startProfile(at = [center[0] - size, center[1] - size]) - |> line(endAbsolute = [center[0] + size, center[1] - size]) - |> line(endAbsolute = [center[0] + size, center[1] + size]) - |> line(endAbsolute = [center[0] - size, center[1] + size]) + |> startProfile(at = [pos[0] - scale, pos[1] - scale]) + |> line(endAbsolute = [pos[0] + scale, pos[1] - scale]) + |> line(endAbsolute = [pos[0] + scale, pos[1] + scale]) + |> line(endAbsolute = [pos[0] - scale, pos[1] + scale]) |> close() - |> extrude(length = 2 * size) + |> extrude(length = 2 * scale) } -part001 = cube([0, 0], 10) -part002 = cube([7, 3], 5) +part001 = cube(pos = [0, 0], scale = 10) +part002 = cube(pos = [7, 3], scale = 5) |> translate(z = 1) fullPart = union([part001, part002]) diff --git a/rust/kcl-wasm-lib/src/wasm.rs b/rust/kcl-wasm-lib/src/wasm.rs index 7beaa921b..c3fb21c43 100644 --- a/rust/kcl-wasm-lib/src/wasm.rs +++ b/rust/kcl-wasm-lib/src/wasm.rs @@ -1,10 +1,10 @@ //! Wasm bindings for `kcl`. use gloo_utils::format::JsValueSerdeExt; -use kcl_lib::{pretty::NumericSuffix, CoreDump, Program}; +use kcl_lib::{pretty::NumericSuffix, CoreDump, Program, SourceRange}; use wasm_bindgen::prelude::*; -// wasm_bindgen wrapper for execute +// wasm_bindgen wrapper for lint #[wasm_bindgen] pub async fn kcl_lint(program_ast_json: &str) -> Result { console_error_panic_hook::set_once(); @@ -18,6 +18,17 @@ pub async fn kcl_lint(program_ast_json: &str) -> Result { Ok(JsValue::from_serde(&findings).map_err(|e| e.to_string())?) } +#[wasm_bindgen] +pub async fn node_path_from_range(program_ast_json: &str, range_json: &str) -> Result { + console_error_panic_hook::set_once(); + + let program: Program = serde_json::from_str(program_ast_json).map_err(|e| e.to_string())?; + let range: SourceRange = serde_json::from_str(range_json).map_err(|e| e.to_string())?; + let node_path = program.node_path_from_range(range); + + JsValue::from_serde(&node_path).map_err(|e| e.to_string()) +} + #[wasm_bindgen] pub fn parse_wasm(kcl_program_source: &str) -> Result { console_error_panic_hook::set_once(); diff --git a/src/App.tsx b/src/App.tsx index e087d074e..4e501a20e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,7 +4,6 @@ import { useHotkeys } from 'react-hotkeys-hook' import ModalContainer from 'react-modal-promise' import { useLoaderData, - useLocation, useNavigate, useRouteLoaderData, useSearchParams, @@ -27,20 +26,15 @@ import useHotkeyWrapper from '@src/lib/hotkeyWrapper' import { isDesktop } from '@src/lib/isDesktop' import { PATHS } from '@src/lib/paths' import { takeScreenshotOfVideoStreamCanvas } from '@src/lib/screenshot' -import { sceneInfra, codeManager, kclManager } from '@src/lib/singletons' +import { sceneInfra } from '@src/lib/singletons' import { maybeWriteToDisk } from '@src/lib/telemetry' -import type { IndexLoaderData } from '@src/lib/types' +import { type IndexLoaderData } from '@src/lib/types' import { engineStreamActor, useSettings, useToken } from '@src/lib/singletons' import { commandBarActor } from '@src/lib/singletons' import { EngineStreamTransition } from '@src/machines/engineStreamMachine' +import { onboardingPaths } from '@src/routes/Onboarding/paths' import { CommandBarOpenButton } from '@src/components/CommandBarOpenButton' import { ShareButton } from '@src/components/ShareButton' -import { - needsToOnboard, - ONBOARDING_TOAST_ID, - TutorialRequestToast, -} from '@src/routes/Onboarding/utils' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' // CYCLIC REF sceneInfra.camControls.engineStreamActor = engineStreamActor @@ -64,7 +58,6 @@ export function App() { }) }) - const location = useLocation() const navigate = useNavigate() const filePath = useAbsoluteFilePath() const { onProjectOpen } = useLspContext() @@ -73,7 +66,7 @@ export function App() { const ref = useRef(null) // Stream related refs and data - const [searchParams] = useSearchParams() + let [searchParams] = useSearchParams() const pool = searchParams.get('pool') const projectName = project?.name || null @@ -83,10 +76,9 @@ export function App() { const loaderData = useRouteLoaderData(PATHS.FILE) as IndexLoaderData const lastCommandType = commands[commands.length - 1]?.type - // Run LSP file open hook when navigating between projects or files useEffect(() => { onProjectOpen({ name: projectName, path: projectPath }, file || null) - }, [onProjectOpen, projectName, projectPath, file]) + }, [projectName, projectPath]) useHotKeyListener() @@ -112,10 +104,9 @@ export function App() { toast.success('Your work is auto-saved in real-time') }) - const paneOpacity = [ - ONBOARDING_SUBPATHS.CAMERA, - ONBOARDING_SUBPATHS.STREAMING, - ].some((p) => p === onboardingStatus.current) + const paneOpacity = [onboardingPaths.CAMERA, onboardingPaths.STREAMING].some( + (p) => p === onboardingStatus.current + ) ? 'opacity-20' : '' @@ -141,7 +132,7 @@ export function App() { }) }, 500) } - }, [lastCommandType, loaderData?.project?.path]) + }, [lastCommandType]) useEffect(() => { // When leaving the modeling scene, cut the engine stream. @@ -150,32 +141,6 @@ export function App() { } }, []) - // Show a custom toast to users if they haven't done the onboarding - // and they're on the web - useEffect(() => { - const onboardingStatus = - settings.app.onboardingStatus.current || - settings.app.onboardingStatus.default - const needsOnboarded = needsToOnboard(location, onboardingStatus) - - if (!isDesktop() && needsOnboarded) { - toast.success( - () => - TutorialRequestToast({ - onboardingStatus: settings.app.onboardingStatus.current, - navigate, - codeManager, - kclManager, - }), - { - id: ONBOARDING_TOAST_ID, - duration: Number.POSITIVE_INFINITY, - icon: null, - } - ) - } - }, [location, settings.app.onboardingStatus, navigate]) - return (

    {/* */} - + diff --git a/src/Auth.tsx b/src/Auth.tsx index 1e2c6477e..e7ea14fd4 100644 --- a/src/Auth.tsx +++ b/src/Auth.tsx @@ -7,7 +7,7 @@ export const Auth = ({ children }: React.PropsWithChildren) => { const isLoggingIn = authState.matches('checkIfLoggedIn') return isLoggingIn ? ( - + Loading Design Studio... ) : ( diff --git a/src/Router.tsx b/src/Router.tsx index e457870f2..f592783de 100644 --- a/src/Router.tsx +++ b/src/Router.tsx @@ -28,7 +28,7 @@ import useHotkeyWrapper from '@src/lib/hotkeyWrapper' import { isDesktop } from '@src/lib/isDesktop' import makeUrlPathRelative from '@src/lib/makeUrlPathRelative' import { PATHS } from '@src/lib/paths' -import { fileLoader, homeLoader } from '@src/lib/routeLoaders' +import { fileLoader, homeLoader, telemetryLoader } from '@src/lib/routeLoaders' import { codeManager, engineCommandManager, @@ -110,6 +110,7 @@ const router = createRouter([ }, { id: PATHS.FILE + 'TELEMETRY', + loader: telemetryLoader, children: [ { path: makeUrlPathRelative(PATHS.TELEMETRY), @@ -143,6 +144,7 @@ const router = createRouter([ }, { path: makeUrlPathRelative(PATHS.TELEMETRY), + loader: telemetryLoader, element: , }, ], diff --git a/src/components/CustomIcon.tsx b/src/components/CustomIcon.tsx index 0d918aef3..c69f7fe4c 100644 --- a/src/components/CustomIcon.tsx +++ b/src/components/CustomIcon.tsx @@ -854,14 +854,6 @@ const CustomIconMap = { /> ), - play: ( - - - - ), rotate: ( - // It makes sense to also call zoom to fit here, when a new file is - // loaded for the first time, but not overtaking the work kevin did - // so the camera isn't moving all the time. - engineCommandManager.sendSceneCommand({ - type: 'modeling_cmd_req', - cmd_id: uuidv4(), - cmd: { - type: 'zoom_to_fit', - object_ids: [], // leave empty to zoom to all objects - padding: 0.1, // padding around the objects - animated: false, // don't animate the zoom for now - }, - }) - ) + .then(async () => { + // Gotcha: Playwright E2E tests will be zoom_to_fit, when you try to recreate the e2e test manually + // your localhost will do view_isometric. Turn this boolean on to have the same experience when manually + // debugging e2e tests + + // We need a padding of 0.1 for zoom_to_fit for all E2E tests since they were originally + // written with zoom_to_fit with padding 0.1 + const padding = 0.1 + if (isPlaywright()) { + await engineStreamZoomToFit({ engineCommandManager, padding }) + } else { + // If the scene is empty you cannot use view_isometric, it will not move the camera + if (kclManager.isAstBodyEmpty(kclManager.ast)) { + await engineViewIsometricWithoutGeometryPresent({ + engineCommandManager, + unit: + kclManager.fileSettings.defaultLengthUnit || + DEFAULT_DEFAULT_LENGTH_UNIT, + }) + } else { + await engineViewIsometricWithGeometryPresent({ + engineCommandManager, + padding, + }) + } + } + }) .catch(trap) } diff --git a/src/components/FileTree.tsx b/src/components/FileTree.tsx index 09d86b5e5..ef0a616a5 100644 --- a/src/components/FileTree.tsx +++ b/src/components/FileTree.tsx @@ -558,14 +558,6 @@ function FileTreeContextMenu({ ) } -interface FileTreeProps { - className?: string - file?: IndexLoaderData['file'] - onNavigateToFile: ( - focusableElement?: HTMLElement | React.MutableRefObject - ) => void -} - export const FileTreeMenu = ({ onCreateFile, onCreateFolder, @@ -682,39 +674,6 @@ export const useFileTreeOperations = () => { } } -export const FileTree = ({ - className = '', - onNavigateToFile: closePanel, -}: FileTreeProps) => { - const { - createFile, - createFolder, - cloneFileOrDir, - openInNewWindow, - newTreeEntry, - } = useFileTreeOperations() - - return ( -
    -
    -

    Files

    - createFile({ dryRun: true })} - onCreateFolder={() => createFolder({ dryRun: true })} - /> -
    - createFile({ dryRun: false, name })} - onCreateFolder={(name: string) => createFolder({ dryRun: false, name })} - onCloneFileOrFolder={(path: string) => cloneFileOrDir({ path })} - onOpenInNewWindow={(path: string) => openInNewWindow({ path })} - /> -
    - ) -} - export const FileTreeInner = ({ onNavigateToFile, onCreateFile, diff --git a/src/components/HelpMenu.tsx b/src/components/HelpMenu.tsx index c76fd4f16..7274658a4 100644 --- a/src/components/HelpMenu.tsx +++ b/src/components/HelpMenu.tsx @@ -1,46 +1,49 @@ import { Popover } from '@headlessui/react' -import { type NavigateFunction, useLocation } from 'react-router-dom' +import { useLocation, useNavigate } from 'react-router-dom' import { CustomIcon } from '@src/components/CustomIcon' +import { useLspContext } from '@src/components/LspProvider' import Tooltip from '@src/components/Tooltip' import { useAbsoluteFilePath } from '@src/hooks/useAbsoluteFilePath' import { useMenuListener } from '@src/hooks/useMenu' +import { createAndOpenNewTutorialProject } from '@src/lib/desktopFS' import { openExternalBrowserIfDesktop } from '@src/lib/openWindow' import { PATHS } from '@src/lib/paths' -import { codeManager, kclManager } from '@src/lib/singletons' +import { reportRejection } from '@src/lib/trap' +import { settingsActor } from '@src/lib/singletons' import type { WebContentSendPayload } from '@src/menu/channels' -import { - acceptOnboarding, - catchOnboardingWarnError, -} from '@src/routes/Onboarding/utils' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' const HelpMenuDivider = () => (
    ) -export function HelpMenu({ - navigate = () => {}, -}: { - navigate?: NavigateFunction -}) { +export function HelpMenu(props: React.PropsWithChildren) { const location = useLocation() + const { onProjectOpen } = useLspContext() const filePath = useAbsoluteFilePath() + const isInProject = location.pathname.includes(PATHS.FILE) + const navigate = useNavigate() const resetOnboardingWorkflow = () => { - const props = { - onboardingStatus: ONBOARDING_SUBPATHS.INDEX, - navigate, - codeManager, - kclManager, + settingsActor.send({ + type: 'set.app.onboardingStatus', + data: { + value: '', + level: 'user', + }, + }) + if (isInProject) { + navigate(filePath + PATHS.ONBOARDING.INDEX) + } else { + createAndOpenNewTutorialProject({ + onProjectOpen, + navigate, + }).catch(reportRejection) } - acceptOnboarding(props).catch((reason) => - catchOnboardingWarnError(reason, props) - ) } const cb = (data: WebContentSendPayload) => { - if (data.menuLabel === 'Help.Replay onboarding tutorial') { + if (data.menuLabel === 'Help.Reset onboarding') { resetOnboardingWorkflow() } } @@ -65,81 +68,71 @@ export function HelpMenu({ as="ul" className="absolute right-0 left-auto flex flex-col w-64 gap-1 p-0 py-2 m-0 mb-1 text-sm border border-solid rounded shadow-lg bottom-full align-stretch text-chalkboard-10 dark:text-inherit bg-chalkboard-110 dark:bg-chalkboard-100 border-chalkboard-110 dark:border-chalkboard-80" > - {({ close }) => ( - <> - - Report a bug - - - Request a feature - - - Ask the community - - - - KCL code samples - - - KCL docs - - - - Release notes - - { - const targetPath = location.pathname.includes(PATHS.FILE) - ? filePath + PATHS.SETTINGS_KEYBINDINGS - : PATHS.HOME + PATHS.SETTINGS_KEYBINDINGS - navigate(targetPath) - }} - data-testid="keybindings-button" - > - Keyboard shortcuts - - { - close() - resetOnboardingWorkflow() - }} - > - Replay onboarding tutorial - - - )} + + Report a bug + + + Request a feature + + + Ask the community + + + + KCL code samples + + + KCL docs + + + + Release notes + + { + const targetPath = location.pathname.includes(PATHS.FILE) + ? filePath + PATHS.SETTINGS_KEYBINDINGS + : PATHS.HOME + PATHS.SETTINGS_KEYBINDINGS + navigate(targetPath) + }} + data-testid="keybindings-button" + > + Keyboard shortcuts + + + Reset onboarding + ) diff --git a/src/components/LowerRightControls.tsx b/src/components/LowerRightControls.tsx index 219ae2334..42d539e8d 100644 --- a/src/components/LowerRightControls.tsx +++ b/src/components/LowerRightControls.tsx @@ -1,4 +1,5 @@ -import { Link, type NavigateFunction, useLocation } from 'react-router-dom' +import { Link, useLocation } from 'react-router-dom' + import { CustomIcon } from '@src/components/CustomIcon' import { HelpMenu } from '@src/components/HelpMenu' import { NetworkHealthIndicator } from '@src/components/NetworkHealthIndicator' @@ -11,10 +12,8 @@ import { APP_VERSION, getReleaseUrl } from '@src/routes/utils' export function LowerRightControls({ children, - navigate = () => {}, }: { children?: React.ReactNode - navigate?: NavigateFunction }) { const location = useLocation() const filePath = useAbsoluteFilePath() @@ -73,7 +72,7 @@ export function LowerRightControls({ {!location.pathname.startsWith(PATHS.HOME) && ( )} - + ) diff --git a/src/components/ModelingMachineProvider.tsx b/src/components/ModelingMachineProvider.tsx index 9473124c2..a945d7b4b 100644 --- a/src/components/ModelingMachineProvider.tsx +++ b/src/components/ModelingMachineProvider.tsx @@ -1807,7 +1807,7 @@ export const ModelingMachineProvider = ({ const MB20 = 2 ** 20 * 20 if (uploadSize > MB20) { toast.error( - "Your project exceeds 20Mb, this will slow down Text-to-CAD\nPlease remove any unnecessary files" + 'Your project exceeds 20Mb, this will slow down Text-to-CAD\nPlease remove any unnecessary files' ) } } @@ -1818,7 +1818,6 @@ export const ModelingMachineProvider = ({ token, artifactGraph: kclManager.artifactGraph, projectName: context.project.name, - basePath, }) }), }, diff --git a/src/components/ModelingSidebar/ModelingPane.tsx b/src/components/ModelingSidebar/ModelingPane.tsx index 264da072a..b919b8ff0 100644 --- a/src/components/ModelingSidebar/ModelingPane.tsx +++ b/src/components/ModelingSidebar/ModelingPane.tsx @@ -6,7 +6,7 @@ import { ActionIcon } from '@src/components/ActionIcon' import type { CustomIconName } from '@src/components/CustomIcon' import Tooltip from '@src/components/Tooltip' import { useSettings } from '@src/lib/singletons' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { onboardingPaths } from '@src/routes/Onboarding/paths' import styles from './ModelingPane.module.css' @@ -71,7 +71,7 @@ export const ModelingPane = ({ const settings = useSettings() const onboardingStatus = settings.app.onboardingStatus const pointerEventsCssClass = - onboardingStatus.current === ONBOARDING_SUBPATHS.CAMERA + onboardingStatus.current === onboardingPaths.CAMERA ? 'pointer-events-none ' : 'pointer-events-auto ' return ( diff --git a/src/components/ModelingSidebar/ModelingSidebar.tsx b/src/components/ModelingSidebar/ModelingSidebar.tsx index 7e4d18450..6e5eb2f68 100644 --- a/src/components/ModelingSidebar/ModelingSidebar.tsx +++ b/src/components/ModelingSidebar/ModelingSidebar.tsx @@ -24,7 +24,7 @@ import { SIDEBAR_BUTTON_SUFFIX } from '@src/lib/constants' import { isDesktop } from '@src/lib/isDesktop' import { useSettings } from '@src/lib/singletons' import { commandBarActor } from '@src/lib/singletons' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { onboardingPaths } from '@src/routes/Onboarding/paths' import { reportRejection } from '@src/lib/trap' import { refreshPage } from '@src/lib/utils' import { hotkeyDisplay } from '@src/lib/hotkeyWrapper' @@ -53,7 +53,7 @@ export function ModelingSidebar({ paneOpacity }: ModelingSidebarProps) { const onboardingStatus = settings.app.onboardingStatus const { send, context } = useModelingContext() const pointerEventsCssClass = - onboardingStatus.current === ONBOARDING_SUBPATHS.CAMERA || + onboardingStatus.current === onboardingPaths.CAMERA || context.store?.openPanes.length === 0 ? 'pointer-events-none ' : 'pointer-events-auto ' diff --git a/src/components/Providers/SystemIOProviderDesktop.tsx b/src/components/Providers/SystemIOProviderDesktop.tsx index 5dc4a8261..a20b6a25e 100644 --- a/src/components/Providers/SystemIOProviderDesktop.tsx +++ b/src/components/Providers/SystemIOProviderDesktop.tsx @@ -1,10 +1,5 @@ import { useFileSystemWatcher } from '@src/hooks/useFileSystemWatcher' -import { - PATHS, - joinRouterPaths, - joinOSPaths, - safeEncodeForRouterPaths, -} from '@src/lib/paths' +import { PATHS } from '@src/lib/paths' import { systemIOActor, useSettings, useToken } from '@src/lib/singletons' import { useHasListedProjects, @@ -40,14 +35,14 @@ export function SystemIOMachineLogicListenerDesktop() { if (!requestedProjectName.name) { return } - const projectPathWithoutSpecificKCLFile = joinOSPaths( - projectDirectoryPath, + let projectPathWithoutSpecificKCLFile = + projectDirectoryPath + + window.electron.path.sep + requestedProjectName.name - ) - const requestedPath = joinRouterPaths( - PATHS.FILE, - safeEncodeForRouterPaths(projectPathWithoutSpecificKCLFile) - ) + + const requestedPath = `${PATHS.FILE}/${encodeURIComponent( + projectPathWithoutSpecificKCLFile + )}` navigate(requestedPath) }, [requestedProjectName]) } @@ -57,16 +52,12 @@ export function SystemIOMachineLogicListenerDesktop() { if (!requestedFileName.file || !requestedFileName.project) { return } - const filePath = joinOSPaths( + const projectPath = window.electron.join( projectDirectoryPath, - requestedFileName.project, - requestedFileName.file - ) - const requestedPath = joinRouterPaths( - PATHS.FILE, - safeEncodeForRouterPaths(filePath), - requestedFileName.subRoute || '' + requestedFileName.project ) + const filePath = window.electron.join(projectPath, requestedFileName.file) + const requestedPath = `${PATHS.FILE}/${encodeURIComponent(filePath)}` navigate(requestedPath) }, [requestedFileName]) } diff --git a/src/components/RouteProvider.tsx b/src/components/RouteProvider.tsx index 3cb61cfc4..b18f55743 100644 --- a/src/components/RouteProvider.tsx +++ b/src/components/RouteProvider.tsx @@ -7,6 +7,8 @@ import { useRouteLoaderData, } from 'react-router-dom' +import type { OnboardingStatus } from '@rust/kcl-lib/bindings/OnboardingStatus' + import { useAuthNavigation } from '@src/hooks/useAuthNavigation' import { useFileSystemWatcher } from '@src/hooks/useFileSystemWatcher' import { getAppSettingsFilePath } from '@src/lib/desktop' @@ -16,7 +18,7 @@ import { markOnce } from '@src/lib/performance' import { loadAndValidateSettings } from '@src/lib/settings/settingsUtils' import { trap } from '@src/lib/trap' import type { IndexLoaderData } from '@src/lib/types' -import { settingsActor } from '@src/lib/singletons' +import { settingsActor, useSettings } from '@src/lib/singletons' export const RouteProviderContext = createContext({}) @@ -30,6 +32,7 @@ export function RouteProvider({ children }: { children: ReactNode }) { const navigation = useNavigation() const navigate = useNavigate() const location = useLocation() + const settings = useSettings() useEffect(() => { // On initialization, the react-router-dom does not send a 'loading' state event. @@ -43,9 +46,35 @@ export function RouteProvider({ children }: { children: ReactNode }) { markOnce('code/willLoadHome') } else if (isFile) { markOnce('code/willLoadFile') + + /** + * TODO: Move to XState. This block has been moved from routerLoaders + * and is borrowing the `isFile` logic from the rest of this + * telemetry-focused `useEffect`. Once `appMachine` knows about + * the current route and navigation, this can be moved into settingsMachine + * to fire as soon as the user settings have been read. + */ + const onboardingStatus: OnboardingStatus = + settings.app.onboardingStatus.current || '' + // '' is the initial state, 'completed' and 'dismissed' are the final states + const needsToOnboard = + onboardingStatus.length === 0 || + !(onboardingStatus === 'completed' || onboardingStatus === 'dismissed') + const shouldRedirectToOnboarding = isFile && needsToOnboard + + if ( + shouldRedirectToOnboarding && + settingsActor.getSnapshot().matches('idle') + ) { + navigate( + (first ? location.pathname : navigation.location?.pathname) + + PATHS.ONBOARDING.INDEX + + onboardingStatus.slice(1) + ) + } } setFirstState(false) - }, [first, navigation, location.pathname]) + }, [navigation]) useEffect(() => { if (!isDesktop()) return diff --git a/src/components/Settings/AllSettingsFields.tsx b/src/components/Settings/AllSettingsFields.tsx index ec39dc220..9e50f2e8e 100644 --- a/src/components/Settings/AllSettingsFields.tsx +++ b/src/components/Settings/AllSettingsFields.tsx @@ -6,12 +6,16 @@ import { useLocation, useNavigate } from 'react-router-dom' import { Fragment } from 'react/jsx-runtime' import { ActionButton } from '@src/components/ActionButton' +import { useLspContext } from '@src/components/LspProvider' import { SettingsFieldInput } from '@src/components/Settings/SettingsFieldInput' import { SettingsSection } from '@src/components/Settings/SettingsSection' -import { getSettingsFolderPaths } from '@src/lib/desktopFS' +import { useDotDotSlash } from '@src/hooks/useDotDotSlash' +import { + createAndOpenNewTutorialProject, + getSettingsFolderPaths, +} from '@src/lib/desktopFS' import { isDesktop } from '@src/lib/isDesktop' import { openExternalBrowserIfDesktop } from '@src/lib/openWindow' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' import { PATHS } from '@src/lib/paths' import type { Setting } from '@src/lib/settings/initialSettings' import type { @@ -24,17 +28,9 @@ import { } from '@src/lib/settings/settingsUtils' import { reportRejection } from '@src/lib/trap' import { toSync } from '@src/lib/utils' -import { - codeManager, - kclManager, - settingsActor, - useSettings, -} from '@src/lib/singletons' +import { settingsActor, useSettings } from '@src/lib/singletons' import { APP_VERSION, IS_NIGHTLY, getReleaseUrl } from '@src/routes/utils' -import { - acceptOnboarding, - catchOnboardingWarnError, -} from '@src/routes/Onboarding/utils' +import { waitFor } from 'xstate' interface AllSettingsFieldsProps { searchParamTab: SettingsLevel @@ -48,6 +44,8 @@ export const AllSettingsFields = forwardRef( ) => { const location = useLocation() const navigate = useNavigate() + const { onProjectOpen } = useLspContext() + const dotDotSlash = useDotDotSlash() const context = useSettings() const projectPath = useMemo(() => { @@ -65,18 +63,26 @@ export const AllSettingsFields = forwardRef( : undefined return projectPath - }, [location.pathname, isFileSettings]) + }, [location.pathname]) async function restartOnboarding() { - const props = { - onboardingStatus: ONBOARDING_SUBPATHS.INDEX, - navigate, - codeManager, - kclManager, + settingsActor.send({ + type: `set.app.onboardingStatus`, + data: { level: 'user', value: '' }, + }) + await waitFor(settingsActor, (s) => s.matches('idle'), { + timeout: 10_000, + }).catch(reportRejection) + + if (isFileSettings) { + // If we're in a project, first navigate to the onboarding start here + // so we can trigger the warning screen if necessary + navigate(dotDotSlash(1) + PATHS.ONBOARDING.INDEX) + } else { + // If we're in the global settings, create a new project and navigate + // to the onboarding start in that project + await createAndOpenNewTutorialProject({ onProjectOpen, navigate }) } - acceptOnboarding(props).catch((reason) => - catchOnboardingWarnError(reason, props) - ) } return ( diff --git a/src/components/ShareButton.tsx b/src/components/ShareButton.tsx index 92bfe08a6..35f93dfce 100644 --- a/src/components/ShareButton.tsx +++ b/src/components/ShareButton.tsx @@ -4,6 +4,7 @@ import usePlatform from '@src/hooks/usePlatform' import { hotkeyDisplay } from '@src/lib/hotkeyWrapper' import { commandBarActor } from '@src/lib/singletons' import { useHotkeys } from 'react-hotkeys-hook' +import { useKclContext } from '@src/lang/KclProvider' const shareHotkey = 'mod+alt+s' const onShareClick = () => @@ -19,11 +20,16 @@ export const ShareButton = () => { scopes: ['modeling'], }) + const kclContext = useKclContext() + const disabled = kclContext.ast.body.some((n) => n.type === 'ImportStatement') + return ( ) diff --git a/src/components/ToastTextToCad.tsx b/src/components/ToastTextToCad.tsx index 4fc97e0dc..ef45357c5 100644 --- a/src/components/ToastTextToCad.tsx +++ b/src/components/ToastTextToCad.tsx @@ -29,10 +29,18 @@ import { PATHS } from '@src/lib/paths' import { codeManager, kclManager, systemIOActor } from '@src/lib/singletons' import { sendTelemetry } from '@src/lib/textToCadTelemetry' import { reportRejection } from '@src/lib/trap' -import { SystemIOMachineEvents } from '@src/machines/systemIO/utils' -import { useProjectDirectoryPath } from '@src/machines/systemIO/hooks' +import { + SystemIOMachineEvents, + SystemIOMachineStates, + NAVIGATION_COMPLETE_EVENT, +} from '@src/machines/systemIO/utils' +import { + useProjectDirectoryPath, + useRequestedProjectName, +} from '@src/machines/systemIO/hooks' import { commandBarActor } from '@src/lib/singletons' import type { FileMeta } from '@src/lib/types' +import type { RequestedKCLFile } from '@src/machines/systemIO/utils' const CANVAS_SIZE = 128 const PROMPT_TRUNCATE_LENGTH = 128 @@ -490,6 +498,7 @@ export function ToastPromptToEditCadSuccess({ token?: string }) { const modelId = data.id + const requestedProjectName = useRequestedProjectName() return (
    @@ -518,22 +527,34 @@ export function ToastPromptToEditCadSuccess({ data-negative-button={'reject'} name={'Reject'} onClick={() => { - sendTelemetry(modelId, 'rejected', token).catch(reportRejection) - // revert to before the prompt-to-edit - if (isDesktop()) { - for (const file of oldFiles) { - if (file.type !== 'kcl') { - // only need to write the kcl files - // as the endpoint would have never overwritten other file types - continue + void (async () => { + sendTelemetry(modelId, 'rejected', token).catch(reportRejection) + // revert to before the prompt-to-edit + if (isDesktop()) { + const requestedFiles: RequestedKCLFile[] = [] + for (const file of oldFiles) { + if (file.type !== 'kcl') { + // only need to write the kcl files + // as the endpoint would have never overwritten other file types + continue + } + requestedFiles.push({ + requestedCode: file.fileContents, + requestedFileName: file.relPath, + requestedProjectName: requestedProjectName.name, + }) } - window.electron.writeFile(file.absPath, file.fileContents) + toast.dismiss(toastId) + await writeOverFilesAndExecute({ + requestedFiles: requestedFiles, + projectName: requestedProjectName.name, + }) + } else { + codeManager.updateCodeEditor(oldCode) + kclManager.executeCode().catch(reportRejection) + toast.dismiss(toastId) } - } else { - codeManager.updateCodeEditor(oldCode) - kclManager.executeCode().catch(reportRejection) - } - toast.dismiss(toastId) + })() }} > {'Reject'} @@ -568,3 +589,50 @@ export function ToastPromptToEditCadSuccess({
    ) } + +export const writeOverFilesAndExecute = async ({ + requestedFiles, + projectName, +}: { + requestedFiles: RequestedKCLFile[] + projectName: string +}) => { + // Create a promise that resolves when the bulk create operation completes + const bulkCreatePromise = new Promise((resolve) => { + const subscription = systemIOActor.subscribe((state) => { + if (state.matches(SystemIOMachineStates.idle)) { + subscription.unsubscribe() + resolve(undefined) + } + }) + }) + + // Create a promise that resolves when navigation completes + const navigationPromise = new Promise((resolve) => { + const handleNavigationComplete = (event: CustomEvent) => { + window.removeEventListener( + NAVIGATION_COMPLETE_EVENT, + handleNavigationComplete as EventListener + ) + resolve() + } + window.addEventListener( + NAVIGATION_COMPLETE_EVENT, + handleNavigationComplete as EventListener + ) + }) + + systemIOActor.send({ + type: SystemIOMachineEvents.bulkCreateKCLFilesAndNavigateToProject, + data: { + files: requestedFiles, + requestedProjectName: projectName, + override: true, + }, + }) + + // Wait for both the bulk create operation and navigation to complete + await Promise.all([bulkCreatePromise, navigationPromise]) + + await kclManager.executeCode() +} diff --git a/src/lang/KclSingleton.ts b/src/lang/KclSingleton.ts index 86ee4377b..2a8480e93 100644 --- a/src/lang/KclSingleton.ts +++ b/src/lang/KclSingleton.ts @@ -738,6 +738,18 @@ export class KclManager { return ast.start === 0 && ast.end === 0 && ast.body.length === 0 } + /** + * Determines if there is no code to execute. If there is a @settings annotation + * that adds to the overall ast.start and ast.end but not the body which is the program + * + * + * If you need to know if there is any program code or not, use this function otherwise + * use _isAstEmpty + */ + isAstBodyEmpty(ast: Node) { + return ast.body.length === 0 + } + get fileSettings() { return this._fileSettings } diff --git a/src/lang/queryAstNodePathUtils.ts b/src/lang/queryAstNodePathUtils.ts index 6c1b9000d..c1d393ee2 100644 --- a/src/lang/queryAstNodePathUtils.ts +++ b/src/lang/queryAstNodePathUtils.ts @@ -2,7 +2,11 @@ import type { ImportStatement } from '@rust/kcl-lib/bindings/ImportStatement' import type { Node } from '@rust/kcl-lib/bindings/Node' import type { TypeDeclaration } from '@rust/kcl-lib/bindings/TypeDeclaration' -import { ARG_INDEX_FIELD, LABELED_ARG_FIELD } from '@src/lang/queryAstConstants' +import { + ARG_INDEX_FIELD, + LABELED_ARG_FIELD, + UNLABELED_ARG, +} from '@src/lang/queryAstConstants' import type { Expr, ExpressionStatement, @@ -38,6 +42,7 @@ function moreNodePathFromSourceRange( if ( (_node.type === 'Name' || _node.type === 'Literal' || + _node.type === 'Identifier' || _node.type === 'TagDeclarator') && isInRange ) { @@ -64,12 +69,20 @@ function moreNodePathFromSourceRange( } if (_node.type === 'CallExpressionKw' && isInRange) { - const { callee, arguments: args } = _node + const { callee, arguments: args, unlabeled } = _node if (callee.type === 'Name' && callee.start <= start && callee.end >= end) { path.push(['callee', 'CallExpressionKw']) return path } - if (args.length > 0) { + if ( + unlabeled !== null && + unlabeled.start <= start && + unlabeled.end >= end + ) { + path.push(['unlabeled', UNLABELED_ARG]) + return moreNodePathFromSourceRange(unlabeled, sourceRange, path) + } + if (args && args.length > 0) { for (let argIndex = 0; argIndex < args.length; argIndex++) { const arg = args[argIndex].arg if (arg.start <= start && arg.end >= end) { @@ -156,19 +169,6 @@ function moreNodePathFromSourceRange( } } } - if (_node.type === 'VariableDeclaration' && isInRange) { - const declaration = _node.declaration - - if (declaration.start <= start && declaration.end >= end) { - const init = declaration.init - if (init.start <= start && init.end >= end) { - path.push(['declaration', 'VariableDeclaration']) - path.push(['init', '']) - return moreNodePathFromSourceRange(init, sourceRange, path) - } - } - return path - } if (_node.type === 'UnaryExpression' && isInRange) { const { argument } = _node if (argument.start <= start && argument.end >= end) { @@ -257,6 +257,29 @@ function moreNodePathFromSourceRange( return path } + if (_node.type === 'LabelledExpression' && isInRange) { + const { expr, label } = _node + if (expr.start <= start && expr.end >= end) { + path.push(['expr', 'LabelledExpression']) + return moreNodePathFromSourceRange(expr, sourceRange, path) + } + if (label.start <= start && label.end >= end) { + path.push(['label', 'LabelledExpression']) + return moreNodePathFromSourceRange(label, sourceRange, path) + } + return path + } + + if (_node.type === 'AscribedExpression' && isInRange) { + const { expr } = _node + if (expr.start <= start && expr.end >= end) { + path.push(['expr', 'AscribedExpression']) + return moreNodePathFromSourceRange(expr, sourceRange, path) + } + // TODO: Check the type annotation. + return path + } + if (_node.type === 'ImportStatement' && isInRange) { if (_node.selector && _node.selector.type === 'List') { path.push(['selector', 'ImportStatement']) diff --git a/src/lang/wasm.test.ts b/src/lang/wasm.test.ts index c47ec4591..bfef3e9f3 100644 --- a/src/lang/wasm.test.ts +++ b/src/lang/wasm.test.ts @@ -2,10 +2,18 @@ import type { Node } from '@rust/kcl-lib/bindings/Node' import type { Program } from '@rust/kcl-lib/bindings/Program' import type { ParseResult } from '@src/lang/wasm' -import { formatNumber, parse, errFromErrWithOutputs } from '@src/lang/wasm' +import { + formatNumber, + parse, + errFromErrWithOutputs, + rustImplPathToNode, + assertParse, +} from '@src/lang/wasm' import { initPromise } from '@src/lang/wasmUtils' import { enginelessExecutor } from '@src/lib/testHelpers' import { err } from '@src/lib/trap' +import { topLevelRange } from '@src/lang/util' +import { getNodePathFromSourceRange } from '@src/lang/queryAstNodePathUtils' beforeEach(async () => { await initPromise @@ -44,3 +52,17 @@ describe('test errFromErrWithOutputs', () => { ) }) }) + +it('converts Rust NodePath to PathToNode', async () => { + // Convenience for making a SourceRange. + const sr = topLevelRange + + const ast = assertParse(`x = 1 + 2 +y = foo(center = [3, 4])`) + expect(await rustImplPathToNode(ast, sr(4, 5))).toStrictEqual( + getNodePathFromSourceRange(ast, sr(4, 5)) + ) + expect(await rustImplPathToNode(ast, sr(31, 32))).toStrictEqual( + getNodePathFromSourceRange(ast, sr(31, 32)) + ) +}) diff --git a/src/lang/wasm.ts b/src/lang/wasm.ts index d0fabe904..223dcae97 100644 --- a/src/lang/wasm.ts +++ b/src/lang/wasm.ts @@ -16,6 +16,7 @@ import type { MetaSettings } from '@rust/kcl-lib/bindings/MetaSettings' import type { UnitAngle, UnitLength } from '@rust/kcl-lib/bindings/ModelingCmd' import type { ModulePath } from '@rust/kcl-lib/bindings/ModulePath' import type { Node } from '@rust/kcl-lib/bindings/Node' +import type { NodePath } from '@rust/kcl-lib/bindings/NodePath' import type { NumericSuffix } from '@rust/kcl-lib/bindings/NumericSuffix' import type { Operation } from '@rust/kcl-lib/bindings/Operation' import type { Program } from '@rust/kcl-lib/bindings/Program' @@ -26,7 +27,6 @@ import type { UnitAngle as UnitAng } from '@rust/kcl-lib/bindings/UnitAngle' import type { UnitLen } from '@rust/kcl-lib/bindings/UnitLen' import { KCLError } from '@src/lang/errors' -import { getNodePathFromSourceRange } from '@src/lang/queryAstNodePathUtils' import { type Artifact, defaultArtifactGraph, @@ -54,6 +54,7 @@ import { is_points_ccw, kcl_lint, kcl_settings, + node_path_from_range, parse_app_settings, parse_project_settings, parse_wasm, @@ -61,6 +62,11 @@ import { serialize_configuration, serialize_project_configuration, } from '@src/lib/wasm_lib_wrapper' +import { + ARG_INDEX_FIELD, + LABELED_ARG_FIELD, + UNLABELED_ARG, +} from '@src/lang/queryAstConstants' export type { ArrayExpression } from '@rust/kcl-lib/bindings/ArrayExpression' export type { @@ -294,19 +300,13 @@ export function emptyExecState(): ExecState { } } -export function execStateFromRust( - execOutcome: RustExecOutcome, - program: Node -): ExecState { +export function execStateFromRust(execOutcome: RustExecOutcome): ExecState { const artifactGraph = rustArtifactGraphToMap(execOutcome.artifactGraph) - // We haven't ported pathToNode logic to Rust yet, so we need to fill it in. + // Translate NodePath to PathToNode. for (const [_id, artifact] of artifactGraph) { if (!artifact) continue if (!('codeRef' in artifact)) continue - const pathToNode = getNodePathFromSourceRange( - program, - sourceRangeFromRust(artifact.codeRef.range) - ) + const pathToNode = pathToNodeFromRustNodePath(artifact.codeRef.nodePath) artifact.codeRef.pathToNode = pathToNode } @@ -406,6 +406,35 @@ export const kclLint = async (ast: Program): Promise> => { } } +export async function rustImplPathToNode( + ast: Program, + range: SourceRange +): Promise { + const nodePath = await nodePathFromRange(ast, range) + if (!nodePath) { + // When a NodePath can't be found, we use an empty PathToNode. + return [] + } + return pathToNodeFromRustNodePath(nodePath) +} + +async function nodePathFromRange( + ast: Program, + range: SourceRange +): Promise { + try { + const nodePath: NodePath | null = await node_path_from_range( + JSON.stringify(ast), + JSON.stringify(range) + ) + return nodePath + } catch (e: any) { + return Promise.reject( + new Error('Caught error getting node path from range', { cause: e }) + ) + } +} + export const recast = (ast: Program): string | Error => { return recast_wasm(JSON.stringify(ast)) } @@ -490,6 +519,143 @@ export async function coreDump( } } +function pathToNodeFromRustNodePath(nodePath: NodePath): PathToNode { + const pathToNode: PathToNode = [] + for (const step of nodePath.steps) { + switch (step.type) { + case 'ProgramBodyItem': + pathToNode.push(['body', '']) + pathToNode.push([step.index, 'index']) + break + case 'CallCallee': + pathToNode.push(['callee', 'CallExpression']) + break + case 'CallArg': + pathToNode.push(['arguments', 'CallExpression']) + pathToNode.push([step.index, 'index']) + break + case 'CallKwCallee': + pathToNode.push(['callee', 'CallExpressionKw']) + break + case 'CallKwUnlabeledArg': + pathToNode.push(['unlabeled', UNLABELED_ARG]) + break + case 'CallKwArg': + pathToNode.push(['arguments', 'CallExpressionKw']) + pathToNode.push([step.index, ARG_INDEX_FIELD]) + pathToNode.push(['arg', LABELED_ARG_FIELD]) + break + case 'BinaryLeft': + pathToNode.push(['left', 'BinaryExpression']) + break + case 'BinaryRight': + pathToNode.push(['right', 'BinaryExpression']) + break + case 'UnaryArg': + pathToNode.push(['argument', 'UnaryExpression']) + break + case 'PipeBodyItem': + pathToNode.push(['body', 'PipeExpression']) + pathToNode.push([step.index, 'index']) + break + case 'ArrayElement': + pathToNode.push(['elements', 'ArrayExpression']) + pathToNode.push([step.index, 'index']) + break + case 'ArrayRangeStart': + pathToNode.push(['startElement', 'ArrayRangeExpression']) + break + case 'ArrayRangeEnd': + pathToNode.push(['endElement', 'ArrayRangeExpression']) + break + case 'ObjectProperty': + pathToNode.push(['properties', 'ObjectExpression']) + pathToNode.push([step.index, 'index']) + break + case 'ObjectPropertyKey': + pathToNode.push(['key', 'Property']) + break + case 'ObjectPropertyValue': + pathToNode.push(['value', 'Property']) + break + case 'ExpressionStatementExpr': + pathToNode.push(['expression', 'ExpressionStatement']) + break + case 'VariableDeclarationDeclaration': + pathToNode.push(['declaration', 'VariableDeclaration']) + break + case 'VariableDeclarationInit': + pathToNode.push(['init', '']) + break + case 'FunctionExpressionParam': + pathToNode.push(['params', 'FunctionExpression']) + pathToNode.push([step.index, 'index']) + break + case 'FunctionExpressionBody': + pathToNode.push(['body', 'FunctionExpression']) + break + case 'FunctionExpressionBodyItem': + pathToNode.push(['body', 'FunctionExpression']) + pathToNode.push([step.index, 'index']) + break + case 'ReturnStatementArg': + pathToNode.push(['argument', 'ReturnStatement']) + break + case 'MemberExpressionObject': + pathToNode.push(['object', 'MemberExpression']) + break + case 'MemberExpressionProperty': + pathToNode.push(['property', 'MemberExpression']) + break + case 'IfExpressionCondition': + pathToNode.push(['cond', 'IfExpression']) + break + case 'IfExpressionThen': + pathToNode.push(['then_val', 'IfExpression']) + pathToNode.push(['body', 'IfExpression']) + break + case 'IfExpressionElseIf': + pathToNode.push(['else_ifs', 'IfExpression']) + pathToNode.push([step.index, 'index']) + break + case 'IfExpressionElseIfCond': + pathToNode.push(['cond', 'IfExpression']) + break + case 'IfExpressionElseIfBody': + pathToNode.push(['then_val', 'IfExpression']) + pathToNode.push(['body', 'IfExpression']) + break + case 'IfExpressionElse': + pathToNode.push(['final_else', 'IfExpression']) + pathToNode.push(['body', 'IfExpression']) + break + case 'ImportStatementItem': + pathToNode.push(['selector', 'ImportStatement']) + pathToNode.push(['items', 'ImportSelector']) + pathToNode.push([step.index, 'index']) + break + case 'ImportStatementItemName': + pathToNode.push(['name', 'ImportItem']) + break + case 'ImportStatementItemAlias': + pathToNode.push(['alias', 'ImportItem']) + break + case 'LabeledExpressionExpr': + pathToNode.push(['expr', 'LabeledExpression']) + break + case 'LabeledExpressionLabel': + pathToNode.push(['label', 'LabeledExpression']) + break + case 'AscribedExpressionExpr': + pathToNode.push(['expr', 'AscribedExpression']) + break + default: + const _exhaustiveCheck: never = step + } + } + return pathToNode +} + export function defaultAppSettings(): DeepPartial | Error { return default_app_settings() } diff --git a/src/lib/constants.ts b/src/lib/constants.ts index adbdb6950..b438fd9dd 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -2,7 +2,6 @@ import type { Models } from '@kittycad/lib/dist/types/src' import type { UnitAngle, UnitLength } from '@rust/kcl-lib/bindings/ModelingCmd' -export const IS_PLAYWRIGHT_KEY = 'playwright' export const APP_NAME = 'Design Studio' /** Search string in new project names to increment as an index */ export const INDEX_IDENTIFIER = '$n' @@ -188,3 +187,6 @@ export type ExecutionType = | typeof EXECUTION_TYPE_REAL | typeof EXECUTION_TYPE_MOCK | typeof EXECUTION_TYPE_NONE + +/** Key for setting window.localStorage.setItem and .getItem to determine if the runtime is playwright for browsers */ +export const IS_PLAYWRIGHT_KEY = 'playwright' diff --git a/src/lib/desktopFS.ts b/src/lib/desktopFS.ts index e12225129..29bb9d8ef 100644 --- a/src/lib/desktopFS.ts +++ b/src/lib/desktopFS.ts @@ -1,6 +1,18 @@ import { relevantFileExtensions } from '@src/lang/wasmUtils' -import { FILE_EXT, INDEX_IDENTIFIER, MAX_PADDING } from '@src/lib/constants' +import { + FILE_EXT, + INDEX_IDENTIFIER, + MAX_PADDING, + ONBOARDING_PROJECT_NAME, +} from '@src/lib/constants' +import { + createNewProjectDirectory, + listProjects, + readAppSettingsFile, +} from '@src/lib/desktop' +import { bracket } from '@src/lib/exampleKcl' import { isDesktop } from '@src/lib/isDesktop' +import { PATHS } from '@src/lib/paths' import type { FileEntry } from '@src/lib/project' export const isHidden = (fileOrDir: FileEntry) => @@ -120,6 +132,65 @@ export async function getSettingsFolderPaths(projectPath?: string) { } } +export async function createAndOpenNewTutorialProject({ + onProjectOpen, + navigate, +}: { + onProjectOpen: ( + project: { + name: string | null + path: string | null + } | null, + file: FileEntry | null + ) => void + navigate: (path: string) => void +}) { + // Create a new project with the onboarding project name + const configuration = await readAppSettingsFile() + const projects = await listProjects(configuration) + const nextIndex = getNextProjectIndex(ONBOARDING_PROJECT_NAME, projects) + const name = interpolateProjectNameWithIndex( + ONBOARDING_PROJECT_NAME, + nextIndex + ) + + // Delete the tutorial project if it already exists. + if (isDesktop()) { + if (configuration.settings?.project?.directory === undefined) { + return Promise.reject(new Error('configuration settings are undefined')) + } + + const fullPath = window.electron.join( + configuration.settings.project.directory, + name + ) + if (window.electron.exists(fullPath)) { + await window.electron.rm(fullPath) + } + } + + const newProject = await createNewProjectDirectory( + name, + bracket, + configuration + ) + + // Prep the LSP and navigate to the onboarding start + onProjectOpen( + { + name: newProject.name, + path: newProject.path, + }, + null + ) + navigate( + `${PATHS.FILE}/${encodeURIComponent(newProject.default_file)}${ + PATHS.ONBOARDING.INDEX + }` + ) + return newProject +} + /** * Get the next available file name by appending a hyphen and number to the end of the name */ diff --git a/src/lib/isPlaywright.ts b/src/lib/isPlaywright.ts new file mode 100644 index 000000000..7828c5e97 --- /dev/null +++ b/src/lib/isPlaywright.ts @@ -0,0 +1,10 @@ +import { IS_PLAYWRIGHT_KEY } from '@src/lib/constants' + +export function isPlaywright(): boolean { + // ? checks for browser + const electronRunTimePlaywright = + window?.electron?.process?.env.IS_PLAYWRIGHT == 'true' + const browserRuntimePlaywright = + localStorage.getItem(IS_PLAYWRIGHT_KEY) === 'true' + return electronRunTimePlaywright || browserRuntimePlaywright +} diff --git a/src/lib/paths.ts b/src/lib/paths.ts index 7d921d6a4..45bb8d096 100644 --- a/src/lib/paths.ts +++ b/src/lib/paths.ts @@ -1,7 +1,5 @@ import type { PlatformPath } from 'path' - import type { Configuration } from '@rust/kcl-lib/bindings/Configuration' - import { IS_PLAYWRIGHT_KEY } from '@src/lib/constants' import { @@ -14,7 +12,7 @@ import { isDesktop } from '@src/lib/isDesktop' import { readLocalStorageAppSettingsFile } from '@src/lib/settings/settingsUtils' import { err } from '@src/lib/trap' import type { DeepPartial } from '@src/lib/types' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { onboardingPaths } from '@src/routes/Onboarding/paths' const prependRoutes = (routesObject: Record) => (prepend: string) => { @@ -27,7 +25,7 @@ const prependRoutes = } type OnboardingPaths = { - [K in keyof typeof ONBOARDING_SUBPATHS]: `/onboarding${(typeof ONBOARDING_SUBPATHS)[K]}` + [K in keyof typeof onboardingPaths]: `/onboarding${(typeof onboardingPaths)[K]}` } const SETTINGS = '/settings' @@ -48,9 +46,7 @@ export const PATHS = { SETTINGS_PROJECT: `${SETTINGS}?tab=project` as const, SETTINGS_KEYBINDINGS: `${SETTINGS}?tab=keybindings` as const, SIGN_IN: '/signin', - ONBOARDING: prependRoutes(ONBOARDING_SUBPATHS)( - '/onboarding' - ) as OnboardingPaths, + ONBOARDING: prependRoutes(onboardingPaths)('/onboarding') as OnboardingPaths, TELEMETRY: '/telemetry', } as const export const BROWSER_PATH = `%2F${BROWSER_PROJECT_NAME}%2F${BROWSER_FILE_NAME}${FILE_EXT}` @@ -138,56 +134,3 @@ export function parseProjectRoute( currentFilePath: currentFilePath, } } - -/** - * Joins any number of arguments of strings to create a Router level path that is safe - * A path will be created of the format /value/value1/value2 - * Filters out '/', '' - * Removes all leading and ending slashes, this allows you to pass '//dog//','//cat//' it will resolve to - * /dog/cat - */ -export function joinRouterPaths(...parts: string[]): string { - return ( - '/' + - parts - .map((part) => part.replace(/^\/+|\/+$/g, '')) // Remove leading/trailing slashes - .filter((part) => part.length > 0) // Remove empty segments - .join('/') - ) -} - -/** - * Joins any number of arguments of strings to create a OS level path that is safe - * A path will be created of the format /value/value1/value2 - * or \value\value1\value2 for POSIX OSes like Windows - * Filters out the separator slashes - * Removes all leading and ending slashes, this allows you to pass '//dog//','//cat//' it will resolve to - * /dog/cat - * or \dog\cat on POSIX - */ -export function joinOSPaths(...parts: string[]): string { - const sep = window.electron?.sep || '/' - const regexSep = sep === '/' ? '/' : '\\' - return ( - (sep === '\\' ? '' : sep) + // Windows absolute paths should not be prepended with a separator, they start with the drive name - parts - .map((part) => - part.replace(new RegExp(`^${regexSep}+|${regexSep}+$`, 'g'), '') - ) // Remove leading/trailing slashes - .filter((part) => part.length > 0) // Remove empty segments - .join(sep) - ) -} - -export function safeEncodeForRouterPaths(dynamicValue: string): string { - return `${encodeURIComponent(dynamicValue)}` -} - -/** - * /dog/cat/house.kcl gives you house.kcl - * \dog\cat\house.kcl gives you house.kcl - * Works on all OS! - */ -export function getStringAfterLastSeparator(path: string): string { - return path.split(window.electron.sep).pop() || '' -} diff --git a/src/lib/promptToEdit.tsx b/src/lib/promptToEdit.tsx index 90be2f561..67cee69c8 100644 --- a/src/lib/promptToEdit.tsx +++ b/src/lib/promptToEdit.tsx @@ -4,8 +4,6 @@ import type { Models } from '@kittycad/lib' import { VITE_KC_API_BASE_URL } from '@src/env' import { diffLines } from 'diff' import toast from 'react-hot-toast' -import { Client } from '@kittycad/lib' -import { ml } from '@kittycad/lib' import type { TextToCadMultiFileIteration_type } from '@kittycad/lib/dist/types/src/models' import { getCookie, TOKEN_PERSIST_KEY } from '@src/machines/authMachine' import { COOKIE_NAME } from '@src/lib/constants' @@ -14,7 +12,10 @@ import { openExternalBrowserIfDesktop } from '@src/lib/openWindow' import { ActionButton } from '@src/components/ActionButton' import { CustomIcon } from '@src/components/CustomIcon' -import { ToastPromptToEditCadSuccess } from '@src/components/ToastTextToCad' +import { + ToastPromptToEditCadSuccess, + writeOverFilesAndExecute, +} from '@src/components/ToastTextToCad' import { modelingMachineEvent } from '@src/editor/manager' import { getArtifactOfTypes } from '@src/lang/std/artifactGraph' import { topLevelRange } from '@src/lang/util' @@ -26,6 +27,7 @@ import { err, reportRejection } from '@src/lib/trap' import { uuidv4 } from '@src/lib/utils' import type { File as KittyCadLibFile } from '@kittycad/lib/dist/types/src/models' import type { FileMeta } from '@src/lib/types' +import type { RequestedKCLFile } from '@src/machines/systemIO/utils' type KclFileMetaMap = { [execStateFileNamesIndex: number]: Extract @@ -52,6 +54,52 @@ function convertAppRangeToApiRange( } } +type TextToCadErrorResponse = { + error_code: string + message: string +} + +async function submitTextToCadRequest( + body: { + prompt: string + source_ranges: Models['SourceRangePrompt_type'][] + project_name?: string + kcl_version: string + }, + files: KittyCadLibFile[], + token: string +): Promise { + const formData = new FormData() + formData.append('body', JSON.stringify(body)) + + files.forEach((file) => { + formData.append('files', file.data, file.name) + }) + + const response = await fetch( + `${VITE_KC_API_BASE_URL}/ml/text-to-cad/multi-file/iteration`, + { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + }, + body: formData, + } + ) + + if (!response.ok) { + return new Error(`HTTP error! status: ${response.status}`) + } + + const data = await response.json() + if ('error_code' in data) { + const errorData = data as TextToCadErrorResponse + return new Error(errorData.message || 'Unknown error') + } + + return data as TextToCadMultiFileIteration_type +} + export async function submitPromptToEditToQueue({ prompt, selections, @@ -72,8 +120,6 @@ export async function submitPromptToEditToQueue({ ? token : getCookie(COOKIE_NAME) || localStorage?.getItem(TOKEN_PERSIST_KEY) || '' - const client = new Client(_token) - const kclFilesMap: KclFileMetaMap = {} const endPointFiles: KittyCadLibFile[] = [] projectFiles.forEach((file) => { @@ -93,9 +139,8 @@ export async function submitPromptToEditToQueue({ // If no selection, use whole file if (selections === null) { - return ml.create_text_to_cad_multi_file_iteration({ - client, - body: { + return submitTextToCadRequest( + { prompt, source_ranges: [], project_name: @@ -104,8 +149,9 @@ export async function submitPromptToEditToQueue({ : undefined, kcl_version: kclManager.kclVersion, }, - files: endPointFiles, - }) + endPointFiles, + _token + ) } // Handle manual code selections and artifact selections differently @@ -239,9 +285,8 @@ See later source ranges for more context. about the sweep`, } return prompts }) - return ml.create_text_to_cad_multi_file_iteration({ - client, - body: { + return submitTextToCadRequest( + { prompt, source_ranges: ranges, project_name: @@ -250,8 +295,9 @@ See later source ranges for more context. about the sweep`, : undefined, kcl_version: kclManager.kclVersion, }, - files: endPointFiles, - }) + endPointFiles, + _token + ) } export async function getPromptToEditResult( @@ -307,10 +353,12 @@ export async function doPromptEdit({ projectName, }) } catch (e: any) { + toast.dismiss(toastId) return new Error(e.message) } - if ('error_code' in submitResult) { - return new Error(submitResult.message) + if (submitResult instanceof Error) { + toast.dismiss(toastId) + return submitResult } const textToCadComplete = new Promise< @@ -324,7 +372,11 @@ export async function doPromptEdit({ while (timeElapsed < MAX_CHECK_TIMEOUT) { const check = await getPromptToEditResult(submitResult.id, token) - if (check instanceof Error || check.status === 'failed') { + if ( + check instanceof Error || + check.status === 'failed' || + check.error + ) { reject(check) return } else if (check.status === 'completed') { @@ -363,7 +415,6 @@ export async function promptToEditFlow({ token, artifactGraph, projectName, - basePath, }: { prompt: string selections: Selections @@ -371,7 +422,6 @@ export async function promptToEditFlow({ token?: string artifactGraph: ArtifactGraph projectName: string - basePath: string }) { const result = await doPromptEdit({ prompt, @@ -381,15 +431,13 @@ export async function promptToEditFlow({ artifactGraph, projectName, }) - if (err(result)) return Promise.reject(result) + if (err(result)) { + toast.error('Failed to modify.') + return Promise.reject(result) + } const oldCodeWebAppOnly = codeManager.code - // TODO remove once endpoint isn't returning fake data. - const outputs: TextToCadMultiFileIteration_type['outputs'] = {} - Object.entries(result.outputs).forEach(([key, value]) => { - outputs[key] = value + '\n// yoyo a comment' - }) - if (!isDesktop() && Object.values(outputs).length > 1) { + if (!isDesktop() && Object.values(result.outputs).length > 1) { const toastId = uuidv4() toast.error( (t) => ( @@ -437,17 +485,23 @@ export async function promptToEditFlow({ ) return } - if (isDesktop()) { - // write all of the outputs to disk - for (const [relativePath, fileContents] of Object.entries(outputs)) { - window.electron.writeFile( - window.electron.join(basePath, relativePath), - fileContents - ) + const requestedFiles: RequestedKCLFile[] = [] + + for (const [relativePath, fileContents] of Object.entries(result.outputs)) { + requestedFiles.push({ + requestedCode: fileContents, + requestedFileName: relativePath, + requestedProjectName: projectName, + }) } + + await writeOverFilesAndExecute({ + requestedFiles, + projectName, + }) } else { - const newCode = outputs['main.kcl'] + const newCode = result.outputs['main.kcl'] codeManager.updateCodeEditor(newCode) const diff = reBuildNewCodeWithRanges(oldCodeWebAppOnly, newCode) const ranges: SelectionRange[] = diff.insertRanges.map((range) => diff --git a/src/lib/routeLoaders.ts b/src/lib/routeLoaders.ts index 020efedfb..255f2db59 100644 --- a/src/lib/routeLoaders.ts +++ b/src/lib/routeLoaders.ts @@ -21,6 +21,13 @@ import type { IndexLoaderData, } from '@src/lib/types' import { settingsActor } from '@src/lib/singletons' +import { NAVIGATION_COMPLETE_EVENT } from '@src/machines/systemIO/utils' + +export const telemetryLoader: LoaderFunction = async ({ + params, +}): Promise => { + return null +} export const fileLoader: LoaderFunction = async ( routerData @@ -83,6 +90,7 @@ export const fileLoader: LoaderFunction = async ( // We pass true on the end here to clear the code editor history. // This way undo and redo are not super weird when opening new files. codeManager.updateCodeStateEditor(code, true) + window.dispatchEvent(new CustomEvent(NAVIGATION_COMPLETE_EVENT)) } // Set the file system manager to the project path diff --git a/src/lib/rustContext.ts b/src/lib/rustContext.ts index 5d2792066..4b1dbedae 100644 --- a/src/lib/rustContext.ts +++ b/src/lib/rustContext.ts @@ -87,7 +87,7 @@ export default class RustContext { JSON.stringify(settings) ) /* Set the default planes, safe to call after execute. */ - const outcome = execStateFromRust(result, node) + const outcome = execStateFromRust(result) this._defaultPlanes = outcome.defaultPlanes @@ -161,29 +161,13 @@ export default class RustContext { ): Promise { const instance = await this._checkInstance() - const ast: Node = { - body: [], - shebang: null, - start: 0, - end: 0, - moduleId: 0, - nonCodeMeta: { - nonCodeNodes: {}, - startNodes: [], - }, - innerAttrs: [], - outerAttrs: [], - preComments: [], - commentStart: 0, - } - try { const result = await instance.bustCacheAndResetScene( JSON.stringify(settings), path ) /* Set the default planes, safe to call after execute. */ - const outcome = execStateFromRust(result, ast) + const outcome = execStateFromRust(result) this._defaultPlanes = outcome.defaultPlanes diff --git a/src/lib/toolbar.ts b/src/lib/toolbar.ts index 135707220..089d3d23d 100644 --- a/src/lib/toolbar.ts +++ b/src/lib/toolbar.ts @@ -678,10 +678,6 @@ export const toolbarConfig: Record = { status: 'available', disabled: (state) => state.matches('Sketch no face'), title: 'Center rectangle', - hotkey: (state) => - state.matches({ Sketch: 'Center Rectangle tool' }) - ? ['Esc', 'C'] - : 'C', description: 'Start drawing a rectangle from its center', links: [], isActive: (state) => { diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 5e3f5dc9d..2fed50c17 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -5,6 +5,14 @@ import type { CallExpressionKw, SourceRange } from '@src/lang/wasm' import { isDesktop } from '@src/lib/isDesktop' import type { AsyncFn } from '@src/lib/types' +import * as THREE from 'three' + +import type { EngineCommandManager } from '@src/lang/std/engineConnection' +import type { + CameraViewState_type, + UnitLength_type, +} from '@kittycad/lib/dist/types/src/models' + export const uuidv4 = v4 /** @@ -532,3 +540,132 @@ export function getInVariableCase(name: string, prefixIfDigit = 'm') { return likelyPascalCase.slice(0, 1).toLowerCase() + likelyPascalCase.slice(1) } + +export function computeIsometricQuaternionForEmptyScene() { + // Create the direction vector you want to look from + const isoDir = new THREE.Vector3(1, 1, 1).normalize() // isometric look direction + + // Target is the point you want to look at (e.g., origin) + const target = new THREE.Vector3(0, 0, 0) + + // Compute quaternion for isometric view + const up = new THREE.Vector3(0, 0, 1) // default up direction + const quaternion = new THREE.Quaternion() + quaternion.setFromUnitVectors(new THREE.Vector3(0, 0, 1), isoDir) // align -Z with isoDir + + // Align up vector using a lookAt matrix + const m = new THREE.Matrix4() + m.lookAt(new THREE.Vector3().addVectors(target, isoDir), target, up) + quaternion.setFromRotationMatrix(m) + return quaternion +} + +export async function engineStreamZoomToFit({ + engineCommandManager, + padding, +}: { + engineCommandManager: EngineCommandManager + padding: number +}) { + // It makes sense to also call zoom to fit here, when a new file is + // loaded for the first time, but not overtaking the work kevin did + // so the camera isn't moving all the time. + await engineCommandManager.sendSceneCommand({ + type: 'modeling_cmd_req', + cmd_id: uuidv4(), + cmd: { + type: 'zoom_to_fit', + object_ids: [], // leave empty to zoom to all objects + padding, // padding around the objects + animated: false, // don't animate the zoom for now + }, + }) +} + +export async function engineViewIsometricWithGeometryPresent({ + engineCommandManager, + padding, +}: { + engineCommandManager: EngineCommandManager + padding: number +}) { + /** + * Default all users to view_isometric when loading into the engine. + * This works for perspective projection and orthographic projection + * This does not change the projection of the camera only the view direction which makes + * it safe to use with either projection defaulted + */ + await engineCommandManager.sendSceneCommand({ + type: 'modeling_cmd_req', + cmd_id: uuidv4(), + cmd: { + type: 'view_isometric', + padding, // padding around the objects + }, + }) + + /** + * HACK: We need to update the gizmo, the command above doesn't trigger gizmo + * to render which makes the axis point in an old direction. + */ + await engineCommandManager.sendSceneCommand({ + type: 'modeling_cmd_req', + cmd_id: uuidv4(), + cmd: { + type: 'default_camera_get_settings', + }, + }) +} + +export async function engineViewIsometricWithoutGeometryPresent({ + engineCommandManager, + unit, +}: { + engineCommandManager: EngineCommandManager + unit?: UnitLength_type +}) { + // If you load an empty scene with any file unit it will have an eye offset of this + const MAGIC_ENGINE_EYE_OFFSET = 1378.0057 + const quat = computeIsometricQuaternionForEmptyScene() + const isometricView: CameraViewState_type = { + pivot_rotation: { + x: quat.x, + y: quat.y, + z: quat.z, + w: quat.w, + }, + pivot_position: { + x: 0, + y: 0, + z: 0, + }, + eye_offset: MAGIC_ENGINE_EYE_OFFSET, + fov_y: 45, + ortho_scale_factor: 1.4063792, + is_ortho: true, + ortho_scale_enabled: true, + world_coord_system: 'right_handed_up_z', + } + await engineCommandManager.sendSceneCommand({ + type: 'modeling_cmd_req', + cmd_id: uuidv4(), + cmd: { + type: 'default_camera_set_view', + view: { + ...isometricView, + }, + }, + }) + + /** + * HACK: We need to update the gizmo, the command above doesn't trigger gizmo + * to render which makes the axis point in an old direction. + */ + await engineCommandManager.sendSceneCommand({ + type: 'modeling_cmd_req', + cmd_id: uuidv4(), + cmd: { + type: 'default_camera_get_settings', + }, + }) +} diff --git a/src/lib/wasm_lib_wrapper.ts b/src/lib/wasm_lib_wrapper.ts index d4f82e927..dc557b996 100644 --- a/src/lib/wasm_lib_wrapper.ts +++ b/src/lib/wasm_lib_wrapper.ts @@ -20,6 +20,7 @@ import type { is_points_ccw as IsPointsCcw, kcl_lint as KclLint, kcl_settings as KclSettings, + node_path_from_range as NodePathFromRange, parse_app_settings as ParseAppSettings, parse_project_settings as ParseProjectSettings, parse_wasm as ParseWasm, @@ -60,6 +61,9 @@ export const format_number: typeof FormatNumber = (...args) => { export const kcl_lint: typeof KclLint = (...args) => { return getModule().kcl_lint(...args) } +export const node_path_from_range: typeof NodePathFromRange = (...args) => { + return getModule().node_path_from_range(...args) +} export const is_points_ccw: typeof IsPointsCcw = (...args) => { return getModule().is_points_ccw(...args) } diff --git a/src/machines/modelingMachine.ts b/src/machines/modelingMachine.ts index 7ab10afeb..0b1420ee0 100644 --- a/src/machines/modelingMachine.ts +++ b/src/machines/modelingMachine.ts @@ -2423,7 +2423,9 @@ export const modelingMachine = setup({ 'VariableDeclarator' ) if (err(extrudeNode)) { - return new Error("Couldn't find extrude node", { cause: extrudeNode }) + return new Error("Couldn't find extrude node", { + cause: extrudeNode, + }) } // Perform the shell op @@ -3314,10 +3316,7 @@ export const modelingMachine = setup({ 'Artifact graph emptied': 'hidePlanes', }, - entry: [ - 'show default planes', - 'reset camera position', - ], + entry: ['show default planes'], description: `We want to disable selections and hover highlights here, because users can't do anything with that information until they actually add something to the scene. The planes are just for orientation here.`, exit: 'set selection filter to defaults', }, diff --git a/src/machines/systemIO/systemIOMachine.ts b/src/machines/systemIO/systemIOMachine.ts index 93984de03..2fd66c3d9 100644 --- a/src/machines/systemIO/systemIOMachine.ts +++ b/src/machines/systemIO/systemIOMachine.ts @@ -1,6 +1,9 @@ import { DEFAULT_PROJECT_NAME } from '@src/lib/constants' import type { Project } from '@src/lib/project' -import type { SystemIOContext } from '@src/machines/systemIO/utils' +import type { + SystemIOContext, + RequestedKCLFile, +} from '@src/machines/systemIO/utils' import { NO_PROJECT_DIRECTORY, SystemIOMachineActions, @@ -43,11 +46,7 @@ export const systemIOMachine = setup({ } | { type: SystemIOMachineEvents.navigateToFile - data: { - requestedProjectName: string - requestedFileName: string - requestedSubRoute?: string - } + data: { requestedProjectName: string; requestedFileName: string } } | { type: SystemIOMachineEvents.createProject @@ -73,13 +72,26 @@ export const systemIOMachine = setup({ requestedCode: string } } + | { + type: SystemIOMachineEvents.bulkCreateKCLFiles + data: { + files: RequestedKCLFile[] + } + } + | { + type: SystemIOMachineEvents.bulkCreateKCLFilesAndNavigateToProject + data: { + files: RequestedKCLFile[] + requestedProjectName: string + override?: boolean + } + } | { type: SystemIOMachineEvents.importFileFromURL data: { requestedProjectName: string requestedFileName: string requestedCode: string - requestedSubRoute?: string } } | { @@ -122,9 +134,7 @@ export const systemIOMachine = setup({ [SystemIOMachineActions.setRequestedProjectName]: assign({ requestedProjectName: ({ event }) => { assertEvent(event, SystemIOMachineEvents.navigateToProject) - return { - name: event.data.requestedProjectName, - } + return { name: event.data.requestedProjectName } }, }), [SystemIOMachineActions.setRequestedFileName]: assign({ @@ -133,7 +143,6 @@ export const systemIOMachine = setup({ return { project: event.data.requestedProjectName, file: event.data.requestedFileName, - subRoute: event.data.requestedSubRoute, } }, }), @@ -232,15 +241,13 @@ export const systemIOMachine = setup({ requestedFileName: string requestedCode: string rootContext: AppMachineContext - requestedSubRoute?: string } }): Promise<{ message: string fileName: string projectName: string - subRoute: string }> => { - return { message: '', fileName: '', projectName: '', subRoute: '' } + return { message: '', fileName: '', projectName: '' } } ), [SystemIOMachineActors.checkReadWrite]: fromPromise( @@ -272,6 +279,41 @@ export const systemIOMachine = setup({ return { message: '', fileName: '', projectName: '' } } ), + [SystemIOMachineActors.bulkCreateKCLFiles]: fromPromise( + async ({ + input, + }: { + input: { + context: SystemIOContext + files: RequestedKCLFile[] + rootContext: AppMachineContext + } + }): Promise<{ + message: string + fileName: string + projectName: string + }> => { + return { message: '', fileName: '', projectName: '' } + } + ), + [SystemIOMachineActors.bulkCreateKCLFilesAndNavigateToProject]: fromPromise( + async ({ + input, + }: { + input: { + context: SystemIOContext + files: RequestedKCLFile[] + rootContext: AppMachineContext + requestedProjectName: string + } + }): Promise<{ + message: string + fileName: string + projectName: string + }> => { + return { message: '', fileName: '', projectName: '' } + } + ), }, }).createMachine({ initial: SystemIOMachineStates.idle, @@ -340,6 +382,13 @@ export const systemIOMachine = setup({ [SystemIOMachineEvents.deleteKCLFile]: { target: SystemIOMachineStates.deletingKCLFile, }, + [SystemIOMachineEvents.bulkCreateKCLFiles]: { + target: SystemIOMachineStates.bulkCreatingKCLFiles, + }, + [SystemIOMachineEvents.bulkCreateKCLFilesAndNavigateToProject]: { + target: + SystemIOMachineStates.bulkCreatingKCLFilesAndNavigateToProject, + }, }, }, [SystemIOMachineStates.readingFolders]: { @@ -468,7 +517,6 @@ export const systemIOMachine = setup({ context, requestedProjectName: event.data.requestedProjectName, requestedFileName: event.data.requestedFileName, - requestedSubRoute: event.data.requestedSubRoute, requestedCode: event.data.requestedCode, rootContext: self.system.get('root').getSnapshot().context, } @@ -487,7 +535,6 @@ export const systemIOMachine = setup({ return { project: event.output.projectName, file, - subRoute: event.output.subRoute, } }, }), @@ -542,5 +589,60 @@ export const systemIOMachine = setup({ }, }, }, + [SystemIOMachineStates.bulkCreatingKCLFiles]: { + invoke: { + id: SystemIOMachineActors.bulkCreateKCLFiles, + src: SystemIOMachineActors.bulkCreateKCLFiles, + input: ({ context, event, self }) => { + assertEvent(event, SystemIOMachineEvents.bulkCreateKCLFiles) + return { + context, + files: event.data.files, + rootContext: self.system.get('root').getSnapshot().context, + } + }, + onDone: { + target: SystemIOMachineStates.readingFolders, + }, + onError: { + target: SystemIOMachineStates.idle, + actions: [SystemIOMachineActions.toastError], + }, + }, + }, + [SystemIOMachineStates.bulkCreatingKCLFilesAndNavigateToProject]: { + invoke: { + id: SystemIOMachineActors.bulkCreateKCLFilesAndNavigateToProject, + src: SystemIOMachineActors.bulkCreateKCLFilesAndNavigateToProject, + input: ({ context, event, self }) => { + assertEvent( + event, + SystemIOMachineEvents.bulkCreateKCLFilesAndNavigateToProject + ) + return { + context, + files: event.data.files, + rootContext: self.system.get('root').getSnapshot().context, + requestedProjectName: event.data.requestedProjectName, + override: event.data.override, + } + }, + onDone: { + target: SystemIOMachineStates.readingFolders, + actions: [ + assign({ + requestedProjectName: ({ event }) => { + return { name: event.output.projectName } + }, + }), + SystemIOMachineActions.toastSuccess, + ], + }, + onError: { + target: SystemIOMachineStates.idle, + actions: [SystemIOMachineActions.toastError], + }, + }, + }, }, }) diff --git a/src/machines/systemIO/systemIOMachineDesktop.ts b/src/machines/systemIO/systemIOMachineDesktop.ts index 4a382477b..7d31ac888 100644 --- a/src/machines/systemIO/systemIOMachineDesktop.ts +++ b/src/machines/systemIO/systemIOMachineDesktop.ts @@ -14,7 +14,10 @@ import { } from '@src/lib/desktopFS' import type { Project } from '@src/lib/project' import { systemIOMachine } from '@src/machines/systemIO/systemIOMachine' -import type { SystemIOContext } from '@src/machines/systemIO/utils' +import type { + RequestedKCLFile, + SystemIOContext, +} from '@src/machines/systemIO/utils' import { NO_PROJECT_DIRECTORY, SystemIOMachineActors, @@ -22,6 +25,69 @@ import { import { fromPromise } from 'xstate' import type { AppMachineContext } from '@src/lib/types' +const sharedBulkCreateWorkflow = async ({ + input, +}: { + input: { + context: SystemIOContext + files: RequestedKCLFile[] + rootContext: AppMachineContext + override?: boolean + } +}) => { + const configuration = await readAppSettingsFile() + for (let fileIndex = 0; fileIndex < input.files.length; fileIndex++) { + const file = input.files[fileIndex] + const requestedProjectName = file.requestedProjectName + const requestedFileName = file.requestedFileName + const requestedCode = file.requestedCode + const folders = input.context.folders + + let newProjectName = requestedProjectName + + if (!newProjectName) { + newProjectName = getUniqueProjectName( + input.context.defaultProjectFolderName, + input.context.folders + ) + } + + const needsInterpolated = doesProjectNameNeedInterpolated(newProjectName) + if (needsInterpolated) { + const nextIndex = getNextProjectIndex(newProjectName, folders) + newProjectName = interpolateProjectNameWithIndex( + newProjectName, + nextIndex + ) + } + + const baseDir = window.electron.join( + input.context.projectDirectoryPath, + newProjectName + ) + // If override is true, use the requested filename directly + const fileName = input.override + ? requestedFileName + : getNextFileName({ + entryName: requestedFileName, + baseDir, + }).name + + // Create the project around the file if newProject + await createNewProjectDirectory( + newProjectName, + requestedCode, + configuration, + fileName + ) + } + return { + message: 'Batch create success', + fileName: '', + projectName: '', + } +} + export const systemIOMachineDesktop = systemIOMachine.provide({ actors: { [SystemIOMachineActors.readFoldersFromProjectDirectory]: fromPromise( @@ -158,7 +224,6 @@ export const systemIOMachineDesktop = systemIOMachine.provide({ requestedFileName: string requestedCode: string rootContext: AppMachineContext - requestedSubRoute?: string } }) => { const requestedProjectName = input.requestedProjectName @@ -207,7 +272,6 @@ export const systemIOMachineDesktop = systemIOMachine.provide({ message: 'File created successfully', fileName: newFileName, projectName: newProjectName, - subRoute: input.requestedSubRoute || '', } } ), @@ -253,5 +317,40 @@ export const systemIOMachineDesktop = systemIOMachine.provide({ } } ), + [SystemIOMachineActors.bulkCreateKCLFiles]: fromPromise( + async ({ + input, + }: { + input: { + context: SystemIOContext + files: RequestedKCLFile[] + rootContext: AppMachineContext + } + }) => { + return await sharedBulkCreateWorkflow({ input }) + } + ), + [SystemIOMachineActors.bulkCreateKCLFilesAndNavigateToProject]: fromPromise( + async ({ + input, + }: { + input: { + context: SystemIOContext + files: RequestedKCLFile[] + rootContext: AppMachineContext + requestedProjectName: string + override?: boolean + } + }) => { + const message = await sharedBulkCreateWorkflow({ + input: { + ...input, + override: input.override, + }, + }) + message.projectName = input.requestedProjectName + return message + } + ), }, }) diff --git a/src/machines/systemIO/systemIOMachineWeb.ts b/src/machines/systemIO/systemIOMachineWeb.ts index 67034695e..cac7ef9ad 100644 --- a/src/machines/systemIO/systemIOMachineWeb.ts +++ b/src/machines/systemIO/systemIOMachineWeb.ts @@ -20,7 +20,6 @@ export const systemIOMachineWeb = systemIOMachine.provide({ requestedFileName: string requestedCode: string rootContext: AppMachineContext - requestedSubRoute?: string } }) => { // Browser version doesn't navigate, just overwrites the current file @@ -44,7 +43,6 @@ export const systemIOMachineWeb = systemIOMachine.provide({ message: 'File overwritten successfully', fileName: input.requestedFileName, projectName: '', - subRoute: input.requestedSubRoute || '', } } ), diff --git a/src/machines/systemIO/utils.ts b/src/machines/systemIO/utils.ts index a07605d6e..29e2813c1 100644 --- a/src/machines/systemIO/utils.ts +++ b/src/machines/systemIO/utils.ts @@ -8,9 +8,10 @@ export enum SystemIOMachineActors { deleteProject = 'delete project', createKCLFile = 'create kcl file', checkReadWrite = 'check read write', - /** TODO: rename this event to be more generic, like `createKCLFileAndNavigate` */ importFileFromURL = 'import file from URL', deleteKCLFile = 'delete kcl delete', + bulkCreateKCLFiles = 'bulk create kcl files', + bulkCreateKCLFilesAndNavigateToProject = 'bulk create kcl files and navigate to project', } export enum SystemIOMachineStates { @@ -22,9 +23,10 @@ export enum SystemIOMachineStates { deletingProject = 'deletingProject', creatingKCLFile = 'creatingKCLFile', checkingReadWrite = 'checkingReadWrite', - /** TODO: rename this event to be more generic, like `createKCLFileAndNavigate` */ importFileFromURL = 'importFileFromURL', deletingKCLFile = 'deletingKCLFile', + bulkCreatingKCLFiles = 'bulkCreatingKCLFiles', + bulkCreatingKCLFilesAndNavigateToProject = 'bulkCreatingKCLFilesAndNavigateToProject', } const donePrefix = 'xstate.done.actor.' @@ -43,11 +45,12 @@ export enum SystemIOMachineEvents { createKCLFile = 'create kcl file', setDefaultProjectFolderName = 'set default project folder name', done_checkReadWrite = donePrefix + 'check read write', - /** TODO: rename this event to be more generic, like `createKCLFileAndNavigate` */ importFileFromURL = 'import file from URL', done_importFileFromURL = donePrefix + 'import file from URL', generateTextToCAD = 'generate text to CAD', deleteKCLFile = 'delete kcl file', + bulkCreateKCLFiles = 'bulk create kcl files', + bulkCreateKCLFilesAndNavigateToProject = 'bulk create kcl files and navigate to project', } export enum SystemIOMachineActions { @@ -77,7 +80,7 @@ export type SystemIOContext = { * this is required to prevent chokidar from spamming invalid events during initialization. */ hasListedProjects: boolean requestedProjectName: { name: string } - requestedFileName: { project: string; file: string; subRoute?: string } + requestedFileName: { project: string; file: string } canReadWriteProjectDirectory: { value: boolean; error: unknown } clearURLParams: { value: boolean } requestedTextToCadGeneration: { @@ -89,3 +92,12 @@ export type SystemIOContext = { project: string } } + +export type RequestedKCLFile = { + requestedProjectName: string + requestedFileName: string + requestedCode: string +} + +// Custom event for navigation completion +export const NAVIGATION_COMPLETE_EVENT = 'navigation-complete' diff --git a/src/menu/channels.ts b/src/menu/channels.ts index 6312fa8db..f9ba9f5d8 100644 --- a/src/menu/channels.ts +++ b/src/menu/channels.ts @@ -6,7 +6,7 @@ import type { Channel } from '@src/channels' export type MenuLabels = | 'Help.Command Palette...' | 'Help.Report a bug' - | 'Help.Replay onboarding tutorial' + | 'Help.Reset onboarding' | 'Edit.Rename project' | 'Edit.Delete project' | 'Edit.Change project directory' diff --git a/src/menu/helpRole.ts b/src/menu/helpRole.ts index b6941994a..de7a1c1af 100644 --- a/src/menu/helpRole.ts +++ b/src/menu/helpRole.ts @@ -84,11 +84,11 @@ export const helpRole = ( }, { type: 'separator' }, { - id: 'Help.Replay onboarding tutorial', - label: 'Replay onboarding tutorial', + id: 'Help.Reset onboarding', + label: 'Reset onboarding', click: () => { typeSafeWebContentsSend(mainWindow, 'menu-action-clicked', { - menuLabel: 'Help.Replay onboarding tutorial', + menuLabel: 'Help.Reset onboarding', }) }, }, diff --git a/src/menu/roles.ts b/src/menu/roles.ts index 5ead00a0f..8b51ad1da 100644 --- a/src/menu/roles.ts +++ b/src/menu/roles.ts @@ -45,7 +45,7 @@ type HelpRoleLabel = | 'Ask the community discourse' | 'KCL code samples' | 'KCL docs' - | 'Replay onboarding tutorial' + | 'Reset onboarding' | 'Show release notes' | 'Manage account' | 'Get started with Text-to-CAD' diff --git a/src/routes/Home.tsx b/src/routes/Home.tsx index aed35b0b8..475c05ed0 100644 --- a/src/routes/Home.tsx +++ b/src/routes/Home.tsx @@ -1,13 +1,8 @@ import type { FormEvent, HTMLProps } from 'react' -import { useEffect, useRef } from 'react' +import { useEffect } from 'react' import { toast } from 'react-hot-toast' import { useHotkeys } from 'react-hotkeys-hook' -import { - Link, - useLocation, - useNavigate, - useSearchParams, -} from 'react-router-dom' +import { Link, useNavigate, useSearchParams } from 'react-router-dom' import { ActionButton } from '@src/components/ActionButton' import { AppHeader } from '@src/components/AppHeader' @@ -24,7 +19,7 @@ import { isDesktop } from '@src/lib/isDesktop' import { PATHS } from '@src/lib/paths' import { markOnce } from '@src/lib/performance' import type { Project } from '@src/lib/project' -import { codeManager, kclManager } from '@src/lib/singletons' +import { kclManager } from '@src/lib/singletons' import { getNextSearchParams, getSortFunction, @@ -44,12 +39,6 @@ import { } from '@src/machines/systemIO/utils' import type { WebContentSendPayload } from '@src/menu/channels' import { openExternalBrowserIfDesktop } from '@src/lib/openWindow' -import { - acceptOnboarding, - needsToOnboard, - onDismissOnboardingInvite, -} from '@src/routes/Onboarding/utils' -import Tooltip from '@src/components/Tooltip' type ReadWriteProjectState = { value: boolean @@ -80,10 +69,8 @@ const Home = () => { }) }) - const location = useLocation() const navigate = useNavigate() const settings = useSettings() - const onboardingStatus = settings.app.onboardingStatus.current // Menu listeners const cb = (data: WebContentSendPayload) => { @@ -195,7 +182,6 @@ const Home = () => { splitKey: '|', } ) - const ref = useRef(null) const projects = useFolders() const [searchParams, setSearchParams] = useSearchParams() const { searchResults, query, setQuery } = useProjectSearch(projects) @@ -204,9 +190,9 @@ const Home = () => { 'flex items-center p-2 gap-2 leading-tight border-transparent dark:border-transparent enabled:dark:border-transparent enabled:hover:border-primary/50 enabled:dark:hover:border-inherit active:border-primary dark:bg-transparent hover:bg-transparent' return ( -
    +
    -
    +
    { readWriteProjectDir={readWriteProjectDir} className="col-start-2 -col-end-1" /> -
    ) @@ -399,53 +349,55 @@ function HomeHeader({ return (
    -
    +

    Projects

    -
    +
    - Sort by - setSearchParams(getNextSearchParams(sort, 'name'))} - iconStart={{ - icon: getSortIcon(sort, 'name'), - bgClassName: 'bg-transparent', - iconClassName: !sort.includes('name') - ? '!text-chalkboard-90 dark:!text-chalkboard-30' - : '', - }} - > - Name - - - setSearchParams(getNextSearchParams(sort, 'modified')) - } - iconStart={{ - icon: sort ? getSortIcon(sort, 'modified') : 'arrowDown', - bgClassName: 'bg-transparent', - iconClassName: !isSortByModified - ? '!text-chalkboard-90 dark:!text-chalkboard-30' - : '', - }} - > - Last Modified - +
    + Sort by + setSearchParams(getNextSearchParams(sort, 'name'))} + iconStart={{ + icon: getSortIcon(sort, 'name'), + bgClassName: 'bg-transparent', + iconClassName: !sort.includes('name') + ? '!text-chalkboard-90 dark:!text-chalkboard-30' + : '', + }} + > + Name + + + setSearchParams(getNextSearchParams(sort, 'modified')) + } + iconStart={{ + icon: sort ? getSortIcon(sort, 'modified') : 'arrowDown', + bgClassName: 'bg-transparent', + iconClassName: !isSortByModified + ? '!text-chalkboard-90 dark:!text-chalkboard-30' + : '', + }} + > + Last Modified + +

    @@ -502,7 +454,7 @@ function ProjectGrid({ ) : ( <> {searchResults.length > 0 ? ( -

      +
        {searchResults.sort(getSortFunction(sort)).map((project) => ( ) : (

        - No Projects found + No projects found {projects.length === 0 ? ', ready to make your first one?' : ` with the search term "${query}"`} diff --git a/src/routes/Onboarding/Camera.tsx b/src/routes/Onboarding/Camera.tsx index 199e26bed..211cd8e7b 100644 --- a/src/routes/Onboarding/Camera.tsx +++ b/src/routes/Onboarding/Camera.tsx @@ -1,11 +1,18 @@ import { SettingsSection } from '@src/components/Settings/SettingsSection' import type { CameraSystem } from '@src/lib/cameraControls' import { cameraMouseDragGuards, cameraSystems } from '@src/lib/cameraControls' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' import { settingsActor, useSettings } from '@src/lib/singletons' -import { OnboardingButtons } from '@src/routes/Onboarding/utils' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + +import { + OnboardingButtons, + useDismiss, + useNextClick, +} from '@src/routes/Onboarding/utils' export default function Units() { + useDismiss() + useNextClick(onboardingPaths.STREAMING) const { modeling: { mouseControls }, } = useSettings() @@ -59,7 +66,7 @@ export default function Units() {

    diff --git a/src/routes/Onboarding/CmdK.tsx b/src/routes/Onboarding/CmdK.tsx index 161f29742..7dc2e4e2c 100644 --- a/src/routes/Onboarding/CmdK.tsx +++ b/src/routes/Onboarding/CmdK.tsx @@ -1,7 +1,8 @@ import { COMMAND_PALETTE_HOTKEY } from '@src/components/CommandBar/CommandBar' import usePlatform from '@src/hooks/usePlatform' import { hotkeyDisplay } from '@src/lib/hotkeyWrapper' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + import { OnboardingButtons, kbdClasses } from '@src/routes/Onboarding/utils' export default function CmdK() { @@ -36,7 +37,7 @@ export default function CmdK() { . You can control settings, authentication, and file management from the command bar, as well as a growing number of modeling commands.

    - +
    ) diff --git a/src/routes/Onboarding/CodeEditor.tsx b/src/routes/Onboarding/CodeEditor.tsx index 597885016..e0e4e47fb 100644 --- a/src/routes/Onboarding/CodeEditor.tsx +++ b/src/routes/Onboarding/CodeEditor.tsx @@ -1,4 +1,5 @@ -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + import { OnboardingButtons, kbdClasses, @@ -69,7 +70,7 @@ export default function OnboardingCodeEditor() { pressing Shift + C.

    - +
    ) diff --git a/src/routes/Onboarding/Export.tsx b/src/routes/Onboarding/Export.tsx index a7274c06f..5d14b4d87 100644 --- a/src/routes/Onboarding/Export.tsx +++ b/src/routes/Onboarding/Export.tsx @@ -1,5 +1,6 @@ import { APP_NAME } from '@src/lib/constants' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + import { OnboardingButtons } from '@src/routes/Onboarding/utils' export default function Export() { @@ -49,7 +50,7 @@ export default function Export() { !

    - +
    ) diff --git a/src/routes/Onboarding/FutureWork.tsx b/src/routes/Onboarding/FutureWork.tsx index 0fbd75855..fa2756adf 100644 --- a/src/routes/Onboarding/FutureWork.tsx +++ b/src/routes/Onboarding/FutureWork.tsx @@ -1,9 +1,11 @@ import { useEffect } from 'react' + import { useModelingContext } from '@src/hooks/useModelingContext' import { APP_NAME } from '@src/lib/constants' import { sceneInfra } from '@src/lib/singletons' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + import { OnboardingButtons, useDemoCode } from '@src/routes/Onboarding/utils' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' export default function FutureWork() { const { send } = useModelingContext() @@ -56,7 +58,7 @@ export default function FutureWork() {

    💚 The Zoo Team

    diff --git a/src/routes/Onboarding/InteractiveNumbers.tsx b/src/routes/Onboarding/InteractiveNumbers.tsx index a6b336ac2..d5217f085 100644 --- a/src/routes/Onboarding/InteractiveNumbers.tsx +++ b/src/routes/Onboarding/InteractiveNumbers.tsx @@ -1,5 +1,6 @@ import { bracketWidthConstantLine } from '@src/lib/exampleKcl' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + import { OnboardingButtons, kbdClasses, @@ -84,9 +85,7 @@ export default function OnboardingInteractiveNumbers() { your ideas for how to make it better.

    - + ) diff --git a/src/routes/Onboarding/Introduction.tsx b/src/routes/Onboarding/Introduction.tsx index e89d7bf43..ceb0eeb17 100644 --- a/src/routes/Onboarding/Introduction.tsx +++ b/src/routes/Onboarding/Introduction.tsx @@ -1,11 +1,124 @@ -import { APP_NAME } from '@src/lib/constants' -import { isDesktop } from '@src/lib/isDesktop' -import { Themes, getSystemTheme } from '@src/lib/theme' -import { useSettings } from '@src/lib/singletons' -import { OnboardingButtons, useDemoCode } from '@src/routes/Onboarding/utils' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { useEffect, useState } from 'react' +import { useNavigate, useRouteLoaderData } from 'react-router-dom' -export default function Introduction() { +import { useLspContext } from '@src/components/LspProvider' +import { useFileContext } from '@src/hooks/useFileContext' +import { isKclEmptyOrOnlySettings } from '@src/lang/wasm' +import { APP_NAME } from '@src/lib/constants' +import { createAndOpenNewTutorialProject } from '@src/lib/desktopFS' +import { bracket } from '@src/lib/exampleKcl' +import { isDesktop } from '@src/lib/isDesktop' +import { PATHS } from '@src/lib/paths' +import { codeManager, kclManager } from '@src/lib/singletons' +import { Themes, getSystemTheme } from '@src/lib/theme' +import { reportRejection } from '@src/lib/trap' +import type { IndexLoaderData } from '@src/lib/types' +import { useSettings } from '@src/lib/singletons' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + +import { OnboardingButtons, useDemoCode } from '@src/routes/Onboarding/utils' + +/** + * Show either a welcome screen or a warning screen + * depending on if the user has code in the editor. + */ +export default function OnboardingIntroduction() { + const [shouldShowWarning, setShouldShowWarning] = useState( + !isKclEmptyOrOnlySettings(codeManager.code) && codeManager.code !== bracket + ) + + return shouldShowWarning ? ( + + ) : ( + + ) +} + +interface OnboardingResetWarningProps { + setShouldShowWarning: (arg: boolean) => void +} + +function OnboardingResetWarning(props: OnboardingResetWarningProps) { + return ( +
    +
    + {!isDesktop() ? ( + + ) : ( + + )} +
    +
    + ) +} + +function OnboardingWarningDesktop(props: OnboardingResetWarningProps) { + const navigate = useNavigate() + const loaderData = useRouteLoaderData(PATHS.FILE) as IndexLoaderData + const { context: fileContext } = useFileContext() + const { onProjectClose, onProjectOpen } = useLspContext() + + async function onAccept() { + onProjectClose( + loaderData.file || null, + fileContext.project.path || null, + false + ) + await createAndOpenNewTutorialProject({ onProjectOpen, navigate }) + props.setShouldShowWarning(false) + } + + return ( + <> +

    + Would you like to create a new project? +

    +
    +

    + You have some content in this project that we don't want to overwrite. + If you would like to create a new project, please click the button + below. +

    +
    + { + onAccept().catch(reportRejection) + }} + /> + + ) +} + +function OnboardingWarningWeb(props: OnboardingResetWarningProps) { + useEffect(() => { + async function beforeNavigate() { + // We do want to update both the state and editor here. + codeManager.updateCodeStateEditor(bracket) + await codeManager.writeToFile() + + await kclManager.executeCode() + props.setShouldShowWarning(false) + } + return () => { + beforeNavigate().catch(reportRejection) + } + }, []) + return ( + <> +

    + Replaying onboarding resets your code +

    +

    + We see you have some of your own code written in this project. Please + save it somewhere else before continuing the onboarding. +

    + + + ) +} + +function OnboardingIntroductionInner() { // Reset the code to the bracket code useDemoCode() @@ -69,7 +182,7 @@ export default function Introduction() {

    diff --git a/src/routes/Onboarding/ParametricModeling.tsx b/src/routes/Onboarding/ParametricModeling.tsx index 189d00449..a3fb6fa24 100644 --- a/src/routes/Onboarding/ParametricModeling.tsx +++ b/src/routes/Onboarding/ParametricModeling.tsx @@ -2,8 +2,9 @@ import { bracketThicknessCalculationLine } from '@src/lib/exampleKcl' import { isDesktop } from '@src/lib/isDesktop' import { Themes, getSystemTheme } from '@src/lib/theme' import { useSettings } from '@src/lib/singletons' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + import { OnboardingButtons, useDemoCode } from '@src/routes/Onboarding/utils' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' export default function OnboardingParametricModeling() { useDemoCode() @@ -71,9 +72,7 @@ export default function OnboardingParametricModeling() { - + ) diff --git a/src/routes/Onboarding/ProjectMenu.tsx b/src/routes/Onboarding/ProjectMenu.tsx index 6e73d9a79..b8f3ee3d4 100644 --- a/src/routes/Onboarding/ProjectMenu.tsx +++ b/src/routes/Onboarding/ProjectMenu.tsx @@ -1,5 +1,6 @@ import { isDesktop } from '@src/lib/isDesktop' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + import { OnboardingButtons } from '@src/routes/Onboarding/utils' export default function ProjectMenu() { @@ -55,7 +56,7 @@ export default function ProjectMenu() { )} - + ) diff --git a/src/routes/Onboarding/Sketching.tsx b/src/routes/Onboarding/Sketching.tsx index 652557048..e24c76c1a 100644 --- a/src/routes/Onboarding/Sketching.tsx +++ b/src/routes/Onboarding/Sketching.tsx @@ -1,7 +1,9 @@ import { useEffect } from 'react' + import { codeManager, kclManager } from '@src/lib/singletons' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + import { OnboardingButtons } from '@src/routes/Onboarding/utils' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' export default function Sketching() { useEffect(() => { @@ -40,7 +42,7 @@ export default function Sketching() { always just modifying and generating code in Zoo Design Studio.

    diff --git a/src/routes/Onboarding/Streaming.tsx b/src/routes/Onboarding/Streaming.tsx index 1583ad922..ef052be59 100644 --- a/src/routes/Onboarding/Streaming.tsx +++ b/src/routes/Onboarding/Streaming.tsx @@ -1,4 +1,5 @@ -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + import { OnboardingButtons } from '@src/routes/Onboarding/utils' export default function Streaming() { @@ -40,7 +41,7 @@ export default function Streaming() {

    diff --git a/src/routes/Onboarding/Units.tsx b/src/routes/Onboarding/Units.tsx index b56a1cde6..cbccf8e17 100644 --- a/src/routes/Onboarding/Units.tsx +++ b/src/routes/Onboarding/Units.tsx @@ -4,12 +4,13 @@ import { ActionButton } from '@src/components/ActionButton' import { SettingsSection } from '@src/components/Settings/SettingsSection' import { type BaseUnit, baseUnitsUnion } from '@src/lib/settings/settingsTypes' import { settingsActor, useSettings } from '@src/lib/singletons' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + import { useDismiss, useNextClick } from '@src/routes/Onboarding/utils' export default function Units() { const dismiss = useDismiss() - const next = useNextClick(ONBOARDING_SUBPATHS.CAMERA) + const next = useNextClick(onboardingPaths.CAMERA) const { modeling: { defaultUnit }, } = useSettings() diff --git a/src/routes/Onboarding/UserMenu.tsx b/src/routes/Onboarding/UserMenu.tsx index 533479349..e3e03fee9 100644 --- a/src/routes/Onboarding/UserMenu.tsx +++ b/src/routes/Onboarding/UserMenu.tsx @@ -1,7 +1,9 @@ import { useEffect, useState } from 'react' + import { useUser } from '@src/lib/singletons' +import { onboardingPaths } from '@src/routes/Onboarding/paths' + import { OnboardingButtons } from '@src/routes/Onboarding/utils' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' export default function UserMenu() { const user = useUser() @@ -46,7 +48,7 @@ export default function UserMenu() { only apply to the current project.

    - + ) diff --git a/src/routes/Onboarding/index.tsx b/src/routes/Onboarding/index.tsx index dbf7be278..1652d70ac 100644 --- a/src/routes/Onboarding/index.tsx +++ b/src/routes/Onboarding/index.tsx @@ -14,8 +14,8 @@ import ProjectMenu from '@src/routes/Onboarding/ProjectMenu' import Sketching from '@src/routes/Onboarding/Sketching' import Streaming from '@src/routes/Onboarding/Streaming' import UserMenu from '@src/routes/Onboarding/UserMenu' +import { onboardingPaths } from '@src/routes/Onboarding/paths' import { useDismiss } from '@src/routes/Onboarding/utils' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' export const onboardingRoutes = [ { @@ -23,48 +23,48 @@ export const onboardingRoutes = [ element: , }, { - path: makeUrlPathRelative(ONBOARDING_SUBPATHS.CAMERA), + path: makeUrlPathRelative(onboardingPaths.CAMERA), element: , }, { - path: makeUrlPathRelative(ONBOARDING_SUBPATHS.STREAMING), + path: makeUrlPathRelative(onboardingPaths.STREAMING), element: , }, { - path: makeUrlPathRelative(ONBOARDING_SUBPATHS.EDITOR), + path: makeUrlPathRelative(onboardingPaths.EDITOR), element: , }, { - path: makeUrlPathRelative(ONBOARDING_SUBPATHS.PARAMETRIC_MODELING), + path: makeUrlPathRelative(onboardingPaths.PARAMETRIC_MODELING), element: , }, { - path: makeUrlPathRelative(ONBOARDING_SUBPATHS.INTERACTIVE_NUMBERS), + path: makeUrlPathRelative(onboardingPaths.INTERACTIVE_NUMBERS), element: , }, { - path: makeUrlPathRelative(ONBOARDING_SUBPATHS.COMMAND_K), + path: makeUrlPathRelative(onboardingPaths.COMMAND_K), element: , }, { - path: makeUrlPathRelative(ONBOARDING_SUBPATHS.USER_MENU), + path: makeUrlPathRelative(onboardingPaths.USER_MENU), element: , }, { - path: makeUrlPathRelative(ONBOARDING_SUBPATHS.PROJECT_MENU), + path: makeUrlPathRelative(onboardingPaths.PROJECT_MENU), element: , }, { - path: makeUrlPathRelative(ONBOARDING_SUBPATHS.EXPORT), + path: makeUrlPathRelative(onboardingPaths.EXPORT), element: , }, // Export / conversion API { - path: makeUrlPathRelative(ONBOARDING_SUBPATHS.SKETCHING), + path: makeUrlPathRelative(onboardingPaths.SKETCHING), element: , }, { - path: makeUrlPathRelative(ONBOARDING_SUBPATHS.FUTURE_WORK), + path: makeUrlPathRelative(onboardingPaths.FUTURE_WORK), element: , }, ] diff --git a/src/lib/onboardingPaths.ts b/src/routes/Onboarding/paths.ts similarity index 83% rename from src/lib/onboardingPaths.ts rename to src/routes/Onboarding/paths.ts index 95abdb1ca..f8a069331 100644 --- a/src/lib/onboardingPaths.ts +++ b/src/routes/Onboarding/paths.ts @@ -1,6 +1,6 @@ import type { OnboardingStatus } from '@rust/kcl-lib/bindings/OnboardingStatus' -export const ONBOARDING_SUBPATHS: Record = { +export const onboardingPaths: Record = { INDEX: '/', CAMERA: '/camera', STREAMING: '/streaming', @@ -11,6 +11,7 @@ export const ONBOARDING_SUBPATHS: Record = { USER_MENU: '/user-menu', PROJECT_MENU: '/project-menu', EXPORT: '/export', + MOVE: '/move', SKETCHING: '/sketching', FUTURE_WORK: '/future-work', } as const diff --git a/src/routes/Onboarding/utils.tsx b/src/routes/Onboarding/utils.tsx index 5a72b4716..30309ad87 100644 --- a/src/routes/Onboarding/utils.tsx +++ b/src/routes/Onboarding/utils.tsx @@ -1,9 +1,5 @@ import { useCallback, useEffect } from 'react' -import { - type NavigateFunction, - type useLocation, - useNavigate, -} from 'react-router-dom' +import { useNavigate } from 'react-router-dom' import { waitFor } from 'xstate' import { ActionButton } from '@src/components/ActionButton' @@ -15,39 +11,30 @@ import { NetworkHealthState } from '@src/hooks/useNetworkStatus' import { EngineConnectionStateType } from '@src/lang/std/engineConnection' import { bracket } from '@src/lib/exampleKcl' import makeUrlPathRelative from '@src/lib/makeUrlPathRelative' -import { joinRouterPaths, PATHS } from '@src/lib/paths' -import { - codeManager, - editorManager, - kclManager, - systemIOActor, -} from '@src/lib/singletons' +import { PATHS } from '@src/lib/paths' +import { codeManager, editorManager, kclManager } from '@src/lib/singletons' import { reportRejection, trap } from '@src/lib/trap' import { settingsActor } from '@src/lib/singletons' -import { isKclEmptyOrOnlySettings, parse, resultIsOk } from '@src/lang/wasm' +import { onboardingRoutes } from '@src/routes/Onboarding' +import { onboardingPaths } from '@src/routes/Onboarding/paths' +import { parse, resultIsOk } from '@src/lang/wasm' import { updateModelingState } from '@src/lang/modelingWorkflows' -import { - DEFAULT_PROJECT_KCL_FILE, - EXECUTION_TYPE_REAL, - ONBOARDING_PROJECT_NAME, -} from '@src/lib/constants' -import toast from 'react-hot-toast' -import type CodeManager from '@src/lang/codeManager' -import type { OnboardingStatus } from '@rust/kcl-lib/bindings/OnboardingStatus' -import { isDesktop } from '@src/lib/isDesktop' -import type { KclManager } from '@src/lang/KclSingleton' -import { Logo } from '@src/components/Logo' -import { SystemIOMachineEvents } from '@src/machines/systemIO/utils' -import { ONBOARDING_SUBPATHS } from '@src/lib/onboardingPaths' +import { EXECUTION_TYPE_REAL } from '@src/lib/constants' export const kbdClasses = 'py-0.5 px-1 text-sm rounded bg-chalkboard-10 dark:bg-chalkboard-100 border border-chalkboard-50 border-b-2' // Get the 1-indexed step number of the current onboarding step function useStepNumber( - slug?: (typeof ONBOARDING_SUBPATHS)[keyof typeof ONBOARDING_SUBPATHS] + slug?: (typeof onboardingPaths)[keyof typeof onboardingPaths] ) { - return slug ? Object.values(ONBOARDING_SUBPATHS).indexOf(slug) + 1 : -1 + return slug + ? slug === onboardingPaths.INDEX + ? 1 + : onboardingRoutes.findIndex( + (r) => r.path === makeUrlPathRelative(slug) + ) + 1 + : 1 } export function useDemoCode() { @@ -93,7 +80,7 @@ export function useNextClick(newStatus: string) { data: { level: 'user', value: newStatus }, }) navigate(filePath + PATHS.ONBOARDING.INDEX.slice(0, -1) + newStatus) - }, [filePath, newStatus, navigate]) + }, [filePath, newStatus, settingsActor.send, navigate]) } export function useDismiss() { @@ -107,17 +94,9 @@ export function useDismiss() { data: { level: 'user', value: 'dismissed' }, }) waitFor(settingsActor, (state) => state.matches('idle')) - .then(() => { - navigate(filePath) - toast.success( - 'Click the question mark in the lower-right corner if you ever want to redo the tutorial!', - { - duration: 5_000, - } - ) - }) + .then(() => navigate(filePath)) .catch(reportRejection) - }, [send, filePath, navigate]) + }, [send]) return settingsCallback } @@ -128,31 +107,32 @@ export function OnboardingButtons({ onNextOverride, ...props }: { - currentSlug?: (typeof ONBOARDING_SUBPATHS)[keyof typeof ONBOARDING_SUBPATHS] + currentSlug?: (typeof onboardingPaths)[keyof typeof onboardingPaths] className?: string dismissClassName?: string onNextOverride?: () => void } & React.HTMLAttributes) { - const onboardingPathsArray = Object.values(ONBOARDING_SUBPATHS) const dismiss = useDismiss() const stepNumber = useStepNumber(currentSlug) const previousStep = - !stepNumber || stepNumber <= 1 ? null : onboardingPathsArray[stepNumber] - const goToPrevious = useNextClick(previousStep ?? ONBOARDING_SUBPATHS.INDEX) + !stepNumber || stepNumber === 0 ? null : onboardingRoutes[stepNumber - 2] + const goToPrevious = useNextClick( + onboardingPaths.INDEX + (previousStep?.path ?? '') + ) const nextStep = - !stepNumber || stepNumber === onboardingPathsArray.length + !stepNumber || stepNumber === onboardingRoutes.length ? null - : onboardingPathsArray[stepNumber] - const goToNext = useNextClick(nextStep + ONBOARDING_SUBPATHS.INDEX) + : onboardingRoutes[stepNumber] + const goToNext = useNextClick(onboardingPaths.INDEX + (nextStep?.path ?? '')) return ( <>
    (previousStep ? goToPrevious() : dismiss())} + onClick={() => + previousStep?.path || previousStep?.index + ? goToPrevious() + : dismiss() + } iconStart={{ icon: previousStep ? 'arrowLeft' : 'close', className: 'text-chalkboard-10', @@ -178,18 +162,18 @@ export function OnboardingButtons({ className="hover:border-destroy-40 hover:bg-destroy-10/50 dark:hover:bg-destroy-80/50" data-testid="onboarding-prev" > - {previousStep ? 'Back' : 'Dismiss'} + {previousStep ? `Back` : 'Dismiss'} {stepNumber !== undefined && (

    - {stepNumber} / {onboardingPathsArray.length} + {stepNumber} / {onboardingRoutes.length}

    )} { - if (nextStep) { + if (nextStep?.path) { onNextOverride ? onNextOverride() : goToNext() } else { dismiss() @@ -202,221 +186,9 @@ export function OnboardingButtons({ className="dark:hover:bg-chalkboard-80/50" data-testid="onboarding-next" > - {nextStep ? 'Next' : 'Finish'} + {nextStep ? `Next` : 'Finish'}
    ) } - -export interface OnboardingUtilDeps { - onboardingStatus: OnboardingStatus - codeManager: CodeManager - kclManager: KclManager - navigate: NavigateFunction -} - -export const ERROR_MUST_WARN = 'Must warn user before overwrite' - -/** - * Accept to begin the onboarding tutorial, - * depending on the platform and the state of the user's code. - */ -export async function acceptOnboarding(deps: OnboardingUtilDeps) { - if (isDesktop()) { - /** TODO: rename this event to be more generic, like `createKCLFileAndNavigate` */ - systemIOActor.send({ - type: SystemIOMachineEvents.importFileFromURL, - data: { - requestedProjectName: ONBOARDING_PROJECT_NAME, - requestedFileName: DEFAULT_PROJECT_KCL_FILE, - requestedCode: bracket, - requestedSubRoute: joinRouterPaths( - PATHS.ONBOARDING.INDEX, - deps.onboardingStatus - ), - }, - }) - return Promise.resolve() - } - - const isCodeResettable = hasResetReadyCode(deps.codeManager) - if (isCodeResettable) { - return resetCodeAndAdvanceOnboarding(deps) - } - - return Promise.reject(new Error(ERROR_MUST_WARN)) -} - -/** - * Given that the user has accepted overwriting their web editor, - * advance to the next step and clear their editor. - */ -export async function resetCodeAndAdvanceOnboarding({ - onboardingStatus, - codeManager, - kclManager, - navigate, -}: OnboardingUtilDeps) { - // We do want to update both the state and editor here. - codeManager.updateCodeStateEditor(bracket) - codeManager.writeToFile().catch(reportRejection) - kclManager.executeCode().catch(reportRejection) - // TODO: this is not navigating to the correct `/onboarding/blah` path yet - navigate( - makeUrlPathRelative( - `${PATHS.ONBOARDING.INDEX}${makeUrlPathRelative(onboardingStatus)}` - ) - ) -} - -function hasResetReadyCode(codeManager: CodeManager) { - return ( - isKclEmptyOrOnlySettings(codeManager.code) || codeManager.code === bracket - ) -} - -export function needsToOnboard( - location: ReturnType, - onboardingStatus: OnboardingStatus -) { - return ( - !location.pathname.includes(PATHS.ONBOARDING.INDEX) && - (onboardingStatus.length === 0 || - !(onboardingStatus === 'completed' || onboardingStatus === 'dismissed')) - ) -} - -export const ONBOARDING_TOAST_ID = 'onboarding-toast' - -export function onDismissOnboardingInvite() { - settingsActor.send({ - type: 'set.app.onboardingStatus', - data: { level: 'user', value: 'dismissed' }, - }) - toast.dismiss(ONBOARDING_TOAST_ID) - toast.success( - 'Click the question mark in the lower-right corner if you ever want to do the tutorial!', - { - duration: 5_000, - } - ) -} - -export function TutorialRequestToast(props: OnboardingUtilDeps) { - function onAccept() { - acceptOnboarding(props) - .then(() => { - toast.dismiss(ONBOARDING_TOAST_ID) - }) - .catch((reason) => catchOnboardingWarnError(reason, props)) - } - - return ( -
    - -
    -
    -

    Welcome to Zoo Design Studio

    -

    - Would you like a tutorial to show you around the app? -

    -
    -
    - - Not right now - - - Get started - -
    -
    -
    - ) -} - -/** - * Helper function to catch the `ERROR_MUST_WARN` error from - * `acceptOnboarding` and show a warning toast. - */ -export async function catchOnboardingWarnError( - err: Error, - props: OnboardingUtilDeps -) { - if (err instanceof Error && err.message === ERROR_MUST_WARN) { - toast.success(TutorialWebConfirmationToast(props), { - id: ONBOARDING_TOAST_ID, - duration: Number.POSITIVE_INFINITY, - icon: null, - }) - } else { - toast.dismiss(ONBOARDING_TOAST_ID) - return reportRejection(err) - } -} - -export function TutorialWebConfirmationToast(props: OnboardingUtilDeps) { - function onAccept() { - toast.dismiss(ONBOARDING_TOAST_ID) - resetCodeAndAdvanceOnboarding(props).catch(reportRejection) - } - - return ( -
    - -
    -
    -

    The welcome tutorial resets your code in the browser

    -

    - We see you have some of your own code written in this project. - Please save it somewhere else before continuing the onboarding. -

    -
    -
    - - I'll save it - - - Overwrite and begin - -
    -
    -
    - ) -} diff --git a/src/routes/SignIn.tsx b/src/routes/SignIn.tsx index fd14429ef..67e48f30f 100644 --- a/src/routes/SignIn.tsx +++ b/src/routes/SignIn.tsx @@ -26,9 +26,7 @@ const SignIn = () => { if (isDesktop()) { window.electron.createFallbackMenu().catch(reportRejection) // Disable these since they cannot be accessed within the sign in page. - window.electron - .disableMenu('Help.Replay onboarding tutorial') - .catch(reportRejection) + window.electron.disableMenu('Help.Reset onboarding').catch(reportRejection) window.electron.disableMenu('Help.Show all commands').catch(reportRejection) } diff --git a/src/routes/utils.ts b/src/routes/utils.ts index bd8bcbd9a..441bc164a 100644 --- a/src/routes/utils.ts +++ b/src/routes/utils.ts @@ -1,6 +1,5 @@ import { NODE_ENV } from '@src/env' import { isDesktop } from '@src/lib/isDesktop' - import { IS_PLAYWRIGHT_KEY } from '@src/lib/constants' const isTestEnv = window?.localStorage.getItem(IS_PLAYWRIGHT_KEY) === 'true' diff --git a/vite.config.ts b/vite.config.ts index ba923f83e..ecdbba756 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -6,85 +6,90 @@ import version from 'vite-plugin-package-version' import topLevelAwait from 'vite-plugin-top-level-await' import viteTsconfigPaths from 'vite-tsconfig-paths' import { configDefaults, defineConfig } from 'vitest/config' +import MillionLint from '@million/lint' -const config = defineConfig({ - server: { - open: true, - port: 3000, - watch: { - ignored: [ - '**/target/**', - '**/dist/**', - '**/build/**', - '**/test-results/**', - '**/playwright-report/**', - ], - }, - }, - test: { - globals: true, - pool: 'forks', - poolOptions: { - forks: { - maxForks: 2, - minForks: 1, +export default defineConfig(({ command, mode }) => { + const runMillion = process.env.RUN_MILLION + + return { + server: { + open: true, + port: 3000, + watch: { + ignored: [ + '**/target/**', + '**/dist/**', + '**/build/**', + '**/test-results/**', + '**/playwright-report/**', + ], }, }, - setupFiles: ['src/setupTests.ts', '@vitest/web-worker'], - environment: 'happy-dom', - coverage: { - provider: 'istanbul', // or 'v8' - }, - exclude: [...configDefaults.exclude, '**/e2e/**/*.spec.*', 'rust'], - deps: { - optimizer: { - web: { - include: ['vitest-canvas-mock'], + test: { + globals: true, + pool: 'forks', + poolOptions: { + forks: { + maxForks: 2, + minForks: 1, }, }, + setupFiles: ['src/setupTests.ts', '@vitest/web-worker'], + environment: 'happy-dom', + coverage: { + provider: 'istanbul', // or 'v8' + }, + exclude: [...configDefaults.exclude, '**/e2e/**/*.spec.*', 'rust'], + deps: { + optimizer: { + web: { + include: ['vitest-canvas-mock'], + }, + }, + }, + clearMocks: true, + restoreMocks: true, + mockReset: true, + reporters: process.env.GITHUB_ACTIONS + ? ['dot', 'github-actions'] + : // Gotcha: 'hanging-process' is very noisey, turn off by default on localhost + // : ['verbose', 'hanging-process'], + ['verbose'], + testTimeout: 1000, + hookTimeout: 1000, + teardownTimeout: 1000, }, - clearMocks: true, - restoreMocks: true, - mockReset: true, - reporters: process.env.GITHUB_ACTIONS - ? ['dot', 'github-actions'] - : // Gotcha: 'hanging-process' is very noisey, turn off by default on localhost - // : ['verbose', 'hanging-process'], - ['verbose'], - testTimeout: 1000, - hookTimeout: 1000, - teardownTimeout: 1000, - }, - build: { - outDir: 'build', - }, - resolve: { - alias: { - '@kittycad/codemirror-lsp-client': '/packages/codemirror-lsp-client/src', - '@kittycad/codemirror-lang-kcl': '/packages/codemirror-lang-kcl/src', - '@rust': '/rust', - '@e2e': '/e2e', - '@src': '/src', - '@public': '/public', - '@root': '/', + build: { + outDir: 'build', }, - }, - plugins: [ - react(), - viteTsconfigPaths(), - eslint(), - version(), - lezer(), - topLevelAwait({ - // The export name of top-level await promise for each chunk module - promiseExportName: '__tla', - // The function to generate import names of top-level await promise in each chunk module - promiseImportName: (i) => `__tla_${i}`, - }), - ], - worker: { - plugins: () => [viteTsconfigPaths()], - }, + resolve: { + alias: { + '@kittycad/codemirror-lsp-client': + '/packages/codemirror-lsp-client/src', + '@kittycad/codemirror-lang-kcl': '/packages/codemirror-lang-kcl/src', + '@rust': '/rust', + '@e2e': '/e2e', + '@src': '/src', + '@public': '/public', + '@root': '/', + }, + }, + plugins: [ + react(), + viteTsconfigPaths(), + eslint(), + version(), + lezer(), + topLevelAwait({ + // The export name of top-level await promise for each chunk module + promiseExportName: '__tla', + // The function to generate import names of top-level await promise in each chunk module + promiseImportName: (i) => `__tla_${i}`, + }), + runMillion && MillionLint.vite(), + ], + worker: { + plugins: () => [viteTsconfigPaths()], + }, + } }) - -export default config