diff --git a/.gitignore b/.gitignore index b6dd77c..3784268 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ /.codex/ /git.txt /text.txt +/test-results/ /linuxcnc/ diff --git a/wasm-port/docs/compatibility-validation.md b/wasm-port/docs/compatibility-validation.md index 59924b4..08758b4 100644 --- a/wasm-port/docs/compatibility-validation.md +++ b/wasm-port/docs/compatibility-validation.md @@ -72,6 +72,41 @@ The current aggregate host/WASM/browser smoke command is: wasm-port/tests/host/verify_host_smokes.sh ``` +## Validation Layers + +Use these layers when deciding where a LinuxCNC asset belongs. Do not widen a +later layer until the narrower layer has either passed or recorded an explicit +expected boundary. + +| Layer | Scope | Entry command | Current result | Expected boundary | +| --- | --- | --- | --- | --- | +| 1 | `linuxcnc/nc_files` basic G-code smoke | `wasm-port/tests/native/verify_nc_files.sh` | `total: 107`, `pass: 101`, `expected_fail: 6`, `unexpected_fail: 0` | LinuxCNC-native entry-point/context edges only: W-axis machine context, lathe tool/cutter-comp context, upstream O-word syntax edge, and probe runtime context. | +| 2 | `linuxcnc/configs/sim` native strict harness | `wasm-port/tests/native/verify_sim_configs.sh` | `total: 159`, `pass: 151`, `expected_fail: 8`, `unexpected_fail: 0` | Native `bin/rs274` cannot provide task/user-M process execution or some INI axis-mask/runtime context. The upstream `incremental_repetition_g533.ngc` demo remains an expected upstream demo edge and must not be made pass by changing G-code semantics. | +| 3 | Standalone native runtime probes | `wasm-port/tests/native/verify_native_probes.sh` | Passes with `native probes complete` after source sync, no-standalone-semantics, fixture baseline, sim-config, and `nc_files` checks | Runtime adapters may cover filesystem, HAL/user-M, remap, parameter, tool, kinematics, TP, and WASM/browser boundary behavior, but CNC semantics must still come from vendored LinuxCNC source. | +| 4 | WASM Node/browser representative smoke | `wasm-port/tests/host/verify_host_smokes.sh` plus targeted Node/browser commands below | Current targeted checks pass with `sim_configs_wasm_node_smoke=ok`, `nc_files_wasm_node_smoke=ok`, `browser_interp_smoke=ok`, `browser_ini_opfs_smoke=ok`, and aggregate `host_wasm_opfs_browser_smokes=ok` | JS/browser code may stage files, apply executable bits, persist OPFS text, and forward paths to C ABI calls. It must not implement G-code, remap, tool-table, parameter, planner, kinematics, or user-M semantics. | + +Layer 4 is made of focused smoke commands so failures can be isolated before +running the aggregate host check: + +```bash +wasm-port/tests/wasm/node/verify_ini_wasm.sh +wasm-port/tests/wasm/node/verify_interp_wasm.sh +wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh +wasm-port/tests/wasm/node/verify_nc_files_wasm.sh +wasm-port/tests/wasm/node/verify_tp_wasm.sh +wasm-port/tests/opfs/node/verify_file_service.sh +wasm-port/tests/browser/verify_ini_panel_browser.sh +wasm-port/tests/browser/verify_interp_browser.sh +wasm-port/tests/host/verify_host_smokes.sh +``` + +Layer 4 sim-config staging uses `planSimConfigStaging()` to collect +INI-declared `[DISPLAY]OPEN_FILE`, `[EMCIO]TOOL_TABLE`, +`[RS274NGC]PARAMETER_FILE`, `[RS274NGC]SUBROUTINE_PATH`, +`[RS274NGC]USER_M_PATH`, and remap-NGC files from the vendored source +manifest. That planner is a host filesystem helper only; execution still goes +through vendored LinuxCNC interpreter/remap/tool/parameter code. + ## Validation Chain The native validation script runs these checks in order: @@ -424,13 +459,13 @@ The validation fails if: | Harness | Purpose | | --- | --- | | `tests/wasm/node/verify_ini_wasm.sh` | Validates the browser-facing INI WASM module can be built from vendored LinuxCNC `inifile.cc`, loaded through the JS SDK in Node, and queried through the exported C ABI, including LinuxCNC-backed boolean conversion and machine-session file-name string lookup. | -| `tests/wasm/node/verify_interp_wasm.sh` | Validates the interpreter-core WASM module can be built from vendored LinuxCNC interpreter/remap source, loaded through the interpreter JS SDK, run the first fixture group through `Interp::execute()` and selected file fixtures plus vendored upstream `tests/interp` regression files through `Interp::open()`/`read()`/`execute()`, match the native canonical event plus required state readback fixtures, run vendored `xyzac-trt`/`xyzbc-trt` switchkins remap demo files through the WASM C ABI/SDK path, and run parameter-file restore/save through vendored LinuxCNC `Interp::restore_parameters()` and `Interp::save_parameters()`. | -| `tests/wasm/node/verify_sim_configs_wasm.sh` | Validates representative vendored LinuxCNC `configs/sim` programs in Node WASM through `runSimConfigProgram()`, copying `axis/foam`, `axis/geometry`, and `axis/external_offsets` INI/G-code/user-M assets into the Emscripten filesystem before forwarding to `runFileWithIni()`, plus bridge-mill `5axis.ini`, tool table, `remap_subs/*.ngc`, and `5axisgui.ngc` before forwarding to `runFiveAxisRemapFile()`. This covers INI-driven `U/V/W` axis mask handling, real `USER_M_PATH` registration for executable `M110`/`M111`, and vendored LinuxCNC bridge-mill NGC remap execution without spawning host processes. | -| `tests/wasm/node/verify_nc_files_wasm.sh` | Validates representative vendored LinuxCNC `nc_files` examples in Node WASM by copying `arcspiral.ngc`, `hole-circle.ngc`, `factorial.ngc`, and `m6demo.ngc` into the Emscripten filesystem and forwarding to the LinuxCNC-backed `Interp::open()`/`read()`/`execute()` path. JavaScript only stages files and checks LinuxCNC output; it does not implement G-code, O-word, tool-change, or M-code behavior. | +| `tests/wasm/node/verify_interp_wasm.sh` | Validates the interpreter-core WASM module can be built from vendored LinuxCNC interpreter/remap source, loaded through the interpreter JS SDK, run the first fixture group through `Interp::execute()` and selected file fixtures plus vendored upstream `tests/interp` regression files through `Interp::open()`/`read()`/`execute()`, match the native canonical event plus required state readback fixtures, emit `run_step` execution-status records with LinuxCNC line number, encoded source statement, return code, and interpreter axis positions for file execution, run vendored `xyzac-trt`/`xyzbc-trt` switchkins remap demo files through the WASM C ABI/SDK path, and run parameter-file restore/save through vendored LinuxCNC `Interp::restore_parameters()` and `Interp::save_parameters()`. | +| `tests/wasm/node/verify_sim_configs_wasm.sh` | Validates representative vendored LinuxCNC `configs/sim` programs in Node WASM through `planSimConfigStaging()` plus `runSimConfigProgram()`. The staging planner uses INI text and `tools/source-manifest.txt` to collect the program, INI, tool table, parameter file when vendored, `SUBROUTINE_PATH` files, `USER_M_PATH` files, and remap-NGC files before forwarding to `runFileWithIni()` or `runFiveAxisRemapFile()`. This covers INI-driven `U/V/W` axis mask handling, real `USER_M_PATH` registration for executable `M110`/`M111`, all four current external-offset M111 expected-failure programs, `SUBROUTINE_PATH` staging for `opa_demo.ngc -> circles.ngc`, bridge-mill remap-subroutine staging, and vendored LinuxCNC bridge-mill NGC remap execution without spawning host processes. The same smoke includes a synthetic staging-plan assertion for `TOOL_TABLE`, `PARAMETER_FILE`, `SUBROUTINE_PATH`, and `USER_M_PATH` collection. | +| `tests/wasm/node/verify_nc_files_wasm.sh` | Validates representative vendored LinuxCNC `nc_files` examples in Node WASM by copying `3D_Chips.ngc`, `arcspiral.ngc`, `hole-circle.ngc`, `factorial.ngc`, and `m6demo.ngc` into the Emscripten filesystem and forwarding to the LinuxCNC-backed `Interp::open()`/`read()`/`execute()` path. `3D_Chips.ngc` is staged with a minimal INI-declared `tool.tbl` because the upstream program contains `T1 M6`; JavaScript only stages files and checks LinuxCNC output, including `run_step` status records, and does not implement G-code, O-word, tool-change, or M-code behavior. | | `tests/wasm/node/verify_tp_wasm.sh` | Validates a standalone trajectory-planner WASM module can be built from vendored LinuxCNC TP/TC/Ruckig support source, loaded in Node, and run the same linear, arc, and queued-line planner probe paths covered by the native TP harness. | | `tests/opfs/node/verify_file_service.sh` | Validates the host-owned OPFS text-file adapter, path model, session snapshot store including custom filenames and envelope/path rejection paths, machine file store, G-code text store including filename rejection paths, OPFS-to-WASM parameter/tool-table bridges, and grouped machine-session loading without moving file persistence, parameter semantics, or tool-table semantics into the WASM core. | -| `tests/browser/verify_ini_panel_browser.sh` | Validates the INI SDK, INI/interpreter WASM module loading, LinuxCNC-backed INI machine-session file-name string lookup, OPFS text-file round trip, generic session snapshot round trip plus custom filename and envelope/path rejection paths, machine file text round trip, G-code text round trip plus filename rejection paths, and the INI panel UI's machine-session load with default OPFS parameter/tool-table file mapping, G-code run, canonical-event display paths, and 5-axis remap demo action in a real browser runtime. | -| `tests/browser/verify_interp_browser.sh` | Validates the interpreter-core WASM module loads through the interpreter JS SDK in a real browser runtime and runs selected positive and negative canonical fixtures plus vendored upstream `tests/interp` regression files through vendored LinuxCNC `Interp::execute()` and `Interp::open()`/`read()`/`execute()` via the exported C ABI, including direct browser SDK and OPFS-backed parameter-file restore/save, non-random/random tool-table load/save through vendored LinuxCNC source, vendored `xyzac-trt`/`xyzbc-trt` switchkins remap demo execution, representative vendored `configs/sim` `foam`, `geometry`, `external_offsets`, and bridge-mill programs through `runSimConfigProgram()`, and representative vendored `nc_files` examples through `runFile()`. | +| `tests/browser/verify_ini_panel_browser.sh` | Validates the INI SDK, INI/interpreter WASM module loading, LinuxCNC-backed INI machine-session file-name string lookup, OPFS text-file round trip, generic session snapshot round trip plus custom filename and envelope/path rejection paths, machine file text round trip, G-code text round trip plus filename rejection paths, and the INI panel UI's machine-session load with default OPFS parameter/tool-table file mapping, G-code run, `run_step`-backed progress/line/statement/axis display, canonical-event display paths, and 5-axis remap demo action in a real browser runtime. | +| `tests/browser/verify_interp_browser.sh` | Validates the interpreter-core WASM module loads through the interpreter JS SDK in a real browser runtime and runs selected positive and negative canonical fixtures plus vendored upstream `tests/interp` regression files through vendored LinuxCNC `Interp::execute()` and `Interp::open()`/`read()`/`execute()` via the exported C ABI, including direct browser SDK and OPFS-backed parameter-file restore/save, non-random/random tool-table load/save through vendored LinuxCNC source, vendored `xyzac-trt`/`xyzbc-trt` switchkins remap demo execution, representative vendored `configs/sim` `foam`, `geometry`, `external_offsets`, and bridge-mill programs through `runSimConfigProgram()`, and representative vendored `nc_files` examples through `runFile()` or `runFileWithIni()` when the upstream file requires INI/tool-table context. | | `tests/host/verify_host_smokes.sh` | Runs the current host-side Node, WASM interpreter-core, WASM trajectory-planner, OPFS, and browser smoke validation with shared WASM builds. | ## Fixture Coverage @@ -752,17 +787,21 @@ canned-cycle, state-tag motion, tool-table setup, and O-word subroutine fixtures, plus threading/rigid tap, NURBS dispatch boundaries, and the comparable canonical runtime edge and program-end cleanup calls. The standalone vendored-source harness, Node WASM smoke, and browser smoke also -pin `coordinate_offsets` MDI/file-path, `feed_control_modes`, the +pin `coordinate_offsets` MDI/file-path, `feed_control_modes`, `run_step` +file-execution status output for line number, URI-encoded source statement, +return code, and current interpreter axis positions, the `position_params` MDI/file-path, `tool_semantics`, and `canon_runtime_edges` post-program modal, override, spindle, mist, and flood `_setup` state. Native and WASM standalone checks also cover the user M-code registration boundary for INI-declared `M110`/`M111` handlers while keeping process execution outside the browser/WASM runtime. Node and browser WASM sim-config coverage now run the real -vendored `axis/geometry/xyzc.ngc` and -`axis/external_offsets/dyn_demo.ngc` programs with their executable -`M110`/`M111` files, `axis/foam/foam.ngc` with its `U/V` machine -configuration, and bridge-mill `5axisgui.ngc` with its `W` machine -coordinates. The same upstream baseline also +vendored `axis/geometry/xyzc.ngc` and the +`axis/external_offsets/dyn_demo.ngc`, `eoffsets.ngc`, `jwp_z.ngc`, and +`opa_demo.ngc` programs with their executable `M110`/`M111` files, +`opa_demo.ngc`'s `SUBROUTINE_PATH` dependency on `circles.ngc`, +`axis/foam/foam.ngc` with its `U/V` machine configuration and shared +`axis/sim.tbl` tool table staged beside the INI, and +bridge-mill `5axisgui.ngc` with its `W` machine coordinates. The same upstream baseline also validates the current negative fixture error text and absent canonical-event constraints. Fixtures that depend on standalone-only runtime adapters, HAL state, upstream `rs274` output gaps such as diff --git a/wasm-port/docs/drift-report.md b/wasm-port/docs/drift-report.md index 00fb971..a3f52bf 100644 --- a/wasm-port/docs/drift-report.md +++ b/wasm-port/docs/drift-report.md @@ -45,7 +45,7 @@ semantic rewrites: | Go math C/C++ linkage | `genserkins` runtime probing compiles vendored `gomath.c` through a narrow C++ wrapper so LinuxCNC `genserfuncs.c` can link to the upstream Go math symbols without editing vendored source. | | Switchkins iterative forward | `genhexkins` runtime probing follows LinuxCNC switchkins iterative-forward behavior, including the first-call warmup path before asserting roundtrip convergence. | | Browser storage | OPFS remains outside the native core; `runtime/opfs/file-service.js` owns browser text-file persistence, `runtime/opfs/path-model.js` owns host-side storage paths for INI, tool table, parameter, G-code, preview-cache, and session-snapshot content, `runtime/opfs/snapshot-store.js` owns generic JSON session snapshot persistence, `runtime/opfs/machine-file-store.js` owns pure-text machine-file and G-code persistence, `runtime/opfs/linuxcnc-parameter-bridge.js` only copies parameter files between OPFS text storage and the LinuxCNC-backed WASM parameter-file ABI, `runtime/opfs/linuxcnc-tool-table-bridge.js` only copies tool tables between OPFS text storage and the LinuxCNC-backed WASM tool-table ABI, and `runtime/opfs/linuxcnc-machine-session-bridge.js` groups INI, parameter, and tool-table loading while using the LinuxCNC-backed INI SDK for `[EMCIO]RANDOM_TOOLCHANGER`, `[RS274NGC]PARAMETER_FILE`, and `[EMCIO]TOOL_TABLE` when available; explicit host session file-name options take precedence over INI-derived file names, missing INI file-name values fall back to host default parameter/tool-table paths, and path validation remains owned by the OPFS path model, including rejection of traversal or nested path segments from INI-derived file names. | -| Sim-config SDK staging | `runtime/sdk/src/linuxcnc-interp.js` exposes `runSimConfigProgram()` as a host-boundary convenience only. It writes caller-provided text files into the Emscripten filesystem, applies executable bits for user M-code files, and forwards to existing LinuxCNC-backed C ABI entry points such as `runFileWithIni()` or `runFiveAxisRemapFile()`; it does not implement interpreter, axis, remap, or user M-code semantics. | +| Sim-config SDK staging | `runtime/sdk/src/sim-config-staging.js` exposes `planSimConfigStaging()` as a host-boundary file planner for representative vendored `configs/sim` programs. It reads INI text plus `tools/source-manifest.txt` to collect `[DISPLAY]OPEN_FILE`, `[EMCIO]TOOL_TABLE`, `[RS274NGC]PARAMETER_FILE`, `[RS274NGC]SUBROUTINE_PATH`, `[RS274NGC]USER_M_PATH`, and remap-NGC files for staging. `runtime/sdk/src/linuxcnc-interp.js` exposes `runSimConfigProgram()` as the execution convenience only: it writes planned text files into the Emscripten filesystem, applies executable bits for user M-code files, and forwards to existing LinuxCNC-backed C ABI entry points such as `runFileWithIni()` or `runFiveAxisRemapFile()`; neither helper implements interpreter, axis, remap, tool, parameter, or user M-code semantics. | ## Enforced Non-Drift Rules diff --git a/wasm-port/docs/linuxcnc-test-porting-tracker.md b/wasm-port/docs/linuxcnc-test-porting-tracker.md index 2e63812..527b469 100644 --- a/wasm-port/docs/linuxcnc-test-porting-tracker.md +++ b/wasm-port/docs/linuxcnc-test-porting-tracker.md @@ -48,19 +48,20 @@ wasm-port/tests/host/verify_host_smokes.sh | Reject standalone CNC semantics | Done | `tools/verify_no_standalone_cnc_semantics.sh` guards project-owned `Interp::...` definitions outside documented runtime-edge stubs. | | Maintain source reuse map | Done | Current sim-config, remap, interpreter, kinematics, TP, user-M, tool, named-parameter, and OPFS runtime boundaries are recorded in `docs/source-reuse-map.md`; keep updating it whenever LinuxCNC source, test assets, or runtime boundaries are added. | | Maintain compatibility validation notes | Done | Current native, Node WASM, browser, OPFS, and host aggregate checks are recorded in `docs/compatibility-validation.md`; keep updating it whenever a validation command or fixture class is added. | +| Document validation layers | Done | `docs/compatibility-validation.md` now records Layer 1 `nc_files` basic smoke, Layer 2 `configs/sim` native strict harness, Layer 3 standalone native runtime probes, and Layer 4 WASM Node/browser representative smokes with entry commands, current results, expected boundaries, and the no-LinuxCNC-semantics rule. | | Build LinuxCNC test inventory | In progress | `linuxcnc/tests/remap` has been inventoried by dependency class; the first broader `linuxcnc/tests` pass now records full-process, HAL/realtime, linuxcncrsh, Python-binding, and external-component families in the blocked table. | | Prefer pure interpreter tests first | In progress | Continue with tests that can run through `Interp::open()`, `read()`, and `execute()` without realtime hardware or GUI. | | Add upstream-output comparison | In progress | Use upstream `../linuxcnc/bin/rs274` or original `test.sh` output where practical, then compare against native/WASM/browser output. | | Promote tests through three layers | In progress | Add each selected test first to native harnesses, then WASM Node, then browser smoke where meaningful. | | Record blocked tests | In progress | First broader family-level blocked batch is recorded below; continue expanding it as each `linuxcnc/tests` family is inspected. | | Add aggregate smoke coverage | Done | `tests/host/verify_host_smokes.sh` now runs stable Node WASM, sim-config WASM, `nc_files` WASM, OPFS, and browser smoke checks with shared builds. Current run passed with `host_wasm_opfs_browser_smokes=ok`. | -| Add `linuxcnc/nc_files` basic examples | Done | `tests/native/verify_nc_files.sh` now runs the basic/example subset of upstream `linuxcnc/nc_files` through LinuxCNC `bin/rs274`; current native baseline is 107 total, 101 pass, 6 expected context/entry-point edges, 0 unexpected failures. Exploratory `--all` inventory is 247 total, 219 pass, 28 expected context/entry-point edges, 0 unexpected failures. A representative vendored subset now passes Node WASM and browser execution through LinuxCNC-backed `Interp::open()`/`read()`/`execute()`. | +| Add `linuxcnc/nc_files` basic examples | Done | `tests/native/verify_nc_files.sh` now runs the basic/example subset of upstream `linuxcnc/nc_files` through LinuxCNC `bin/rs274`; current native baseline is 107 total, 101 pass, 6 expected context/entry-point edges, 0 unexpected failures. Exploratory `--all` inventory is 247 total, 219 pass, 28 expected context/entry-point edges, 0 unexpected failures. A representative vendored subset now passes Node WASM and browser execution through LinuxCNC-backed `Interp::open()`/`read()`/`execute()`, with `3D_Chips.ngc` using an INI-declared tool-table context for its upstream `T1 M6` line. | ## LinuxCNC Test Asset Queue | LinuxCNC test path | Status | Current target | Notes | | --- | --- | --- | --- | -| `nc_files` basic/example programs | Done | Native, WASM Node, browser | Native coverage is tracked by `wasm-port/tests/native/verify_nc_files.sh`; complete programs execute strictly, macro/library files are wrapped with temporary `M2` for load/parse validation, and six known LinuxCNC-native context edges are classified explicitly. `--all` also inventories probe/plasmac/NURBS files and currently classifies all 28 non-passing files as expected runtime-context or entry-point edges. The representative vendored WASM/browser subset covers `arcspiral.ngc`, `hole-circle.ngc`, `factorial.ngc`, and `m6demo.ngc` through LinuxCNC-backed file execution only. | +| `nc_files` basic/example programs | Done | Native, WASM Node, browser | Native coverage is tracked by `wasm-port/tests/native/verify_nc_files.sh`; complete programs execute strictly, macro/library files are wrapped with temporary `M2` for load/parse validation, and six known LinuxCNC-native context edges are classified explicitly. `--all` also inventories probe/plasmac/NURBS files and currently classifies all 28 non-passing files as expected runtime-context or entry-point edges. The representative vendored WASM/browser subset covers `3D_Chips.ngc`, `arcspiral.ngc`, `hole-circle.ngc`, `factorial.ngc`, and `m6demo.ngc` through LinuxCNC-backed file execution, with `3D_Chips.ngc` staged through `runFileWithIni()` and an INI-declared `tool.tbl` instead of being judged without its required tool context. | | `tests/remap/duplicate-o-word` | Done | Native, WASM Node, browser | Vendored under `wasm-port/vendor/linuxcnc/tests/remap/duplicate-o-word`; validates duplicate O-word behavior through vendored LinuxCNC remap/O-word/file execution paths. | | `tests/remap/fail/args.0` | Done | Native, WASM Node, browser | Vendored under `wasm-port/vendor/linuxcnc/tests/remap/fail/args.0`; validates required `P`/`Q` remap arguments when both are present through vendored LinuxCNC remap argument handling. | | `tests/remap/fail/args.1` | Done | Native, WASM Node, browser | Vendored under `wasm-port/vendor/linuxcnc/tests/remap/fail/args.1`; validates LinuxCNC missing-`Q` remap error text and upstream-style continue-after-error flow. | @@ -92,7 +93,7 @@ wasm-port/tests/host/verify_host_smokes.sh | `tests/interp/abort-hot-comment` | Done | Native, WASM Node, browser | Vendored under `wasm-port/vendor/linuxcnc/tests/interp/abort-hot-comment`; validates LinuxCNC `(ABORT,...)` hot-comment parameter expansion for numbered, named, and INI named parameters through vendored file execution paths and `INI_FILE_NAME`. | | `configs/sim/axis/foam/foam.ngc` | Done | Native, WASM Node, browser | Vendored under `wasm-port/vendor/linuxcnc/configs/sim/axis/foam`; validates LinuxCNC INI-driven `U/V` axis mask handling through `axis_foam.ini` and vendored file execution paths. | | `configs/sim/axis/geometry/xyzc.ngc` | Done | Native, WASM Node, browser | Vendored under `wasm-port/vendor/linuxcnc/configs/sim/axis/geometry`; validates LinuxCNC `USER_M_PATH` registration with the real executable `M110` while process execution remains a deterministic standalone `USER_M_COMMAND` boundary. | -| `configs/sim/axis/external_offsets/dyn_demo.ngc` | Done | Native, WASM Node, browser | Vendored under `wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets`; validates LinuxCNC `USER_M_PATH` registration with the real executable `M111` against an upstream sim program while process execution remains a deterministic standalone boundary. | +| `configs/sim/axis/external_offsets/*.ngc` M111 demos | Done | Native, WASM Node, browser | Vendored under `wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets`; validates `dyn_demo.ngc`, `eoffsets.ngc`, `jwp_z.ngc`, and `opa_demo.ngc` with their corresponding INI files, real executable `M111`, shared `eoffset.tbl`, and `opa_demo.ngc`'s `circles.ngc` subroutine while process execution remains a deterministic standalone boundary. | | More `tests/remap/*` interpreter-only cases | Planned | Native first | Select cases that do not require Python behavior beyond documented runtime-edge stubs unless the required LinuxCNC source path is ported. | | More `tests/interp/*` interpreter-only cases | Planned | Native first | Select upstream interpreter cases that can run through vendored file execution without Python, HAL, realtime motion, or GUI. | | `tests/rs274ngc/*` candidates | Planned | Native first | Use upstream `rs274` as the baseline where output is comparable. | diff --git a/wasm-port/docs/sim-configs-completion-plan.md b/wasm-port/docs/sim-configs-completion-plan.md index 69b022c..6e9c4d5 100644 --- a/wasm-port/docs/sim-configs-completion-plan.md +++ b/wasm-port/docs/sim-configs-completion-plan.md @@ -36,6 +36,9 @@ remap_subroutine: PASS 65, FAIL 0 Remaining failures are explicit LinuxCNC-native baseline edges: - `axis/external_offsets/*`: 4 failures from sim-only user M-codes `M111`. + The native harness now resolves the corresponding INI by + `[DISPLAY]OPEN_FILE`, so `eoffsets.ngc`, `jwp_z.ngc`, and `opa_demo.ngc` + are no longer judged through `dynamic_offsets.ini`. - `axis/geometry/xyzc.ngc`: 1 failure from sim-only user M-code `M110`. - `axis/foam/foam.ngc`: 1 failure from missing `U/V` axis support in the LinuxCNC `bin/rs274` entry point. @@ -392,9 +395,11 @@ ABI paths. They cover: WASM. - `axis/geometry/xyzc.ngc` with `xyzc.ini` and real executable `M110`, verifying `USER_M_PATH` registration in WASM. -- `axis/external_offsets/dyn_demo.ngc` with `dynamic_offsets.ini` and real - executable `M111`, verifying the same user-M boundary against an upstream sim - program. +- `axis/external_offsets/dyn_demo.ngc`, `eoffsets.ngc`, `jwp_z.ngc`, and + `opa_demo.ngc` with their corresponding INI files, real executable `M111`, + shared `eoffset.tbl`, and `opa_demo.ngc`'s `circles.ngc` subroutine, + verifying the same user-M and `SUBROUTINE_PATH` boundaries against upstream + sim programs. Completion checks: @@ -457,7 +462,8 @@ programs. 3. Update `tools/source-manifest.txt` and `tools/verify_vendor_sync.sh` if new LinuxCNC files are copied into `wasm-port/vendor/linuxcnc`. Done for the representative `axis/foam`, `axis/geometry`, and `axis/external_offsets` - sim-config files; no `verify_vendor_sync.sh` logic change was needed. + sim-config files, including the remaining external-offset M111 programs and + `circles.ngc`; no `verify_vendor_sync.sh` logic change was needed. 4. Preserve the latest result summary as a machine-readable artifact, but do not commit generated logs unless they are intentionally used as fixtures. diff --git a/wasm-port/docs/source-reuse-map.md b/wasm-port/docs/source-reuse-map.md index 7d4f4f6..cc255ad 100644 --- a/wasm-port/docs/source-reuse-map.md +++ b/wasm-port/docs/source-reuse-map.md @@ -41,8 +41,8 @@ Current validation is intentionally mechanical: | Switchable 5-axis bridge kinematics | `src/emc/kinematics/5axiskins.c`, `switchkins.c`, `switchkins.h`, `userkfuncs.c`, plus `src/rtapi/rtapi_ctype.h` | Copy unchanged | HAL pin allocation, HAL component lifecycle, and RTAPI module metadata are standalone runtime edges; switchable 5-axis forward/inverse behavior remains LinuxCNC source | Vendor byte sync, per-file source probes, `linuxcnc_5axis_kinematics_probe` | | TRT table-rotary kinematics | `src/emc/kinematics/trtfuncs.c`, `xyzac-trt-kins.c`, `xyzbc-trt-kins.c` | Copy unchanged | HAL pin allocation and switchkins lifecycle stay runtime boundaries; XYZAC/XYZBC TRT forward/inverse behavior remains LinuxCNC source | Vendor byte sync, per-file source probes, `linuxcnc_xyzac_trt_kinematics_probe`, `linuxcnc_xyzbc_trt_kinematics_probe` | | Five-axis switchkins machine configs and M428/M429/M430 remaps | `configs/sim/axis/vismach/5axis/bridgemill/*`, `table-dual-rotary/*`, and `table-rotary-tilting/*` selected INI, HAL, tool-table, XML, demo, and `remap_subs/*.ngc` files plus `src/emc/rs274ngc/interp_remap.cc` | Copy unchanged | `M428`, `M429`, and `M430` remain LinuxCNC `REMAP` entries that call LinuxCNC NGC subroutines using `M68`, `M66`, `_hal[motion.switchkins-type]`, and the INI/HAL `motion.analog-out-03 => motion.switchkins-type` link; standalone remap descriptor parsing routes through vendored `Interp::parse_remap()` and `find_ngc_file()`, and NGC remap/file execution routes through vendored LinuxCNC O-word and `open()`/`read()`/`execute()` paths while HAL synchronization stays a runtime adapter boundary | Vendor byte sync, `linuxcnc_5axis_remap_asset_probe`, `linuxcnc_remap_parse_harness`, `linuxcnc_remap_hal_sync_harness`, `linuxcnc_5axis_remap_execute_harness`, `tests/wasm/node/verify_interp_wasm.sh`, `tests/wasm/node/verify_sim_configs_wasm.sh`, `tests/browser/verify_interp_browser.sh`, `tests/browser/verify_ini_panel_browser.sh` | -| Representative sim-config machine programs | `configs/sim/axis/foam/*`, `configs/sim/axis/geometry/M110`, `xyzc.ini`, `xyzc.ngc`, `configs/sim/axis/external_offsets/M111`, `dyn_demo.ngc`, `dynamic_offsets.ini`, `eoffset.tbl`, and `configs/sim/axis/sim.tbl` | Copy unchanged | The `foam`, `xyzc`, and dynamic external-offset sample programs remain LinuxCNC sim-config assets. The standalone boundary only copies INI, tool table, G-code, and executable user-M files into the native or WASM filesystem, then calls vendored LinuxCNC INI parsing and `Interp::open()`/`read()`/`execute()` through the existing machine-config adapter. The JS SDK `runSimConfigProgram()` is only the host file-staging helper for this boundary: it writes caller-provided text files to the Emscripten filesystem, applies executable bits, and forwards to LinuxCNC-backed C ABI entry points. `M110`/`M111` process execution stays a runtime boundary represented by deterministic `USER_M_COMMAND` canonical events | Vendor byte sync, `tests/native/verify_sim_configs.sh`, `tests/wasm/node/verify_sim_configs_wasm.sh`, `tests/browser/verify_interp_browser.sh` | -| Representative `nc_files` examples | `nc_files/arcspiral.ngc`, `nc_files/factorial.ngc`, `nc_files/hole-circle.ngc`, `nc_files/m6demo.ngc` | Copy unchanged | These upstream `linuxcnc/nc_files` examples are copied byte-for-byte into the WASM vendor tree after the native `nc_files` harness classifies the broader directory. Node and browser tests only stage the original `.ngc` text in the Emscripten filesystem and call the LinuxCNC-backed `Interp::open()`, `read()`, and `execute()` path through the existing SDK; no G-code, O-word, tool-change, or M-code behavior is implemented in JavaScript | Vendor byte sync, `tests/native/verify_nc_files.sh`, `tests/wasm/node/verify_nc_files_wasm.sh`, `tests/browser/verify_interp_browser.sh`, `tests/host/verify_host_smokes.sh` | +| Representative sim-config machine programs | `configs/sim/axis/foam/*`, `configs/sim/axis/geometry/M110`, `xyzc.ini`, `xyzc.ngc`, `configs/sim/axis/external_offsets/M111`, `dyn_demo.ngc`, `dynamic_offsets.ini`, `eoffsets.ngc`, `eoffsets.ini`, `jwp_z.ngc`, `jwp_z.ini`, `opa_demo.ngc`, `opa.ini`, `circles.ngc`, `eoffset.tbl`, and `configs/sim/axis/sim.tbl` | Copy unchanged | The `foam`, `xyzc`, and external-offset sample programs remain LinuxCNC sim-config assets. The standalone boundary only copies INI, tool table, G-code, executable user-M files, and `SUBROUTINE_PATH` files into the native or WASM filesystem, then calls vendored LinuxCNC INI parsing and `Interp::open()`/`read()`/`execute()` through the existing machine-config adapter. The native sim-config harness now prefers `[DISPLAY]OPEN_FILE` when several INI files live beside a program, so each program is judged with its corresponding machine context. The JS SDK `runSimConfigProgram()` is only the host file-staging helper for this boundary: it writes caller-provided text files to the Emscripten filesystem, applies executable bits, and forwards to LinuxCNC-backed C ABI entry points. `M110`/`M111` process execution stays a runtime boundary represented by deterministic `USER_M_COMMAND` canonical events | Vendor byte sync, `tests/native/verify_sim_configs.sh`, `tests/wasm/node/verify_sim_configs_wasm.sh`, `tests/browser/verify_interp_browser.sh` | +| Representative `nc_files` examples | `nc_files/3D_Chips.ngc`, `nc_files/arcspiral.ngc`, `nc_files/factorial.ngc`, `nc_files/hole-circle.ngc`, `nc_files/m6demo.ngc` | Copy unchanged | These upstream `linuxcnc/nc_files` examples are copied byte-for-byte into the WASM vendor tree after the native `nc_files` harness classifies the broader directory. Node and browser tests only stage the original `.ngc` text and, for `3D_Chips.ngc`, the minimal INI-declared tool table context required by its upstream `T1 M6` line in the Emscripten filesystem, then call the LinuxCNC-backed `Interp::open()`, `read()`, and `execute()` path through the existing SDK; no G-code, O-word, tool-change, or M-code behavior is implemented in JavaScript | Vendor byte sync, `tests/native/verify_nc_files.sh`, `tests/wasm/node/verify_nc_files_wasm.sh`, `tests/browser/verify_interp_browser.sh`, `tests/host/verify_host_smokes.sh` | | LinuxCNC remap regression fixtures | `tests/remap/duplicate-o-word/*`, `tests/remap/fail/args.0/*`, `tests/remap/fail/args.1/*`, `tests/remap/fail/args.2/*`, `tests/remap/fail/body-ngc/*`, `tests/remap/m30-interaction/*`, `tests/remap/nested-remaps-oword/*`, `tests/remap/posargs.0/*`, `tests/remap/sequencing/*`, selected NGC-only `tests/remap/remap-io/test-ngc.ini` plus `io_*.ngc`, and `src/emc/rs274ngc/interp_remap.cc` plus `interp_o_word.cc` | Copy unchanged | The upstream duplicate O-word, NGC-only remap failure, M30/remap-level interaction, nested O-word remap, positional-argument remap, G/M remap sequencing, and remap-IO NGC subroutine regressions remain LinuxCNC REMAP/O-word/file or MDI execution tests. The standalone boundary only copies the upstream test files into native or WASM filesystems, reads LinuxCNC INI `SUBROUTINE_PATH`, `REMAP`, and `OWORD_NARGS` entries, and calls vendored `Interp::parse_remap()`, `open()`, `read()`, and `execute()` or feeds the upstream remap-IO MDI sequence into vendored `Interp::execute()`; the continue-on-error runner path only mirrors LinuxCNC `rs274 -n 0` test execution and does not implement duplicate-label, O-word, nested remap, M30, positional-argument, failure, sequencing, M62-M68, M66 input, or remap semantics | Vendor byte sync, `linuxcnc_duplicate_oword_remap_harness`, `tests/wasm/node/verify_interp_wasm.sh`, `tests/browser/verify_interp_browser.sh` | | LinuxCNC interpreter regression fixtures | `tests/interp/do-while-break/*`, `tests/interp/oword-bug315/*`, `tests/interp/oword-bug315-p2/*`, `tests/interp/exists/*`, `tests/interp/return-value/*`, `tests/interp/subs-follow-main/*`, `tests/interp/fractional-linenumbers/*`, `tests/interp/namedparam-bug424/*`, selected `tests/interp/rotation/*` pure interpreter cases, `tests/interp/iniparam/*`, `tests/interp/iniparam-failassign/*`, `tests/interp/m19/*`, `tests/interp/magic_comments/param_format_printing/*`, selected `tests/interp/m98m99/*` pure interpreter cases, `tests/interp/sub-call-from-sub/*`, `tests/interp/sequence-number/*`, `tests/interp/nested-sub-error/*`, `tests/interp/nested-sub-in-file-error/*`, `tests/interp/abort-hot-comment/*`, plus vendored interpreter/O-word sources including `interp_o_word.cc`, `interp_read.cc`, `interp_execute.cc`, `interp_find.cc`, `interp_namedparams.cc`, and `rs274ngc_pre.cc` | Copy unchanged | The upstream do/while/break, O-word bug315, `EXISTS[]`, subroutine return-value, subs-after-main, fractional line-number, named-parameter, selected rotation/G53/G28 absolute-position and endpoint, INI named-parameter lookup/read-only protection, M19 spindle-orient offset/timeout handling, magic-comment parameter formatting, selected Fanuc `M98/M99` and O-expression call regressions, external-subroutine-call, external-subroutine line-number, nested-subroutine-definition rejection, blocked forward-seek-to-later-numbered-sub, and `(ABORT,...)` hot-comment parameter-expansion regressions remain LinuxCNC interpreter file-execution tests. The standalone boundary only vendors the original upstream assets, copies `*.ngc`, `test.ini`, `test.tbl`, `subs/*.ngc`, and referenced external subroutine `.ngc` files into native or WASM filesystems where applicable, sets the LinuxCNC `INI_FILE_NAME` runtime edge for `_ini[...]`, applies LinuxCNC INI machine settings such as `[RS274NGC]ORIENT_OFFSET`, reads LinuxCNC INI `SUBROUTINE_PATH`, captures LinuxCNC `(PRINT,...)` output through the existing stdout/Emscripten `print` boundary, and calls vendored `Interp::open()`, `read()`, and `execute()`; it does not implement O-word loop, break, subroutine, dynamic call, `M98/M99`, `EXISTS[]`, named-parameter, absolute-position named-parameter, G28/G53 endpoint, INI-variable, read-only parameter, line-number, spindle-speed, spindle-orient, magic-comment formatting, subroutine lookup, ABORT hot-comment, error, or branch semantics | Vendor byte sync, `linuxcnc_interp_minimal_harness`, `tests/wasm/node/verify_interp_wasm.sh`, `tests/browser/verify_interp_browser.sh` | | Additional non-switchable kinematics | `src/emc/kinematics/corexykins.c`, `rotatekins.c`, `rosekins.c`, `maxkins.c`, `lineardeltakins.c`, `lineardeltakins-common.h`, `rotarydeltakins.c`, `rotarydeltakins-common.h`, `scorbot-kins.c`, `tripodkins.c`, `scarakins.c`, `pumakins.c`, `pumakins.h`, `genhexkins.c`, `genhexkins.h`, `genserfuncs.c`, `genserkins.c`, `genserkins.h`, `ugenserkins.c`, `pentakins.c`, `pentakins.h`, `cubic.c` | Copy unchanged | HAL pin allocation, HAL parameter allocation, HAL component lifecycle, RTAPI module metadata, Go math C/C++ linkage, switchkins iterative-forward warmup, and userspace test-program process entry remain standalone runtime edges; forward/inverse behavior remains LinuxCNC source where the module exposes it | Vendor byte sync, per-file source probes, `linuxcnc_corexy_kinematics_probe`, `linuxcnc_rotate_kinematics_probe`, `linuxcnc_rose_kinematics_probe`, `linuxcnc_max_kinematics_probe`, `linuxcnc_lineardelta_kinematics_probe`, `linuxcnc_rotarydelta_kinematics_probe`, `linuxcnc_scorbot_kinematics_probe`, `linuxcnc_tripod_kinematics_probe`, `linuxcnc_scara_kinematics_probe`, `linuxcnc_puma_kinematics_probe`, `linuxcnc_genser_kinematics_probe`, `linuxcnc_genhex_kinematics_probe`, `linuxcnc_pentakins_kinematics_probe` | diff --git a/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_minimal_harness.cpp b/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_minimal_harness.cpp index bc1fcea..34156f5 100644 --- a/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_minimal_harness.cpp +++ b/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_minimal_harness.cpp @@ -158,6 +158,61 @@ std::vector load_program(int argc, char **argv) return lines; } +bool is_uri_unreserved(char value) +{ + return (value >= 'A' && value <= 'Z') || + (value >= 'a' && value <= 'z') || + (value >= '0' && value <= '9') || + value == '-' || value == '_' || value == '.' || value == '~'; +} + +void append_percent_encoded_text(std::ostream &output, const char *text) +{ + constexpr char hex[] = "0123456789ABCDEF"; + for (const char *cursor = text ? text : ""; *cursor; ++cursor) { + char value = *cursor; + switch (*cursor) { + case '\r': + case '\n': + case '\t': + value = ' '; + break; + default: + break; + } + if (is_uri_unreserved(value)) { + output << value; + } else { + const auto byte = static_cast(value); + output << '%' << hex[(byte >> 4) & 0x0f] << hex[byte & 0x0f]; + } + } +} + +void append_run_step(std::ostream &output, + const Interp &interp, + const char *phase, + int step, + int rc) +{ + output << "run_step phase=" << phase + << " step=" << step + << " rc=" << rc + << " line=" << interp._setup.sequence_number + << " x=" << interp._setup.current_x + << " y=" << interp._setup.current_y + << " z=" << interp._setup.current_z + << " a=" << interp._setup.AA_current + << " b=" << interp._setup.BB_current + << " c=" << interp._setup.CC_current + << " u=" << interp._setup.u_current + << " v=" << interp._setup.v_current + << " w=" << interp._setup.w_current + << " statement_uri="; + append_percent_encoded_text(output, interp._setup.linetext); + output << "\n"; +} + } // namespace int main(int argc, char **argv) @@ -228,6 +283,7 @@ int main(int argc, char **argv) } ++file_read_count; std::cout << "file_read_" << file_read_count << "=" << file_read_rc << "\n"; + append_run_step(std::cout, file_interp, "read", file_read_count, file_read_rc); if ((file_read_rc != INTERP_OK) && (file_read_rc != INTERP_EXECUTE_FINISH)) { if (file_read_rc > INTERP_MIN_ERROR) { char error_buf[LINELEN] = {0}; @@ -244,6 +300,7 @@ int main(int argc, char **argv) const int file_execute_rc = file_interp.execute(); ++file_execute_count; std::cout << "file_execute_" << file_execute_count << "=" << file_execute_rc << "\n"; + append_run_step(std::cout, file_interp, "execute", file_execute_count, file_execute_rc); if (file_execute_rc > INTERP_MIN_ERROR) { char error_buf[LINELEN] = {0}; file_interp.error_text(file_execute_rc, error_buf, sizeof(error_buf)); diff --git a/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_wasm.cpp b/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_wasm.cpp index 06a8da9..8edda60 100644 --- a/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_wasm.cpp +++ b/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_wasm.cpp @@ -264,6 +264,61 @@ void append_tool_table_state(std::ostringstream &output) output << "tool_index_for_tool_2=" << standalone::find_tool_index_for_tool(2) << "\n"; } +bool is_uri_unreserved(char value) +{ + return (value >= 'A' && value <= 'Z') || + (value >= 'a' && value <= 'z') || + (value >= '0' && value <= '9') || + value == '-' || value == '_' || value == '.' || value == '~'; +} + +void append_percent_encoded_text(std::ostringstream &output, const char *text) +{ + constexpr char hex[] = "0123456789ABCDEF"; + for (const char *cursor = text ? text : ""; *cursor; ++cursor) { + char value = *cursor; + switch (*cursor) { + case '\r': + case '\n': + case '\t': + value = ' '; + break; + default: + break; + } + if (is_uri_unreserved(value)) { + output << value; + } else { + const auto byte = static_cast(value); + output << '%' << hex[(byte >> 4) & 0x0f] << hex[byte & 0x0f]; + } + } +} + +void append_run_step(std::ostringstream &output, + const Interp &interp, + const char *phase, + int step, + int rc) +{ + output << "run_step phase=" << phase + << " step=" << step + << " rc=" << rc + << " line=" << interp._setup.sequence_number + << " x=" << interp._setup.current_x + << " y=" << interp._setup.current_y + << " z=" << interp._setup.current_z + << " a=" << interp._setup.AA_current + << " b=" << interp._setup.BB_current + << " c=" << interp._setup.CC_current + << " u=" << interp._setup.u_current + << " v=" << interp._setup.v_current + << " w=" << interp._setup.w_current + << " statement_uri="; + append_percent_encoded_text(output, interp._setup.linetext); + output << "\n"; +} + void append_error_text(std::ostringstream &output, Interp &interp, const char *prefix, int rc) { if (rc > INTERP_MIN_ERROR) { @@ -539,6 +594,7 @@ char *run_file_with_ini_internal(const char *path, const char *ini_path, bool co ++file_read_count; output << "file_read_" << file_read_count << "=" << read_rc << "\n"; + append_run_step(output, interp, "read", file_read_count, read_rc); if ((read_rc != INTERP_OK) && (read_rc != INTERP_EXECUTE_FINISH)) { if (read_rc > INTERP_MIN_ERROR) { char error_buf[LINELEN] = {0}; @@ -555,6 +611,7 @@ char *run_file_with_ini_internal(const char *path, const char *ini_path, bool co const int execute_rc = interp.execute(); ++file_execute_count; output << "file_execute_" << file_execute_count << "=" << execute_rc << "\n"; + append_run_step(output, interp, "execute", file_execute_count, execute_rc); if (execute_rc > INTERP_MIN_ERROR) { char error_buf[LINELEN] = {0}; interp.error_text(execute_rc, error_buf, sizeof(error_buf)); diff --git a/wasm-port/runtime/sdk/README.md b/wasm-port/runtime/sdk/README.md index fbac913..d53bdde 100644 --- a/wasm-port/runtime/sdk/README.md +++ b/wasm-port/runtime/sdk/README.md @@ -25,6 +25,7 @@ Use `src/index.js` for stable imports: import { createLinuxCncIniSdk, createLinuxCncInterpSdk, + planSimConfigStaging, } from "./src/index.js"; ``` @@ -85,6 +86,15 @@ into the Emscripten filesystem, applies executable bits for user M-code files, then forwards to `runFileWithIni()` by default or to `runFiveAxisRemapFile()` when `executionMode: "fiveAxisRemap"` is explicitly requested. +`planSimConfigStaging()` is the companion file-staging planner for +representative LinuxCNC `configs/sim` programs. Callers provide the vendored +source manifest text, machine relative path, INI file name, and INI text. The +planner reads only INI file references and the manifest, then returns the INI, +`[DISPLAY]OPEN_FILE`, `[EMCIO]TOOL_TABLE`, `[RS274NGC]PARAMETER_FILE`, +`[RS274NGC]SUBROUTINE_PATH`, `[RS274NGC]USER_M_PATH`, and remap-NGC files that +should be copied into the Emscripten filesystem. It does not implement G-code, +tool, parameter, remap, or user-M semantics. + `runFileWithIniContinueOnError()` uses the same LinuxCNC-backed file execution path but keeps the runner loop going after LinuxCNC reports an error, matching upstream `rs274 -n 0` regression tests such as `tests/interp/oword-unwind`. diff --git a/wasm-port/runtime/sdk/src/index.js b/wasm-port/runtime/sdk/src/index.js index 1959a46..9299499 100644 --- a/wasm-port/runtime/sdk/src/index.js +++ b/wasm-port/runtime/sdk/src/index.js @@ -1,2 +1,3 @@ export { createLinuxCncIniSdk } from "./linuxcnc-ini.js"; export { createLinuxCncInterpSdk } from "./linuxcnc-interp.js"; +export { planSimConfigStaging } from "./sim-config-staging.js"; diff --git a/wasm-port/runtime/sdk/src/sim-config-staging.js b/wasm-port/runtime/sdk/src/sim-config-staging.js new file mode 100644 index 0000000..784c3f2 --- /dev/null +++ b/wasm-port/runtime/sdk/src/sim-config-staging.js @@ -0,0 +1,252 @@ +function cleanManifest(manifestText) { + return manifestText + .split("\n") + .map((line) => line.trim()) + .filter((line) => line && !line.startsWith("#")); +} + +function normalizeRel(path) { + const parts = []; + for (const part of path.split("/")) { + if (!part || part === ".") { + continue; + } + if (part === "..") { + parts.pop(); + continue; + } + parts.push(part); + } + return parts.join("/"); +} + +function dirname(path) { + const clean = normalizeRel(path); + const index = clean.lastIndexOf("/"); + return index === -1 ? "" : clean.slice(0, index); +} + +function basename(path) { + const clean = normalizeRel(path); + const index = clean.lastIndexOf("/"); + return index === -1 ? clean : clean.slice(index + 1); +} + +function stripIniComment(line) { + const hash = line.indexOf("#"); + const semicolon = line.indexOf(";"); + const indexes = [hash, semicolon].filter((index) => index >= 0); + if (indexes.length === 0) { + return line; + } + return line.slice(0, Math.min(...indexes)); +} + +function parseIni(iniText) { + const values = new Map(); + let section = ""; + for (const rawLine of iniText.split("\n")) { + const sectionMatch = rawLine.match(/^\s*\[([^\]]+)\]/); + if (sectionMatch) { + section = sectionMatch[1].trim().toUpperCase(); + continue; + } + + const line = stripIniComment(rawLine); + const equals = line.indexOf("="); + if (equals === -1 || !section) { + continue; + } + const key = line.slice(0, equals).trim().toUpperCase(); + const value = line.slice(equals + 1).trim(); + if (!key || !value) { + continue; + } + const mapKey = `${section}.${key}`; + const existing = values.get(mapKey) ?? []; + existing.push(value); + values.set(mapKey, existing); + } + return values; +} + +function firstIniValue(values, section, key) { + return values.get(`${section.toUpperCase()}.${key.toUpperCase()}`)?.[0] ?? null; +} + +function allIniValues(values, section, key) { + return values.get(`${section.toUpperCase()}.${key.toUpperCase()}`) ?? []; +} + +function splitSearchPath(value) { + return value.split(":").map((entry) => entry.trim()).filter(Boolean); +} + +function sourceRelFor(machineRel, path) { + return normalizeRel(`configs/sim/${machineRel}/${path}`); +} + +function targetPathFor(wasmDir, targetRel) { + return `${wasmDir}/${normalizeRel(targetRel)}`; +} + +function isUserMCodePath(path) { + return /^M1\d\d$/i.test(basename(path)); +} + +function isSubroutinePath(path) { + return path.toLowerCase().endsWith(".ngc"); +} + +function findUpwardByBasename(manifestSet, sourceDir, fileName) { + let current = sourceDir; + while (current.startsWith("configs/sim")) { + const candidate = normalizeRel(`${current}/${fileName}`); + if (manifestSet.has(candidate)) { + return candidate; + } + if (current === "configs/sim") { + break; + } + current = dirname(current); + } + return null; +} + +function sourceForReference(manifestSet, sourceDir, reference) { + if (!reference || reference.startsWith("/")) { + return null; + } + const sourceRel = normalizeRel(`${sourceDir}/${reference}`); + if (manifestSet.has(sourceRel)) { + return sourceRel; + } + return findUpwardByBasename(manifestSet, sourceDir, basename(reference)); +} + +function addPlannedFile(plan, manifestSet, sourceRel, targetRel, options = {}) { + if (!sourceRel || !manifestSet.has(sourceRel)) { + if (options.required) { + throw new Error(`missing vendored sim-config file: ${sourceRel}`); + } + return; + } + + const existing = plan.get(sourceRel); + const executable = options.executable || isUserMCodePath(sourceRel); + if (existing) { + existing.executable ||= executable; + return; + } + + plan.set(sourceRel, { + sourceRel, + path: targetPathFor(options.wasmDir, targetRel), + executable, + }); +} + +function addDirectoryFiles(plan, manifestEntries, sourceDir, targetDir, predicate, options) { + const prefix = sourceDir ? `${sourceDir}/` : ""; + for (const sourceRel of manifestEntries) { + if (!sourceRel.startsWith(prefix)) { + continue; + } + const childRel = sourceRel.slice(prefix.length); + if (childRel.includes("/") || !predicate(sourceRel)) { + continue; + } + addPlannedFile(plan, new Set(manifestEntries), sourceRel, normalizeRel(`${targetDir}/${childRel}`), options); + } +} + +function remapNgcNames(iniValues) { + const names = []; + for (const remap of allIniValues(iniValues, "RS274NGC", "REMAP")) { + const match = remap.match(/(?:^|\s)ngc=([^\s]+)/i); + if (match) { + names.push(`${match[1]}.ngc`); + } + } + return names; +} + +export function planSimConfigStaging({ + manifestText, + machineRel, + iniFile, + iniText, + programFile = null, + wasmDir = `/work/sim/${machineRel}`, +}) { + const manifestEntries = cleanManifest(manifestText); + const manifestSet = new Set(manifestEntries); + const iniValues = parseIni(iniText); + const plan = new Map(); + const sourceDir = sourceRelFor(machineRel, dirname(iniFile)); + const iniSourceRel = sourceRelFor(machineRel, iniFile); + const programReference = programFile ?? firstIniValue(iniValues, "DISPLAY", "OPEN_FILE"); + + addPlannedFile(plan, manifestSet, iniSourceRel, iniFile, { wasmDir, required: true }); + if (programReference) { + const programSourceRel = sourceForReference(manifestSet, sourceDir, programReference); + addPlannedFile(plan, manifestSet, programSourceRel, programReference, { + wasmDir, + required: true, + }); + } + + for (const [section, key] of [ + ["EMCIO", "TOOL_TABLE"], + ["RS274NGC", "PARAMETER_FILE"], + ]) { + const reference = firstIniValue(iniValues, section, key); + if (!reference) { + continue; + } + const sourceRel = sourceForReference(manifestSet, sourceDir, reference); + addPlannedFile(plan, manifestSet, sourceRel, reference, { wasmDir }); + } + + const subroutineDirs = splitSearchPath( + firstIniValue(iniValues, "RS274NGC", "SUBROUTINE_PATH") ?? "", + ); + for (const dirEntry of subroutineDirs) { + if (dirEntry.startsWith("/")) { + continue; + } + const sourceSubdir = normalizeRel(`${sourceDir}/${dirEntry}`); + const targetSubdir = normalizeRel(dirEntry); + addDirectoryFiles(plan, manifestEntries, sourceSubdir, targetSubdir, isSubroutinePath, { + wasmDir, + }); + } + + for (const dirEntry of splitSearchPath(firstIniValue(iniValues, "RS274NGC", "USER_M_PATH") ?? "")) { + if (dirEntry.startsWith("/")) { + continue; + } + const sourceUserMDir = normalizeRel(`${sourceDir}/${dirEntry}`); + const targetUserMDir = normalizeRel(dirEntry); + addDirectoryFiles(plan, manifestEntries, sourceUserMDir, targetUserMDir, isUserMCodePath, { + wasmDir, + executable: true, + }); + } + + for (const remapName of remapNgcNames(iniValues)) { + for (const dirEntry of subroutineDirs) { + const sourceRel = sourceForReference(manifestSet, normalizeRel(`${sourceDir}/${dirEntry}`), remapName); + addPlannedFile(plan, manifestSet, sourceRel, normalizeRel(`${dirEntry}/${remapName}`), { + wasmDir, + }); + } + } + + return { + wasmDir, + iniPath: targetPathFor(wasmDir, iniFile), + programPath: programReference ? targetPathFor(wasmDir, programReference) : null, + files: [...plan.values()], + }; +} diff --git a/wasm-port/runtime/ui/ini-panel/app.js b/wasm-port/runtime/ui/ini-panel/app.js index e86a57b..f263f64 100644 --- a/wasm-port/runtime/ui/ini-panel/app.js +++ b/wasm-port/runtime/ui/ini-panel/app.js @@ -179,6 +179,52 @@ function parseRunMotion(resultText, programText) { const axes = { x: 0, y: 0, z: 0, a: 0, b: 0, c: 0, u: 0, v: 0, w: 0 }; const snapshots = []; const sourceLines = programLineMap(programText); + const motionByLine = new Map(); + + for (const line of resultText.split("\n")) { + const motion = line.match(/^canon_event=(STRAIGHT_TRAVERSE|STRAIGHT_FEED|ARC_FEED)\b/); + if (!motion) { + continue; + } + const sourceLine = readCanonicalNumber(line, "line"); + if (Number.isFinite(sourceLine)) { + motionByLine.set(sourceLine, motion[1]); + } + } + + for (const line of resultText.split("\n")) { + if (!line.startsWith("run_step phase=execute ")) { + continue; + } + + for (const axis of Object.keys(axes)) { + const value = readCanonicalNumber(line, axis); + if (value !== null && Number.isFinite(value)) { + axes[axis] = value; + } + } + + const sourceLine = readCanonicalNumber(line, "line"); + const statementIndex = line.indexOf(" statement_uri="); + const statementValue = + statementIndex >= 0 ? line.slice(statementIndex + " statement_uri=".length).trim() : ""; + let statement = ""; + try { + statement = statementValue ? decodeURIComponent(statementValue) : ""; + } catch { + statement = statementValue; + } + snapshots.push({ + type: motionByLine.get(sourceLine) ?? "EXECUTE", + line: sourceLine, + statement: statement || (Number.isFinite(sourceLine) ? (sourceLines.get(sourceLine) ?? "-") : "-"), + axes: { ...axes }, + }); + } + + if (snapshots.length > 0) { + return snapshots; + } for (const line of resultText.split("\n")) { const motion = line.match(/^canon_event=(STRAIGHT_TRAVERSE|STRAIGHT_FEED|ARC_FEED)\b/); diff --git a/wasm-port/tests/browser/interp_smoke.html b/wasm-port/tests/browser/interp_smoke.html index a4abc1b..cf8dc85 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -10,6 +10,7 @@ import { createLinuxCncIniSdk, createLinuxCncInterpSdk, + planSimConfigStaging, } from "../../runtime/sdk/src/index.js"; import { saveMachineParametersToOpfs, @@ -101,21 +102,27 @@ } } - async function loadSimMachineFiles(machineRel, files, executableFiles = []) { - const sourceDir = `../../vendor/linuxcnc/configs/sim/${machineRel}`; - const wasmDir = `/work/browser-sim/${machineRel}`; - const executableSet = new Set(executableFiles); - const machineFiles = []; + async function loadSimMachineFiles(machineRel, iniFile, programFile = null) { + const iniText = await fetchText( + `../../vendor/linuxcnc/configs/sim/${machineRel}/${iniFile}`, + ); + const plan = planSimConfigStaging({ + manifestText: await fetchText("../../tools/source-manifest.txt"), + machineRel, + iniFile, + iniText, + programFile, + wasmDir: `/work/browser-sim/${machineRel}`, + }); - for (const filename of files) { - machineFiles.push({ - path: `${wasmDir}/${filename}`, - text: await fetchText(`${sourceDir}/${filename}`), - executable: executableSet.has(filename), - }); - } - - return { wasmDir, files: machineFiles }; + return { + ...plan, + files: await Promise.all(plan.files.map(async (file) => ({ + path: file.path, + text: await fetchText(`../../vendor/linuxcnc/${file.sourceRel}`), + executable: file.executable, + }))), + }; } async function writeFiveAxisTrtMachineFiles(interp) { @@ -275,6 +282,36 @@ return interp.runFile(wasmPath); } + async function runVendorNcFileWithToolTable(interp, filename) { + const wasmDir = "/work/browser-nc-files-context"; + const wasmPath = `${wasmDir}/${filename}`; + const iniPath = `${wasmDir}/nc_files_context.ini`; + await writeFetchedTextFile( + interp, + `../../vendor/linuxcnc/nc_files/${filename}`, + wasmPath, + ); + interp.writeTextFile( + `${wasmDir}/tool.tbl`, + "T1 P1 D10.000000 Z+0.000000 ; nc_files representative context tool\n", + ); + interp.writeTextFile( + iniPath, + [ + "[RS274NGC]", + "SUBROUTINE_PATH = .", + "", + "[TRAJ]", + "COORDINATES = X Y Z A B C U V W", + "", + "[EMCIO]", + "TOOL_TABLE = tool.tbl", + "", + ].join("\n"), + ); + return interp.runFileWithIni(wasmPath, iniPath); + } + async function verifyRejects(fixtureName, operation, expectedPattern) { try { await operation(); @@ -507,6 +544,18 @@ ); } + verifyExpectedOutput( + "browser_minimal_linear_run_steps", + interp.runFile("/work/minimal_linear.ngc"), + [ + "run_step phase=read step=1 rc=0 line=1", + "run_step phase=execute step=1 rc=0 line=1 x=1 y=2 z=0", + "statement_uri=G0%20X1.0%20Y2.0%20%28Comment%29", + "run_step phase=execute step=2 rc=0 line=2 x=3 y=4 z=0", + "statement_uri=G1%20X3.0%20Y4.0%20F120.0", + ].join("\n"), + ); + const namedParamPath = `/work/${INTERP_INI_FIXTURE}.ngc`; interp.writeTextFile(namedParamPath, namedParamProgramText); verifyExpectedOutput( @@ -564,6 +613,28 @@ ].join("\n"), ); + verifyExpectedOutput( + "browser_nc_files_3d_chips_context", + await runVendorNcFileWithToolTable(interp, "3D_Chips.ngc"), + [ + "file_open=0", + "file_read_count=4706", + "file_execute_count=4706", + "file_saw_error=0", + "run_step phase=execute step=18 rc=2 line=18", + "statement_uri=N50T%23%3Ctoolno%3EM6", + "run_step phase=execute step=19 rc=0 line=19", + "statement_uri=N60M8", + "canon_event=CHANGE_TOOL", + "canon_event=START_SPINDLE_CLOCKWISE spindle=0", + "canon_event=STRAIGHT_TRAVERSE line=21 x=0 y=0 z=10", + "canon_event=STRAIGHT_FEED line=23 x=53 y=-56.128 z=-25.372", + "canon_event=PROGRAM_END", + "absent=file_error_text=", + "absent=Requested tool 1 not found", + ].join("\n"), + ); + verifyExpectedOutput( "browser_nc_files_arcspiral", await runVendorNcFile(interp, "arcspiral.ngc"), @@ -622,16 +693,13 @@ ].join("\n"), ); - const foam = await loadSimMachineFiles("axis/foam", [ - "axis_foam.ini", - "foam.ngc", - ]); + const foam = await loadSimMachineFiles("axis/foam", "axis_foam.ini", "foam.ngc"); verifyExpectedOutput( "browser_sim_axis_foam_uv", interp.runSimConfigProgram({ files: foam.files, - programPath: `${foam.wasmDir}/foam.ngc`, - iniPath: `${foam.wasmDir}/axis_foam.ini`, + programPath: foam.programPath, + iniPath: foam.iniPath, }), [ "file_open=0", @@ -644,21 +712,15 @@ const bridgeMillSim = await loadSimMachineFiles( "axis/vismach/5axis/bridgemill", - [ - "5axis.ini", - "5axis.tbl", - "5axisgui.ngc", - "remap_subs/428remap.ngc", - "remap_subs/429remap.ngc", - "remap_subs/430remap.ngc", - ], + "5axis.ini", + "5axisgui.ngc", ); verifyExpectedOutput( "browser_sim_axis_bridgemill_w", interp.runSimConfigProgram({ files: bridgeMillSim.files, - programPath: `${bridgeMillSim.wasmDir}/5axisgui.ngc`, - iniPath: `${bridgeMillSim.wasmDir}/5axis.ini`, + programPath: bridgeMillSim.programPath, + iniPath: bridgeMillSim.iniPath, executionMode: "fiveAxisRemap", }), [ @@ -682,19 +744,15 @@ const geometry = await loadSimMachineFiles( "axis/geometry", - [ - "M110", - "xyzc.ini", - "xyzc.ngc", - ], - ["M110"], + "xyzc.ini", + "xyzc.ngc", ); verifyExpectedOutput( "browser_sim_axis_geometry_xyzc_user_m110", interp.runSimConfigProgram({ files: geometry.files, - programPath: `${geometry.wasmDir}/xyzc.ngc`, - iniPath: `${geometry.wasmDir}/xyzc.ini`, + programPath: geometry.programPath, + iniPath: geometry.iniPath, }), [ "file_open=0", @@ -706,30 +764,67 @@ ].join("\n"), ); - const externalOffsets = await loadSimMachineFiles( - "axis/external_offsets", - [ - "M111", - "dyn_demo.ngc", - "dynamic_offsets.ini", - ], - ["M111"], - ); - verifyExpectedOutput( - "browser_sim_axis_external_offsets_user_m111", - interp.runSimConfigProgram({ - files: externalOffsets.files, - programPath: `${externalOffsets.wasmDir}/dyn_demo.ngc`, - iniPath: `${externalOffsets.wasmDir}/dynamic_offsets.ini`, - }), - [ - "file_open=0", - "file_saw_error=0", - "canon_event=USER_M_COMMAND code=M111", - "canon_event=PROGRAM_END", - "absent=Unknown m code used: M111", - ].join("\n"), - ); + for (const externalOffsetCase of [ + { + name: "dyn_demo", + program: "dyn_demo.ngc", + ini: "dynamic_offsets.ini", + readCount: 833, + firstTraverse: "canon_event=STRAIGHT_TRAVERSE line=21 x=0 y=0 z=0", + firstFeed: "canon_event=STRAIGHT_FEED line=26 x=9 y=0 z=1.5", + }, + { + name: "eoffsets", + program: "eoffsets.ngc", + ini: "eoffsets.ini", + readCount: 35, + firstTraverse: "canon_event=STRAIGHT_TRAVERSE line=24 x=0 y=0 z=0", + firstFeed: "canon_event=STRAIGHT_FEED line=27 x=2.25 y=2.64 z=0", + }, + { + name: "jwp_z", + program: "jwp_z.ngc", + ini: "jwp_z.ini", + readCount: 35, + firstTraverse: "canon_event=STRAIGHT_TRAVERSE line=17 x=0 y=0 z=0.5", + firstFeed: "canon_event=STRAIGHT_FEED line=24 x=2.5 y=3.3 z=0", + }, + { + name: "opa_demo", + program: "opa_demo.ngc", + ini: "opa.ini", + readCount: 58, + firstTraverse: "canon_event=STRAIGHT_TRAVERSE line=13 x=1 y=0 z=0", + firstFeed: "canon_event=STRAIGHT_FEED line=35 x=1 y=0 z=0", + }, + ]) { + const externalOffsets = await loadSimMachineFiles( + "axis/external_offsets", + externalOffsetCase.ini, + externalOffsetCase.program, + ); + verifyExpectedOutput( + `browser_sim_axis_external_offsets_${externalOffsetCase.name}_user_m111`, + interp.runSimConfigProgram({ + files: externalOffsets.files, + programPath: externalOffsets.programPath, + iniPath: externalOffsets.iniPath, + }), + [ + "file_open=0", + `file_read_count=${externalOffsetCase.readCount}`, + `file_execute_count=${externalOffsetCase.readCount}`, + "file_saw_error=0", + "canon_event=USER_M_COMMAND code=M111", + externalOffsetCase.firstTraverse, + externalOffsetCase.firstFeed, + "canon_event=PROGRAM_END", + "absent=Unknown m code used: M111", + "absent=Bad character", + "absent=Cannot use axis values", + ].join("\n"), + ); + } const fiveAxisTrtDir = await writeFiveAxisTrtMachineFiles(interp); verifyExpectedOutput( diff --git a/wasm-port/tests/native/verify_sim_configs.sh b/wasm-port/tests/native/verify_sim_configs.sh index dcb6d9f..210a687 100755 --- a/wasm-port/tests/native/verify_sim_configs.sh +++ b/wasm-port/tests/native/verify_sim_configs.sh @@ -81,9 +81,33 @@ find_nearest_ini() { return 1 } +find_ini_by_open_file() { + local ngc="$1" + local ngc_dir="$2" + local ini open_file resolved + while IFS= read -r ini; do + open_file="$(ini_value "$ini" DISPLAY OPEN_FILE || true)" + [[ -z "$open_file" ]] && continue + if [[ "$open_file" = /* ]]; then + resolved="$open_file" + else + resolved="$(realpath -m "$(dirname "$ini")/$open_file")" + fi + if [[ "$resolved" == "$(realpath -m "$ngc")" ]]; then + printf '%s\n' "$ini" + return 0 + fi + done < <(find "$ngc_dir" -maxdepth 1 -type f -name '*.ini' | sort) + return 1 +} + find_sim_ini() { local rel="$1" local ngc_dir="$2" + local ngc="$3" + if find_ini_by_open_file "$ngc" "$ngc_dir"; then + return 0 + fi case "$rel" in axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos/*) printf '%s\n' "$SIM_DIR/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/xyzacb-trsrn_twp/xyzacb-trsrn.ini" @@ -289,7 +313,7 @@ while IFS= read -r ngc; do continue fi - ini="$(find_sim_ini "$rel" "$(dirname "$ngc")" || true)" + ini="$(find_sim_ini "$rel" "$(dirname "$ngc")" "$ngc" || true)" if [[ -z "$ini" ]]; then printf '%s\tunsupported_runtime_edge\tmissing-ini\n' "$rel" >> "$BUILD_DIR/skipped.tsv" skip=$((skip + 1)) diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index 80f98d2..8735966 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -446,6 +446,18 @@ for (const fixtureName of INTERP_FILE_FIXTURES) { verifyExpectedOutput(fixtureName, interp.runFile(programPath), expectedEvents); } +verifyExpectedOutput( + "minimal_linear_run_steps", + interp.runFile("/work/minimal_linear.ngc"), + [ + "run_step phase=read step=1 rc=0 line=1", + "run_step phase=execute step=1 rc=0 line=1 x=1 y=2 z=0", + "statement_uri=G0%20X1.0%20Y2.0%20%28Comment%29", + "run_step phase=execute step=2 rc=0 line=2 x=3 y=4 z=0", + "statement_uri=G1%20X3.0%20Y4.0%20F120.0", + ].join("\n"), +); + const namedParamFilePath = `/work/${INTERP_INI_FIXTURE}.ngc`; interp.writeTextFile(namedParamFilePath, namedParamProgramText); verifyExpectedOutput( diff --git a/wasm-port/tests/wasm/node/verify_nc_files_wasm.mjs b/wasm-port/tests/wasm/node/verify_nc_files_wasm.mjs index ef9cb43..82427c3 100644 --- a/wasm-port/tests/wasm/node/verify_nc_files_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_nc_files_wasm.mjs @@ -47,6 +47,54 @@ function runVendorNcFile(filename) { return interp.runFile(wasmPath); } +function runVendorNcFileWithToolTable(filename) { + const wasmDir = "/work/nc-files-context"; + const wasmPath = `${wasmDir}/${filename}`; + const iniPath = `${wasmDir}/nc_files_context.ini`; + interp.writeTextFile(wasmPath, readFileSync(resolve(ncFilesDir, filename), "utf8")); + interp.writeTextFile( + `${wasmDir}/tool.tbl`, + "T1 P1 D10.000000 Z+0.000000 ; nc_files representative context tool\n", + ); + interp.writeTextFile( + iniPath, + [ + "[RS274NGC]", + "SUBROUTINE_PATH = .", + "", + "[TRAJ]", + "COORDINATES = X Y Z A B C U V W", + "", + "[EMCIO]", + "TOOL_TABLE = tool.tbl", + "", + ].join("\n"), + ); + return interp.runFileWithIni(wasmPath, iniPath); +} + +verifyExpectedOutput( + "nc_files_3d_chips_context_wasm", + runVendorNcFileWithToolTable("3D_Chips.ngc"), + [ + "file_open=0", + "file_read_count=4706", + "file_execute_count=4706", + "file_saw_error=0", + "run_step phase=execute step=18 rc=2 line=18", + "statement_uri=N50T%23%3Ctoolno%3EM6", + "run_step phase=execute step=19 rc=0 line=19", + "statement_uri=N60M8", + "canon_event=CHANGE_TOOL", + "canon_event=START_SPINDLE_CLOCKWISE spindle=0", + "canon_event=STRAIGHT_TRAVERSE line=21 x=0 y=0 z=10", + "canon_event=STRAIGHT_FEED line=23 x=53 y=-56.128 z=-25.372", + "canon_event=PROGRAM_END", + "absent=file_error_text=", + "absent=Requested tool 1 not found", + ].join("\n"), +); + verifyExpectedOutput( "nc_files_arcspiral_wasm", runVendorNcFile("arcspiral.ngc"), diff --git a/wasm-port/tests/wasm/node/verify_sim_configs_wasm.mjs b/wasm-port/tests/wasm/node/verify_sim_configs_wasm.mjs index 785553f..ac91978 100644 --- a/wasm-port/tests/wasm/node/verify_sim_configs_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_sim_configs_wasm.mjs @@ -3,7 +3,10 @@ import { fileURLToPath } from "node:url"; import { dirname, resolve } from "node:path"; import assert from "node:assert/strict"; -import { createLinuxCncInterpSdk } from "../../../runtime/sdk/src/index.js"; +import { + createLinuxCncInterpSdk, + planSimConfigStaging, +} from "../../../runtime/sdk/src/index.js"; function verifyExpectedOutput(fixtureName, output, expectedText) { const expectedLines = expectedText.split("\n").filter(Boolean); @@ -32,6 +35,7 @@ const __dirname = dirname(__filename); const rootDir = resolve(__dirname, "../../.."); const wasmPath = resolve(rootDir, "build/wasm/core/linuxcnc_interp.wasm"); const vendorRoot = resolve(rootDir, "vendor/linuxcnc"); +const manifestText = readFileSync(resolve(rootDir, "tools/source-manifest.txt"), "utf8"); const interp = await createLinuxCncInterpSdk({ wasmBinary: readFileSync(wasmPath), @@ -41,35 +45,72 @@ const interp = await createLinuxCncInterpSdk({ }, }); -function vendorFile(sourceRel, wasmPath) { - const sourcePath = resolve(vendorRoot, sourceRel); +const syntheticPlan = planSimConfigStaging({ + manifestText: [ + "configs/sim/example/test.ini", + "configs/sim/example/test.ngc", + "configs/sim/example/tool.tbl", + "configs/sim/example/linuxcnc.var", + "configs/sim/example/subs/helper.ngc", + "configs/sim/example/M123", + ].join("\n"), + machineRel: "example", + iniFile: "test.ini", + iniText: [ + "[DISPLAY]", + "OPEN_FILE = test.ngc", + "[RS274NGC]", + "PARAMETER_FILE = linuxcnc.var", + "SUBROUTINE_PATH = subs", + "USER_M_PATH = .", + "[EMCIO]", + "TOOL_TABLE = tool.tbl", + ].join("\n"), +}); +assert.deepEqual( + syntheticPlan.files.map((file) => [file.sourceRel, file.executable]).sort(), + [ + ["configs/sim/example/M123", true], + ["configs/sim/example/linuxcnc.var", false], + ["configs/sim/example/subs/helper.ngc", false], + ["configs/sim/example/test.ini", false], + ["configs/sim/example/test.ngc", false], + ["configs/sim/example/tool.tbl", false], + ], + "synthetic sim-config staging plan", +); + +function simMachine(machineRel, iniFile, programFile = null) { + const iniText = readFileSync( + resolve(vendorRoot, `configs/sim/${machineRel}/${iniFile}`), + "utf8", + ); + const plan = planSimConfigStaging({ + manifestText, + machineRel, + iniFile, + iniText, + programFile, + wasmDir: `/work/sim/${machineRel}`, + }); return { - path: wasmPath, - text: readFileSync(sourcePath, "utf8"), - executable: (statSync(sourcePath).mode & 0o111) !== 0, + ...plan, + files: plan.files.map((file) => ({ + path: file.path, + text: readFileSync(resolve(vendorRoot, file.sourceRel), "utf8"), + executable: + file.executable || (statSync(resolve(vendorRoot, file.sourceRel)).mode & 0o111) !== 0, + })), }; } -function simMachine(machineRel, files) { - const wasmDir = `/work/sim/${machineRel}`; - return { - wasmDir, - files: files.map((file) => - vendorFile(`configs/sim/${machineRel}/${file}`, `${wasmDir}/${file}`), - ), - }; -} - -const foam = simMachine("axis/foam", [ - "axis_foam.ini", - "foam.ngc", -]); +const foam = simMachine("axis/foam", "axis_foam.ini", "foam.ngc"); verifyExpectedOutput( "sim_axis_foam_uv_wasm", interp.runSimConfigProgram({ files: foam.files, - programPath: `${foam.wasmDir}/foam.ngc`, - iniPath: `${foam.wasmDir}/axis_foam.ini`, + programPath: foam.programPath, + iniPath: foam.iniPath, }), [ "file_open=0", @@ -80,20 +121,17 @@ verifyExpectedOutput( ].join("\n"), ); -const bridgeMill = simMachine("axis/vismach/5axis/bridgemill", [ +const bridgeMill = simMachine( + "axis/vismach/5axis/bridgemill", "5axis.ini", - "5axis.tbl", "5axisgui.ngc", - "remap_subs/428remap.ngc", - "remap_subs/429remap.ngc", - "remap_subs/430remap.ngc", -]); +); verifyExpectedOutput( "sim_axis_bridgemill_w_wasm", interp.runSimConfigProgram({ files: bridgeMill.files, - programPath: `${bridgeMill.wasmDir}/5axisgui.ngc`, - iniPath: `${bridgeMill.wasmDir}/5axis.ini`, + programPath: bridgeMill.programPath, + iniPath: bridgeMill.iniPath, executionMode: "fiveAxisRemap", }), [ @@ -115,17 +153,13 @@ verifyExpectedOutput( ].join("\n"), ); -const geometry = simMachine("axis/geometry", [ - "M110", - "xyzc.ini", - "xyzc.ngc", -]); +const geometry = simMachine("axis/geometry", "xyzc.ini", "xyzc.ngc"); verifyExpectedOutput( "sim_axis_geometry_xyzc_user_m110_wasm", interp.runSimConfigProgram({ files: geometry.files, - programPath: `${geometry.wasmDir}/xyzc.ngc`, - iniPath: `${geometry.wasmDir}/xyzc.ini`, + programPath: geometry.programPath, + iniPath: geometry.iniPath, }), [ "file_open=0", @@ -137,25 +171,66 @@ verifyExpectedOutput( ].join("\n"), ); -const externalOffsets = simMachine("axis/external_offsets", [ - "M111", - "dyn_demo.ngc", - "dynamic_offsets.ini", -]); -verifyExpectedOutput( - "sim_axis_external_offsets_user_m111_wasm", - interp.runSimConfigProgram({ - files: externalOffsets.files, - programPath: `${externalOffsets.wasmDir}/dyn_demo.ngc`, - iniPath: `${externalOffsets.wasmDir}/dynamic_offsets.ini`, - }), - [ - "file_open=0", - "file_saw_error=0", - "canon_event=USER_M_COMMAND code=M111", - "canon_event=PROGRAM_END", - "absent=Unknown m code used: M111", - ].join("\n"), -); +for (const externalOffsetCase of [ + { + name: "dyn_demo", + program: "dyn_demo.ngc", + ini: "dynamic_offsets.ini", + readCount: 833, + firstTraverse: "canon_event=STRAIGHT_TRAVERSE line=21 x=0 y=0 z=0", + firstFeed: "canon_event=STRAIGHT_FEED line=26 x=9 y=0 z=1.5", + }, + { + name: "eoffsets", + program: "eoffsets.ngc", + ini: "eoffsets.ini", + readCount: 35, + firstTraverse: "canon_event=STRAIGHT_TRAVERSE line=24 x=0 y=0 z=0", + firstFeed: "canon_event=STRAIGHT_FEED line=27 x=2.25 y=2.64 z=0", + }, + { + name: "jwp_z", + program: "jwp_z.ngc", + ini: "jwp_z.ini", + readCount: 35, + firstTraverse: "canon_event=STRAIGHT_TRAVERSE line=17 x=0 y=0 z=0.5", + firstFeed: "canon_event=STRAIGHT_FEED line=24 x=2.5 y=3.3 z=0", + }, + { + name: "opa_demo", + program: "opa_demo.ngc", + ini: "opa.ini", + readCount: 58, + firstTraverse: "canon_event=STRAIGHT_TRAVERSE line=13 x=1 y=0 z=0", + firstFeed: "canon_event=STRAIGHT_FEED line=35 x=1 y=0 z=0", + }, +]) { + const externalOffsets = simMachine( + "axis/external_offsets", + externalOffsetCase.ini, + externalOffsetCase.program, + ); + verifyExpectedOutput( + `sim_axis_external_offsets_${externalOffsetCase.name}_user_m111_wasm`, + interp.runSimConfigProgram({ + files: externalOffsets.files, + programPath: externalOffsets.programPath, + iniPath: externalOffsets.iniPath, + }), + [ + "file_open=0", + `file_read_count=${externalOffsetCase.readCount}`, + `file_execute_count=${externalOffsetCase.readCount}`, + "file_saw_error=0", + "canon_event=USER_M_COMMAND code=M111", + externalOffsetCase.firstTraverse, + externalOffsetCase.firstFeed, + "canon_event=PROGRAM_END", + "absent=Unknown m code used: M111", + "absent=Bad character", + "absent=Cannot use axis values", + ].join("\n"), + ); +} console.log("sim_configs_wasm_node_smoke=ok"); diff --git a/wasm-port/tools/source-manifest.txt b/wasm-port/tools/source-manifest.txt index 0772a65..1b990c1 100644 --- a/wasm-port/tools/source-manifest.txt +++ b/wasm-port/tools/source-manifest.txt @@ -346,9 +346,16 @@ tests/interp/abort-hot-comment/test.ngc tests/interp/abort-hot-comment/test.sh configs/sim/axis/sim.tbl configs/sim/axis/external_offsets/M111 +configs/sim/axis/external_offsets/circles.ngc configs/sim/axis/external_offsets/dyn_demo.ngc configs/sim/axis/external_offsets/dynamic_offsets.ini configs/sim/axis/external_offsets/eoffset.tbl +configs/sim/axis/external_offsets/eoffsets.ini +configs/sim/axis/external_offsets/eoffsets.ngc +configs/sim/axis/external_offsets/jwp_z.ini +configs/sim/axis/external_offsets/jwp_z.ngc +configs/sim/axis/external_offsets/opa.ini +configs/sim/axis/external_offsets/opa_demo.ngc configs/sim/axis/foam/axis_foam.ini configs/sim/axis/foam/foam.ngc configs/sim/axis/geometry/M110 @@ -403,6 +410,7 @@ configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.txt configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml +nc_files/3D_Chips.ngc nc_files/arcspiral.ngc nc_files/factorial.ngc nc_files/hole-circle.ngc diff --git a/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/circles.ngc b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/circles.ngc new file mode 100644 index 0000000..51ec359 --- /dev/null +++ b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/circles.ngc @@ -0,0 +1,43 @@ +(info: Multiple circles at radius R, use 0 for current val) +;Notes: +; 1) z axis not altered (remains at current z) +; 2) for inside polygon cutting (fnum==0): +; start with rfraction negative +; and gradually increase rfraction to zero as program runs +; multiple circles +; 3) for outside polygon cutting (fnum==1): +; start with rfraction positive +; and gradually decrease to zero as program runs multiple +; circles +; +; Alternate method for polygons: +; 1) use #=0 and jog to safe starting position +; 2) use #=1, run program for one revolution +; 3) Run program repeatedly and manually jog x (radius) +; before each program start to increase/decrease +; current radius for inside/outside polygon respectively + +o sub + # = #1 (= 1 R 0==>current) + # = #2 (= 8 aspeed: RPM) + # = #3 (= 10 lspeed: units/sec) + # = #4 (= 1 +/- Revolutions) + + # = #<_c> ;starting value +# = [# + # * 360] + # = [# * 360] + +m111 ;clear prior info messages +o if [# EQ 0] + # = #<_x> ;use current x +o else + # = # + f# g1 x# +o endif +(debug, ref_radius=#) + +m68 e0 q# ; set ref_radius for eoffsets + +f# g1 c# ; circles at arate + +o endsub diff --git a/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini new file mode 100644 index 0000000..0542f67 --- /dev/null +++ b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini @@ -0,0 +1,104 @@ +# Notes: +# 1) [AXIS_n]OFFSET_AV_RATIO= controls external offsets a,v +# Allowed values are 0.0 <= OFFSET_AV_RATIO <= 0.9 +# Value of 0.0 disables external offsets +# Disallowed values are superseded with msg to stdout +# 2) Immediate homing herein +# ([JOINT_*]HOME_SEQUENCE=0, other HOME_* items omitted) +# 3) uncomment [JOINT_0]HOME_SEARCH_VEL,HOME_LATCH_VEL +# to demonstrate non-zero joint.0.motor-offset + +[APPLICATIONS] +APP = sim_pin --title "MPG Simulator" \ + e:xcounts \ + e:ycounts \ + e:zcounts + +# make sure [xyz]:ecounts are zero if machine off: +APP = eoffsets_monitor.tcl + +[HAL] +HALUI = halui +HALFILE = LIB:basic_sim.tcl -no_use_hal_manualtoolchange +HALFILE = eoffsets.hal +POSTGUI_HALFILE = eoffsets_panel.hal + +[EMC] +MACHINE = External Offsets Demo +VERSION = 1.1 + +[DISPLAY] +PYVCP = eoffsets_panel.xml +DISPLAY = axis +POSITION_OFFSET = RELATIVE +POSITION_FEEDBACK = ACTUAL +MAX_LINEAR_VELOCITY = 2 +OPEN_FILE = ./eoffsets.ngc + +TKPKG = Ngcgui 1.0 +NGCGUI_FONT = Helvetica -12 normal +NGCGUI_SUBFILE = queuebuster.ngc + +[TASK] +TASK = milltask +CYCLE_TIME = 0.001 + +[RS274NGC] +SUBROUTINE_PATH = . +USER_M_PATH = . +PARAMETER_FILE = sim.var + +[EMCIO] +TOOL_TABLE = eoffset.tbl + +[EMCMOT] +EMCMOT = motmod +SERVO_PERIOD = 1000000 + +[TRAJ] +COORDINATES = XYZ +LINEAR_UNITS = inch +ANGULAR_UNITS = degree + +[KINS] +JOINTS = 3 +KINEMATICS = trivkins coordinates=XYZ + +[AXIS_X] +OFFSET_AV_RATIO = 0.2 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 +MIN_LIMIT = -0.1 +MAX_LIMIT = 10 + +[AXIS_Y] +OFFSET_AV_RATIO = 0.2 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 +MIN_LIMIT = -0.1 +MAX_LIMIT = 5 + +[AXIS_Z] +OFFSET_AV_RATIO = 0.2 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 +MIN_LIMIT = -1 +MAX_LIMIT = 1 + +[JOINT_0] +TYPE = LINEAR +HOME_SEQUENCE = 0 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 + +[JOINT_1] +TYPE = LINEAR +HOME_SEQUENCE = 0 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 + +[JOINT_2] +TYPE = LINEAR +HOME_SEQUENCE = 0 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 diff --git a/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc new file mode 100644 index 0000000..251ee10 --- /dev/null +++ b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc @@ -0,0 +1,35 @@ + # = 9 + # = 4 +# = 0 + # = 20 + +# = [0.25 * #] +# = [0.66 * #] +# = 0 + +# = [0.50 * #] +# = 0 +# = -.5 + +# = [0.75 * #] +# = 0 +# = 0 + +# = # +# = # +# = 0 + +m111 ;clear notifications +g61 +g0x0y0z0 + +f # +g1 x # y # z # +g1 x # y # z # +g1 x # y # z # +g1 x # y # z # +g1 x # y # +g0x0y0z0 + +m111 ;clear notifications +m2 diff --git a/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/jwp_z.ini b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/jwp_z.ini new file mode 100644 index 0000000..d99db80 --- /dev/null +++ b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/jwp_z.ini @@ -0,0 +1,86 @@ +# Notes: +# 1) [AXIS_n]OFFSET_AV_RATIO= controls external offsets a,v +# Allowed values are 0.0 <= OFFSET_AV_RATIO <= 0.9 +# Value of 0.0 disables external offsets +# Disallowed values are superseded with msg to stdout +# 2) Immediate homing herein +# ([JOINT_*]HOME_SEQUENCE=0, other HOME_* items omitted) +# 3) uncomment [JOINT_0]HOME_SEARCH_VEL,HOME_LATCH_VEL +# to demonstrate non-zero joint.0.motor-offset + + +[HAL] +HALUI = halui +HALFILE = LIB:basic_sim.tcl +POSTGUI_HALFILE = jwp_z_panel.hal + +[EMC] +MACHINE = Jog-While-Pause Z Demo +VERSION = 1.1 + +[DISPLAY] +PYVCP = jwp_z_panel.xml +DISPLAY = axis +POSITION_OFFSET = RELATIVE +POSITION_FEEDBACK = ACTUAL +MAX_LINEAR_VELOCITY = 2 +OPEN_FILE = ./jwp_z.ngc + +[TASK] +TASK = milltask +CYCLE_TIME = 0.001 + +[RS274NGC] +USER_M_PATH = . +PARAMETER_FILE = sim.var + +[EMCMOT] +EMCMOT = motmod +SERVO_PERIOD = 1000000 + +[TRAJ] +COORDINATES = XYZ +LINEAR_UNITS = inch +ANGULAR_UNITS = degree + +[KINS] +JOINTS = 3 +KINEMATICS = trivkins coordinates=XYZ + +[AXIS_X] +MIN_LIMIT = -1 +MAX_LIMIT = 11 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 + +[AXIS_Y] +MIN_LIMIT = -1 +MAX_LIMIT = 5 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 + +[AXIS_Z] +# Note: low OFFSET_AV_RATIO: +OFFSET_AV_RATIO = 0.05 +MIN_LIMIT = -1 +MAX_LIMIT = 1 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 + +[JOINT_0] +TYPE = LINEAR +HOME_SEQUENCE = 0 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 + +[JOINT_1] +TYPE = LINEAR +HOME_SEQUENCE = 0 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 + +[JOINT_2] +TYPE = LINEAR +HOME_SEQUENCE = 0 +MAX_VELOCITY = 2 +MAX_ACCELERATION = 20 diff --git a/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/jwp_z.ngc b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/jwp_z.ngc new file mode 100644 index 0000000..89e2c17 --- /dev/null +++ b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/jwp_z.ngc @@ -0,0 +1,35 @@ +# = 10 +# = 5 +# = 0.5 +# = 100 + +# = [0.25 * #] +# = [0.66 * #] + +# = [0.50 * #] +# = [0.33 * #] + +# = [0.75 * #] +# = [0.33 * #] + +m111 ;clear notifications +g61 +g0 x0 y0 z# +(debug, Enter offsets only when paused, s to continue) +m0 +m111 + +f # +g0 z0 +g1 x # y # +g1 x # y # +g1 x # y # +g1 x # y # + +g0 z# +(debug, Program End: Clear offsets, s to continue) +m0 +g0 x0 y0 + +m111 ;clear notifications +m2 diff --git a/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/opa.ini b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/opa.ini new file mode 100644 index 0000000..2301b15 --- /dev/null +++ b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/opa.ini @@ -0,0 +1,87 @@ +[APPLICATIONS] +DELAY = 3 +# For assessing system accel/vel: +# (particularly when using func3 square wave modulation) +APP = sim_pin ini.x.max_acceleration ini.x.max_velocity + +[HAL] +HALUI = halui +HALFILE = LIB:basic_sim.tcl +HALFILE = opa.hal +POSTGUI_HALFILE = opa_panel.hal + +[EMC] +MACHINE = External Offset(X) per Angle(C) Demo +VERSION = 1.1 + +[DISPLAY] +PYVCP = opa_panel.xml +DISPLAY = axis +OPEN_FILE = opa_demo.ngc +GEOMETRY = !CXZ +POSITION_OFFSET = RELATIVE +POSITION_FEEDBACK = ACTUAL +MAX_LINEAR_VELOCITY = 2 +MAX_ANGULAR_VELOCITY = 60 + +TKPKG = Ngcgui 1.0 +NGCGUI_FONT = Helvetica -12 normal +NGCGUI_SUBFILE = circles.ngc + +[TASK] +TASK = milltask +CYCLE_TIME = 0.001 + +[RS274NGC] +SUBROUTINE_PATH = . +USER_M_PATH = . +PARAMETER_FILE = sim.var + +[EMCIO] +TOOL_TABLE = eoffset.tbl + +[EMCMOT] +EMCMOT = motmod +SERVO_PERIOD = 1000000 + +[TRAJ] +COORDINATES = XZC +LINEAR_UNITS = inch +ANGULAR_UNITS = degree + +[KINS] +JOINTS = 3 +KINEMATICS = trivkins coordinates=XZC + +[AXIS_X] +OFFSET_AV_RATIO = 0.5 +MAX_VELOCITY = 5 +# increase MAX_ACCELERATION to improve +# waveform tracking: +MAX_ACCELERATION = 50 + +[AXIS_Z] +MAX_VELOCITY = 5 +MAX_ACCELERATION = 10 + +[AXIS_C] +MAX_VELOCITY = 60 +MAX_ACCELERATION = 600 + +[JOINT_0] +TYPE = LINEAR +HOME_SEQUENCE = 0 +MAX_VELOCITY = 5 +MAX_ACCELERATION = 50 + +[JOINT_1] +TYPE = LINEAR +HOME_SEQUENCE = 0 +MAX_VELOCITY = 5 +MAX_ACCELERATION = 10 + +[JOINT_2] +TYPE = ANGULAR +HOME_SEQUENCE = 0 +MAX_VELOCITY = 60 +MAX_ACCELERATION = 600 diff --git a/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/opa_demo.ngc b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/opa_demo.ngc new file mode 100644 index 0000000..21139c3 --- /dev/null +++ b/wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets/opa_demo.ngc @@ -0,0 +1,15 @@ +; opa_demo.ngc: +; invoke subroutine circles.ngc for multiple circles (#) +; with: +; x = # +; z = #<_z> + + # = 1 + # = #<_z> ; current value + # = 8 ; angular speed (RPM) + # = 10 ; linear speed (units/minute) + # = 100 + +g0 x# z# +o call [#][#][#][#] +m2 diff --git a/wasm-port/vendor/linuxcnc/nc_files/3D_Chips.ngc b/wasm-port/vendor/linuxcnc/nc_files/3D_Chips.ngc new file mode 100644 index 0000000..5e373f0 --- /dev/null +++ b/wasm-port/vendor/linuxcnc/nc_files/3D_Chips.ngc @@ -0,0 +1,4711 @@ +( This program is copyright of Rab Gordon, Gary Drew, and Paul Corner.) +( It is released here under a GPL without warranty to do with as you may.) +( With scales factors set at 1.0, the part is cut from a 100x100x50mm ) +( block with the zero point at the center top of the block ) +( and Cutter is assumed to be a 10mm ball nose ) +( and feedrate is 450 mm/min ) + +# = 1.0 +# = 1.0 +# = 1.0 +# = 10000.0 +# = 1 +# = 1600 + +N30 G21 +N40G90 +G64P.1 +N50T#M6 +N60M8 +N70S#M3 +N90G0Z[#*10.] +N80G0X[#*53.]Y[#*-56.128] +N100G1Z[#*-25.372]F[#*100] +N110G1Z[#*-27.372]F[#*225] +N120Y[#*-56.12]Z[#*-27.725] +N130Y[#*-56.105]Z[#*-27.894] +N140Y[#*-56.06]Z[#*-28.152] +N150Y[#*-56.051]Z[#*-28.184] +N160Y[#*-55.992]Z[#*-28.405] +N170Y[#*-55.902]Z[#*-28.651] +N180Y[#*-55.792]Z[#*-28.888] +N190Y[#*-55.661]Z[#*-29.115] +N200Y[#*-55.511]Z[#*-29.329] +N210Y[#*-55.343]Z[#*-29.53] +N220Y[#*-55.158]Z[#*-29.715] +N230Y[#*-54.957]Z[#*-29.883] +N240Y[#*-54.743]Z[#*-30.033] +N250Y[#*-54.516]Z[#*-30.164] +N260Y[#*-54.279]Z[#*-30.274] +N270Y[#*-54.033]Z[#*-30.364] +N280Y[#*-53.78]Z[#*-30.432] +N290Y[#*-53.522]Z[#*-30.477] +N300Y[#*-53.31]Z[#*-30.496] +N310Y[#*-53.262]Z[#*-30.5] +N320Y[#*-53.] +N330Y[#*-47.891]F[#*450] +N340Y[#*-19.891] +N350Y[#*-13.891] +N360Y[#*0.109] +N370Y[#*16.109] +N380Y[#*18.109] +N390Y[#*25.109] +N400Y[#*32.109] +N410Y[#*44.109] +N420Y[#*53.] +N430X[#*52.972]Y[#*53.293] +N440X[#*52.893]Y[#*53.547] +N450X[#*52.769]Y[#*53.762] +N460X[#*52.609]Y[#*53.937] +N470X[#*52.42]Y[#*54.074] +N480X[#*52.209]Y[#*54.172] +N490X[#*51.983]Y[#*54.23] +N500X[#*51.75]Y[#*54.25] +N510X[#*51.517]Y[#*54.23] +N520X[#*51.291]Y[#*54.172] +N530X[#*51.08]Y[#*54.074] +N540X[#*50.891]Y[#*53.937] +N550X[#*50.731]Y[#*53.762] +N560X[#*50.607]Y[#*53.547] +N570X[#*50.528]Y[#*53.293] +N580X[#*50.5]Y[#*53.] +N590Y[#*34.738] +N600Y[#*18.738] +N610Y[#*14.738] +N620Y[#*2.738] +N630Y[#*-1.262] +N640Y[#*-19.262] +N650Y[#*-29.262] +N660Y[#*-52.262] +N670Y[#*-53.] +N680X[#*50.472]Y[#*-53.293] +N690X[#*50.393]Y[#*-53.547] +N700X[#*50.269]Y[#*-53.762] +N710X[#*50.109]Y[#*-53.938] +N720X[#*49.92]Y[#*-54.074] +N730X[#*49.709]Y[#*-54.172] +N740X[#*49.483]Y[#*-54.23] +N750X[#*49.251]Y[#*-54.25] +N760X[#*49.017]Y[#*-54.23] +N770X[#*48.791]Y[#*-54.172] +N780X[#*48.58]Y[#*-54.074] +N790X[#*48.391]Y[#*-53.938] +N800X[#*48.231]Y[#*-53.762] +N810X[#*48.107]Y[#*-53.547] +N820X[#*48.028]Y[#*-53.293] +N830X[#*48.]Y[#*-53.] +N840Y[#*-47.225] +N850Y[#*-38.225] +N860Y[#*-36.225] +N870Y[#*-32.725] +N880Y[#*-32.288] +N890Y[#*-32.241] +N900Y[#*-32.225] +N910Y[#*-31.733] +N920Y[#*-31.725] +N930Y[#*-31.538] +N940Y[#*-31.452] +N950Y[#*-31.444]Z[#*-7.922] +N960Y[#*-31.436]Z[#*-7.835] +N970Y[#*-31.397]Z[#*-7.589] +N980Y[#*-31.35]Z[#*-7.4] +N990Y[#*-31.225]Z[#*-7.001] +N1000Y[#*-31.038]Z[#*-6.311] +N1010Y[#*-30.975]Z[#*-6.142] +N1020Y[#*-30.725]Z[#*-5.69] +N1030Y[#*-29.975]Z[#*-4.625] +N1040Y[#*-29.85]Z[#*-4.472] +N1050Y[#*-29.725]Z[#*-4.34] +N1060Y[#*-29.225]Z[#*-3.955] +N1070Y[#*-28.225]Z[#*-3.273] +N1080Y[#*-27.975]Z[#*-3.144] +N1090Y[#*-27.725]Z[#*-3.051] +N1100Y[#*-27.225]Z[#*-2.944] +N1110Y[#*-26.475]Z[#*-2.817] +N1120Y[#*-26.256]Z[#*-2.781] +N1130Y[#*-25.975]Z[#*-2.75] +N1140Y[#*-25.725]Z[#*-2.753] +N1150Y[#*-25.225]Z[#*-2.846] +N1160Y[#*-24.475]Z[#*-3.096] +N1170Y[#*-24.225]Z[#*-3.182] +N1180Y[#*-23.975]Z[#*-3.283] +N1190Y[#*-23.788]Z[#*-3.385] +N1200Y[#*-23.725]Z[#*-3.424] +N1210Y[#*-23.475]Z[#*-3.618] +N1220Y[#*-23.288]Z[#*-3.808] +N1230Y[#*-23.256]Z[#*-3.845] +N1240Y[#*-23.241]Z[#*-3.864] +N1250Y[#*-23.038]Z[#*-4.112] +N1260Y[#*-22.92]Z[#*-4.255] +N1270Y[#*-22.913]Z[#*-4.264] +N1280Y[#*-22.881]Z[#*-4.296] +N1290Y[#*-22.725]Z[#*-4.014] +N1300Y[#*-21.975]Z[#*-2.927] +N1310Y[#*-21.85]Z[#*-2.776] +N1320Y[#*-21.725]Z[#*-2.649] +N1330Y[#*-21.225]Z[#*-2.266] +N1340Y[#*-20.475]Z[#*-1.721] +N1350Y[#*-20.225]Z[#*-1.569] +N1360Y[#*-19.725]Z[#*-1.374] +N1370Y[#*-18.288]Z[#*-1.016] +N1380Y[#*-17.975]Z[#*-0.979] +N1390Y[#*-17.725] +N1400Y[#*-17.225]Z[#*-1.054] +N1410Y[#*-16.725]Z[#*-1.149] +N1420Y[#*-16.288]Z[#*-1.233] +N1430Y[#*-16.241]Z[#*-1.242] +N1440Y[#*-15.975]Z[#*-1.298] +N1450Y[#*-15.85]Z[#*-1.334] +N1460Y[#*-15.725]Z[#*-1.379] +N1470Y[#*-15.225]Z[#*-1.649] +N1480Y[#*-14.725]Z[#*-1.977] +N1490Y[#*-14.288]Z[#*-2.264] +N1500Y[#*-14.233]Z[#*-2.3] +N1510Y[#*-14.225]Z[#*-2.305] +N1520Y[#*-13.975]Z[#*-2.503] +N1530Y[#*-13.725]Z[#*-2.774] +N1540Y[#*-13.475]Z[#*-3.128] +N1550Y[#*-13.256]Z[#*-3.442] +N1560Y[#*-13.225]Z[#*-3.486] +N1570Y[#*-13.163]Z[#*-3.568] +N1580Y[#*-13.155]Z[#*-3.577] +N1590Y[#*-12.975]Z[#*-3.332] +N1600Y[#*-12.788]Z[#*-3.128] +N1610Y[#*-12.725]Z[#*-3.071] +N1620Y[#*-12.475]Z[#*-2.88] +N1630Y[#*-12.225]Z[#*-2.738] +N1640Y[#*-11.725]Z[#*-2.556] +N1650Y[#*-10.975]Z[#*-2.33] +N1660Y[#*-10.725]Z[#*-2.269] +N1670Y[#*-10.475]Z[#*-2.235] +N1680Y[#*-10.225]Z[#*-2.229] +N1690Y[#*-9.725]Z[#*-2.293] +N1700Y[#*-8.475]Z[#*-2.552] +N1710Y[#*-8.35]Z[#*-2.588] +N1720Y[#*-8.225]Z[#*-2.632] +N1730Y[#*-7.725]Z[#*-2.889] +N1740Y[#*-6.725]Z[#*-3.511] +N1750Y[#*-6.225]Z[#*-3.879] +N1760Y[#*-5.725]Z[#*-4.396] +N1770Y[#*-5.225]Z[#*-4.918] +N1780Y[#*-4.725]Z[#*-5.605] +N1790Y[#*-4.225]Z[#*-6.476] +N1800Y[#*-4.1]Z[#*-6.718] +N1810Y[#*-3.975]Z[#*-7.038] +N1820Y[#*-3.85]Z[#*-7.576] +N1830Y[#*-3.756]Z[#*-8.041] +N1840Y[#*-3.694]Z[#*-8.353] +N1850Y[#*-3.655]Z[#*-8.548] +N1860Y[#*-3.616]Z[#*-8.812] +N1870Y[#*-3.608]Z[#*-8.942] +N1880Y[#*-3.6]Z[#*-30.5] +N1890Y[#*2.525] +N1900Y[#*2.65] +N1910Y[#*3.025] +N1920Y[#*3.267] +N1930Y[#*3.275] +N1940Y[#*3.603] +N1950Y[#*3.611]Z[#*-8.879] +N1960Y[#*3.619]Z[#*-8.782] +N1970Y[#*3.658]Z[#*-8.534] +N1980Y[#*3.712]Z[#*-8.26] +N1990Y[#*3.744]Z[#*-8.104] +N2000Y[#*3.9]Z[#*-7.331] +N2010Y[#*3.962]Z[#*-7.079] +N2020Y[#*4.025]Z[#*-6.896] +N2030Y[#*4.275]Z[#*-6.392] +N2040Y[#*4.525]Z[#*-5.961] +N2050Y[#*4.775]Z[#*-5.516] +N2060Y[#*5.275]Z[#*-4.866] +N2070Y[#*6.025]Z[#*-4.083] +N2080Y[#*6.275]Z[#*-3.833] +N2090Y[#*6.775]Z[#*-3.48] +N2100Y[#*7.525]Z[#*-3.013] +N2110Y[#*7.767]Z[#*-2.863] +N2120Y[#*8.025]Z[#*-2.718] +N2130Y[#*8.275]Z[#*-2.614] +N2140Y[#*8.775]Z[#*-2.486] +N2150Y[#*9.744]Z[#*-2.289] +N2160Y[#*9.767]Z[#*-2.285] +N2170Y[#*10.025]Z[#*-2.242] +N2180Y[#*10.275]Z[#*-2.228] +N2190Y[#*10.525]Z[#*-2.24] +N2200Y[#*10.775]Z[#*-2.279] +N2210Y[#*11.525]Z[#*-2.494] +N2220Y[#*11.759]Z[#*-2.567] +N2230Y[#*12.025]Z[#*-2.654] +N2240Y[#*12.275]Z[#*-2.763] +N2250Y[#*12.525]Z[#*-2.913] +N2260Y[#*12.65]Z[#*-3.007] +N2270Y[#*12.712]Z[#*-3.059] +N2280Y[#*12.744]Z[#*-3.087] +N2290Y[#*12.962]Z[#*-3.316] +N2300Y[#*13.134]Z[#*-3.548] +N2310Y[#*13.15]Z[#*-3.57] +N2320Y[#*13.158]Z[#*-3.574] +N2330Y[#*13.212]Z[#*-3.503] +N2340Y[#*13.275]Z[#*-3.415] +N2350Y[#*13.744]Z[#*-2.751] +N2360Y[#*13.775]Z[#*-2.713] +N2370Y[#*14.275]Z[#*-2.272] +N2380Y[#*15.275]Z[#*-1.615] +N2390Y[#*15.525]Z[#*-1.469] +N2400Y[#*15.775]Z[#*-1.36] +N2410Y[#*16.275]Z[#*-1.235] +N2420Y[#*17.525]Z[#*-1.] +N2430Y[#*17.775]Z[#*-0.977] +N2440Y[#*18.275]Z[#*-1.014] +N2450Y[#*18.775]Z[#*-1.134] +N2460Y[#*19.775]Z[#*-1.387] +N2470Y[#*20.025]Z[#*-1.474] +N2480Y[#*20.275]Z[#*-1.596] +N2490Y[#*20.775]Z[#*-1.942] +N2500Y[#*21.525]Z[#*-2.482] +N2510Y[#*21.744]Z[#*-2.667] +N2520Y[#*21.775]Z[#*-2.697] +N2530Y[#*22.275]Z[#*-3.373] +N2540Y[#*22.744]Z[#*-4.044] +N2550Y[#*22.876]Z[#*-4.293] +N2560Y[#*22.884] +N2570Y[#*22.9]Z[#*-4.277] +N2580Y[#*23.025]Z[#*-4.128] +N2590Y[#*23.275]Z[#*-3.823] +N2600Y[#*23.525]Z[#*-3.574] +N2610Y[#*23.759]Z[#*-3.402] +N2620Y[#*24.275]Z[#*-3.165] +N2630Y[#*25.275]Z[#*-2.831] +N2640Y[#*25.525]Z[#*-2.776] +N2650Y[#*25.775]Z[#*-2.75] +N2660Y[#*26.275]Z[#*-2.784] +N2670Y[#*27.525]Z[#*-2.998] +N2680Y[#*27.775]Z[#*-3.067] +N2690Y[#*28.275]Z[#*-3.304] +N2700Y[#*29.525]Z[#*-4.166] +N2710Y[#*29.65]Z[#*-4.27] +N2720Y[#*29.775]Z[#*-4.391] +N2730Y[#*30.275]Z[#*-5.054] +N2740Y[#*30.775]Z[#*-5.763] +N2750Y[#*30.9]Z[#*-5.978] +N2760Y[#*31.025]Z[#*-6.272] +N2770Y[#*31.244]Z[#*-7.059] +N2780Y[#*31.275]Z[#*-7.158] +N2790Y[#*31.384]Z[#*-7.531] +N2800Y[#*31.431]Z[#*-7.793] +N2810Y[#*31.447]Z[#*-7.969] +N2820Y[#*31.455]Z[#*-30.5] +N2830Y[#*31.775] +N2840Y[#*34.775] +N2850Y[#*53.] +N2860X[#*47.972]Y[#*53.293] +N2870X[#*47.893]Y[#*53.547] +N2880X[#*47.769]Y[#*53.762] +N2890X[#*47.609]Y[#*53.937] +N2900X[#*47.42]Y[#*54.074] +N2910X[#*47.209]Y[#*54.172] +N2920X[#*46.983]Y[#*54.23] +N2930X[#*46.75]Y[#*54.25] +N2940X[#*46.517]Y[#*54.23] +N2950X[#*46.291]Y[#*54.172] +N2960X[#*46.08]Y[#*54.074] +N2970X[#*45.884]Y[#*53.93] +N2980X[#*45.731]Y[#*53.762] +N2990X[#*45.607]Y[#*53.547] +N3000X[#*45.528]Y[#*53.293] +N3010X[#*45.5]Y[#*53.] +N3020Y[#*32.517] +N3030Y[#*32.509] +N3040Y[#*32.501]Z[#*-7.93] +N3050Y[#*32.485]Z[#*-7.766] +N3060Y[#*32.431]Z[#*-7.458] +N3070Y[#*32.001]Z[#*-5.987] +N3080Y[#*31.751]Z[#*-5.391] +N3090Y[#*31.689]Z[#*-5.283] +N3100Y[#*31.501]Z[#*-5.011] +N3110Y[#*31.251]Z[#*-4.706] +N3120Y[#*31.235]Z[#*-4.687] +N3130Y[#*31.189]Z[#*-4.631] +N3140Y[#*30.751]Z[#*-4.103] +N3150Y[#*30.251]Z[#*-3.547] +N3160Y[#*30.001]Z[#*-3.343] +N3170Y[#*28.751]Z[#*-2.538] +N3180Y[#*28.251]Z[#*-2.264] +N3190Y[#*28.001]Z[#*-2.168] +N3200Y[#*27.751]Z[#*-2.096] +N3210Y[#*26.751]Z[#*-1.837] +N3220Y[#*26.251]Z[#*-1.725] +N3230Y[#*25.751]Z[#*-1.693] +N3240Y[#*25.251]Z[#*-1.746] +N3250Y[#*24.251]Z[#*-1.931] +N3260Y[#*23.751]Z[#*-2.057] +N3270Y[#*23.501]Z[#*-2.156] +N3280Y[#*23.189]Z[#*-2.319] +N3290Y[#*23.025]Z[#*-2.425] +N3300Y[#*23.009]Z[#*-2.427] +N3310Y[#*22.993]Z[#*-2.404] +N3320Y[#*22.97]Z[#*-2.37] +N3330Y[#*22.743]Z[#*-2.063] +N3340Y[#*22.735]Z[#*-2.054] +N3350Y[#*22.501]Z[#*-1.805] +N3360Y[#*22.251]Z[#*-1.594] +N3370Y[#*22.001]Z[#*-1.424] +N3380Y[#*21.751]Z[#*-1.275] +N3390Y[#*20.751]Z[#*-0.682] +N3400Y[#*20.251]Z[#*-0.451] +N3410Y[#*20.001]Z[#*-0.375] +N3420Y[#*19.751]Z[#*-0.322] +N3430Y[#*18.251]Z[#*-0.051] +N3440Y[#*17.751]Z[#*-0.026] +N3450Y[#*17.251]Z[#*-0.081] +N3460Y[#*16.251]Z[#*-0.227] +N3470Y[#*15.751]Z[#*-0.313] +N3480Y[#*15.22]Z[#*-0.497] +N3490Y[#*15.126]Z[#*-0.542] +N3500Y[#*13.751]Z[#*-1.298] +N3510Y[#*13.251]Z[#*-1.665] +N3520Y[#*13.009]Z[#*-1.911] +N3530Y[#*12.751]Z[#*-1.767] +N3540Y[#*12.501]Z[#*-1.658] +N3550Y[#*12.251]Z[#*-1.574] +N3560Y[#*11.751]Z[#*-1.474] +N3570Y[#*10.751]Z[#*-1.333] +N3580Y[#*10.251]Z[#*-1.311] +N3590Y[#*10.001]Z[#*-1.331] +N3600Y[#*9.751]Z[#*-1.373] +N3610Y[#*9.251]Z[#*-1.514] +N3620Y[#*8.251]Z[#*-1.821] +N3630Y[#*7.751]Z[#*-2.021] +N3640Y[#*7.251]Z[#*-2.319] +N3650Y[#*6.251]Z[#*-2.942] +N3660Y[#*5.751]Z[#*-3.33] +N3670Y[#*4.751]Z[#*-4.296] +N3680Y[#*4.251]Z[#*-4.867] +N3690Y[#*3.751]Z[#*-5.681] +N3700Y[#*3.501]Z[#*-6.095] +N3710Y[#*3.251]Z[#*-6.562] +N3720Y[#*3.189]Z[#*-6.718] +N3730Y[#*3.126]Z[#*-6.907] +N3740Y[#*3.001]Z[#*-7.366] +N3750Y[#*2.72]Z[#*-8.443] +N3760Y[#*2.673]Z[#*-8.731] +N3770Y[#*2.657]Z[#*-8.932] +N3780Y[#*2.65]Z[#*-30.5] +N3790Y[#*2.626] +N3800Y[#*2.485] +N3810Y[#*2.251] +N3820Y[#*-2.64] +N3830Y[#*-2.647] +N3840Y[#*-2.655]Z[#*-9.] +N3850Y[#*-2.663]Z[#*-8.838] +N3860Y[#*-2.686]Z[#*-8.628] +N3870Y[#*-2.757]Z[#*-8.289] +N3880Y[#*-2.999]Z[#*-7.374] +N3890Y[#*-3.249]Z[#*-6.567] +N3900Y[#*-3.374]Z[#*-6.311] +N3910Y[#*-3.78]Z[#*-5.634] +N3920Y[#*-4.249]Z[#*-4.87] +N3930Y[#*-4.765]Z[#*-4.283] +N3940Y[#*-4.874]Z[#*-4.178] +N3950Y[#*-5.749]Z[#*-3.332] +N3960Y[#*-6.249]Z[#*-2.943] +N3970Y[#*-7.249]Z[#*-2.32] +N3980Y[#*-7.749]Z[#*-2.022] +N3990Y[#*-8.249]Z[#*-1.822] +N4000Y[#*-9.249]Z[#*-1.515] +N4010Y[#*-9.749]Z[#*-1.374] +N4020Y[#*-10.249]Z[#*-1.311] +N4030Y[#*-10.749]Z[#*-1.333] +N4040Y[#*-11.749]Z[#*-1.473] +N4050Y[#*-12.249]Z[#*-1.573] +N4060Y[#*-12.757]Z[#*-1.77] +N4070Y[#*-12.999]Z[#*-1.905] +N4080Y[#*-13.007]Z[#*-1.91] +N4090Y[#*-13.046]Z[#*-1.871] +N4100Y[#*-13.249]Z[#*-1.667] +N4110Y[#*-13.499]Z[#*-1.463] +N4120Y[#*-13.749]Z[#*-1.3] +N4130Y[#*-14.749]Z[#*-0.747] +N4140Y[#*-15.249]Z[#*-0.484] +N4150Y[#*-15.749]Z[#*-0.314] +N4160Y[#*-15.811]Z[#*-0.299] +N4170Y[#*-15.874]Z[#*-0.286] +N4180Y[#*-16.749]Z[#*-0.155] +N4190Y[#*-17.249]Z[#*-0.082] +N4200Y[#*-17.749]Z[#*-0.027] +N4210Y[#*-17.999]Z[#*-0.028] +N4220Y[#*-18.249]Z[#*-0.05] +N4230Y[#*-19.749]Z[#*-0.321] +N4240Y[#*-20.249]Z[#*-0.451] +N4250Y[#*-20.499]Z[#*-0.552] +N4260Y[#*-20.749]Z[#*-0.681] +N4270Y[#*-21.749]Z[#*-1.274] +N4280Y[#*-22.249]Z[#*-1.592] +N4290Y[#*-22.499]Z[#*-1.803] +N4300Y[#*-22.749]Z[#*-2.07] +N4310Y[#*-23.015]Z[#*-2.432] +N4320Y[#*-23.069]Z[#*-2.395] +N4330Y[#*-23.265]Z[#*-2.275] +N4340Y[#*-23.499]Z[#*-2.157] +N4350Y[#*-23.78]Z[#*-2.047] +N4360Y[#*-23.999]Z[#*-1.984] +N4370Y[#*-24.749]Z[#*-1.838] +N4380Y[#*-25.249]Z[#*-1.746] +N4390Y[#*-25.749]Z[#*-1.693] +N4400Y[#*-25.999]Z[#*-1.698] +N4410Y[#*-26.249]Z[#*-1.724] +N4420Y[#*-26.749]Z[#*-1.836] +N4430Y[#*-27.749]Z[#*-2.096] +N4440Y[#*-28.249]Z[#*-2.263] +N4450Y[#*-28.499]Z[#*-2.385] +N4460Y[#*-28.749]Z[#*-2.537] +N4470Y[#*-29.749]Z[#*-3.176] +N4480Y[#*-30.249]Z[#*-3.545] +N4490Y[#*-30.499]Z[#*-3.8] +N4500Y[#*-31.249]Z[#*-4.704] +N4510Y[#*-31.749]Z[#*-5.387] +N4520Y[#*-31.874]Z[#*-5.639] +N4530Y[#*-31.999]Z[#*-5.979] +N4540Y[#*-32.249]Z[#*-6.819] +N4550Y[#*-32.436]Z[#*-7.482] +N4560Y[#*-32.491]Z[#*-7.814] +N4570Y[#*-32.507]Z[#*-8.05] +N4580Y[#*-32.515]Z[#*-30.5] +N4590Y[#*-32.538] +N4600Y[#*-32.811] +N4610Y[#*-32.999] +N4620Y[#*-37.749] +N4630Y[#*-49.749] +N4640Y[#*-52.992] +N4650Y[#*-53.] +N4660X[#*45.472]Y[#*-53.293] +N4670X[#*45.393]Y[#*-53.547] +N4680X[#*45.269]Y[#*-53.762] +N4690X[#*45.109]Y[#*-53.938] +N4700X[#*44.92]Y[#*-54.074] +N4710X[#*44.709]Y[#*-54.172] +N4720X[#*44.483]Y[#*-54.23] +N4730X[#*44.25]Y[#*-54.25] +N4740X[#*44.017]Y[#*-54.23] +N4750X[#*43.791]Y[#*-54.172] +N4760X[#*43.58]Y[#*-54.074] +N4770X[#*43.391]Y[#*-53.938] +N4780X[#*43.231]Y[#*-53.762] +N4790X[#*43.107]Y[#*-53.547] +N4800X[#*43.028]Y[#*-53.293] +N4810X[#*43.]Y[#*-53.] +N4820Y[#*-50.009] +N4830Y[#*-39.009] +N4840Y[#*-32.524] +N4850Y[#*-32.384] +N4860Y[#*-32.267] +N4870Y[#*-32.235] +N4880Y[#*-32.228]Z[#*-9.305] +N4890Y[#*-32.196]Z[#*-8.689] +N4900Y[#*-32.134]Z[#*-7.801] +N4910Y[#*-32.118]Z[#*-7.679] +N4920Y[#*-32.103]Z[#*-7.586] +N4930Y[#*-32.071]Z[#*-7.439] +N4940Y[#*-32.009]Z[#*-7.22] +N4950Y[#*-31.759]Z[#*-6.589] +N4960Y[#*-31.509]Z[#*-5.992] +N4970Y[#*-31.259]Z[#*-5.478] +N4980Y[#*-31.009]Z[#*-5.132] +N4990Y[#*-30.071]Z[#*-4.022] +N5000Y[#*-30.009]Z[#*-3.958] +N5010Y[#*-29.509]Z[#*-3.562] +N5020Y[#*-28.509]Z[#*-2.877] +N5030Y[#*-28.259]Z[#*-2.733] +N5040Y[#*-28.009]Z[#*-2.62] +N5050Y[#*-27.509]Z[#*-2.469] +N5060Y[#*-26.509]Z[#*-2.197] +N5070Y[#*-26.259]Z[#*-2.149] +N5080Y[#*-26.009]Z[#*-2.124] +N5090Y[#*-25.509]Z[#*-2.143] +N5100Y[#*-24.509]Z[#*-2.283] +N5110Y[#*-24.259]Z[#*-2.325] +N5120Y[#*-24.009]Z[#*-2.391] +N5130Y[#*-23.759]Z[#*-2.483] +N5140Y[#*-23.509]Z[#*-2.603] +N5150Y[#*-23.259]Z[#*-2.757] +N5160Y[#*-23.009]Z[#*-2.951] +N5170Y[#*-22.509]Z[#*-2.342] +N5180Y[#*-22.259]Z[#*-2.066] +N5190Y[#*-22.009]Z[#*-1.851] +N5200Y[#*-21.509]Z[#*-1.538] +N5210Y[#*-20.509]Z[#*-0.968] +N5220Y[#*-20.259]Z[#*-0.848] +N5230Y[#*-20.009]Z[#*-0.756] +N5240Y[#*-19.509]Z[#*-0.642] +N5250Y[#*-18.259]Z[#*-0.407] +N5260Y[#*-18.009]Z[#*-0.382] +N5270Y[#*-17.509]Z[#*-0.4] +N5280Y[#*-16.04]Z[#*-0.642] +N5290Y[#*-15.759]Z[#*-0.709] +N5300Y[#*-15.509]Z[#*-0.796] +N5310Y[#*-15.009]Z[#*-1.047] +N5320Y[#*-14.509]Z[#*-1.321] +N5330Y[#*-14.134]Z[#*-1.526] +N5340Y[#*-14.009]Z[#*-1.596] +N5350Y[#*-13.759]Z[#*-1.76] +N5360Y[#*-13.509]Z[#*-1.969] +N5370Y[#*-13.259]Z[#*-2.236] +N5380Y[#*-13.024]Z[#*-2.514] +N5390Y[#*-13.009]Z[#*-2.533] +N5400Y[#*-12.993]Z[#*-2.545] +N5410Y[#*-12.946]Z[#*-2.507] +N5420Y[#*-12.759]Z[#*-2.372] +N5430Y[#*-12.509]Z[#*-2.226] +N5440Y[#*-12.259]Z[#*-2.113] +N5450Y[#*-12.134]Z[#*-2.067] +N5460Y[#*-12.009]Z[#*-2.028] +N5470Y[#*-11.509]Z[#*-1.935] +N5480Y[#*-10.509]Z[#*-1.852] +N5490Y[#*-10.259]Z[#*-1.842] +N5500Y[#*-10.009]Z[#*-1.855] +N5510Y[#*-9.509]Z[#*-1.955] +N5520Y[#*-8.259]Z[#*-2.361] +N5530Y[#*-8.009]Z[#*-2.46] +N5540Y[#*-7.509]Z[#*-2.749] +N5550Y[#*-6.509]Z[#*-3.423] +N5560Y[#*-6.009]Z[#*-3.813] +N5570Y[#*-5.009]Z[#*-4.81] +N5580Y[#*-4.509]Z[#*-5.47] +N5590Y[#*-4.009]Z[#*-6.157] +N5600Y[#*-3.759]Z[#*-6.593] +N5610Y[#*-3.384]Z[#*-7.528] +N5620Y[#*-3.321]Z[#*-7.693] +N5630Y[#*-3.259]Z[#*-7.859] +N5640Y[#*-3.196]Z[#*-8.029] +N5650Y[#*-3.103]Z[#*-8.351] +N5660Y[#*-3.048]Z[#*-8.681] +N5670Y[#*-3.032]Z[#*-8.89] +N5680Y[#*-2.993]Z[#*-9.595] +N5690Y[#*-2.97]Z[#*-10.132] +N5700Y[#*-2.962]Z[#*-30.5] +N5710Y[#*-2.946] +N5720Y[#*-1.009] +N5730Y[#*-0.009] +N5740Y[#*2.866] +N5750Y[#*2.96] +N5760Y[#*2.968]Z[#*-10.186] +N5770Y[#*3.038]Z[#*-8.8] +N5780Y[#*3.061]Z[#*-8.573] +N5790Y[#*3.077]Z[#*-8.476] +N5800Y[#*3.116]Z[#*-8.294] +N5810Y[#*3.241]Z[#*-7.907] +N5820Y[#*3.491]Z[#*-7.251] +N5830Y[#*3.741]Z[#*-6.632] +N5840Y[#*3.991]Z[#*-6.184] +N5850Y[#*4.491]Z[#*-5.495] +N5860Y[#*4.991]Z[#*-4.83] +N5870Y[#*5.991]Z[#*-3.83] +N5880Y[#*6.491]Z[#*-3.435] +N5890Y[#*6.991]Z[#*-3.1] +N5900Y[#*7.741]Z[#*-2.599] +N5910Y[#*7.991]Z[#*-2.468] +N5920Y[#*8.491]Z[#*-2.285] +N5930Y[#*9.491]Z[#*-1.96] +N5940Y[#*9.741]Z[#*-1.896] +N5950Y[#*9.866]Z[#*-1.874] +N5960Y[#*9.991]Z[#*-1.857] +N5970Y[#*10.491]Z[#*-1.851] +N5980Y[#*11.491]Z[#*-1.934] +N5990Y[#*11.741]Z[#*-1.966] +N6000Y[#*11.929]Z[#*-2.007] +N6010Y[#*12.241]Z[#*-2.106] +N6020Y[#*12.491]Z[#*-2.217] +N6030Y[#*12.741]Z[#*-2.36] +N6040Y[#*12.999]Z[#*-2.545] +N6050Y[#*13.366]Z[#*-2.113] +N6060Y[#*13.491]Z[#*-1.986] +N6070Y[#*13.991]Z[#*-1.606] +N6080Y[#*15.241]Z[#*-0.92] +N6090Y[#*15.491]Z[#*-0.803] +N6100Y[#*15.991]Z[#*-0.652] +N6110Y[#*17.491]Z[#*-0.402] +N6120Y[#*17.741]Z[#*-0.38] +N6130Y[#*17.991] +N6140Y[#*18.491]Z[#*-0.448] +N6150Y[#*19.866]Z[#*-0.715] +N6160Y[#*19.991]Z[#*-0.75] +N6170Y[#*20.491]Z[#*-0.959] +N6180Y[#*21.741]Z[#*-1.67] +N6190Y[#*21.929]Z[#*-1.792] +N6200Y[#*21.991]Z[#*-1.837] +N6210Y[#*22.491]Z[#*-2.319] +N6220Y[#*22.976]Z[#*-2.912] +N6230Y[#*22.991]Z[#*-2.931] +N6240Y[#*23.007]Z[#*-2.95] +N6250Y[#*23.241]Z[#*-2.769] +N6260Y[#*23.491]Z[#*-2.613] +N6270Y[#*23.741]Z[#*-2.49] +N6280Y[#*23.991]Z[#*-2.397] +N6290Y[#*24.491]Z[#*-2.286] +N6300Y[#*24.991]Z[#*-2.215] +N6310Y[#*25.491]Z[#*-2.145] +N6320Y[#*25.741]Z[#*-2.123] +N6330Y[#*25.991] +N6340Y[#*26.491]Z[#*-2.193] +N6350Y[#*27.866]Z[#*-2.569] +N6360Y[#*27.976]Z[#*-2.608] +N6370Y[#*28.491]Z[#*-2.866] +N6380Y[#*29.491]Z[#*-3.55] +N6390Y[#*29.741]Z[#*-3.725] +N6400Y[#*29.991]Z[#*-3.94] +N6410Y[#*30.741]Z[#*-4.813] +N6420Y[#*30.866]Z[#*-4.962] +N6430Y[#*30.991]Z[#*-5.111] +N6440Y[#*31.491]Z[#*-5.95] +N6450Y[#*31.991]Z[#*-7.168] +N6460Y[#*32.085]Z[#*-7.498] +N6470Y[#*32.132]Z[#*-7.782] +N6480Y[#*32.147]Z[#*-7.96] +N6490Y[#*32.218]Z[#*-9.089] +N6500Y[#*32.226]Z[#*-9.257] +N6510Y[#*32.233]Z[#*-30.5] +N6520Y[#*52.999] +N6530X[#*42.972]Y[#*53.292] +N6540X[#*42.893]Y[#*53.546] +N6550X[#*42.769]Y[#*53.761] +N6560X[#*42.609]Y[#*53.937] +N6570X[#*42.42]Y[#*54.074] +N6580X[#*42.209]Y[#*54.171] +N6590X[#*41.983]Y[#*54.23] +N6600X[#*41.75]Y[#*54.25] +N6610X[#*41.517]Y[#*54.23] +N6620X[#*41.291]Y[#*54.172] +N6630X[#*41.08]Y[#*54.074] +N6640X[#*40.891]Y[#*53.937] +N6650X[#*40.731]Y[#*53.762] +N6660X[#*40.607]Y[#*53.547] +N6670X[#*40.528]Y[#*53.293] +N6680X[#*40.5]Y[#*53.] +N6690Y[#*52.961] +N6700Y[#*34.961] +N6710Y[#*30.54] +N6720Y[#*30.532]Z[#*-9.059] +N6730Y[#*30.524]Z[#*-8.985] +N6740Y[#*30.485]Z[#*-8.772] +N6750Y[#*30.399]Z[#*-8.503] +N6760Y[#*30.211]Z[#*-8.05] +N6770Y[#*29.711]Z[#*-6.883] +N6780Y[#*29.461]Z[#*-6.379] +N6790Y[#*29.336]Z[#*-6.201] +N6800Y[#*29.211]Z[#*-6.058] +N6810Y[#*29.086]Z[#*-5.94] +N6820Y[#*28.93]Z[#*-5.809] +N6830Y[#*28.899]Z[#*-5.784] +N6840Y[#*27.961]Z[#*-5.023] +N6850Y[#*27.461]Z[#*-4.725] +N6860Y[#*27.336]Z[#*-4.68] +N6870Y[#*26.711]Z[#*-4.523] +N6880Y[#*25.961]Z[#*-4.353] +N6890Y[#*25.711]Z[#*-4.334] +N6900Y[#*25.461]Z[#*-4.351] +N6910Y[#*25.336]Z[#*-4.372] +N6920Y[#*24.461]Z[#*-4.589] +N6930Y[#*23.961]Z[#*-4.787] +N6940Y[#*23.711]Z[#*-4.913] +N6950Y[#*23.461]Z[#*-5.061] +N6960Y[#*22.961]Z[#*-5.414] +N6970Y[#*22.782]Z[#*-5.553] +N6980Y[#*22.704]Z[#*-5.427] +N6990Y[#*22.68]Z[#*-5.389] +N7000Y[#*22.649]Z[#*-5.339] +N7010Y[#*22.446]Z[#*-5.064] +N7020Y[#*22.336]Z[#*-4.929] +N7030Y[#*21.961]Z[#*-4.5] +N7040Y[#*21.461]Z[#*-4.013] +N7050Y[#*20.961]Z[#*-3.61] +N7060Y[#*20.461]Z[#*-3.273] +N7070Y[#*19.961]Z[#*-2.95] +N7080Y[#*19.711]Z[#*-2.846] +N7090Y[#*18.461]Z[#*-2.512] +N7100Y[#*17.961]Z[#*-2.415] +N7110Y[#*17.836]Z[#*-2.412] +N7120Y[#*17.711]Z[#*-2.419] +N7130Y[#*17.461]Z[#*-2.463] +N7140Y[#*16.961]Z[#*-2.59] +N7150Y[#*15.961]Z[#*-2.87] +N7160Y[#*15.711]Z[#*-2.981] +N7170Y[#*15.461]Z[#*-3.13] +N7180Y[#*14.961]Z[#*-3.478] +N7190Y[#*14.461]Z[#*-3.875] +N7200Y[#*13.961]Z[#*-4.334] +N7210Y[#*13.461]Z[#*-4.858] +N7220Y[#*13.211]Z[#*-5.161] +N7230Y[#*13.047]Z[#*-5.394] +N7240Y[#*12.993]Z[#*-5.342] +N7250Y[#*12.711]Z[#*-5.115] +N7260Y[#*12.461]Z[#*-4.943] +N7270Y[#*11.961]Z[#*-4.68] +N7280Y[#*11.954]Z[#*-4.676] +N7290Y[#*11.899]Z[#*-4.655] +N7300Y[#*11.461]Z[#*-4.484] +N7310Y[#*10.961]Z[#*-4.323] +N7320Y[#*10.461]Z[#*-4.223] +N7330Y[#*10.211]Z[#*-4.211] +N7340Y[#*9.93]Z[#*-4.24] +N7350Y[#*8.961]Z[#*-4.501] +N7360Y[#*8.461]Z[#*-4.641] +N7370Y[#*8.211]Z[#*-4.743] +N7380Y[#*7.954]Z[#*-4.896] +N7390Y[#*7.461]Z[#*-5.277] +N7400Y[#*6.961]Z[#*-5.688] +N7410Y[#*6.461]Z[#*-6.205] +N7420Y[#*6.211]Z[#*-6.573] +N7430Y[#*5.461]Z[#*-7.753] +N7440Y[#*5.211]Z[#*-8.345] +N7450Y[#*4.961]Z[#*-9.178] +N7460Y[#*4.875]Z[#*-9.565] +N7470Y[#*4.844]Z[#*-9.725] +N7480Y[#*4.805]Z[#*-10.002] +N7490Y[#*4.797]Z[#*-26.444] +N7500Y[#*4.782]Z[#*-26.437] +N7510Y[#*4.696]Z[#*-26.399] +N7520Y[#*4.649]Z[#*-26.379] +N7530Y[#*4.586]Z[#*-26.352] +N7540Y[#*4.461]Z[#*-26.298] +N7550Y[#*4.399]Z[#*-26.27] +N7560Y[#*3.961]Z[#*-26.084] +N7570Y[#*3.836]Z[#*-26.031] +N7580Y[#*3.461]Z[#*-25.887] +N7590Y[#*2.961]Z[#*-25.732] +N7600Y[#*1.961]Z[#*-25.509] +N7610Y[#*1.461]Z[#*-25.455] +N7620Y[#*-0.039]Z[#*-25.355] +N7630Y[#*-1.539]Z[#*-25.46] +N7640Y[#*-2.039]Z[#*-25.526] +N7650Y[#*-2.539]Z[#*-25.635] +N7660Y[#*-3.039]Z[#*-25.756] +N7670Y[#*-3.539]Z[#*-25.911] +N7680Y[#*-4.039]Z[#*-26.117] +N7690Y[#*-4.796]Z[#*-26.443] +N7700Y[#*-4.804]Z[#*-10.] +N7710Y[#*-4.843]Z[#*-9.725] +N7720Y[#*-4.89]Z[#*-9.49] +N7730Y[#*-4.921]Z[#*-9.346] +N7740Y[#*-4.976]Z[#*-9.115] +N7750Y[#*-5.101]Z[#*-8.668] +N7760Y[#*-5.289]Z[#*-8.123] +N7770Y[#*-5.539]Z[#*-7.62] +N7780Y[#*-5.601]Z[#*-7.521] +N7790Y[#*-6.039]Z[#*-6.842] +N7800Y[#*-6.539]Z[#*-6.106] +N7810Y[#*-6.789]Z[#*-5.838] +N7820Y[#*-7.039]Z[#*-5.623] +N7830Y[#*-7.539]Z[#*-5.216] +N7840Y[#*-8.039]Z[#*-4.839] +N7850Y[#*-8.164]Z[#*-4.767] +N7860Y[#*-8.289]Z[#*-4.707] +N7870Y[#*-8.539]Z[#*-4.617] +N7880Y[#*-9.539]Z[#*-4.342] +N7890Y[#*-10.039]Z[#*-4.223] +N7900Y[#*-10.289]Z[#*-4.211] +N7910Y[#*-10.539]Z[#*-4.234] +N7920Y[#*-10.789]Z[#*-4.282] +N7930Y[#*-11.039]Z[#*-4.343] +N7940Y[#*-11.289]Z[#*-4.42] +N7950Y[#*-12.039]Z[#*-4.713] +N7960Y[#*-12.539]Z[#*-4.994] +N7970Y[#*-13.046]Z[#*-5.393] +N7980Y[#*-13.289]Z[#*-5.06] +N7990Y[#*-13.539]Z[#*-4.771] +N8000Y[#*-14.039]Z[#*-4.262] +N8010Y[#*-14.539]Z[#*-3.805] +N8020Y[#*-15.039]Z[#*-3.426] +N8030Y[#*-15.539]Z[#*-3.08] +N8040Y[#*-16.039]Z[#*-2.843] +N8050Y[#*-16.101]Z[#*-2.824] +N8060Y[#*-16.539]Z[#*-2.705] +N8070Y[#*-17.039]Z[#*-2.569] +N8080Y[#*-17.539]Z[#*-2.445] +N8090Y[#*-17.789]Z[#*-2.414] +N8100Y[#*-18.039]Z[#*-2.422] +N8110Y[#*-18.289]Z[#*-2.47] +N8120Y[#*-19.539]Z[#*-2.795] +N8130Y[#*-20.039]Z[#*-2.99] +N8140Y[#*-20.289]Z[#*-3.145] +N8150Y[#*-20.539]Z[#*-3.33] +N8160Y[#*-21.039]Z[#*-3.665] +N8170Y[#*-21.539]Z[#*-4.083] +N8180Y[#*-22.039]Z[#*-4.584] +N8190Y[#*-22.539]Z[#*-5.181] +N8200Y[#*-22.664]Z[#*-5.363] +N8210Y[#*-22.773]Z[#*-5.539] +N8220Y[#*-22.789]Z[#*-5.553] +N8230Y[#*-22.804]Z[#*-5.54] +N8240Y[#*-22.914]Z[#*-5.452] +N8250Y[#*-23.164]Z[#*-5.263] +N8260Y[#*-23.539]Z[#*-5.013] +N8270Y[#*-24.039]Z[#*-4.753] +N8280Y[#*-24.289]Z[#*-4.649] +N8290Y[#*-24.539]Z[#*-4.565] +N8300Y[#*-25.039]Z[#*-4.443] +N8310Y[#*-25.539]Z[#*-4.342] +N8320Y[#*-25.789]Z[#*-4.336] +N8330Y[#*-26.101]Z[#*-4.379] +N8340Y[#*-26.539]Z[#*-4.481] +N8350Y[#*-27.039]Z[#*-4.603] +N8360Y[#*-27.539]Z[#*-4.758] +N8370Y[#*-27.664]Z[#*-4.821] +N8380Y[#*-27.789]Z[#*-4.897] +N8390Y[#*-28.039]Z[#*-5.086] +N8400Y[#*-28.046]Z[#*-5.092] +N8410Y[#*-28.539]Z[#*-5.492] +N8420Y[#*-29.039]Z[#*-5.899] +N8430Y[#*-29.289]Z[#*-6.143] +N8440Y[#*-29.414]Z[#*-6.306] +N8450Y[#*-29.539]Z[#*-6.515] +N8460Y[#*-29.601]Z[#*-6.638] +N8470Y[#*-30.289]Z[#*-8.23] +N8480Y[#*-30.414]Z[#*-8.543] +N8490Y[#*-30.492]Z[#*-8.801] +N8500Y[#*-30.531]Z[#*-9.049] +N8510Y[#*-30.539]Z[#*-30.5] +N8520Y[#*-30.546] +N8530Y[#*-31.039] +N8540Y[#*-31.101] +N8550Y[#*-33.039] +N8560Y[#*-39.039] +N8570Y[#*-46.039] +N8580Y[#*-50.039] +N8590Y[#*-53.] +N8600X[#*40.472]Y[#*-53.293] +N8610X[#*40.393]Y[#*-53.547] +N8620X[#*40.269]Y[#*-53.762] +N8630X[#*40.109]Y[#*-53.938] +N8640X[#*39.92]Y[#*-54.074] +N8650X[#*39.709]Y[#*-54.172] +N8660X[#*39.483]Y[#*-54.23] +N8670X[#*39.25]Y[#*-54.25] +N8680X[#*39.017]Y[#*-54.23] +N8690X[#*38.791]Y[#*-54.172] +N8700X[#*38.58]Y[#*-54.074] +N8710X[#*38.391]Y[#*-53.938] +N8720X[#*38.231]Y[#*-53.762] +N8730X[#*38.107]Y[#*-53.547] +N8740X[#*38.028]Y[#*-53.293] +N8750X[#*38.]Y[#*-53.] +N8760Y[#*-51.974] +N8770Y[#*-45.974] +N8780Y[#*-31.974] +N8790Y[#*-29.974] +N8800Y[#*-23.349] +N8810Y[#*-23.099] +N8820Y[#*-23.052] +N8830Y[#*-23.037] +N8840Y[#*-23.021] +N8850Y[#*-22.982] +N8860Y[#*-22.974]Z[#*-27.943] +N8870Y[#*-22.951]Z[#*-27.17] +N8880Y[#*-22.943]Z[#*-26.419] +N8890Y[#*-22.912]Z[#*-26.088] +N8900Y[#*-22.888]Z[#*-25.919] +N8910Y[#*-22.88]Z[#*-25.863] +N8920Y[#*-22.833]Z[#*-25.591] +N8930Y[#*-22.787]Z[#*-25.383] +N8940Y[#*-22.724]Z[#*-25.157] +N8950Y[#*-22.474]Z[#*-24.512] +N8960Y[#*-22.099]Z[#*-23.723] +N8970Y[#*-21.974]Z[#*-23.481] +N8980Y[#*-21.724]Z[#*-23.112] +N8990Y[#*-21.474]Z[#*-22.836] +N9000Y[#*-20.974]Z[#*-22.446] +N9010Y[#*-19.474]Z[#*-21.501] +N9020Y[#*-19.224]Z[#*-21.374] +N9030Y[#*-18.974]Z[#*-21.276] +N9040Y[#*-18.474]Z[#*-21.155] +N9050Y[#*-17.474]Z[#*-20.992] +N9060Y[#*-16.974]Z[#*-20.902] +N9070Y[#*-16.474]Z[#*-20.833] +N9080Y[#*-15.974]Z[#*-20.845] +N9090Y[#*-14.974]Z[#*-20.989] +N9100Y[#*-14.037]Z[#*-21.108] +N9110Y[#*-13.724]Z[#*-21.185] +N9120Y[#*-13.474]Z[#*-21.275] +N9130Y[#*-12.974]Z[#*-21.535] +N9140Y[#*-11.724]Z[#*-22.283] +N9150Y[#*-11.474]Z[#*-22.457] +N9160Y[#*-11.224]Z[#*-22.676] +N9170Y[#*-11.099]Z[#*-22.808] +N9180Y[#*-10.974]Z[#*-22.959] +N9190Y[#*-10.724]Z[#*-23.343] +N9200Y[#*-10.474]Z[#*-23.888] +N9210Y[#*-10.224]Z[#*-24.457] +N9220Y[#*-10.099]Z[#*-24.782] +N9230Y[#*-9.99]Z[#*-25.161] +N9240Y[#*-9.919]Z[#*-25.513] +N9250Y[#*-9.865]Z[#*-25.981] +N9260Y[#*-9.857]Z[#*-27.866] +N9270Y[#*-9.724]Z[#*-27.561] +N9280Y[#*-9.474]Z[#*-27.143] +N9290Y[#*-8.974]Z[#*-26.388] +N9300Y[#*-8.474]Z[#*-25.75] +N9310Y[#*-7.974]Z[#*-25.201] +N9320Y[#*-7.474]Z[#*-24.713] +N9330Y[#*-6.474]Z[#*-23.889] +N9340Y[#*-5.474]Z[#*-23.25] +N9350Y[#*-4.974]Z[#*-22.983] +N9360Y[#*-3.974]Z[#*-22.519] +N9370Y[#*-3.474]Z[#*-22.358] +N9380Y[#*-2.974]Z[#*-22.195] +N9390Y[#*-2.474]Z[#*-22.063] +N9400Y[#*-1.974]Z[#*-21.968] +N9410Y[#*-0.974]Z[#*-21.835] +N9420Y[#*0.026]Z[#*-21.781] +N9430Y[#*1.026]Z[#*-21.838] +N9440Y[#*1.526]Z[#*-21.888] +N9450Y[#*2.026]Z[#*-21.978] +N9460Y[#*3.026]Z[#*-22.213] +N9470Y[#*4.026]Z[#*-22.539] +N9480Y[#*5.026]Z[#*-23.008] +N9490Y[#*5.526]Z[#*-23.283] +N9500Y[#*6.026]Z[#*-23.601] +N9510Y[#*6.526]Z[#*-23.926] +N9520Y[#*7.526]Z[#*-24.753] +N9530Y[#*8.026]Z[#*-25.256] +N9540Y[#*8.526]Z[#*-25.804] +N9550Y[#*8.776]Z[#*-26.093] +N9560Y[#*8.901]Z[#*-26.274] +N9570Y[#*9.01]Z[#*-26.437] +N9580Y[#*9.276]Z[#*-26.832] +N9590Y[#*9.401]Z[#*-27.022] +N9600Y[#*9.526]Z[#*-27.213] +N9610Y[#*9.651]Z[#*-27.411] +N9620Y[#*9.713]Z[#*-27.527] +N9630Y[#*9.768]Z[#*-27.644] +N9640Y[#*9.823]Z[#*-27.771] +N9650Y[#*9.831]Z[#*-26.079] +N9660Y[#*9.838]Z[#*-25.933] +N9670Y[#*9.87]Z[#*-25.651] +N9680Y[#*9.924]Z[#*-25.326] +N9690Y[#*9.963]Z[#*-25.153] +N9700Y[#*10.026]Z[#*-24.925] +N9710Y[#*10.276]Z[#*-24.275] +N9720Y[#*10.526]Z[#*-23.694] +N9730Y[#*10.776]Z[#*-23.195] +N9740Y[#*10.901]Z[#*-23.011] +N9750Y[#*11.026]Z[#*-22.853] +N9760Y[#*11.276]Z[#*-22.595] +N9770Y[#*11.526]Z[#*-22.393] +N9780Y[#*12.526]Z[#*-21.779] +N9790Y[#*13.026]Z[#*-21.486] +N9800Y[#*13.276]Z[#*-21.349] +N9810Y[#*13.526]Z[#*-21.242] +N9820Y[#*14.026]Z[#*-21.105] +N9830Y[#*15.026]Z[#*-20.977] +N9840Y[#*16.026]Z[#*-20.838] +N9850Y[#*16.526] +N9860Y[#*18.526]Z[#*-21.166] +N9870Y[#*18.776]Z[#*-21.221] +N9880Y[#*18.901]Z[#*-21.257] +N9890Y[#*19.026]Z[#*-21.3] +N9900Y[#*19.526]Z[#*-21.54] +N9910Y[#*20.526]Z[#*-22.172] +N9920Y[#*20.963]Z[#*-22.444] +N9930Y[#*21.276]Z[#*-22.666] +N9940Y[#*21.526]Z[#*-22.895] +N9950Y[#*21.776]Z[#*-23.19] +N9960Y[#*21.963]Z[#*-23.476] +N9970Y[#*22.026]Z[#*-23.59] +N9980Y[#*22.276]Z[#*-24.108] +N9990Y[#*22.526]Z[#*-24.634] +N1Y[#*22.651]Z[#*-24.947] +N11Y[#*22.776]Z[#*-25.357] +N21Y[#*22.862]Z[#*-25.768] +N31Y[#*22.893]Z[#*-25.982] +N41Y[#*22.932]Z[#*-26.301] +N51Y[#*22.94]Z[#*-26.443] +N61Y[#*22.948]Z[#*-27.152] +N71Y[#*22.971]Z[#*-27.867] +N81Y[#*22.979]Z[#*-28.108] +N91Y[#*22.987]Z[#*-30.5] +N101Y[#*38.026] +N111Y[#*53.] +N121X[#*37.972]Y[#*53.293] +N131X[#*37.893]Y[#*53.547] +N141X[#*37.769]Y[#*53.762] +N151X[#*37.609]Y[#*53.937] +N161X[#*37.42]Y[#*54.074] +N171X[#*37.209]Y[#*54.172] +N181X[#*36.983]Y[#*54.23] +N191X[#*36.75]Y[#*54.25] +N201X[#*36.517]Y[#*54.23] +N211X[#*36.291]Y[#*54.172] +N221X[#*36.08]Y[#*54.074] +N231X[#*35.891]Y[#*53.937] +N241X[#*35.731]Y[#*53.762] +N251X[#*35.607]Y[#*53.547] +N261X[#*35.528]Y[#*53.293] +N271X[#*35.5]Y[#*53.] +N281Y[#*48.823] +N291Y[#*45.823] +N301Y[#*40.823] +N311Y[#*35.823] +N321Y[#*23.323] +N331Y[#*23.261] +N341Y[#*23.222] +N351Y[#*23.214]Z[#*-28.173] +N361Y[#*23.191]Z[#*-27.925] +N371Y[#*23.066]Z[#*-26.499] +N381Y[#*23.058]Z[#*-26.418] +N391Y[#*23.042]Z[#*-26.298] +N401Y[#*22.98]Z[#*-25.992] +N411Y[#*22.886]Z[#*-25.695] +N421Y[#*22.761]Z[#*-25.406] +N431Y[#*22.573]Z[#*-25.021] +N441Y[#*22.073]Z[#*-23.993] +N451Y[#*21.823]Z[#*-23.584] +N461Y[#*21.761]Z[#*-23.501] +N471Y[#*21.573]Z[#*-23.283] +N481Y[#*21.323]Z[#*-23.047] +N491Y[#*21.073]Z[#*-22.856] +N501Y[#*19.823]Z[#*-22.004] +N511Y[#*19.323]Z[#*-21.724] +N521Y[#*19.073]Z[#*-21.626] +N531Y[#*18.761]Z[#*-21.538] +N541Y[#*17.823]Z[#*-21.326] +N551Y[#*17.323]Z[#*-21.199] +N561Y[#*16.823]Z[#*-21.103] +N571Y[#*16.573]Z[#*-21.087] +N581Y[#*15.823]Z[#*-21.091] +N591Y[#*14.823]Z[#*-21.159] +N601Y[#*14.323]Z[#*-21.209] +N611Y[#*13.823]Z[#*-21.34] +N621Y[#*13.573]Z[#*-21.443] +N631Y[#*13.323]Z[#*-21.57] +N641Y[#*12.823]Z[#*-21.833] +N651Y[#*12.323]Z[#*-22.043] +N661Y[#*11.823]Z[#*-22.304] +N671Y[#*11.573]Z[#*-22.486] +N681Y[#*11.323]Z[#*-22.712] +N691Y[#*11.073]Z[#*-22.999] +N701Y[#*10.823]Z[#*-23.385] +N711Y[#*10.698]Z[#*-23.639] +N721Y[#*10.433]Z[#*-24.211] +N731Y[#*10.425]Z[#*-24.214] +N741Y[#*10.308]Z[#*-24.109] +N751Y[#*10.261]Z[#*-24.067] +N761Y[#*10.073]Z[#*-23.912] +N771Y[#*9.698]Z[#*-23.614] +N781Y[#*9.323]Z[#*-23.287] +N791Y[#*8.823]Z[#*-22.866] +N801Y[#*7.823]Z[#*-21.995] +N811Y[#*7.323]Z[#*-21.605] +N821Y[#*6.323]Z[#*-20.944] +N831Y[#*5.823]Z[#*-20.661] +N841Y[#*4.823]Z[#*-20.177] +N851Y[#*4.323]Z[#*-19.991] +N861Y[#*3.823]Z[#*-19.822] +N871Y[#*2.823]Z[#*-19.534] +N881Y[#*1.823]Z[#*-19.328] +N891Y[#*1.323]Z[#*-19.266] +N901Y[#*0.823]Z[#*-19.231] +N911Y[#*0.323]Z[#*-19.196] +N921Y[#*-0.177]Z[#*-19.185] +N931Y[#*-1.177]Z[#*-19.256] +N941Y[#*-2.177]Z[#*-19.401] +N951Y[#*-3.177]Z[#*-19.609] +N961Y[#*-4.177]Z[#*-19.942] +N971Y[#*-5.177]Z[#*-20.345] +N981Y[#*-5.677]Z[#*-20.588] +N991Y[#*-6.177]Z[#*-20.847] +N1001Y[#*-6.677]Z[#*-21.182] +N1011Y[#*-7.177]Z[#*-21.504] +N1021Y[#*-7.677]Z[#*-21.879] +N1031Y[#*-8.177]Z[#*-22.282] +N1041Y[#*-9.177]Z[#*-23.153] +N1051Y[#*-10.177]Z[#*-23.971] +N1061Y[#*-10.427]Z[#*-24.188] +N1071Y[#*-10.489]Z[#*-24.244] +N1081Y[#*-10.497]Z[#*-24.234] +N1091Y[#*-10.802]Z[#*-23.597] +N1101Y[#*-10.927]Z[#*-23.351] +N1111Y[#*-11.177]Z[#*-22.976] +N1121Y[#*-11.239]Z[#*-22.898] +N1131Y[#*-11.427]Z[#*-22.694] +N1141Y[#*-11.677]Z[#*-22.472] +N1151Y[#*-11.927]Z[#*-22.293] +N1161Y[#*-12.177]Z[#*-22.15] +N1171Y[#*-12.677]Z[#*-21.93] +N1181Y[#*-13.177]Z[#*-21.69] +N1191Y[#*-13.677]Z[#*-21.431] +N1201Y[#*-14.177]Z[#*-21.257] +N1211Y[#*-14.302]Z[#*-21.228] +N1221Y[#*-14.427]Z[#*-21.205] +N1231Y[#*-14.677]Z[#*-21.175] +N1241Y[#*-15.177]Z[#*-21.139] +N1251Y[#*-16.177]Z[#*-21.087] +N1261Y[#*-16.677]Z[#*-21.088] +N1271Y[#*-17.177]Z[#*-21.149] +N1281Y[#*-17.677]Z[#*-21.282] +N1291Y[#*-18.677]Z[#*-21.511] +N1301Y[#*-19.177]Z[#*-21.65] +N1311Y[#*-19.427]Z[#*-21.755] +N1321Y[#*-19.677]Z[#*-21.887] +N1331Y[#*-20.177]Z[#*-22.223] +N1341Y[#*-21.177]Z[#*-22.918] +N1351Y[#*-21.677]Z[#*-23.378] +N1361Y[#*-21.802]Z[#*-23.531] +N1371Y[#*-21.927]Z[#*-23.708] +N1381Y[#*-22.192]Z[#*-24.204] +N1391Y[#*-22.302]Z[#*-24.432] +N1401Y[#*-22.677]Z[#*-25.214] +N1411Y[#*-22.927]Z[#*-25.789] +N1421Y[#*-22.989]Z[#*-26.001] +N1431Y[#*-23.052]Z[#*-26.313] +N1441Y[#*-23.091]Z[#*-26.711] +N1451Y[#*-23.177]Z[#*-27.735] +N1461Y[#*-23.192]Z[#*-27.921] +N1471Y[#*-23.216]Z[#*-28.18] +N1481Y[#*-23.223]Z[#*-30.5] +N1491Y[#*-23.434] +N1501Y[#*-25.177] +N1511Y[#*-53.] +N1521X[#*35.472]Y[#*-53.293] +N1531X[#*35.393]Y[#*-53.547] +N1541X[#*35.269]Y[#*-53.762] +N1551X[#*35.109]Y[#*-53.938] +N1561X[#*34.92]Y[#*-54.074] +N1571X[#*34.709]Y[#*-54.172] +N1581X[#*34.483]Y[#*-54.23] +N1591X[#*34.25]Y[#*-54.25] +N1601X[#*34.017]Y[#*-54.23] +N1611X[#*33.791]Y[#*-54.172] +N1621X[#*33.58]Y[#*-54.074] +N1631X[#*33.391]Y[#*-53.938] +N1641X[#*33.231]Y[#*-53.762] +N1651X[#*33.107]Y[#*-53.547] +N1661X[#*33.028]Y[#*-53.293] +N1671X[#*33.]Y[#*-53.] +N1681Y[#*-51.859] +N1691Y[#*-49.859] +N1701Y[#*-36.859] +N1711Y[#*-24.109] +N1721Y[#*-23.875] +N1731Y[#*-23.859] +N1741Y[#*-23.625] +N1751Y[#*-23.554] +N1761Y[#*-23.531] +N1771Y[#*-23.523]Z[#*-28.492] +N1781Y[#*-23.507]Z[#*-28.31] +N1791Y[#*-23.406]Z[#*-27.347] +N1801Y[#*-23.375]Z[#*-27.06] +N1811Y[#*-23.32]Z[#*-26.608] +N1821Y[#*-23.304]Z[#*-26.487] +N1831Y[#*-23.281]Z[#*-26.349] +N1841Y[#*-23.234]Z[#*-26.145] +N1851Y[#*-23.109]Z[#*-25.774] +N1861Y[#*-22.859]Z[#*-25.222] +N1871Y[#*-22.359]Z[#*-24.169] +N1881Y[#*-22.109]Z[#*-23.739] +N1891Y[#*-21.922]Z[#*-23.497] +N1901Y[#*-21.859]Z[#*-23.426] +N1911Y[#*-21.359]Z[#*-22.985] +N1921Y[#*-20.859]Z[#*-22.613] +N1931Y[#*-20.359]Z[#*-22.218] +N1941Y[#*-20.109]Z[#*-22.031] +N1951Y[#*-19.859]Z[#*-21.88] +N1961Y[#*-19.359]Z[#*-21.664] +N1971Y[#*-18.859]Z[#*-21.494] +N1981Y[#*-18.359]Z[#*-21.347] +N1991Y[#*-17.859]Z[#*-21.204] +N2001Y[#*-17.359]Z[#*-21.083] +N2011Y[#*-16.859]Z[#*-21.043] +N2021Y[#*-15.859]Z[#*-21.007] +N2031Y[#*-15.359]Z[#*-20.958] +N2041Y[#*-14.859]Z[#*-20.962] +N2051Y[#*-13.609]Z[#*-21.034] +N2061Y[#*-13.484]Z[#*-21.041] +N2071Y[#*-13.359]Z[#*-21.03] +N2081Y[#*-12.859]Z[#*-20.91] +N2091Y[#*-12.359]Z[#*-20.839] +N2101Y[#*-11.89]Z[#*-20.773] +N2111Y[#*-11.859]Z[#*-20.769] +N2121Y[#*-11.734]Z[#*-20.734] +N2131Y[#*-11.359]Z[#*-20.566] +N2141Y[#*-10.859]Z[#*-20.37] +N2151Y[#*-9.859]Z[#*-20.059] +N2161Y[#*-8.859]Z[#*-19.594] +N2171Y[#*-7.859]Z[#*-19.213] +N2181Y[#*-6.859]Z[#*-18.779] +N2191Y[#*-5.859]Z[#*-18.384] +N2201Y[#*-4.859]Z[#*-18.043] +N2211Y[#*-3.859]Z[#*-17.743] +N2221Y[#*-2.859]Z[#*-17.546] +N2231Y[#*-2.359]Z[#*-17.445] +N2241Y[#*-1.859]Z[#*-17.359] +N2251Y[#*-0.359]Z[#*-17.25] +N2261Y[#*0.141]Z[#*-17.235] +N2271Y[#*1.641]Z[#*-17.342] +N2281Y[#*2.141]Z[#*-17.4] +N2291Y[#*3.141]Z[#*-17.602] +N2301Y[#*4.141]Z[#*-17.827] +N2311Y[#*5.141]Z[#*-18.133] +N2321Y[#*6.141]Z[#*-18.502] +N2331Y[#*7.141]Z[#*-18.893] +N2341Y[#*8.141]Z[#*-19.34] +N2351Y[#*9.141]Z[#*-19.734] +N2361Y[#*9.641]Z[#*-19.981] +N2371Y[#*10.141]Z[#*-20.166] +N2381Y[#*10.641]Z[#*-20.324] +N2391Y[#*11.141]Z[#*-20.505] +N2401Y[#*11.391]Z[#*-20.619] +N2411Y[#*11.625]Z[#*-20.73] +N2421Y[#*11.641]Z[#*-20.734] +N2431Y[#*12.141]Z[#*-20.823] +N2441Y[#*12.641]Z[#*-20.895] +N2451Y[#*13.016]Z[#*-20.968] +N2461Y[#*13.141]Z[#*-21.001] +N2471Y[#*13.297]Z[#*-21.046] +N2481Y[#*13.641]Z[#*-21.025] +N2491Y[#*14.641]Z[#*-20.969] +N2501Y[#*15.141]Z[#*-20.952] +N2511Y[#*16.141]Z[#*-21.044] +N2521Y[#*16.641] +N2531Y[#*16.891] +N2541Y[#*17.141]Z[#*-21.063] +N2551Y[#*17.641]Z[#*-21.163] +N2561Y[#*18.641]Z[#*-21.445] +N2571Y[#*19.141]Z[#*-21.607] +N2581Y[#*19.641]Z[#*-21.794] +N2591Y[#*20.141]Z[#*-22.086] +N2601Y[#*20.641]Z[#*-22.478] +N2611Y[#*21.516]Z[#*-23.123] +N2621Y[#*21.641]Z[#*-23.231] +N2631Y[#*21.891]Z[#*-23.487] +N2641Y[#*22.016]Z[#*-23.642] +N2651Y[#*22.141]Z[#*-23.82] +N2661Y[#*22.391]Z[#*-24.282] +N2671Y[#*23.016]Z[#*-25.586] +N2681Y[#*23.133]Z[#*-25.859] +N2691Y[#*23.235]Z[#*-26.183] +N2701Y[#*23.282]Z[#*-26.403] +N2711Y[#*23.305]Z[#*-26.562] +N2721Y[#*23.328]Z[#*-26.747] +N2731Y[#*23.352]Z[#*-26.933] +N2741Y[#*23.383]Z[#*-27.192] +N2751Y[#*23.493]Z[#*-28.185] +N2761Y[#*23.508]Z[#*-28.327] +N2771Y[#*23.524]Z[#*-28.525] +N2781Y[#*23.532]Z[#*-30.5] +N2791Y[#*23.641] +N2801Y[#*32.141] +N2811Y[#*44.141] +N2821Y[#*53.] +N2831X[#*32.972]Y[#*53.293] +N2841X[#*32.893]Y[#*53.547] +N2851X[#*32.769]Y[#*53.762] +N2861X[#*32.609]Y[#*53.937] +N2871X[#*32.42]Y[#*54.074] +N2881X[#*32.209]Y[#*54.172] +N2891X[#*31.983]Y[#*54.23] +N2901X[#*31.75]Y[#*54.25] +N2911X[#*31.517]Y[#*54.23] +N2921X[#*31.291]Y[#*54.172] +N2931X[#*31.08]Y[#*54.074] +N2941X[#*30.891]Y[#*53.937] +N2951X[#*30.731]Y[#*53.762] +N2961X[#*30.607]Y[#*53.547] +N2971X[#*30.528]Y[#*53.293] +N2981X[#*30.5]Y[#*53.] +N2991Y[#*51.531] +N3001Y[#*39.531] +N3011Y[#*23.875] +N3021Y[#*23.867] +N3031Y[#*23.859]Z[#*-28.882] +N3041Y[#*23.851]Z[#*-28.772] +N3051Y[#*23.796]Z[#*-28.394] +N3061Y[#*23.664]Z[#*-27.617] +N3071Y[#*23.656]Z[#*-27.568] +N3081Y[#*23.57]Z[#*-26.865] +N3091Y[#*23.562]Z[#*-26.802] +N3101Y[#*23.5]Z[#*-26.462] +N3111Y[#*23.406]Z[#*-26.15] +N3121Y[#*23.281]Z[#*-25.85] +N3131Y[#*22.531]Z[#*-24.218] +N3141Y[#*22.281]Z[#*-23.82] +N3151Y[#*22.031]Z[#*-23.523] +N3161Y[#*21.781]Z[#*-23.287] +N3171Y[#*21.531]Z[#*-23.063] +N3181Y[#*20.531]Z[#*-22.251] +N3191Y[#*20.031]Z[#*-21.94] +N3201Y[#*19.781]Z[#*-21.83] +N3211Y[#*19.031]Z[#*-21.584] +N3221Y[#*18.531]Z[#*-21.363] +N3231Y[#*18.031]Z[#*-21.189] +N3241Y[#*17.531]Z[#*-21.086] +N3251Y[#*17.031]Z[#*-20.989] +N3261Y[#*16.531]Z[#*-20.904] +N3271Y[#*16.031]Z[#*-20.835] +N3281Y[#*15.531]Z[#*-20.717] +N3291Y[#*15.406]Z[#*-20.673] +N3301Y[#*15.281]Z[#*-20.606] +N3311Y[#*14.531]Z[#*-20.232] +N3321Y[#*13.531]Z[#*-19.688] +N3331Y[#*11.531]Z[#*-18.572] +N3341Y[#*10.531]Z[#*-18.058] +N3351Y[#*9.531]Z[#*-17.63] +N3361Y[#*8.531]Z[#*-17.232] +N3371Y[#*7.531]Z[#*-16.89] +N3381Y[#*6.531]Z[#*-16.57] +N3391Y[#*4.531]Z[#*-16.055] +N3401Y[#*2.531]Z[#*-15.719] +N3411Y[#*1.531]Z[#*-15.636] +N3421Y[#*0.531]Z[#*-15.574] +N3431Y[#*-0.469]Z[#*-15.571] +N3441Y[#*-1.969]Z[#*-15.663] +N3451Y[#*-2.469]Z[#*-15.709] +N3461Y[#*-4.469]Z[#*-16.043] +N3471Y[#*-6.469]Z[#*-16.552] +N3481Y[#*-7.469]Z[#*-16.865] +N3491Y[#*-8.469]Z[#*-17.203] +N3501Y[#*-9.469]Z[#*-17.592] +N3511Y[#*-10.469]Z[#*-18.01] +N3521Y[#*-11.469]Z[#*-18.509] +N3531Y[#*-12.469]Z[#*-19.049] +N3541Y[#*-14.469]Z[#*-20.158] +N3551Y[#*-14.969]Z[#*-20.395] +N3561Y[#*-15.469]Z[#*-20.65] +N3571Y[#*-15.719]Z[#*-20.736] +N3581Y[#*-15.969]Z[#*-20.795] +N3591Y[#*-16.469]Z[#*-20.889] +N3601Y[#*-17.469]Z[#*-21.057] +N3611Y[#*-17.969]Z[#*-21.156] +N3621Y[#*-18.469]Z[#*-21.304] +N3631Y[#*-18.969]Z[#*-21.525] +N3641Y[#*-19.969]Z[#*-21.887] +N3651Y[#*-20.469]Z[#*-22.169] +N3661Y[#*-20.532]Z[#*-22.213] +N3671Y[#*-21.469]Z[#*-22.979] +N3681Y[#*-21.969]Z[#*-23.436] +N3691Y[#*-22.469]Z[#*-24.064] +N3701Y[#*-22.594]Z[#*-24.294] +N3711Y[#*-23.219]Z[#*-25.689] +N3721Y[#*-23.469]Z[#*-26.313] +N3731Y[#*-23.547]Z[#*-26.64] +N3741Y[#*-23.563]Z[#*-26.735] +N3751Y[#*-23.571]Z[#*-26.791] +N3761Y[#*-23.579]Z[#*-26.856] +N3771Y[#*-23.664]Z[#*-27.587] +N3781Y[#*-23.68]Z[#*-27.683] +N3791Y[#*-23.704]Z[#*-27.823] +N3801Y[#*-23.813]Z[#*-28.479] +N3811Y[#*-23.821]Z[#*-28.526] +N3821Y[#*-23.86]Z[#*-28.866] +N3831Y[#*-23.868]Z[#*-30.5] +N3841Y[#*-23.891] +N3851Y[#*-23.907] +N3861Y[#*-24.094] +N3871Y[#*-24.469] +N3881Y[#*-28.469] +N3891Y[#*-42.469] +N3901Y[#*-53.] +N3911X[#*30.472]Y[#*-53.293] +N3921X[#*30.393]Y[#*-53.547] +N3931X[#*30.269]Y[#*-53.762] +N3941X[#*30.109]Y[#*-53.938] +N3951X[#*29.92]Y[#*-54.074] +N3961X[#*29.709]Y[#*-54.172] +N3971X[#*29.483]Y[#*-54.23] +N3981X[#*29.25]Y[#*-54.25] +N3991X[#*29.017]Y[#*-54.23] +N4001X[#*28.797]Y[#*-54.173] +N4011X[#*28.58]Y[#*-54.074] +N4021X[#*28.391]Y[#*-53.938] +N4031X[#*28.231]Y[#*-53.762] +N4041X[#*28.107]Y[#*-53.547] +N4051X[#*28.028]Y[#*-53.293] +N4061X[#*28.]Y[#*-53.] +N4071Y[#*-51.427] +N4081Y[#*-40.427] +N4091Y[#*-38.427] +N4101Y[#*-25.427] +N4111Y[#*-24.552] +N4121Y[#*-24.31] +N4131Y[#*-24.302]Z[#*-30.426] +N4141Y[#*-24.279]Z[#*-30.081] +N4151Y[#*-24.217]Z[#*-29.401] +N4161Y[#*-24.146]Z[#*-28.905] +N4171Y[#*-24.052]Z[#*-28.46] +N4181Y[#*-23.677]Z[#*-26.827] +N4191Y[#*-23.427]Z[#*-26.147] +N4201Y[#*-22.927]Z[#*-25.103] +N4211Y[#*-22.677]Z[#*-24.544] +N4221Y[#*-22.49]Z[#*-24.224] +N4231Y[#*-22.427]Z[#*-24.134] +N4241Y[#*-21.927]Z[#*-23.595] +N4251Y[#*-21.427]Z[#*-23.137] +N4261Y[#*-20.927]Z[#*-22.662] +N4271Y[#*-20.677]Z[#*-22.458] +N4281Y[#*-20.427]Z[#*-22.293] +N4291Y[#*-19.927]Z[#*-22.048] +N4301Y[#*-19.427]Z[#*-21.823] +N4311Y[#*-18.427]Z[#*-21.415] +N4321Y[#*-17.927]Z[#*-21.203] +N4331Y[#*-17.427]Z[#*-20.952] +N4341Y[#*-16.427]Z[#*-20.282] +N4351Y[#*-15.427]Z[#*-19.53] +N4361Y[#*-14.427]Z[#*-18.81] +N4371Y[#*-13.427]Z[#*-18.146] +N4381Y[#*-12.427]Z[#*-17.509] +N4391Y[#*-11.427]Z[#*-16.953] +N4401Y[#*-10.927]Z[#*-16.684] +N4411Y[#*-10.427]Z[#*-16.432] +N4421Y[#*-9.927]Z[#*-16.223] +N4431Y[#*-8.427]Z[#*-15.654] +N4441Y[#*-7.427]Z[#*-15.319] +N4451Y[#*-5.427]Z[#*-14.801] +N4461Y[#*-4.427]Z[#*-14.632] +N4471Y[#*-3.427]Z[#*-14.478] +N4481Y[#*-2.427]Z[#*-14.349] +N4491Y[#*-0.427]Z[#*-14.243] +N4501Y[#*0.573]Z[#*-14.251] +N4511Y[#*2.573]Z[#*-14.357] +N4521Y[#*3.073]Z[#*-14.423] +N4531Y[#*4.573]Z[#*-14.655] +N4541Y[#*5.573]Z[#*-14.839] +N4551Y[#*7.573]Z[#*-15.359] +N4561Y[#*8.573]Z[#*-15.715] +N4571Y[#*10.073]Z[#*-16.284] +N4581Y[#*10.573]Z[#*-16.515] +N4591Y[#*11.573]Z[#*-17.05] +N4601Y[#*12.573]Z[#*-17.611] +N4611Y[#*13.573]Z[#*-18.27] +N4621Y[#*14.573]Z[#*-18.943] +N4631Y[#*16.573]Z[#*-20.426] +N4641Y[#*17.323]Z[#*-20.93] +N4651Y[#*17.573]Z[#*-21.083] +N4661Y[#*18.073]Z[#*-21.303] +N4671Y[#*18.573]Z[#*-21.5] +N4681Y[#*19.573]Z[#*-21.913] +N4691Y[#*20.073]Z[#*-22.136] +N4701Y[#*20.323]Z[#*-22.261] +N4711Y[#*20.573]Z[#*-22.417] +N4721Y[#*21.073]Z[#*-22.842] +N4731Y[#*21.573]Z[#*-23.306] +N4741Y[#*21.948]Z[#*-23.634] +N4751Y[#*22.073]Z[#*-23.75] +N4761Y[#*22.323]Z[#*-24.027] +N4771Y[#*22.573]Z[#*-24.394] +N4781Y[#*23.323]Z[#*-25.954] +N4791Y[#*23.448]Z[#*-26.209] +N4801Y[#*23.573]Z[#*-26.508] +N4811Y[#*23.698]Z[#*-26.955] +N4821Y[#*24.01]Z[#*-28.289] +N4831Y[#*24.065]Z[#*-28.523] +N4841Y[#*24.166]Z[#*-29.026] +N4851Y[#*24.221]Z[#*-29.441] +N4861Y[#*24.276]Z[#*-30.021] +N4871Y[#*24.291]Z[#*-30.242] +N4881Y[#*24.315]Z[#*-30.5] +N4891Y[#*38.573] +N4901Y[#*39.573] +N4911Y[#*48.573] +N4921Y[#*53.] +N4931X[#*27.972]Y[#*53.293] +N4941X[#*27.893]Y[#*53.547] +N4951X[#*27.769]Y[#*53.762] +N4961X[#*27.609]Y[#*53.937] +N4971X[#*27.42]Y[#*54.074] +N4981X[#*27.209]Y[#*54.172] +N4991X[#*26.983]Y[#*54.23] +N5001X[#*26.75]Y[#*54.25] +N5011X[#*26.517]Y[#*54.23] +N5021X[#*26.291]Y[#*54.172] +N5031X[#*26.08]Y[#*54.074] +N5041X[#*25.891]Y[#*53.937] +N5051X[#*25.731]Y[#*53.762] +N5061X[#*25.607]Y[#*53.547] +N5071X[#*25.528]Y[#*53.293] +N5081X[#*25.5]Y[#*53.] +N5091Y[#*38.123] +N5101Y[#*31.123] +N5111Y[#*24.701] +N5121Y[#*24.693]Z[#*-30.476] +N5131Y[#*24.584]Z[#*-30.006] +N5141Y[#*24.576]Z[#*-29.954] +N5151Y[#*24.522]Z[#*-29.57] +N5161Y[#*24.498]Z[#*-29.419] +N5171Y[#*24.467]Z[#*-29.266] +N5181Y[#*24.373]Z[#*-28.942] +N5191Y[#*23.873]Z[#*-27.537] +N5201Y[#*23.623]Z[#*-26.916] +N5211Y[#*23.373]Z[#*-26.361] +N5221Y[#*23.123]Z[#*-25.945] +N5231Y[#*22.123]Z[#*-24.338] +N5241Y[#*21.623]Z[#*-23.733] +N5251Y[#*20.623]Z[#*-22.845] +N5261Y[#*20.123]Z[#*-22.493] +N5271Y[#*19.123]Z[#*-21.656] +N5281Y[#*18.123]Z[#*-20.694] +N5291Y[#*17.123]Z[#*-19.775] +N5301Y[#*16.123]Z[#*-18.949] +N5311Y[#*15.123]Z[#*-18.175] +N5321Y[#*14.623]Z[#*-17.767] +N5331Y[#*14.123]Z[#*-17.373] +N5341Y[#*13.123]Z[#*-16.728] +N5351Y[#*12.123]Z[#*-16.115] +N5361Y[#*11.123]Z[#*-15.591] +N5371Y[#*9.123]Z[#*-14.743] +N5381Y[#*8.623]Z[#*-14.558] +N5391Y[#*6.123]Z[#*-13.877] +N5401Y[#*5.623]Z[#*-13.777] +N5411Y[#*4.123]Z[#*-13.55] +N5421Y[#*3.123]Z[#*-13.399] +N5431Y[#*2.123]Z[#*-13.336] +N5441Y[#*0.123]Z[#*-13.242] +N5451Y[#*-0.877]Z[#*-13.277] +N5461Y[#*-2.877]Z[#*-13.372] +N5471Y[#*-3.377]Z[#*-13.437] +N5481Y[#*-5.377]Z[#*-13.739] +N5491Y[#*-5.877]Z[#*-13.818] +N5501Y[#*-6.377]Z[#*-13.946] +N5511Y[#*-7.877]Z[#*-14.353] +N5521Y[#*-8.377]Z[#*-14.489] +N5531Y[#*-8.877]Z[#*-14.639] +N5541Y[#*-11.377]Z[#*-15.694] +N5551Y[#*-11.877]Z[#*-15.958] +N5561Y[#*-12.877]Z[#*-16.568] +N5571Y[#*-13.877]Z[#*-17.201] +N5581Y[#*-14.877]Z[#*-17.959] +N5591Y[#*-15.877]Z[#*-18.74] +N5601Y[#*-16.877]Z[#*-19.544] +N5611Y[#*-17.877]Z[#*-20.434] +N5621Y[#*-18.877]Z[#*-21.387] +N5631Y[#*-19.377]Z[#*-21.879] +N5641Y[#*-19.877]Z[#*-22.306] +N5651Y[#*-20.377]Z[#*-22.636] +N5661Y[#*-20.877]Z[#*-23.039] +N5671Y[#*-21.377]Z[#*-23.489] +N5681Y[#*-21.877]Z[#*-23.981] +N5691Y[#*-22.127]Z[#*-24.311] +N5701Y[#*-23.377]Z[#*-26.354] +N5711Y[#*-23.627]Z[#*-26.908] +N5721Y[#*-23.877]Z[#*-27.533] +N5731Y[#*-24.377]Z[#*-28.95] +N5741Y[#*-24.471]Z[#*-29.278] +N5751Y[#*-24.517]Z[#*-29.535] +N5761Y[#*-24.58]Z[#*-29.98] +N5771Y[#*-24.588]Z[#*-30.025] +N5781Y[#*-24.697]Z[#*-30.5] +N5791Y[#*-24.705] +N5801Y[#*-29.877] +N5811Y[#*-42.877] +N5821Y[#*-44.877] +N5831Y[#*-48.877] +N5841Y[#*-53.] +N5851X[#*25.472]Y[#*-53.293] +N5861X[#*25.393]Y[#*-53.547] +N5871X[#*25.269]Y[#*-53.762] +N5881X[#*25.109]Y[#*-53.938] +N5891X[#*24.92]Y[#*-54.074] +N5901X[#*24.709]Y[#*-54.172] +N5911X[#*24.483]Y[#*-54.23] +N5921X[#*24.25]Y[#*-54.25] +N5931X[#*24.017]Y[#*-54.23] +N5941X[#*23.791]Y[#*-54.172] +N5951X[#*23.58]Y[#*-54.074] +N5961X[#*23.391]Y[#*-53.938] +N5971X[#*23.231]Y[#*-53.762] +N5981X[#*23.107]Y[#*-53.547] +N5991X[#*23.028]Y[#*-53.293] +N6001X[#*23.]Y[#*-53.] +N6011Y[#*-43.909] +N6021Y[#*-37.909] +N6031Y[#*-35.909] +N6041Y[#*-25.284] +N6051Y[#*-25.237] +N6061Y[#*-25.159]Z[#*-30.224] +N6071Y[#*-24.909]Z[#*-29.354] +N6081Y[#*-24.659]Z[#*-28.778] +N6091Y[#*-23.909]Z[#*-27.213] +N6101Y[#*-22.909]Z[#*-25.522] +N6111Y[#*-22.409]Z[#*-24.749] +N6121Y[#*-21.909]Z[#*-23.998] +N6131Y[#*-20.909]Z[#*-22.752] +N6141Y[#*-19.909]Z[#*-21.556] +N6151Y[#*-18.909]Z[#*-20.526] +N6161Y[#*-17.909]Z[#*-19.496] +N6171Y[#*-16.909]Z[#*-18.613] +N6181Y[#*-15.909]Z[#*-17.749] +N6191Y[#*-14.909]Z[#*-16.971] +N6201Y[#*-12.909]Z[#*-15.639] +N6211Y[#*-12.409]Z[#*-15.344] +N6221Y[#*-10.909]Z[#*-14.677] +N6231Y[#*-9.909]Z[#*-14.233] +N6241Y[#*-9.409]Z[#*-14.034] +N6251Y[#*-6.909]Z[#*-13.34] +N6261Y[#*-5.909]Z[#*-13.125] +N6271Y[#*-3.909]Z[#*-12.832] +N6281Y[#*-2.909]Z[#*-12.714] +N6291Y[#*-0.909]Z[#*-12.629] +N6301Y[#*0.091]Z[#*-12.594] +N6311Y[#*1.091]Z[#*-12.637] +N6321Y[#*3.091]Z[#*-12.722] +N6331Y[#*3.591]Z[#*-12.785] +N6341Y[#*4.091]Z[#*-12.859] +N6351Y[#*6.091]Z[#*-13.152] +N6361Y[#*6.591]Z[#*-13.252] +N6371Y[#*9.091]Z[#*-13.944] +N6381Y[#*10.091]Z[#*-14.315] +N6391Y[#*11.091]Z[#*-14.759] +N6401Y[#*12.091]Z[#*-15.203] +N6411Y[#*12.591]Z[#*-15.439] +N6421Y[#*13.091]Z[#*-15.763] +N6431Y[#*14.091]Z[#*-16.429] +N6441Y[#*15.091]Z[#*-17.095] +N6451Y[#*15.591]Z[#*-17.478] +N6461Y[#*17.091]Z[#*-18.776] +N6471Y[#*18.091]Z[#*-19.69] +N6481Y[#*20.091]Z[#*-21.76] +N6491Y[#*21.591]Z[#*-23.612] +N6501Y[#*22.091]Z[#*-24.269] +N6511Y[#*23.591]Z[#*-26.586] +N6521Y[#*23.841]Z[#*-27.078] +N6531Y[#*24.591]Z[#*-28.639] +N6541Y[#*24.841]Z[#*-29.173] +N6551Y[#*24.966]Z[#*-29.548] +N6561Y[#*25.209]Z[#*-30.398] +N6571Y[#*25.232]Z[#*-30.481] +N6581Y[#*25.24]Z[#*-30.5] +N6591Y[#*51.091] +N6601Y[#*53.] +N6611X[#*22.972]Y[#*53.293] +N6621X[#*22.893]Y[#*53.547] +N6631X[#*22.769]Y[#*53.762] +N6641X[#*22.609]Y[#*53.937] +N6651X[#*22.42]Y[#*54.074] +N6661X[#*22.209]Y[#*54.172] +N6671X[#*21.983]Y[#*54.23] +N6681X[#*21.75]Y[#*54.25] +N6691X[#*21.517]Y[#*54.23] +N6701X[#*21.291]Y[#*54.172] +N6711X[#*21.08]Y[#*54.074] +N6721X[#*20.891]Y[#*53.937] +N6731X[#*20.731]Y[#*53.762] +N6741X[#*20.607]Y[#*53.547] +N6751X[#*20.528]Y[#*53.293] +N6761X[#*20.5]Y[#*53.] +N6771Y[#*29.217] +N6781Y[#*27.217] +N6791Y[#*25.78] +N6801Y[#*25.772]Z[#*-30.487] +N6811Y[#*25.467]Z[#*-29.562] +N6821Y[#*25.217]Z[#*-28.971] +N6831Y[#*24.217]Z[#*-26.951] +N6841Y[#*23.217]Z[#*-25.36] +N6851Y[#*22.217]Z[#*-23.891] +N6861Y[#*21.217]Z[#*-22.567] +N6871Y[#*20.217]Z[#*-21.374] +N6881Y[#*19.217]Z[#*-20.271] +N6891Y[#*18.217]Z[#*-19.233] +N6901Y[#*16.217]Z[#*-17.449] +N6911Y[#*15.717]Z[#*-17.062] +N6921Y[#*13.217]Z[#*-15.375] +N6931Y[#*12.717]Z[#*-15.118] +N6941Y[#*11.217]Z[#*-14.447] +N6951Y[#*10.217]Z[#*-14.] +N6961Y[#*9.717]Z[#*-13.809] +N6971Y[#*7.217]Z[#*-13.117] +N6981Y[#*6.217]Z[#*-12.894] +N6991Y[#*4.217]Z[#*-12.605] +N7001Y[#*3.217]Z[#*-12.47] +N7011Y[#*2.217]Z[#*-12.428] +N7021Y[#*0.217]Z[#*-12.346] +N7031Y[#*-0.783]Z[#*-12.369] +N7041Y[#*-2.783]Z[#*-12.451] +N7051Y[#*-3.783]Z[#*-12.542] +N7061Y[#*-6.283]Z[#*-12.904] +N7071Y[#*-6.783]Z[#*-12.997] +N7081Y[#*-8.783]Z[#*-13.55] +N7091Y[#*-9.783]Z[#*-13.828] +N7101Y[#*-10.283]Z[#*-14.03] +N7111Y[#*-12.783]Z[#*-15.147] +N7121Y[#*-13.283]Z[#*-15.417] +N7131Y[#*-13.783]Z[#*-15.755] +N7141Y[#*-15.783]Z[#*-17.105] +N7151Y[#*-16.283]Z[#*-17.506] +N7161Y[#*-16.783]Z[#*-17.95] +N7171Y[#*-17.783]Z[#*-18.843] +N7181Y[#*-18.783]Z[#*-19.788] +N7191Y[#*-20.783]Z[#*-21.999] +N7201Y[#*-21.783]Z[#*-23.312] +N7211Y[#*-22.783]Z[#*-24.676] +N7221Y[#*-23.783]Z[#*-26.249] +N7231Y[#*-24.783]Z[#*-28.095] +N7241Y[#*-25.283]Z[#*-29.102] +N7251Y[#*-25.533]Z[#*-29.759] +N7261Y[#*-25.775]Z[#*-30.494] +N7271Y[#*-25.783]Z[#*-30.5] +N7281Y[#*-37.783] +N7291Y[#*-39.783] +N7301Y[#*-43.783] +N7311Y[#*-48.783] +N7321Y[#*-51.783] +N7331Y[#*-53.] +N7341X[#*20.472]Y[#*-53.293] +N7351X[#*20.393]Y[#*-53.547] +N7361X[#*20.269]Y[#*-53.762] +N7371X[#*20.109]Y[#*-53.938] +N7381X[#*19.92]Y[#*-54.074] +N7391X[#*19.709]Y[#*-54.172] +N7401X[#*19.483]Y[#*-54.23] +N7411X[#*19.25]Y[#*-54.25] +N7421X[#*19.017]Y[#*-54.23] +N7431X[#*18.791]Y[#*-54.172] +N7441X[#*18.58]Y[#*-54.074] +N7451X[#*18.391]Y[#*-53.938] +N7461X[#*18.231]Y[#*-53.762] +N7471X[#*18.107]Y[#*-53.547] +N7481X[#*18.028]Y[#*-53.293] +N7491X[#*18.]Y[#*-53.] +N7501Y[#*-52.685] +N7511Y[#*-32.685] +N7521Y[#*-29.685] +N7531Y[#*-27.685] +N7541Y[#*-26.123] +N7551Y[#*-26.115]Z[#*-30.484] +N7561Y[#*-25.935]Z[#*-29.937] +N7571Y[#*-25.685]Z[#*-29.23] +N7581Y[#*-25.185]Z[#*-28.234] +N7591Y[#*-24.685]Z[#*-27.237] +N7601Y[#*-24.185]Z[#*-26.401] +N7611Y[#*-23.685]Z[#*-25.627] +N7621Y[#*-22.685]Z[#*-24.168] +N7631Y[#*-21.685]Z[#*-22.863] +N7641Y[#*-20.685]Z[#*-21.652] +N7651Y[#*-19.185]Z[#*-20.017] +N7661Y[#*-18.685]Z[#*-19.515] +N7671Y[#*-16.685]Z[#*-17.758] +N7681Y[#*-15.685]Z[#*-17.001] +N7691Y[#*-14.685]Z[#*-16.334] +N7701Y[#*-13.685]Z[#*-15.667] +N7711Y[#*-13.185]Z[#*-15.363] +N7721Y[#*-10.185]Z[#*-14.032] +N7731Y[#*-9.685]Z[#*-13.875] +N7741Y[#*-7.185]Z[#*-13.187] +N7751Y[#*-6.685]Z[#*-13.06] +N7761Y[#*-3.685]Z[#*-12.624] +N7771Y[#*-2.685]Z[#*-12.55] +N7781Y[#*-0.685]Z[#*-12.467] +N7791Y[#*0.315]Z[#*-12.452] +N7801Y[#*1.315]Z[#*-12.493] +N7811Y[#*3.315]Z[#*-12.577] +N7821Y[#*4.315]Z[#*-12.715] +N7831Y[#*6.315]Z[#*-13.004] +N7841Y[#*7.315]Z[#*-13.222] +N7851Y[#*8.315]Z[#*-13.498] +N7861Y[#*9.815]Z[#*-13.91] +N7871Y[#*10.315]Z[#*-14.087] +N7881Y[#*12.815]Z[#*-15.196] +N7891Y[#*13.315]Z[#*-15.432] +N7901Y[#*13.815]Z[#*-15.754] +N7911Y[#*15.815]Z[#*-17.087] +N7921Y[#*16.315]Z[#*-17.435] +N7931Y[#*18.315]Z[#*-19.189] +N7941Y[#*19.315]Z[#*-20.158] +N7951Y[#*20.315]Z[#*-21.248] +N7961Y[#*21.315]Z[#*-22.379] +N7971Y[#*22.315]Z[#*-23.684] +N7981Y[#*23.315]Z[#*-25.053] +N7991Y[#*24.315]Z[#*-26.601] +N8001Y[#*25.315]Z[#*-28.489] +N8011Y[#*25.565]Z[#*-28.983] +N8021Y[#*25.815]Z[#*-29.57] +N8031Y[#*25.94]Z[#*-29.947] +N8041Y[#*26.119]Z[#*-30.495] +N8051Y[#*26.127]Z[#*-30.5] +N8061Y[#*53.] +N8071X[#*17.972]Y[#*53.293] +N8081X[#*17.893]Y[#*53.547] +N8091X[#*17.769]Y[#*53.762] +N8101X[#*17.609]Y[#*53.937] +N8111X[#*17.42]Y[#*54.074] +N8121X[#*17.209]Y[#*54.172] +N8131X[#*16.983]Y[#*54.23] +N8141X[#*16.75]Y[#*54.25] +N8151X[#*16.523]Y[#*54.231] +N8161X[#*16.291]Y[#*54.172] +N8171X[#*16.08]Y[#*54.074] +N8181X[#*15.891]Y[#*53.937] +N8191X[#*15.731]Y[#*53.762] +N8201X[#*15.607]Y[#*53.547] +N8211X[#*15.528]Y[#*53.293] +N8221X[#*15.5]Y[#*53.] +N8231Y[#*28.452] +N8241Y[#*26.265] +N8251Y[#*26.257] +N8261Y[#*26.234]Z[#*-30.43] +N8271Y[#*26.202]Z[#*-30.338] +N8281Y[#*25.952]Z[#*-29.585] +N8291Y[#*25.702]Z[#*-28.974] +N8301Y[#*24.952]Z[#*-27.528] +N8311Y[#*24.452]Z[#*-26.658] +N8321Y[#*23.952]Z[#*-25.93] +N8331Y[#*23.452]Z[#*-25.182] +N8341Y[#*22.452]Z[#*-23.834] +N8351Y[#*21.452]Z[#*-22.598] +N8361Y[#*20.452]Z[#*-21.524] +N8371Y[#*19.452]Z[#*-20.478] +N8381Y[#*18.452]Z[#*-19.522] +N8391Y[#*17.452]Z[#*-18.668] +N8401Y[#*16.452]Z[#*-17.845] +N8411Y[#*15.952]Z[#*-17.498] +N8421Y[#*15.452]Z[#*-17.184] +N8431Y[#*13.952]Z[#*-16.215] +N8441Y[#*13.452]Z[#*-15.894] +N8451Y[#*12.952]Z[#*-15.653] +N8461Y[#*11.452]Z[#*-14.998] +N8471Y[#*10.452]Z[#*-14.57] +N8481Y[#*9.952]Z[#*-14.382] +N8491Y[#*7.452]Z[#*-13.698] +N8501Y[#*6.452]Z[#*-13.468] +N8511Y[#*3.452]Z[#*-13.029] +N8521Y[#*2.952]Z[#*-13.] +N8531Y[#*0.452]Z[#*-12.892] +N8541Y[#*-0.548]Z[#*-12.896] +N8551Y[#*-2.548]Z[#*-12.982] +N8561Y[#*-3.548]Z[#*-13.042] +N8571Y[#*-6.548]Z[#*-13.481] +N8581Y[#*-7.048]Z[#*-13.587] +N8591Y[#*-8.548]Z[#*-13.998] +N8601Y[#*-9.548]Z[#*-14.271] +N8611Y[#*-10.548]Z[#*-14.61] +N8621Y[#*-13.048]Z[#*-15.694] +N8631Y[#*-13.548]Z[#*-15.952] +N8641Y[#*-14.048]Z[#*-16.277] +N8651Y[#*-16.048]Z[#*-17.558] +N8661Y[#*-16.548]Z[#*-17.923] +N8671Y[#*-17.548]Z[#*-18.748] +N8681Y[#*-18.548]Z[#*-19.604] +N8691Y[#*-19.548]Z[#*-20.579] +N8701Y[#*-20.548]Z[#*-21.621] +N8711Y[#*-21.548]Z[#*-22.713] +N8721Y[#*-22.548]Z[#*-23.955] +N8731Y[#*-23.548]Z[#*-25.325] +N8741Y[#*-24.548]Z[#*-26.797] +N8751Y[#*-24.798]Z[#*-27.235] +N8761Y[#*-25.048]Z[#*-27.709] +N8771Y[#*-25.798]Z[#*-29.168] +N8781Y[#*-26.048]Z[#*-29.871] +N8791Y[#*-26.258]Z[#*-30.5] +N8801Y[#*-32.548] +N8811Y[#*-37.548] +N8821Y[#*-39.548] +N8831Y[#*-42.548] +N8841Y[#*-53.] +N8851X[#*15.472]Y[#*-53.293] +N8861X[#*15.393]Y[#*-53.547] +N8871X[#*15.269]Y[#*-53.762] +N8881X[#*15.109]Y[#*-53.938] +N8891X[#*14.92]Y[#*-54.074] +N8901X[#*14.709]Y[#*-54.172] +N8911X[#*14.483]Y[#*-54.23] +N8921X[#*14.25]Y[#*-54.25] +N8931X[#*14.017]Y[#*-54.23] +N8941X[#*13.791]Y[#*-54.172] +N8951X[#*13.58]Y[#*-54.074] +N8961X[#*13.391]Y[#*-53.938] +N8971X[#*13.231]Y[#*-53.762] +N8981X[#*13.107]Y[#*-53.547] +N8991X[#*13.028]Y[#*-53.293] +N9001X[#*13.]Y[#*-53.] +N9011Y[#*-45.009] +N9021Y[#*-26.228] +N9031Y[#*-26.22]Z[#*-30.482] +N9041Y[#*-26.009]Z[#*-29.867] +N9051Y[#*-25.759]Z[#*-29.159] +N9061Y[#*-25.509]Z[#*-28.666] +N9071Y[#*-25.009]Z[#*-27.74] +N9081Y[#*-24.009]Z[#*-26.102] +N9091Y[#*-23.009]Z[#*-24.701] +N9101Y[#*-22.009]Z[#*-23.524] +N9111Y[#*-21.009]Z[#*-22.35] +N9121Y[#*-20.009]Z[#*-21.355] +N9131Y[#*-19.009]Z[#*-20.386] +N9141Y[#*-18.009]Z[#*-19.567] +N9151Y[#*-17.009]Z[#*-18.78] +N9161Y[#*-16.509]Z[#*-18.37] +N9171Y[#*-16.009]Z[#*-18.009] +N9181Y[#*-15.009]Z[#*-17.386] +N9191Y[#*-13.509]Z[#*-16.483] +N9201Y[#*-13.009]Z[#*-16.232] +N9211Y[#*-10.509]Z[#*-15.182] +N9221Y[#*-10.009]Z[#*-14.987] +N9231Y[#*-8.009]Z[#*-14.443] +N9241Y[#*-7.009]Z[#*-14.172] +N9251Y[#*-6.509]Z[#*-14.071] +N9261Y[#*-4.009]Z[#*-13.697] +N9271Y[#*-3.009]Z[#*-13.59] +N9281Y[#*-0.009]Z[#*-13.454] +N9291Y[#*2.991]Z[#*-13.589] +N9301Y[#*3.991]Z[#*-13.694] +N9311Y[#*4.991]Z[#*-13.843] +N9321Y[#*6.491]Z[#*-14.068] +N9331Y[#*6.991]Z[#*-14.167] +N9341Y[#*9.991]Z[#*-14.981] +N9351Y[#*10.491]Z[#*-15.175] +N9361Y[#*10.991]Z[#*-15.388] +N9371Y[#*11.991]Z[#*-15.808] +N9381Y[#*12.991]Z[#*-16.225] +N9391Y[#*13.491]Z[#*-16.472] +N9401Y[#*15.491]Z[#*-17.684] +N9411Y[#*15.991]Z[#*-17.998] +N9421Y[#*16.491]Z[#*-18.355] +N9431Y[#*16.991]Z[#*-18.765] +N9441Y[#*17.991]Z[#*-19.553] +N9451Y[#*18.991]Z[#*-20.369] +N9461Y[#*19.991]Z[#*-21.338] +N9471Y[#*20.991]Z[#*-22.332] +N9481Y[#*22.991]Z[#*-24.678] +N9491Y[#*23.991]Z[#*-26.078] +N9501Y[#*24.491]Z[#*-26.799] +N9511Y[#*24.741]Z[#*-27.238] +N9521Y[#*24.991]Z[#*-27.707] +N9531Y[#*25.491]Z[#*-28.633] +N9541Y[#*25.741]Z[#*-29.118] +N9551Y[#*25.866]Z[#*-29.45] +N9561Y[#*26.226]Z[#*-30.499] +N9571Y[#*26.233]Z[#*-30.5] +N9581Y[#*29.991] +N9591Y[#*52.999] +N9601X[#*12.972]Y[#*53.292] +N9611X[#*12.893]Y[#*53.546] +N9621X[#*12.769]Y[#*53.761] +N9631X[#*12.609]Y[#*53.937] +N9641X[#*12.42]Y[#*54.074] +N9651X[#*12.209]Y[#*54.171] +N9661X[#*11.983]Y[#*54.23] +N9671X[#*11.75]Y[#*54.25] +N9681X[#*11.517]Y[#*54.23] +N9691X[#*11.291]Y[#*54.172] +N9701X[#*11.08]Y[#*54.074] +N9711X[#*10.891]Y[#*53.937] +N9721X[#*10.731]Y[#*53.762] +N9731X[#*10.607]Y[#*53.547] +N9741X[#*10.528]Y[#*53.293] +N9751X[#*10.5]Y[#*53.] +N9761Y[#*42.958] +N9771Y[#*29.958] +N9781Y[#*26.208] +N9791Y[#*26.083] +N9801Y[#*26.029] +N9811Y[#*26.021]Z[#*-30.489] +N9821Y[#*26.005]Z[#*-30.444] +N9831Y[#*25.99]Z[#*-30.398] +N9841Y[#*25.708]Z[#*-29.582] +N9851Y[#*25.458]Z[#*-28.93] +N9861Y[#*25.208]Z[#*-28.467] +N9871Y[#*24.458]Z[#*-27.104] +N9881Y[#*23.958]Z[#*-26.358] +N9891Y[#*22.958]Z[#*-24.993] +N9901Y[#*21.958]Z[#*-23.819] +N9911Y[#*20.958]Z[#*-22.699] +N9921Y[#*19.958]Z[#*-21.757] +N9931Y[#*18.958]Z[#*-20.832] +N9941Y[#*17.958]Z[#*-20.015] +N9951Y[#*16.458]Z[#*-18.896] +N9961Y[#*15.958]Z[#*-18.539] +N9971Y[#*13.958]Z[#*-17.384] +N9981Y[#*13.458]Z[#*-17.093] +N9991Y[#*12.958]Z[#*-16.836] +N1Y[#*10.958]Z[#*-16.022] +N11Y[#*10.458]Z[#*-15.819] +N21Y[#*9.958]Z[#*-15.628] +N31Y[#*7.958]Z[#*-15.089] +N41Y[#*6.958]Z[#*-14.82] +N51Y[#*6.458]Z[#*-14.72] +N61Y[#*3.958]Z[#*-14.339] +N71Y[#*2.958]Z[#*-14.232] +N81Y[#*-0.042]Z[#*-14.092] +N91Y[#*-0.542]Z[#*-14.114] +N101Y[#*-3.042]Z[#*-14.236] +N111Y[#*-4.042]Z[#*-14.352] +N121Y[#*-6.042]Z[#*-14.657] +N131Y[#*-7.042]Z[#*-14.842] +N141Y[#*-9.042]Z[#*-15.379] +N151Y[#*-10.042]Z[#*-15.655] +N161Y[#*-10.542]Z[#*-15.853] +N171Y[#*-12.542]Z[#*-16.663] +N181Y[#*-13.042]Z[#*-16.871] +N191Y[#*-13.542]Z[#*-17.143] +N201Y[#*-15.542]Z[#*-18.297] +N211Y[#*-16.042]Z[#*-18.591] +N221Y[#*-18.042]Z[#*-20.077] +N231Y[#*-19.042]Z[#*-20.909] +N241Y[#*-20.042]Z[#*-21.834] +N251Y[#*-21.042]Z[#*-22.792] +N261Y[#*-22.042]Z[#*-23.912] +N271Y[#*-23.042]Z[#*-25.106] +N281Y[#*-24.042]Z[#*-26.472] +N291Y[#*-24.542]Z[#*-27.257] +N301Y[#*-25.292]Z[#*-28.619] +N311Y[#*-25.542]Z[#*-29.113] +N321Y[#*-25.792]Z[#*-29.824] +N331Y[#*-26.018]Z[#*-30.483] +N341Y[#*-26.026]Z[#*-30.5] +N351Y[#*-26.042] +N361Y[#*-30.042] +N371Y[#*-31.042] +N381Y[#*-53.] +N391X[#*10.472]Y[#*-53.293] +N401X[#*10.393]Y[#*-53.547] +N411X[#*10.269]Y[#*-53.762] +N421X[#*10.109]Y[#*-53.938] +N431X[#*9.92]Y[#*-54.074] +N441X[#*9.709]Y[#*-54.172] +N451X[#*9.483]Y[#*-54.23] +N461X[#*9.25]Y[#*-54.25] +N471X[#*9.017]Y[#*-54.23] +N481X[#*8.791]Y[#*-54.172] +N491X[#*8.58]Y[#*-54.074] +N501X[#*8.391]Y[#*-53.938] +N511X[#*8.231]Y[#*-53.762] +N521X[#*8.107]Y[#*-53.547] +N531X[#*8.028]Y[#*-53.293] +N541X[#*8.]Y[#*-53.] +N551Y[#*-51.721] +N561Y[#*-35.721] +N571Y[#*-34.721] +N581Y[#*-28.721] +N591Y[#*-25.659] +N601Y[#*-25.651]Z[#*-30.478] +N611Y[#*-25.627]Z[#*-30.41] +N621Y[#*-25.471]Z[#*-29.955] +N631Y[#*-25.221]Z[#*-29.227] +N641Y[#*-24.971]Z[#*-28.694] +N651Y[#*-24.221]Z[#*-27.34] +N661Y[#*-23.721]Z[#*-26.547] +N671Y[#*-22.721]Z[#*-25.21] +N681Y[#*-21.721]Z[#*-24.05] +N691Y[#*-20.721]Z[#*-22.97] +N701Y[#*-19.721]Z[#*-22.059] +N711Y[#*-18.721]Z[#*-21.177] +N721Y[#*-17.721]Z[#*-20.397] +N731Y[#*-16.221]Z[#*-19.328] +N741Y[#*-15.721]Z[#*-18.992] +N751Y[#*-15.221]Z[#*-18.719] +N761Y[#*-13.221]Z[#*-17.616] +N771Y[#*-12.721]Z[#*-17.379] +N781Y[#*-10.221]Z[#*-16.391] +N791Y[#*-9.721]Z[#*-16.218] +N801Y[#*-8.721]Z[#*-15.952] +N811Y[#*-6.721]Z[#*-15.421] +N821Y[#*-6.221]Z[#*-15.337] +N831Y[#*-3.721]Z[#*-14.951] +N841Y[#*-2.721]Z[#*-14.862] +N851Y[#*-0.721]Z[#*-14.761] +N861Y[#*0.279]Z[#*-14.739] +N871Y[#*2.779]Z[#*-14.865] +N881Y[#*3.279]Z[#*-14.891] +N891Y[#*3.779]Z[#*-14.96] +N901Y[#*6.279]Z[#*-15.346] +N911Y[#*7.279]Z[#*-15.567] +N921Y[#*9.279]Z[#*-16.101] +N931Y[#*10.279]Z[#*-16.414] +N941Y[#*12.279]Z[#*-17.204] +N951Y[#*13.279]Z[#*-17.648] +N961Y[#*15.279]Z[#*-18.75] +N971Y[#*16.279]Z[#*-19.369] +N981Y[#*18.279]Z[#*-20.796] +N991Y[#*19.279]Z[#*-21.669] +N1001Y[#*20.279]Z[#*-22.55] +N1011Y[#*21.279]Z[#*-23.571] +N1021Y[#*22.279]Z[#*-24.653] +N1031Y[#*22.779]Z[#*-25.287] +N1041Y[#*23.779]Z[#*-26.624] +N1051Y[#*24.279]Z[#*-27.445] +N1061Y[#*24.779]Z[#*-28.347] +N1071Y[#*25.029]Z[#*-28.799] +N1081Y[#*25.154]Z[#*-29.056] +N1091Y[#*25.248]Z[#*-29.304] +N1101Y[#*25.654]Z[#*-30.487] +N1111Y[#*25.662]Z[#*-30.5] +N1121Y[#*25.716] +N1131Y[#*33.279] +N1141Y[#*35.279] +N1151Y[#*37.279] +N1161Y[#*49.279] +N1171Y[#*53.] +N1181X[#*7.972]Y[#*53.293] +N1191X[#*7.893]Y[#*53.547] +N1201X[#*7.769]Y[#*53.762] +N1211X[#*7.609]Y[#*53.937] +N1221X[#*7.42]Y[#*54.074] +N1231X[#*7.209]Y[#*54.172] +N1241X[#*6.983]Y[#*54.23] +N1251X[#*6.75]Y[#*54.25] +N1261X[#*6.517]Y[#*54.23] +N1271X[#*6.291]Y[#*54.172] +N1281X[#*6.08]Y[#*54.074] +N1291X[#*5.891]Y[#*53.937] +N1301X[#*5.731]Y[#*53.762] +N1311X[#*5.607]Y[#*53.547] +N1321X[#*5.528]Y[#*53.293] +N1331X[#*5.501]Y[#*53.007] +N1341Y[#*52.537] +N1351Y[#*51.24] +N1361Y[#*51.232]Z[#*-29.671] +N1371Y[#*51.216]Z[#*-29.482] +N1381Y[#*51.162]Z[#*-29.167] +N1391Y[#*51.131]Z[#*-29.044] +N1401Y[#*51.037]Z[#*-28.764] +N1411Y[#*50.912]Z[#*-28.49] +N1421Y[#*50.787]Z[#*-28.274] +N1431Y[#*50.537]Z[#*-27.938] +N1441Y[#*50.427]Z[#*-27.819] +N1451Y[#*50.412]Z[#*-27.378] +N1461Y[#*50.365]Z[#*-27.062] +N1471Y[#*50.287]Z[#*-26.765] +N1481Y[#*50.162]Z[#*-26.445] +N1491Y[#*50.037]Z[#*-26.205] +N1501Y[#*49.974]Z[#*-26.103] +N1511Y[#*49.787]Z[#*-25.843] +N1521Y[#*49.537]Z[#*-25.573] +N1531Y[#*49.412]Z[#*-25.462] +N1541Y[#*49.037]Z[#*-25.172] +N1551Y[#*48.537]Z[#*-24.874] +N1561Y[#*48.287]Z[#*-24.773] +N1571Y[#*48.037]Z[#*-24.698] +N1581Y[#*47.537]Z[#*-24.602] +N1591Y[#*47.037]Z[#*-24.522] +N1601Y[#*46.537]Z[#*-24.492] +N1611Y[#*46.037]Z[#*-24.48] +N1621Y[#*45.537]Z[#*-24.527] +N1631Y[#*45.037]Z[#*-24.589] +N1641Y[#*44.537]Z[#*-24.678] +N1651Y[#*44.037]Z[#*-24.818] +N1661Y[#*43.537]Z[#*-24.975] +N1671Y[#*43.037]Z[#*-25.176] +N1681Y[#*42.537]Z[#*-25.45] +N1691Y[#*42.037]Z[#*-25.776] +N1701Y[#*41.537]Z[#*-26.234] +N1711Y[#*41.506]Z[#*-26.273] +N1721Y[#*41.287]Z[#*-26.587] +N1731Y[#*41.037]Z[#*-27.099] +N1741Y[#*40.974]Z[#*-27.283] +N1751Y[#*40.787]Z[#*-27.878] +N1761Y[#*40.763]Z[#*-27.969] +N1771Y[#*40.724]Z[#*-28.204] +N1781Y[#*40.677]Z[#*-28.574] +N1791Y[#*40.654]Z[#*-28.836] +N1801Y[#*40.646]Z[#*-30.5] +N1811Y[#*40.623] +N1821Y[#*40.591] +N1831Y[#*40.037] +N1841Y[#*26.537] +N1851Y[#*25.162] +N1861Y[#*25.154]Z[#*-30.496] +N1871Y[#*25.021]Z[#*-30.103] +N1881Y[#*24.912]Z[#*-29.779] +N1891Y[#*24.787]Z[#*-29.405] +N1901Y[#*24.537]Z[#*-28.799] +N1911Y[#*24.287]Z[#*-28.339] +N1921Y[#*23.787]Z[#*-27.433] +N1931Y[#*23.537]Z[#*-26.983] +N1941Y[#*23.037]Z[#*-26.291] +N1951Y[#*22.537]Z[#*-25.629] +N1961Y[#*21.537]Z[#*-24.429] +N1971Y[#*20.537]Z[#*-23.381] +N1981Y[#*19.537]Z[#*-22.448] +N1991Y[#*18.537]Z[#*-21.6] +N2001Y[#*17.537]Z[#*-20.844] +N2011Y[#*15.537]Z[#*-19.492] +N2021Y[#*15.037]Z[#*-19.217] +N2031Y[#*13.537]Z[#*-18.424] +N2041Y[#*13.037]Z[#*-18.167] +N2051Y[#*12.537]Z[#*-17.934] +N2061Y[#*10.037]Z[#*-16.975] +N2071Y[#*9.537]Z[#*-16.806] +N2081Y[#*7.537]Z[#*-16.277] +N2091Y[#*6.537]Z[#*-16.02] +N2101Y[#*3.537]Z[#*-15.549] +N2111Y[#*2.537]Z[#*-15.474] +N2121Y[#*0.537]Z[#*-15.369] +N2131Y[#*-0.463]Z[#*-15.365] +N2141Y[#*-2.963]Z[#*-15.496] +N2151Y[#*-3.463]Z[#*-15.537] +N2161Y[#*-5.463]Z[#*-15.85] +N2171Y[#*-6.463]Z[#*-16.007] +N2181Y[#*-6.963]Z[#*-16.126] +N2191Y[#*-9.463]Z[#*-16.787] +N2201Y[#*-10.463]Z[#*-17.14] +N2211Y[#*-12.463]Z[#*-17.906] +N2221Y[#*-13.463]Z[#*-18.385] +N2231Y[#*-14.963]Z[#*-19.178] +N2241Y[#*-15.463]Z[#*-19.447] +N2251Y[#*-16.463]Z[#*-20.121] +N2261Y[#*-17.463]Z[#*-20.796] +N2271Y[#*-18.463]Z[#*-21.54] +N2281Y[#*-19.463]Z[#*-22.385] +N2291Y[#*-20.463]Z[#*-23.304] +N2301Y[#*-21.463]Z[#*-24.353] +N2311Y[#*-22.463]Z[#*-25.532] +N2321Y[#*-23.463]Z[#*-26.866] +N2331Y[#*-23.713]Z[#*-27.299] +N2341Y[#*-24.463]Z[#*-28.663] +N2351Y[#*-24.713]Z[#*-29.187] +N2361Y[#*-24.963]Z[#*-29.931] +N2371Y[#*-25.143]Z[#*-30.463] +N2381Y[#*-25.159]Z[#*-30.5] +N2391Y[#*-25.213] +N2401Y[#*-40.635] +N2411Y[#*-40.643] +N2421Y[#*-40.651]Z[#*-28.876] +N2431Y[#*-40.674]Z[#*-28.6] +N2441Y[#*-40.729]Z[#*-28.168] +N2451Y[#*-40.744]Z[#*-28.062] +N2461Y[#*-40.807]Z[#*-27.811] +N2471Y[#*-40.963]Z[#*-27.316] +N2481Y[#*-41.026]Z[#*-27.131] +N2491Y[#*-41.088]Z[#*-26.967] +N2501Y[#*-41.213]Z[#*-26.712] +N2511Y[#*-41.338]Z[#*-26.506] +N2521Y[#*-41.494]Z[#*-26.288] +N2531Y[#*-41.526]Z[#*-26.248] +N2541Y[#*-41.713]Z[#*-26.038] +N2551Y[#*-41.963]Z[#*-25.829] +N2561Y[#*-42.213]Z[#*-25.654] +N2571Y[#*-42.463]Z[#*-25.495] +N2581Y[#*-42.963]Z[#*-25.214] +N2591Y[#*-43.463]Z[#*-25.] +N2601Y[#*-43.963]Z[#*-24.84] +N2611Y[#*-44.463]Z[#*-24.697] +N2621Y[#*-44.963]Z[#*-24.598] +N2631Y[#*-45.463]Z[#*-24.536] +N2641Y[#*-45.963]Z[#*-24.483] +N2651Y[#*-46.463]Z[#*-24.489] +N2661Y[#*-46.963]Z[#*-24.514] +N2671Y[#*-47.463]Z[#*-24.589] +N2681Y[#*-47.963]Z[#*-24.681] +N2691Y[#*-48.463]Z[#*-24.841] +N2701Y[#*-48.713]Z[#*-24.964] +N2711Y[#*-48.963]Z[#*-25.119] +N2721Y[#*-49.463]Z[#*-25.506] +N2731Y[#*-49.588]Z[#*-25.623] +N2741Y[#*-49.713]Z[#*-25.756] +N2751Y[#*-49.963]Z[#*-26.085] +N2761Y[#*-50.088]Z[#*-26.297] +N2771Y[#*-50.213]Z[#*-26.563] +N2781Y[#*-50.354]Z[#*-27.011] +N2791Y[#*-50.362]Z[#*-27.046] +N2801Y[#*-50.409]Z[#*-27.344] +N2811Y[#*-50.424]Z[#*-27.815] +N2821Y[#*-50.494]Z[#*-27.89] +N2831Y[#*-50.526]Z[#*-27.925] +N2841Y[#*-50.713]Z[#*-28.164] +N2851Y[#*-50.963]Z[#*-28.594] +N2861Y[#*-51.088]Z[#*-28.906] +N2871Y[#*-51.151]Z[#*-29.121] +N2881Y[#*-51.198]Z[#*-29.348] +N2891Y[#*-51.221]Z[#*-29.524] +N2901Y[#*-51.229]Z[#*-29.616] +N2911Y[#*-51.237]Z[#*-30.5] +N2921Y[#*-51.346] +N2931Y[#*-53.] +N2941X[#*5.472]Y[#*-53.293] +N2951X[#*5.393]Y[#*-53.547] +N2961X[#*5.269]Y[#*-53.762] +N2971X[#*5.109]Y[#*-53.938] +N2981X[#*4.92]Y[#*-54.074] +N2991X[#*4.709]Y[#*-54.172] +N3001X[#*4.483]Y[#*-54.23] +N3011X[#*4.25]Y[#*-54.25] +N3021X[#*4.017]Y[#*-54.23] +N3031X[#*3.791]Y[#*-54.172] +N3041X[#*3.58]Y[#*-54.074] +N3051X[#*3.391]Y[#*-53.938] +N3061X[#*3.231]Y[#*-53.762] +N3071X[#*3.107]Y[#*-53.547] +N3081X[#*3.028]Y[#*-53.293] +N3091X[#*3.]Y[#*-53.] +N3101Y[#*-51.218] +N3111Y[#*-51.203]Z[#*-29.635] +N3121Y[#*-51.187]Z[#*-29.466] +N3131Y[#*-51.14]Z[#*-29.195] +N3141Y[#*-51.062]Z[#*-28.914] +N3151Y[#*-51.038]Z[#*-28.847] +N3161Y[#*-50.781]Z[#*-28.316] +N3171Y[#*-50.593]Z[#*-28.049] +N3181Y[#*-50.515]Z[#*-27.954] +N3191Y[#*-50.499]Z[#*-27.935] +N3201Y[#*-50.492]Z[#*-27.516] +N3211Y[#*-50.46]Z[#*-27.201] +N3221Y[#*-50.406]Z[#*-26.935] +N3231Y[#*-50.281]Z[#*-26.558] +N3241Y[#*-50.156]Z[#*-26.293] +N3251Y[#*-50.031]Z[#*-26.081] +N3261Y[#*-49.781]Z[#*-25.75] +N3271Y[#*-49.656]Z[#*-25.612] +N3281Y[#*-49.562]Z[#*-25.508] +N3291Y[#*-49.531]Z[#*-25.473] +N3301Y[#*-49.281]Z[#*-25.23] +N3311Y[#*-49.031]Z[#*-25.036] +N3321Y[#*-48.531]Z[#*-24.753] +N3331Y[#*-48.031]Z[#*-24.551] +N3341Y[#*-47.531]Z[#*-24.384] +N3351Y[#*-46.531]Z[#*-24.203] +N3361Y[#*-45.531]Z[#*-24.118] +N3371Y[#*-44.531]Z[#*-24.109] +N3381Y[#*-43.531]Z[#*-24.151] +N3391Y[#*-43.031]Z[#*-24.195] +N3401Y[#*-42.531]Z[#*-24.25] +N3411Y[#*-42.031]Z[#*-24.334] +N3421Y[#*-41.531]Z[#*-24.441] +N3431Y[#*-41.031]Z[#*-24.576] +N3441Y[#*-40.531]Z[#*-24.743] +N3451Y[#*-40.031]Z[#*-24.951] +N3461Y[#*-39.531]Z[#*-25.181] +N3471Y[#*-38.531]Z[#*-25.692] +N3481Y[#*-38.031]Z[#*-25.924] +N3491Y[#*-37.656]Z[#*-26.134] +N3501Y[#*-37.531]Z[#*-26.214] +N3511Y[#*-37.281]Z[#*-26.393] +N3521Y[#*-37.031]Z[#*-26.609] +N3531Y[#*-36.781]Z[#*-26.884] +N3541Y[#*-36.656]Z[#*-27.059] +N3551Y[#*-36.546]Z[#*-27.218] +N3561Y[#*-36.093]Z[#*-27.839] +N3571Y[#*-36.031]Z[#*-27.923] +N3581Y[#*-35.906]Z[#*-28.095] +N3591Y[#*-35.796]Z[#*-28.281] +N3601Y[#*-35.788]Z[#*-28.297] +N3611Y[#*-35.718]Z[#*-28.46] +N3621Y[#*-35.656]Z[#*-28.684] +N3631Y[#*-35.593]Z[#*-29.236] +N3641Y[#*-35.531]Z[#*-29.777] +N3651Y[#*-35.523]Z[#*-29.863] +N3661Y[#*-35.499]Z[#*-30.214] +N3671Y[#*-35.492]Z[#*-30.5] +N3681Y[#*-30.531] +N3691Y[#*-24.562] +N3701Y[#*-24.554]Z[#*-30.493] +N3711Y[#*-24.281]Z[#*-29.659] +N3721Y[#*-24.031]Z[#*-28.965] +N3731Y[#*-23.031]Z[#*-27.091] +N3741Y[#*-22.531]Z[#*-26.377] +N3751Y[#*-21.531]Z[#*-25.051] +N3761Y[#*-21.031]Z[#*-24.513] +N3771Y[#*-20.031]Z[#*-23.493] +N3781Y[#*-19.531]Z[#*-23.007] +N3791Y[#*-18.531]Z[#*-22.211] +N3801Y[#*-17.531]Z[#*-21.398] +N3811Y[#*-16.531]Z[#*-20.74] +N3821Y[#*-15.531]Z[#*-20.104] +N3831Y[#*-14.531]Z[#*-19.552] +N3841Y[#*-12.531]Z[#*-18.547] +N3851Y[#*-12.031]Z[#*-18.346] +N3861Y[#*-11.531]Z[#*-18.158] +N3871Y[#*-9.531]Z[#*-17.418] +N3881Y[#*-6.531]Z[#*-16.628] +N3891Y[#*-6.031]Z[#*-16.54] +N3901Y[#*-3.531]Z[#*-16.146] +N3911Y[#*-2.531]Z[#*-16.063] +N3921Y[#*-0.531]Z[#*-15.955] +N3931Y[#*0.469]Z[#*-15.952] +N3941Y[#*2.469]Z[#*-16.06] +N3951Y[#*3.469]Z[#*-16.136] +N3961Y[#*4.469]Z[#*-16.294] +N3971Y[#*5.969]Z[#*-16.531] +N3981Y[#*6.469]Z[#*-16.614] +N3991Y[#*9.469]Z[#*-17.399] +N4001Y[#*10.469]Z[#*-17.76] +N4011Y[#*11.969]Z[#*-18.323] +N4021Y[#*12.469]Z[#*-18.518] +N4031Y[#*14.469]Z[#*-19.522] +N4041Y[#*15.469]Z[#*-20.066] +N4051Y[#*16.969]Z[#*-21.026] +N4061Y[#*17.469]Z[#*-21.354] +N4071Y[#*19.469]Z[#*-22.957] +N4081Y[#*19.969]Z[#*-23.431] +N4091Y[#*20.969]Z[#*-24.45] +N4101Y[#*21.469]Z[#*-24.975] +N4111Y[#*22.469]Z[#*-26.296] +N4121Y[#*22.969]Z[#*-26.986] +N4131Y[#*23.969]Z[#*-28.842] +N4141Y[#*24.219]Z[#*-29.472] +N4151Y[#*24.407]Z[#*-30.042] +N4161Y[#*24.516]Z[#*-30.375] +N4171Y[#*24.54]Z[#*-30.447] +N4181Y[#*24.555]Z[#*-30.496] +N4191Y[#*24.563]Z[#*-30.5] +N4201Y[#*24.594] +N4211Y[#*25.469] +N4221Y[#*32.469] +N4231Y[#*35.407] +N4241Y[#*35.485] +N4251Y[#*35.493] +N4261Y[#*35.508]Z[#*-30.079] +N4271Y[#*35.524]Z[#*-29.846] +N4281Y[#*35.532]Z[#*-29.767] +N4291Y[#*35.594]Z[#*-29.225] +N4301Y[#*35.665]Z[#*-28.641] +N4311Y[#*35.688]Z[#*-28.551] +N4321Y[#*35.719]Z[#*-28.457] +N4331Y[#*35.969]Z[#*-28.005] +N4341Y[#*36.469]Z[#*-27.325] +N4351Y[#*36.719]Z[#*-26.967] +N4361Y[#*36.844]Z[#*-26.806] +N4371Y[#*36.969]Z[#*-26.67] +N4381Y[#*37.219]Z[#*-26.442] +N4391Y[#*37.469]Z[#*-26.255] +N4401Y[#*37.969]Z[#*-25.955] +N4411Y[#*38.469]Z[#*-25.719] +N4421Y[#*39.469]Z[#*-25.213] +N4431Y[#*39.969]Z[#*-24.977] +N4441Y[#*40.469]Z[#*-24.766] +N4451Y[#*40.969]Z[#*-24.594] +N4461Y[#*41.469]Z[#*-24.456] +N4471Y[#*41.969]Z[#*-24.345] +N4481Y[#*42.469]Z[#*-24.259] +N4491Y[#*43.469]Z[#*-24.154] +N4501Y[#*44.469]Z[#*-24.111] +N4511Y[#*45.469]Z[#*-24.115] +N4521Y[#*45.969]Z[#*-24.147] +N4531Y[#*46.469]Z[#*-24.194] +N4541Y[#*47.469]Z[#*-24.37] +N4551Y[#*47.969]Z[#*-24.526] +N4561Y[#*48.219]Z[#*-24.626] +N4571Y[#*48.462]Z[#*-24.723] +N4581Y[#*48.719]Z[#*-24.845] +N4591Y[#*48.969]Z[#*-24.994] +N4601Y[#*49.219]Z[#*-25.178] +N4611Y[#*49.469]Z[#*-25.408] +N4621Y[#*49.844]Z[#*-25.826] +N4631Y[#*49.969]Z[#*-25.991] +N4641Y[#*50.094]Z[#*-26.184] +N4651Y[#*50.188]Z[#*-26.355] +N4661Y[#*50.344]Z[#*-26.728] +N4671Y[#*50.376]Z[#*-26.826] +N4681Y[#*50.391]Z[#*-26.881] +N4691Y[#*50.454]Z[#*-27.161] +N4701Y[#*50.485]Z[#*-27.409] +N4711Y[#*50.501]Z[#*-27.937] +N4721Y[#*50.594]Z[#*-28.05] +N4731Y[#*50.719]Z[#*-28.221] +N4741Y[#*50.844]Z[#*-28.424] +N4751Y[#*50.907]Z[#*-28.542] +N4761Y[#*51.032]Z[#*-28.829] +N4771Y[#*51.079]Z[#*-28.966] +N4781Y[#*51.157]Z[#*-29.276] +N4791Y[#*51.196]Z[#*-29.549] +N4801Y[#*51.204]Z[#*-29.655] +N4811Y[#*51.219]Z[#*-30.5] +N4821Y[#*53.] +N4831X[#*2.972]Y[#*53.293] +N4841X[#*2.893]Y[#*53.547] +N4851X[#*2.769]Y[#*53.762] +N4861X[#*2.609]Y[#*53.937] +N4871X[#*2.42]Y[#*54.074] +N4881X[#*2.209]Y[#*54.172] +N4891X[#*1.983]Y[#*54.23] +N4901X[#*1.75]Y[#*54.25] +N4911X[#*1.517]Y[#*54.23] +N4921X[#*1.291]Y[#*54.172] +N4931X[#*1.08]Y[#*54.074] +N4941X[#*0.891]Y[#*53.937] +N4951X[#*0.731]Y[#*53.762] +N4961X[#*0.607]Y[#*53.547] +N4971X[#*0.528]Y[#*53.293] +N4981X[#*0.5]Y[#*53.] +N4991Y[#*49.765] +N5001Y[#*49.758] +N5011Y[#*49.75]Z[#*-29.781] +N5021Y[#*49.742]Z[#*-29.696] +N5031Y[#*49.695]Z[#*-29.43] +N5041Y[#*49.601]Z[#*-29.137] +N5051Y[#*49.484]Z[#*-28.891] +N5061Y[#*49.359]Z[#*-28.693] +N5071Y[#*49.234]Z[#*-28.534] +N5081Y[#*49.094]Z[#*-28.383] +N5091Y[#*49.07]Z[#*-28.36] +N5101Y[#*49.062]Z[#*-27.618] +N5111Y[#*49.055]Z[#*-27.522] +N5121Y[#*49.023]Z[#*-27.318] +N5131Y[#*48.969]Z[#*-27.104] +N5141Y[#*48.922]Z[#*-26.969] +N5151Y[#*48.859]Z[#*-26.824] +N5161Y[#*48.734]Z[#*-26.596] +N5171Y[#*48.609]Z[#*-26.418] +N5181Y[#*48.484]Z[#*-26.271] +N5191Y[#*48.109]Z[#*-25.877] +N5201Y[#*47.609]Z[#*-25.495] +N5211Y[#*47.547]Z[#*-25.456] +N5221Y[#*47.484]Z[#*-25.418] +N5231Y[#*47.109]Z[#*-25.222] +N5241Y[#*46.609]Z[#*-25.008] +N5251Y[#*46.109]Z[#*-24.83] +N5261Y[#*45.609]Z[#*-24.69] +N5271Y[#*45.109]Z[#*-24.596] +N5281Y[#*43.609]Z[#*-24.349] +N5291Y[#*42.609]Z[#*-24.268] +N5301Y[#*41.609]Z[#*-24.153] +N5311Y[#*40.609]Z[#*-24.12] +N5321Y[#*40.109]Z[#*-24.137] +N5331Y[#*39.609]Z[#*-24.182] +N5341Y[#*38.609]Z[#*-24.292] +N5351Y[#*37.609]Z[#*-24.403] +N5361Y[#*36.609]Z[#*-24.601] +N5371Y[#*36.109]Z[#*-24.737] +N5381Y[#*35.609]Z[#*-24.905] +N5391Y[#*34.609]Z[#*-25.272] +N5401Y[#*33.609]Z[#*-25.607] +N5411Y[#*33.109]Z[#*-25.805] +N5421Y[#*32.609]Z[#*-26.046] +N5431Y[#*32.109]Z[#*-26.352] +N5441Y[#*31.609]Z[#*-26.752] +N5451Y[#*31.109]Z[#*-27.251] +N5461Y[#*30.609]Z[#*-27.702] +N5471Y[#*30.109]Z[#*-28.206] +N5481Y[#*30.078]Z[#*-28.251] +N5491Y[#*29.984]Z[#*-28.409] +N5501Y[#*29.922]Z[#*-28.552] +N5511Y[#*29.609]Z[#*-29.644] +N5521Y[#*29.484]Z[#*-30.023] +N5531Y[#*29.453]Z[#*-30.154] +N5541Y[#*29.445]Z[#*-30.211] +N5551Y[#*29.437]Z[#*-30.5] +N5561Y[#*29.414] +N5571Y[#*24.109] +N5581Y[#*23.851]Z[#*-30.496] +N5591Y[#*23.828]Z[#*-30.421] +N5601Y[#*23.734]Z[#*-30.112] +N5611Y[#*23.547]Z[#*-29.478] +N5621Y[#*23.484]Z[#*-29.273] +N5631Y[#*23.359]Z[#*-28.962] +N5641Y[#*22.609]Z[#*-27.486] +N5651Y[#*22.109]Z[#*-26.663] +N5661Y[#*21.109]Z[#*-25.309] +N5671Y[#*20.609]Z[#*-24.731] +N5681Y[#*19.609]Z[#*-23.732] +N5691Y[#*18.609]Z[#*-22.831] +N5701Y[#*17.609]Z[#*-22.058] +N5711Y[#*16.609]Z[#*-21.354] +N5721Y[#*15.609]Z[#*-20.753] +N5731Y[#*14.609]Z[#*-20.14] +N5741Y[#*13.609]Z[#*-19.651] +N5751Y[#*12.609]Z[#*-19.181] +N5761Y[#*11.609]Z[#*-18.76] +N5771Y[#*9.609]Z[#*-18.034] +N5781Y[#*8.609]Z[#*-17.737] +N5791Y[#*6.609]Z[#*-17.221] +N5801Y[#*5.609]Z[#*-17.03] +N5811Y[#*3.609]Z[#*-16.714] +N5821Y[#*2.609]Z[#*-16.614] +N5831Y[#*0.609]Z[#*-16.504] +N5841Y[#*-0.391]Z[#*-16.492] +N5851Y[#*-2.391]Z[#*-16.602] +N5861Y[#*-3.391]Z[#*-16.679] +N5871Y[#*-5.391]Z[#*-16.995] +N5881Y[#*-6.391]Z[#*-17.165] +N5891Y[#*-8.391]Z[#*-17.681] +N5901Y[#*-9.391]Z[#*-17.954] +N5911Y[#*-11.391]Z[#*-18.681] +N5921Y[#*-12.391]Z[#*-19.078] +N5931Y[#*-13.391]Z[#*-19.548] +N5941Y[#*-14.391]Z[#*-20.032] +N5951Y[#*-15.391]Z[#*-20.618] +N5961Y[#*-16.391]Z[#*-21.223] +N5971Y[#*-17.391]Z[#*-21.891] +N5981Y[#*-18.391]Z[#*-22.659] +N5991Y[#*-19.391]Z[#*-23.511] +N6001Y[#*-20.391]Z[#*-24.513] +N6011Y[#*-21.391]Z[#*-25.692] +N6021Y[#*-21.891]Z[#*-26.371] +N6031Y[#*-22.391]Z[#*-27.075] +N6041Y[#*-22.891]Z[#*-28.03] +N6051Y[#*-23.391]Z[#*-29.032] +N6061Y[#*-23.641]Z[#*-29.796] +N6071Y[#*-23.766]Z[#*-30.218] +N6081Y[#*-23.852]Z[#*-30.497] +N6091Y[#*-23.86]Z[#*-30.5] +N6101Y[#*-27.391] +N6111Y[#*-29.391] +N6121Y[#*-29.438] +N6131Y[#*-29.445]Z[#*-30.208] +N6141Y[#*-29.461]Z[#*-30.112] +N6151Y[#*-29.641]Z[#*-29.548] +N6161Y[#*-29.891]Z[#*-28.648] +N6171Y[#*-30.016]Z[#*-28.351] +N6181Y[#*-30.078]Z[#*-28.25] +N6191Y[#*-30.203]Z[#*-28.086] +N6201Y[#*-30.391]Z[#*-27.89] +N6211Y[#*-30.891]Z[#*-27.468] +N6221Y[#*-31.391]Z[#*-26.97] +N6231Y[#*-31.891]Z[#*-26.514] +N6241Y[#*-32.391]Z[#*-26.169] +N6251Y[#*-32.641]Z[#*-26.029] +N6261Y[#*-32.891]Z[#*-25.904] +N6271Y[#*-33.391]Z[#*-25.689] +N6281Y[#*-33.891]Z[#*-25.51] +N6291Y[#*-34.391]Z[#*-25.345] +N6301Y[#*-35.391]Z[#*-24.987] +N6311Y[#*-36.391]Z[#*-24.657] +N6321Y[#*-36.891]Z[#*-24.535] +N6331Y[#*-37.391]Z[#*-24.437] +N6341Y[#*-37.891]Z[#*-24.364] +N6351Y[#*-39.391]Z[#*-24.211] +N6361Y[#*-40.391]Z[#*-24.124] +N6371Y[#*-40.891]Z[#*-24.12] +N6381Y[#*-41.391]Z[#*-24.137] +N6391Y[#*-41.891]Z[#*-24.182] +N6401Y[#*-42.391]Z[#*-24.247] +N6411Y[#*-43.391]Z[#*-24.324] +N6421Y[#*-44.391]Z[#*-24.474] +N6431Y[#*-45.391]Z[#*-24.644] +N6441Y[#*-45.891]Z[#*-24.764] +N6451Y[#*-46.391]Z[#*-24.925] +N6461Y[#*-46.891]Z[#*-25.122] +N6471Y[#*-47.391]Z[#*-25.365] +N6481Y[#*-47.891]Z[#*-25.692] +N6491Y[#*-48.141]Z[#*-25.907] +N6501Y[#*-48.516]Z[#*-26.306] +N6511Y[#*-48.641]Z[#*-26.46] +N6521Y[#*-48.766]Z[#*-26.648] +N6531Y[#*-48.899]Z[#*-26.912] +N6541Y[#*-48.953]Z[#*-27.057] +N6551Y[#*-49.031]Z[#*-27.36] +N6561Y[#*-49.063]Z[#*-27.623] +N6571Y[#*-49.07]Z[#*-28.36] +N6581Y[#*-49.203]Z[#*-28.499] +N6591Y[#*-49.391]Z[#*-28.739] +N6601Y[#*-49.516]Z[#*-28.95] +N6611Y[#*-49.641]Z[#*-29.243] +N6621Y[#*-49.711]Z[#*-29.501] +N6631Y[#*-49.719]Z[#*-29.541] +N6641Y[#*-49.75]Z[#*-29.785] +N6651Y[#*-49.758]Z[#*-30.5] +N6661Y[#*-49.797] +N6671Y[#*-50.016] +N6681Y[#*-50.391] +N6691Y[#*-52.992] +N6701Y[#*-53.] +N6711X[#*0.472]Y[#*-53.293] +N6721X[#*0.393]Y[#*-53.547] +N6731X[#*0.269]Y[#*-53.762] +N6741X[#*0.109]Y[#*-53.938] +N6751X[#*-0.08]Y[#*-54.074] +N6761X[#*-0.291]Y[#*-54.172] +N6771X[#*-0.517]Y[#*-54.23] +N6781X[#*-0.75]Y[#*-54.25] +N6791X[#*-0.983]Y[#*-54.23] +N6801X[#*-1.209]Y[#*-54.172] +N6811X[#*-1.42]Y[#*-54.074] +N6821X[#*-1.609]Y[#*-53.938] +N6831X[#*-1.769]Y[#*-53.762] +N6841X[#*-1.893]Y[#*-53.547] +N6851X[#*-1.972]Y[#*-53.293] +N6861X[#*-2.]Y[#*-53.] +N6871Y[#*-52.992] +N6881Y[#*-46.367] +N6891Y[#*-46.305] +N6901Y[#*-46.274]Z[#*-30.111] +N6911Y[#*-46.242]Z[#*-29.955] +N6921Y[#*-46.18]Z[#*-29.758] +N6931Y[#*-46.149]Z[#*-29.683] +N6941Y[#*-46.024]Z[#*-29.448] +N6951Y[#*-45.93]Z[#*-29.311] +N6961Y[#*-45.907]Z[#*-29.28] +N6971Y[#*-45.774]Z[#*-29.107] +N6981Y[#*-45.742]Z[#*-29.058] +N6991Y[#*-45.711]Z[#*-29.006] +N7001Y[#*-45.664]Z[#*-28.93] +N7011Y[#*-45.657]Z[#*-28.217] +N7021Y[#*-45.649]Z[#*-28.146] +N7031Y[#*-45.617]Z[#*-27.973] +N7041Y[#*-45.586]Z[#*-27.858] +N7051Y[#*-45.524]Z[#*-27.69] +N7061Y[#*-45.399]Z[#*-27.458] +N7071Y[#*-45.149]Z[#*-27.123] +N7081Y[#*-44.961]Z[#*-26.859] +N7091Y[#*-44.899]Z[#*-26.787] +N7101Y[#*-44.399]Z[#*-26.379] +N7111Y[#*-43.899]Z[#*-26.071] +N7121Y[#*-43.399]Z[#*-25.725] +N7131Y[#*-41.399]Z[#*-24.8] +N7141Y[#*-40.899]Z[#*-24.623] +N7151Y[#*-40.399]Z[#*-24.49] +N7161Y[#*-38.899]Z[#*-24.199] +N7171Y[#*-37.899]Z[#*-24.071] +N7181Y[#*-37.399]Z[#*-24.037] +N7191Y[#*-36.899]Z[#*-24.025] +N7201Y[#*-35.899]Z[#*-24.069] +N7211Y[#*-32.899]Z[#*-24.344] +N7221Y[#*-31.899]Z[#*-24.5] +N7231Y[#*-30.899]Z[#*-24.715] +N7241Y[#*-29.899]Z[#*-24.973] +N7251Y[#*-28.899]Z[#*-25.206] +N7261Y[#*-27.899]Z[#*-25.41] +N7271Y[#*-26.899]Z[#*-25.644] +N7281Y[#*-25.899]Z[#*-25.938] +N7291Y[#*-24.899]Z[#*-26.304] +N7301Y[#*-24.399]Z[#*-26.535] +N7311Y[#*-23.899]Z[#*-26.741] +N7321Y[#*-23.399]Z[#*-26.875] +N7331Y[#*-22.899]Z[#*-27.001] +N7341Y[#*-22.649]Z[#*-27.037] +N7351Y[#*-21.961]Z[#*-27.016] +N7361Y[#*-21.899]Z[#*-27.014] +N7371Y[#*-21.875] +N7381Y[#*-21.649]Z[#*-26.687] +N7391Y[#*-20.899]Z[#*-25.672] +N7401Y[#*-20.399]Z[#*-25.035] +N7411Y[#*-18.899]Z[#*-23.623] +N7421Y[#*-17.899]Z[#*-22.818] +N7431Y[#*-16.899]Z[#*-22.1] +N7441Y[#*-15.899]Z[#*-21.453] +N7451Y[#*-14.899]Z[#*-20.879] +N7461Y[#*-13.899]Z[#*-20.336] +N7471Y[#*-11.899]Z[#*-19.424] +N7481Y[#*-10.899]Z[#*-19.041] +N7491Y[#*-8.899]Z[#*-18.343] +N7501Y[#*-6.899]Z[#*-17.832] +N7511Y[#*-5.899]Z[#*-17.592] +N7521Y[#*-3.899]Z[#*-17.276] +N7531Y[#*-2.899]Z[#*-17.136] +N7541Y[#*-0.399]Z[#*-16.996] +N7551Y[#*0.101]Z[#*-16.98] +N7561Y[#*1.101]Z[#*-17.035] +N7571Y[#*3.101]Z[#*-17.153] +N7581Y[#*3.601]Z[#*-17.229] +N7591Y[#*6.101]Z[#*-17.629] +N7601Y[#*8.101]Z[#*-18.138] +N7611Y[#*9.101]Z[#*-18.409] +N7621Y[#*11.101]Z[#*-19.113] +N7631Y[#*12.101]Z[#*-19.519] +N7641Y[#*14.101]Z[#*-20.429] +N7651Y[#*14.601]Z[#*-20.708] +N7661Y[#*16.101]Z[#*-21.569] +N7671Y[#*17.101]Z[#*-22.245] +N7681Y[#*18.101]Z[#*-22.963] +N7691Y[#*19.101]Z[#*-23.816] +N7701Y[#*19.601]Z[#*-24.291] +N7711Y[#*20.101]Z[#*-24.734] +N7721Y[#*20.601]Z[#*-25.289] +N7731Y[#*21.351]Z[#*-26.285] +N7741Y[#*21.601]Z[#*-26.623] +N7751Y[#*21.836]Z[#*-26.958] +N7761Y[#*21.843]Z[#*-26.97] +N7771Y[#*21.875]Z[#*-27.014] +N7781Y[#*22.476]Z[#*-27.032] +N7791Y[#*22.586]Z[#*-27.035] +N7801Y[#*22.601] +N7811Y[#*22.851]Z[#*-27.013] +N7821Y[#*23.601]Z[#*-26.822] +N7831Y[#*24.101]Z[#*-26.675] +N7841Y[#*24.601]Z[#*-26.439] +N7851Y[#*25.101]Z[#*-26.222] +N7861Y[#*26.101]Z[#*-25.872] +N7871Y[#*27.101]Z[#*-25.593] +N7881Y[#*28.101]Z[#*-25.367] +N7891Y[#*29.101]Z[#*-25.162] +N7901Y[#*30.101]Z[#*-24.926] +N7911Y[#*31.101]Z[#*-24.666] +N7921Y[#*32.101]Z[#*-24.463] +N7931Y[#*33.101]Z[#*-24.321] +N7941Y[#*35.101]Z[#*-24.144] +N7951Y[#*36.101]Z[#*-24.054] +N7961Y[#*36.601]Z[#*-24.03] +N7971Y[#*37.101]Z[#*-24.027] +N7981Y[#*38.101]Z[#*-24.091] +N7991Y[#*39.101]Z[#*-24.237] +N8001Y[#*40.101]Z[#*-24.428] +N8011Y[#*40.601]Z[#*-24.539] +N8021Y[#*41.101]Z[#*-24.689] +N8031Y[#*41.601]Z[#*-24.886] +N8041Y[#*42.601]Z[#*-25.385] +N8051Y[#*42.851]Z[#*-25.474] +N8061Y[#*43.101]Z[#*-25.576] +N8071Y[#*43.601]Z[#*-25.848] +N8081Y[#*44.101]Z[#*-26.196] +N8091Y[#*44.351]Z[#*-26.35] +N8101Y[#*44.601]Z[#*-26.518] +N8111Y[#*44.726]Z[#*-26.619] +N8121Y[#*44.851]Z[#*-26.737] +N8131Y[#*44.976]Z[#*-26.878] +N8141Y[#*45.086]Z[#*-27.028] +N8151Y[#*45.226]Z[#*-27.224] +N8161Y[#*45.414]Z[#*-27.482] +N8171Y[#*45.476]Z[#*-27.591] +N8181Y[#*45.57]Z[#*-27.809] +N8191Y[#*45.633]Z[#*-28.045] +N8201Y[#*45.656]Z[#*-28.212] +N8211Y[#*45.672]Z[#*-28.942] +N8221Y[#*45.851]Z[#*-29.208] +N8231Y[#*45.976]Z[#*-29.376] +N8241Y[#*46.101]Z[#*-29.584] +N8251Y[#*46.195]Z[#*-29.799] +N8261Y[#*46.258]Z[#*-30.02] +N8271Y[#*46.289]Z[#*-30.261] +N8281Y[#*46.304]Z[#*-30.5] +N8291Y[#*53.] +N8301X[#*-2.028]Y[#*53.293] +N8311X[#*-2.107]Y[#*53.547] +N8321X[#*-2.231]Y[#*53.762] +N8331X[#*-2.391]Y[#*53.937] +N8341X[#*-2.58]Y[#*54.074] +N8351X[#*-2.791]Y[#*54.172] +N8361X[#*-3.017]Y[#*54.23] +N8371X[#*-3.25]Y[#*54.25] +N8381X[#*-3.483]Y[#*54.23] +N8391X[#*-3.709]Y[#*54.172] +N8401X[#*-3.92]Y[#*54.074] +N8411X[#*-4.109]Y[#*53.937] +N8421X[#*-4.269]Y[#*53.762] +N8431X[#*-4.393]Y[#*53.547] +N8441X[#*-4.472]Y[#*53.293] +N8451X[#*-4.5]Y[#*53.] +N8461Y[#*43.102] +N8471Y[#*43.024] +N8481Y[#*43.016]Z[#*-30.487] +N8491Y[#*42.946]Z[#*-30.175] +N8501Y[#*42.915]Z[#*-30.038] +N8511Y[#*42.852]Z[#*-29.833] +N8521Y[#*42.727]Z[#*-29.514] +N8531Y[#*42.227]Z[#*-28.275] +N8541Y[#*41.977]Z[#*-27.831] +N8551Y[#*41.477]Z[#*-27.133] +N8561Y[#*40.977]Z[#*-26.484] +N8571Y[#*40.727]Z[#*-26.238] +N8581Y[#*40.477]Z[#*-26.033] +N8591Y[#*40.352]Z[#*-25.942] +N8601Y[#*39.977]Z[#*-25.702] +N8611Y[#*39.477]Z[#*-25.422] +N8621Y[#*38.477]Z[#*-24.96] +N8631Y[#*37.977]Z[#*-24.75] +N8641Y[#*37.477]Z[#*-24.584] +N8651Y[#*36.977]Z[#*-24.462] +N8661Y[#*36.477]Z[#*-24.369] +N8671Y[#*35.477]Z[#*-24.242] +N8681Y[#*34.477]Z[#*-24.144] +N8691Y[#*33.477]Z[#*-24.059] +N8701Y[#*32.477]Z[#*-24.011] +N8711Y[#*31.477]Z[#*-24.024] +N8721Y[#*28.477]Z[#*-24.208] +N8731Y[#*27.477]Z[#*-24.259] +N8741Y[#*26.477]Z[#*-24.322] +N8751Y[#*25.477]Z[#*-24.416] +N8761Y[#*24.477]Z[#*-24.536] +N8771Y[#*23.477]Z[#*-24.672] +N8781Y[#*22.477]Z[#*-24.739] +N8791Y[#*21.477]Z[#*-24.719] +N8801Y[#*20.977]Z[#*-24.675] +N8811Y[#*20.727]Z[#*-24.61] +N8821Y[#*19.977]Z[#*-24.375] +N8831Y[#*19.469]Z[#*-24.132] +N8841Y[#*18.977]Z[#*-23.816] +N8851Y[#*17.477]Z[#*-22.95] +N8861Y[#*16.477]Z[#*-22.344] +N8871Y[#*15.477]Z[#*-21.741] +N8881Y[#*14.477]Z[#*-21.206] +N8891Y[#*13.477]Z[#*-20.693] +N8901Y[#*11.477]Z[#*-19.818] +N8911Y[#*10.477]Z[#*-19.447] +N8921Y[#*8.477]Z[#*-18.766] +N8931Y[#*7.477]Z[#*-18.513] +N8941Y[#*6.477]Z[#*-18.259] +N8951Y[#*5.477]Z[#*-18.039] +N8961Y[#*3.477]Z[#*-17.72] +N8971Y[#*2.477]Z[#*-17.609] +N8981Y[#*0.477]Z[#*-17.495] +N8991Y[#*-0.523]Z[#*-17.497] +N9001Y[#*-2.523]Z[#*-17.612] +N9011Y[#*-3.523]Z[#*-17.727] +N9021Y[#*-5.523]Z[#*-18.046] +N9031Y[#*-6.523]Z[#*-18.271] +N9041Y[#*-8.523]Z[#*-18.779] +N9051Y[#*-10.523]Z[#*-19.463] +N9061Y[#*-11.523]Z[#*-19.838] +N9071Y[#*-13.523]Z[#*-20.713] +N9081Y[#*-14.523]Z[#*-21.231] +N9091Y[#*-15.523]Z[#*-21.765] +N9101Y[#*-16.523]Z[#*-22.374] +N9111Y[#*-17.523]Z[#*-22.975] +N9121Y[#*-19.023]Z[#*-23.843] +N9131Y[#*-19.523]Z[#*-24.168] +N9141Y[#*-20.023]Z[#*-24.39] +N9151Y[#*-20.523]Z[#*-24.546] +N9161Y[#*-21.023]Z[#*-24.679] +N9171Y[#*-22.023]Z[#*-24.764] +N9181Y[#*-23.523]Z[#*-24.67] +N9191Y[#*-24.523]Z[#*-24.53] +N9201Y[#*-25.523]Z[#*-24.411] +N9211Y[#*-26.523]Z[#*-24.318] +N9221Y[#*-27.523]Z[#*-24.257] +N9231Y[#*-28.523]Z[#*-24.205] +N9241Y[#*-30.523]Z[#*-24.082] +N9251Y[#*-31.523]Z[#*-24.022] +N9261Y[#*-32.523]Z[#*-24.012] +N9271Y[#*-33.523]Z[#*-24.063] +N9281Y[#*-34.523]Z[#*-24.148] +N9291Y[#*-35.523]Z[#*-24.247] +N9301Y[#*-36.523]Z[#*-24.376] +N9311Y[#*-37.023]Z[#*-24.472] +N9321Y[#*-37.523]Z[#*-24.597] +N9331Y[#*-38.023]Z[#*-24.767] +N9341Y[#*-38.523]Z[#*-24.98] +N9351Y[#*-39.523]Z[#*-25.446] +N9361Y[#*-40.023]Z[#*-25.73] +N9371Y[#*-40.523]Z[#*-26.067] +N9381Y[#*-40.773]Z[#*-26.279] +N9391Y[#*-41.023]Z[#*-26.535] +N9401Y[#*-41.523]Z[#*-27.196] +N9411Y[#*-42.023]Z[#*-27.897] +N9421Y[#*-42.273]Z[#*-28.385] +N9431Y[#*-42.773]Z[#*-29.629] +N9441Y[#*-42.898]Z[#*-29.974] +N9451Y[#*-42.96]Z[#*-30.238] +N9461Y[#*-43.015]Z[#*-30.481] +N9471Y[#*-43.023]Z[#*-30.5] +N9481Y[#*-50.523] +N9491Y[#*-53.] +N9501X[#*-4.528]Y[#*-53.293] +N9511X[#*-4.607]Y[#*-53.547] +N9521X[#*-4.731]Y[#*-53.762] +N9531X[#*-4.891]Y[#*-53.938] +N9541X[#*-5.08]Y[#*-54.074] +N9551X[#*-5.291]Y[#*-54.172] +N9561X[#*-5.517]Y[#*-54.23] +N9571X[#*-5.75]Y[#*-54.25] +N9581X[#*-5.983]Y[#*-54.23] +N9591X[#*-6.209]Y[#*-54.172] +N9601X[#*-6.426]Y[#*-54.07] +N9611X[#*-6.609]Y[#*-53.938] +N9621X[#*-6.769]Y[#*-53.762] +N9631X[#*-6.893]Y[#*-53.547] +N9641X[#*-6.972]Y[#*-53.293] +N9651X[#*-7.]Y[#*-53.] +N9661Y[#*-47.977] +N9671Y[#*-39.946] +N9681Y[#*-39.938]Z[#*-30.498] +N9691Y[#*-39.852]Z[#*-30.14] +N9701Y[#*-39.727]Z[#*-29.698] +N9711Y[#*-38.977]Z[#*-28.078] +N9721Y[#*-38.477]Z[#*-27.411] +N9731Y[#*-37.977]Z[#*-26.9] +N9741Y[#*-37.477]Z[#*-26.43] +N9751Y[#*-37.227]Z[#*-26.212] +N9761Y[#*-36.977]Z[#*-26.028] +N9771Y[#*-36.477]Z[#*-25.729] +N9781Y[#*-35.977]Z[#*-25.495] +N9791Y[#*-35.477]Z[#*-25.315] +N9801Y[#*-33.977]Z[#*-24.83] +N9811Y[#*-32.977]Z[#*-24.564] +N9821Y[#*-31.977]Z[#*-24.374] +N9831Y[#*-30.977]Z[#*-24.269] +N9841Y[#*-29.977]Z[#*-24.201] +N9851Y[#*-28.977]Z[#*-24.143] +N9861Y[#*-26.977]Z[#*-24.039] +N9871Y[#*-25.977]Z[#*-24.012] +N9881Y[#*-24.977]Z[#*-24.016] +N9891Y[#*-22.977]Z[#*-24.082] +N9901Y[#*-21.977]Z[#*-24.081] +N9911Y[#*-20.977]Z[#*-24.008] +N9921Y[#*-19.977]Z[#*-23.91] +N9931Y[#*-19.477]Z[#*-23.806] +N9941Y[#*-18.477]Z[#*-23.601] +N9951Y[#*-17.977]Z[#*-23.435] +N9961Y[#*-16.977]Z[#*-23.014] +N9971Y[#*-15.977]Z[#*-22.486] +N9981Y[#*-13.977]Z[#*-21.574] +N9991Y[#*-12.977]Z[#*-21.082] +N1Y[#*-10.977]Z[#*-20.245] +N11Y[#*-9.977]Z[#*-19.889] +N21Y[#*-8.977]Z[#*-19.548] +N31Y[#*-7.977]Z[#*-19.226] +N41Y[#*-5.977]Z[#*-18.716] +N51Y[#*-4.977]Z[#*-18.511] +N61Y[#*-2.977]Z[#*-18.186] +N71Y[#*-1.977]Z[#*-18.11] +N81Y[#*0.023]Z[#*-17.997] +N91Y[#*2.023]Z[#*-18.113] +N101Y[#*3.023]Z[#*-18.193] +N111Y[#*5.023]Z[#*-18.519] +N121Y[#*6.023]Z[#*-18.727] +N131Y[#*8.023]Z[#*-19.238] +N141Y[#*9.023]Z[#*-19.564] +N151Y[#*10.023]Z[#*-19.905] +N161Y[#*11.023]Z[#*-20.263] +N171Y[#*13.023]Z[#*-21.102] +N181Y[#*14.023]Z[#*-21.597] +N191Y[#*16.023]Z[#*-22.508] +N201Y[#*17.023]Z[#*-23.039] +N211Y[#*17.523]Z[#*-23.279] +N221Y[#*18.023]Z[#*-23.451] +N231Y[#*19.023]Z[#*-23.712] +N241Y[#*20.023]Z[#*-23.92] +N251Y[#*21.023]Z[#*-24.012] +N261Y[#*22.023]Z[#*-24.082] +N271Y[#*23.023] +N281Y[#*25.023]Z[#*-24.015] +N291Y[#*26.023]Z[#*-24.012] +N301Y[#*27.023]Z[#*-24.041] +N311Y[#*29.023]Z[#*-24.146] +N321Y[#*30.023]Z[#*-24.203] +N331Y[#*31.023]Z[#*-24.272] +N341Y[#*32.023]Z[#*-24.381] +N351Y[#*33.023]Z[#*-24.575] +N361Y[#*34.023]Z[#*-24.845] +N371Y[#*35.523]Z[#*-25.33] +N381Y[#*36.023]Z[#*-25.515] +N391Y[#*36.523]Z[#*-25.753] +N401Y[#*37.023]Z[#*-26.059] +N411Y[#*37.523]Z[#*-26.473] +N421Y[#*38.023]Z[#*-26.943] +N431Y[#*38.523]Z[#*-27.465] +N441Y[#*38.773]Z[#*-27.764] +N451Y[#*39.023]Z[#*-28.167] +N461Y[#*39.523]Z[#*-29.254] +N471Y[#*39.773]Z[#*-29.829] +N481Y[#*39.882]Z[#*-30.266] +N491Y[#*39.937]Z[#*-30.494] +N501Y[#*39.945]Z[#*-30.5] +N511Y[#*49.023] +N521Y[#*53.] +N531X[#*-7.028]Y[#*53.293] +N541X[#*-7.107]Y[#*53.547] +N551X[#*-7.231]Y[#*53.762] +N561X[#*-7.391]Y[#*53.937] +N571X[#*-7.58]Y[#*54.074] +N581X[#*-7.791]Y[#*54.172] +N591X[#*-8.017]Y[#*54.23] +N601X[#*-8.25]Y[#*54.25] +N611X[#*-8.483]Y[#*54.23] +N621X[#*-8.709]Y[#*54.172] +N631X[#*-8.92]Y[#*54.074] +N641X[#*-9.109]Y[#*53.937] +N651X[#*-9.269]Y[#*53.762] +N661X[#*-9.393]Y[#*53.547] +N671X[#*-9.472]Y[#*53.293] +N681X[#*-9.5]Y[#*53.] +N691Y[#*51.733] +N701Y[#*43.733] +N711Y[#*42.733] +N721Y[#*36.421] +N731Y[#*36.382] +N741Y[#*36.374]Z[#*-30.477] +N751Y[#*36.296]Z[#*-30.202] +N761Y[#*36.202]Z[#*-29.885] +N771Y[#*36.171]Z[#*-29.786] +N781Y[#*36.108]Z[#*-29.625] +N791Y[#*35.983]Z[#*-29.386] +N801Y[#*35.233]Z[#*-28.184] +N811Y[#*34.733]Z[#*-27.53] +N821Y[#*34.608]Z[#*-27.415] +N831Y[#*34.233]Z[#*-27.114] +N841Y[#*32.733]Z[#*-26.105] +N851Y[#*32.233]Z[#*-25.821] +N861Y[#*31.733]Z[#*-25.613] +N871Y[#*31.233]Z[#*-25.442] +N881Y[#*30.733]Z[#*-25.299] +N891Y[#*29.733]Z[#*-25.072] +N901Y[#*28.733]Z[#*-24.872] +N911Y[#*26.733]Z[#*-24.529] +N921Y[#*25.733]Z[#*-24.397] +N931Y[#*24.733]Z[#*-24.307] +N941Y[#*22.733]Z[#*-24.202] +N951Y[#*21.733]Z[#*-24.131] +N961Y[#*20.733]Z[#*-24.026] +N971Y[#*19.733]Z[#*-23.905] +N981Y[#*17.733]Z[#*-23.524] +N991Y[#*16.733]Z[#*-23.215] +N1001Y[#*15.733]Z[#*-22.882] +N1011Y[#*14.733]Z[#*-22.48] +N1021Y[#*13.733]Z[#*-22.038] +N1031Y[#*12.733]Z[#*-21.623] +N1041Y[#*10.733]Z[#*-20.846] +N1051Y[#*9.733]Z[#*-20.474] +N1061Y[#*7.733]Z[#*-19.81] +N1071Y[#*5.733]Z[#*-19.286] +N1081Y[#*4.733]Z[#*-19.075] +N1091Y[#*2.733]Z[#*-18.733] +N1101Y[#*2.233]Z[#*-18.693] +N1111Y[#*0.233]Z[#*-18.565] +N1121Y[#*-0.267]Z[#*-18.567] +N1131Y[#*-1.267]Z[#*-18.63] +N1141Y[#*-2.267]Z[#*-18.695] +N1151Y[#*-3.267]Z[#*-18.825] +N1161Y[#*-5.267]Z[#*-19.168] +N1171Y[#*-7.267]Z[#*-19.685] +N1181Y[#*-8.267]Z[#*-19.984] +N1191Y[#*-10.267]Z[#*-20.66] +N1201Y[#*-11.267]Z[#*-21.058] +N1211Y[#*-12.267]Z[#*-21.438] +N1221Y[#*-13.267]Z[#*-21.836] +N1231Y[#*-15.267]Z[#*-22.706] +N1241Y[#*-16.267]Z[#*-23.071] +N1251Y[#*-17.267]Z[#*-23.38] +N1261Y[#*-18.267]Z[#*-23.628] +N1271Y[#*-19.267]Z[#*-23.824] +N1281Y[#*-20.267]Z[#*-23.969] +N1291Y[#*-21.267]Z[#*-24.092] +N1301Y[#*-22.267]Z[#*-24.169] +N1311Y[#*-23.267]Z[#*-24.236] +N1321Y[#*-24.267]Z[#*-24.28] +N1331Y[#*-25.267]Z[#*-24.35] +N1341Y[#*-26.267]Z[#*-24.462] +N1351Y[#*-27.267]Z[#*-24.618] +N1361Y[#*-28.267]Z[#*-24.789] +N1371Y[#*-29.267]Z[#*-24.975] +N1381Y[#*-30.267]Z[#*-25.186] +N1391Y[#*-31.267]Z[#*-25.453] +N1401Y[#*-31.767]Z[#*-25.626] +N1411Y[#*-32.267]Z[#*-25.838] +N1421Y[#*-32.767]Z[#*-26.126] +N1431Y[#*-33.267]Z[#*-26.462] +N1441Y[#*-33.767]Z[#*-26.798] +N1451Y[#*-34.267]Z[#*-27.139] +N1461Y[#*-34.767]Z[#*-27.564] +N1471Y[#*-35.017]Z[#*-27.851] +N1481Y[#*-35.275]Z[#*-28.251] +N1491Y[#*-35.517]Z[#*-28.646] +N1501Y[#*-36.017]Z[#*-29.443] +N1511Y[#*-36.142]Z[#*-29.706] +N1521Y[#*-36.267]Z[#*-30.1] +N1531Y[#*-36.282]Z[#*-30.155] +N1541Y[#*-36.376]Z[#*-30.485] +N1551Y[#*-36.384]Z[#*-30.5] +N1561Y[#*-36.517] +N1571Y[#*-53.] +N1581X[#*-9.528]Y[#*-53.293] +N1591X[#*-9.607]Y[#*-53.547] +N1601X[#*-9.731]Y[#*-53.762] +N1611X[#*-9.891]Y[#*-53.938] +N1621X[#*-10.08]Y[#*-54.074] +N1631X[#*-10.291]Y[#*-54.172] +N1641X[#*-10.517]Y[#*-54.23] +N1651X[#*-10.75]Y[#*-54.25] +N1661X[#*-10.983]Y[#*-54.23] +N1671X[#*-11.209]Y[#*-54.172] +N1681X[#*-11.42]Y[#*-54.074] +N1691X[#*-11.609]Y[#*-53.938] +N1701X[#*-11.769]Y[#*-53.762] +N1711X[#*-11.893]Y[#*-53.547] +N1721X[#*-11.972]Y[#*-53.293] +N1731X[#*-12.]Y[#*-53.] +N1741Y[#*-50.29] +N1751Y[#*-48.29] +N1761Y[#*-45.29] +N1771Y[#*-34.29] +N1781Y[#*-32.266] +N1791Y[#*-32.258]Z[#*-30.497] +N1801Y[#*-32.227]Z[#*-30.416] +N1811Y[#*-32.165]Z[#*-30.253] +N1821Y[#*-31.852]Z[#*-29.568] +N1831Y[#*-31.79]Z[#*-29.458] +N1841Y[#*-31.29]Z[#*-28.844] +N1851Y[#*-30.79]Z[#*-28.287] +N1861Y[#*-30.29]Z[#*-27.796] +N1871Y[#*-29.79]Z[#*-27.391] +N1881Y[#*-29.29]Z[#*-27.086] +N1891Y[#*-28.79]Z[#*-26.843] +N1901Y[#*-28.29]Z[#*-26.625] +N1911Y[#*-27.29]Z[#*-26.221] +N1921Y[#*-26.29]Z[#*-25.856] +N1931Y[#*-25.29]Z[#*-25.537] +N1941Y[#*-24.29]Z[#*-25.305] +N1951Y[#*-21.29]Z[#*-24.785] +N1961Y[#*-19.29]Z[#*-24.341] +N1971Y[#*-18.29]Z[#*-24.088] +N1981Y[#*-17.29]Z[#*-23.865] +N1991Y[#*-16.29]Z[#*-23.55] +N2001Y[#*-15.29]Z[#*-23.216] +N2011Y[#*-11.29]Z[#*-21.665] +N2021Y[#*-10.29]Z[#*-21.291] +N2031Y[#*-9.29]Z[#*-20.93] +N2041Y[#*-8.29]Z[#*-20.592] +N2051Y[#*-7.29]Z[#*-20.265] +N2061Y[#*-5.29]Z[#*-19.724] +N2071Y[#*-4.29]Z[#*-19.517] +N2081Y[#*-3.29]Z[#*-19.336] +N2091Y[#*-2.29]Z[#*-19.187] +N2101Y[#*-0.29]Z[#*-19.05] +N2111Y[#*0.21]Z[#*-19.045] +N2121Y[#*2.21]Z[#*-19.182] +N2131Y[#*2.71]Z[#*-19.233] +N2141Y[#*4.71]Z[#*-19.594] +N2151Y[#*5.71]Z[#*-19.838] +N2161Y[#*6.71]Z[#*-20.111] +N2171Y[#*7.71]Z[#*-20.399] +N2181Y[#*9.71]Z[#*-21.076] +N2191Y[#*11.71]Z[#*-21.824] +N2201Y[#*14.71]Z[#*-22.992] +N2211Y[#*15.71]Z[#*-23.362] +N2221Y[#*16.71]Z[#*-23.687] +N2231Y[#*17.71]Z[#*-23.955] +N2241Y[#*19.71]Z[#*-24.434] +N2251Y[#*20.71]Z[#*-24.659] +N2261Y[#*21.71]Z[#*-24.856] +N2271Y[#*22.71]Z[#*-25.036] +N2281Y[#*23.71]Z[#*-25.202] +N2291Y[#*24.71]Z[#*-25.394] +N2301Y[#*25.71]Z[#*-25.659] +N2311Y[#*26.71]Z[#*-26.008] +N2321Y[#*27.71]Z[#*-26.382] +N2331Y[#*28.71]Z[#*-26.808] +N2341Y[#*29.21]Z[#*-27.045] +N2351Y[#*29.46]Z[#*-27.182] +N2361Y[#*29.71]Z[#*-27.337] +N2371Y[#*30.21]Z[#*-27.727] +N2381Y[#*30.71]Z[#*-28.205] +N2391Y[#*31.585]Z[#*-29.178] +N2401Y[#*31.71]Z[#*-29.338] +N2411Y[#*31.96]Z[#*-29.799] +N2421Y[#*32.179]Z[#*-30.291] +N2431Y[#*32.226]Z[#*-30.413] +N2441Y[#*32.257]Z[#*-30.494] +N2451Y[#*32.265]Z[#*-30.5] +N2461Y[#*34.71] +N2471Y[#*35.71] +N2481Y[#*41.71] +N2491Y[#*53.] +N2501Y[#*53.008] +N2511X[#*-12.028]Y[#*53.293] +N2521X[#*-12.107]Y[#*53.547] +N2531X[#*-12.231]Y[#*53.762] +N2541X[#*-12.391]Y[#*53.937] +N2551X[#*-12.58]Y[#*54.074] +N2561X[#*-12.791]Y[#*54.172] +N2571X[#*-13.017]Y[#*54.23] +N2581X[#*-13.25]Y[#*54.25] +N2591X[#*-13.483]Y[#*54.23] +N2601X[#*-13.709]Y[#*54.172] +N2611X[#*-13.92]Y[#*54.074] +N2621X[#*-14.109]Y[#*53.937] +N2631X[#*-14.269]Y[#*53.762] +N2641X[#*-14.393]Y[#*53.547] +N2651X[#*-14.472]Y[#*53.293] +N2661X[#*-14.5]Y[#*53.] +N2671Y[#*47.404] +N2681Y[#*44.404] +N2691Y[#*40.404] +N2701Y[#*34.404] +N2711Y[#*33.404] +N2721Y[#*28.404] +N2731Y[#*27.185] +N2741Y[#*27.162]Z[#*-30.498] +N2751Y[#*27.146]Z[#*-30.475] +N2761Y[#*26.654]Z[#*-29.768] +N2771Y[#*26.404]Z[#*-29.417] +N2781Y[#*26.154]Z[#*-29.151] +N2791Y[#*25.904]Z[#*-28.943] +N2801Y[#*25.404]Z[#*-28.605] +N2811Y[#*23.904]Z[#*-27.618] +N2821Y[#*23.404]Z[#*-27.307] +N2831Y[#*22.904]Z[#*-27.056] +N2841Y[#*22.404]Z[#*-26.852] +N2851Y[#*21.404]Z[#*-26.48] +N2861Y[#*20.404]Z[#*-26.055] +N2871Y[#*19.404]Z[#*-25.615] +N2881Y[#*18.404]Z[#*-25.162] +N2891Y[#*17.404]Z[#*-24.801] +N2901Y[#*16.904]Z[#*-24.636] +N2911Y[#*16.404]Z[#*-24.452] +N2921Y[#*15.404]Z[#*-23.963] +N2931Y[#*14.404]Z[#*-23.489] +N2941Y[#*13.404]Z[#*-23.028] +N2951Y[#*12.404]Z[#*-22.586] +N2961Y[#*11.404]Z[#*-22.167] +N2971Y[#*10.404]Z[#*-21.768] +N2981Y[#*8.404]Z[#*-20.994] +N2991Y[#*7.404]Z[#*-20.64] +N3001Y[#*6.404]Z[#*-20.331] +N3011Y[#*5.404]Z[#*-20.042] +N3021Y[#*4.404]Z[#*-19.797] +N3031Y[#*2.904]Z[#*-19.511] +N3041Y[#*2.404]Z[#*-19.429] +N3051Y[#*0.404]Z[#*-19.283] +N3061Y[#*-0.596]Z[#*-19.297] +N3071Y[#*-2.096]Z[#*-19.403] +N3081Y[#*-2.596]Z[#*-19.454] +N3091Y[#*-4.596]Z[#*-19.833] +N3101Y[#*-5.596]Z[#*-20.101] +N3111Y[#*-6.596]Z[#*-20.389] +N3121Y[#*-7.596]Z[#*-20.712] +N3131Y[#*-8.596]Z[#*-21.064] +N3141Y[#*-10.596]Z[#*-21.844] +N3151Y[#*-11.596]Z[#*-22.248] +N3161Y[#*-12.596]Z[#*-22.667] +N3171Y[#*-14.596]Z[#*-23.577] +N3181Y[#*-16.596]Z[#*-24.546] +N3191Y[#*-17.096]Z[#*-24.696] +N3201Y[#*-17.596]Z[#*-24.867] +N3211Y[#*-18.596]Z[#*-25.242] +N3221Y[#*-19.596]Z[#*-25.698] +N3231Y[#*-20.596]Z[#*-26.139] +N3241Y[#*-21.596]Z[#*-26.553] +N3251Y[#*-22.596]Z[#*-26.926] +N3261Y[#*-23.096]Z[#*-27.147] +N3271Y[#*-23.596]Z[#*-27.421] +N3281Y[#*-25.596]Z[#*-28.732] +N3291Y[#*-26.096]Z[#*-29.099] +N3301Y[#*-26.346]Z[#*-29.348] +N3311Y[#*-26.596]Z[#*-29.685] +N3321Y[#*-27.159]Z[#*-30.493] +N3331Y[#*-27.166]Z[#*-30.5] +N3341Y[#*-28.596] +N3351Y[#*-49.596] +N3361Y[#*-53.] +N3371X[#*-14.528]Y[#*-53.293] +N3381X[#*-14.607]Y[#*-53.547] +N3391X[#*-14.731]Y[#*-53.762] +N3401X[#*-14.891]Y[#*-53.938] +N3411X[#*-15.08]Y[#*-54.074] +N3421X[#*-15.291]Y[#*-54.172] +N3431X[#*-15.517]Y[#*-54.23] +N3441X[#*-15.75]Y[#*-54.25] +N3451X[#*-15.983]Y[#*-54.23] +N3461X[#*-16.209]Y[#*-54.172] +N3471X[#*-16.42]Y[#*-54.074] +N3481X[#*-16.609]Y[#*-53.938] +N3491X[#*-16.769]Y[#*-53.762] +N3501X[#*-16.893]Y[#*-53.547] +N3511X[#*-16.972]Y[#*-53.293] +N3521X[#*-17.]Y[#*-53.] +N3531Y[#*-52.514] +N3541Y[#*-33.514] +N3551Y[#*-24.514] +N3561Y[#*-21.092] +N3571Y[#*-21.014]Z[#*-30.403] +N3581Y[#*-20.514]Z[#*-29.729] +N3591Y[#*-20.014]Z[#*-29.158] +N3601Y[#*-19.514]Z[#*-28.749] +N3611Y[#*-18.514]Z[#*-27.893] +N3621Y[#*-18.014]Z[#*-27.432] +N3631Y[#*-17.514]Z[#*-27.066] +N3641Y[#*-16.764]Z[#*-26.575] +N3651Y[#*-16.514]Z[#*-26.366] +N3661Y[#*-16.014]Z[#*-25.809] +N3671Y[#*-15.514]Z[#*-25.378] +N3681Y[#*-14.514]Z[#*-24.555] +N3691Y[#*-14.014]Z[#*-24.133] +N3701Y[#*-13.514]Z[#*-23.725] +N3711Y[#*-13.014]Z[#*-23.379] +N3721Y[#*-11.514]Z[#*-22.459] +N3731Y[#*-10.514]Z[#*-21.8] +N3741Y[#*-10.014]Z[#*-21.52] +N3751Y[#*-9.514]Z[#*-21.257] +N3761Y[#*-9.014]Z[#*-21.039] +N3771Y[#*-8.514]Z[#*-20.843] +N3781Y[#*-7.514]Z[#*-20.425] +N3791Y[#*-7.014]Z[#*-20.229] +N3801Y[#*-6.264]Z[#*-19.982] +N3811Y[#*-6.053]Z[#*-19.913] +N3821Y[#*-6.022]Z[#*-19.903] +N3831Y[#*-6.014]Z[#*-12.363] +N3841Y[#*-5.967]Z[#*-11.562] +N3851Y[#*-5.904]Z[#*-10.677] +N3861Y[#*-5.858]Z[#*-10.325] +N3871Y[#*-5.826]Z[#*-10.152] +N3881Y[#*-5.818]Z[#*-10.112] +N3891Y[#*-5.639]Z[#*-9.286] +N3901Y[#*-5.514]Z[#*-8.765] +N3911Y[#*-5.264]Z[#*-8.079] +N3921Y[#*-5.014]Z[#*-7.332] +N3931Y[#*-4.764]Z[#*-6.818] +N3941Y[#*-4.514]Z[#*-6.361] +N3951Y[#*-4.139]Z[#*-5.75] +N3961Y[#*-4.076]Z[#*-5.656] +N3971Y[#*-4.014]Z[#*-5.569] +N3981Y[#*-3.764]Z[#*-5.292] +N3991Y[#*-3.639]Z[#*-5.182] +N4001Y[#*-3.514]Z[#*-5.088] +N4011Y[#*-3.014]Z[#*-4.783] +N4021Y[#*-2.514]Z[#*-4.54] +N4031Y[#*-2.014]Z[#*-4.327] +N4041Y[#*-1.514]Z[#*-4.162] +N4051Y[#*-0.514]Z[#*-3.947] +N4061Y[#*-0.264]Z[#*-3.913] +N4071Y[#*-0.014]Z[#*-3.906] +N4081Y[#*0.986]Z[#*-4.012] +N4091Y[#*1.236]Z[#*-4.044] +N4101Y[#*1.486]Z[#*-4.1] +N4111Y[#*1.986]Z[#*-4.294] +N4121Y[#*2.361]Z[#*-4.459] +N4131Y[#*2.471]Z[#*-4.507] +N4141Y[#*2.736]Z[#*-4.633] +N4151Y[#*2.986]Z[#*-4.79] +N4161Y[#*3.486]Z[#*-5.22] +N4171Y[#*3.986]Z[#*-5.678] +N4181Y[#*4.236]Z[#*-5.959] +N4191Y[#*4.486]Z[#*-6.321] +N4201Y[#*4.736]Z[#*-6.747] +N4211Y[#*4.986]Z[#*-7.217] +N4221Y[#*5.674]Z[#*-8.892] +N4231Y[#*5.892]Z[#*-9.623] +N4241Y[#*5.924]Z[#*-9.81] +N4251Y[#*5.955]Z[#*-10.251] +N4261Y[#*6.002]Z[#*-11.003] +N4271Y[#*6.01]Z[#*-11.14] +N4281Y[#*6.017]Z[#*-11.305] +N4291Y[#*6.033]Z[#*-12.064] +N4301Y[#*6.041]Z[#*-19.9] +N4311Y[#*6.486]Z[#*-20.047] +N4321Y[#*7.486]Z[#*-20.402] +N4331Y[#*8.486]Z[#*-20.824] +N4341Y[#*8.986]Z[#*-21.021] +N4351Y[#*9.486]Z[#*-21.238] +N4361Y[#*10.486]Z[#*-21.779] +N4371Y[#*11.486]Z[#*-22.434] +N4381Y[#*12.986]Z[#*-23.361] +N4391Y[#*13.486]Z[#*-23.703] +N4401Y[#*13.986]Z[#*-24.108] +N4411Y[#*14.486]Z[#*-24.535] +N4421Y[#*14.986]Z[#*-24.935] +N4431Y[#*15.986]Z[#*-25.782] +N4441Y[#*16.361]Z[#*-26.191] +N4451Y[#*16.424]Z[#*-26.263] +N4461Y[#*16.486]Z[#*-26.335] +N4471Y[#*16.736]Z[#*-26.557] +N4481Y[#*16.986]Z[#*-26.72] +N4491Y[#*17.486]Z[#*-27.047] +N4501Y[#*17.986]Z[#*-27.409] +N4511Y[#*18.486]Z[#*-27.867] +N4521Y[#*19.486]Z[#*-28.727] +N4531Y[#*19.986]Z[#*-29.134] +N4541Y[#*20.486]Z[#*-29.692] +N4551Y[#*20.986]Z[#*-30.366] +N4561Y[#*21.017]Z[#*-30.408] +N4571Y[#*21.088]Z[#*-30.499] +N4581Y[#*21.096] +N4591Y[#*39.486] +N4601Y[#*52.992] +N4611Y[#*53.] +N4621X[#*-17.028]Y[#*53.293] +N4631X[#*-17.107]Y[#*53.547] +N4641X[#*-17.231]Y[#*53.762] +N4651X[#*-17.391]Y[#*53.937] +N4661X[#*-17.58]Y[#*54.074] +N4671X[#*-17.791]Y[#*54.172] +N4681X[#*-18.017]Y[#*54.23] +N4691X[#*-18.25]Y[#*54.25] +N4701X[#*-18.483]Y[#*54.23] +N4711X[#*-18.709]Y[#*54.172] +N4721X[#*-18.92]Y[#*54.074] +N4731X[#*-19.109]Y[#*53.937] +N4741X[#*-19.269]Y[#*53.762] +N4751X[#*-19.393]Y[#*53.547] +N4761X[#*-19.472]Y[#*53.293] +N4771X[#*-19.5]Y[#*53.] +N4781Y[#*48.079] +N4791Y[#*29.079] +N4801Y[#*16.204] +N4811Y[#*16.173] +N4821Y[#*16.165]Z[#*-30.482] +N4831Y[#*15.954]Z[#*-29.986] +N4841Y[#*15.829]Z[#*-29.693] +N4851Y[#*15.579]Z[#*-29.263] +N4861Y[#*15.079]Z[#*-28.207] +N4871Y[#*14.079]Z[#*-26.21] +N4881Y[#*13.079]Z[#*-24.403] +N4891Y[#*12.579]Z[#*-23.626] +N4901Y[#*12.079]Z[#*-22.939] +N4911Y[#*11.579]Z[#*-22.118] +N4921Y[#*11.079]Z[#*-21.487] +N4931Y[#*10.829]Z[#*-21.258] +N4941Y[#*10.579]Z[#*-21.07] +N4951Y[#*9.954]Z[#*-20.63] +N4961Y[#*9.931]Z[#*-20.614] +N4971Y[#*9.876]Z[#*-20.303] +N4981Y[#*9.845]Z[#*-20.136] +N4991Y[#*9.837]Z[#*-20.092] +N5001Y[#*9.767]Z[#*-19.616] +N5011Y[#*9.759]Z[#*-19.465] +N5021Y[#*9.744]Z[#*-19.07] +N5031Y[#*9.736]Z[#*-18.921] +N5041Y[#*9.728]Z[#*-18.793] +N5051Y[#*9.712]Z[#*-18.576] +N5061Y[#*9.634]Z[#*-17.798] +N5071Y[#*9.611]Z[#*-17.602] +N5081Y[#*9.501]Z[#*-16.796] +N5091Y[#*9.47]Z[#*-16.588] +N5101Y[#*9.439]Z[#*-16.387] +N5111Y[#*9.361]Z[#*-15.937] +N5121Y[#*9.064]Z[#*-14.52] +N5131Y[#*8.954]Z[#*-14.036] +N5141Y[#*8.829]Z[#*-13.551] +N5151Y[#*8.579]Z[#*-12.716] +N5161Y[#*8.079]Z[#*-11.138] +N5171Y[#*7.329]Z[#*-9.06] +N5181Y[#*7.079]Z[#*-8.442] +N5191Y[#*6.579]Z[#*-7.47] +N5201Y[#*6.079]Z[#*-6.587] +N5211Y[#*5.579]Z[#*-5.847] +N5221Y[#*5.079]Z[#*-5.253] +N5231Y[#*4.579]Z[#*-4.748] +N5241Y[#*4.079]Z[#*-4.326] +N5251Y[#*3.579]Z[#*-4.012] +N5261Y[#*3.079]Z[#*-3.708] +N5271Y[#*2.579]Z[#*-3.496] +N5281Y[#*1.579]Z[#*-3.177] +N5291Y[#*1.079]Z[#*-3.089] +N5301Y[#*0.079]Z[#*-3.018] +N5311Y[#*-0.421]Z[#*-3.029] +N5321Y[#*-1.421]Z[#*-3.198] +N5331Y[#*-1.921]Z[#*-3.305] +N5341Y[#*-2.921]Z[#*-3.64] +N5351Y[#*-3.421]Z[#*-3.833] +N5361Y[#*-3.671]Z[#*-3.969] +N5371Y[#*-3.921]Z[#*-4.137] +N5381Y[#*-4.171]Z[#*-4.347] +N5391Y[#*-4.921]Z[#*-5.065] +N5401Y[#*-5.421]Z[#*-5.654] +N5411Y[#*-5.921]Z[#*-6.345] +N5421Y[#*-6.421]Z[#*-7.199] +N5431Y[#*-6.921]Z[#*-8.144] +N5441Y[#*-7.421]Z[#*-9.27] +N5451Y[#*-7.921]Z[#*-10.587] +N5461Y[#*-8.921]Z[#*-13.774] +N5471Y[#*-9.046]Z[#*-14.287] +N5481Y[#*-9.139]Z[#*-14.737] +N5491Y[#*-9.413]Z[#*-16.16] +N5501Y[#*-9.514]Z[#*-16.841] +N5511Y[#*-9.585]Z[#*-17.381] +N5521Y[#*-9.631]Z[#*-17.785] +N5531Y[#*-9.647]Z[#*-17.931] +N5541Y[#*-9.725]Z[#*-18.833] +N5551Y[#*-9.756]Z[#*-19.586] +N5561Y[#*-9.772]Z[#*-19.761] +N5571Y[#*-9.819]Z[#*-20.098] +N5581Y[#*-9.827]Z[#*-20.144] +N5591Y[#*-9.866]Z[#*-20.356] +N5601Y[#*-9.881]Z[#*-20.442] +N5611Y[#*-9.905]Z[#*-20.582] +N5621Y[#*-9.921]Z[#*-20.615] +N5631Y[#*-9.983]Z[#*-20.658] +N5641Y[#*-10.421]Z[#*-20.962] +N5651Y[#*-10.921]Z[#*-21.339] +N5661Y[#*-11.171]Z[#*-21.586] +N5671Y[#*-11.421]Z[#*-21.891] +N5681Y[#*-11.671]Z[#*-22.279] +N5691Y[#*-11.921]Z[#*-22.741] +N5701Y[#*-12.421]Z[#*-23.388] +N5711Y[#*-12.921]Z[#*-24.142] +N5721Y[#*-13.921]Z[#*-25.882] +N5731Y[#*-14.921]Z[#*-27.857] +N5741Y[#*-15.921]Z[#*-29.906] +N5751Y[#*-16.108]Z[#*-30.347] +N5761Y[#*-16.171]Z[#*-30.494] +N5771Y[#*-16.178]Z[#*-30.5] +N5781Y[#*-19.921] +N5791Y[#*-22.921] +N5801Y[#*-25.921] +N5811Y[#*-29.921] +N5821Y[#*-40.921] +N5831Y[#*-43.921] +N5841Y[#*-46.921] +N5851Y[#*-53.] +N5861X[#*-19.528]Y[#*-53.293] +N5871X[#*-19.607]Y[#*-53.547] +N5881X[#*-19.731]Y[#*-53.762] +N5891X[#*-19.891]Y[#*-53.938] +N5901X[#*-20.08]Y[#*-54.074] +N5911X[#*-20.291]Y[#*-54.172] +N5921X[#*-20.517]Y[#*-54.23] +N5931X[#*-20.75]Y[#*-54.25] +N5941X[#*-20.983]Y[#*-54.23] +N5951X[#*-21.209]Y[#*-54.172] +N5961X[#*-21.42]Y[#*-54.074] +N5971X[#*-21.609]Y[#*-53.938] +N5981X[#*-21.769]Y[#*-53.762] +N5991X[#*-21.893]Y[#*-53.547] +N6001X[#*-21.972]Y[#*-53.293] +N6011X[#*-22.]Y[#*-53.] +N6021Y[#*-50.555] +N6031Y[#*-38.555] +N6041Y[#*-26.555] +N6051Y[#*-20.555] +N6061Y[#*-18.555] +N6071Y[#*-14.688] +N6081Y[#*-14.68]Z[#*-30.482] +N6091Y[#*-14.665]Z[#*-30.389] +N6101Y[#*-14.626]Z[#*-30.156] +N6111Y[#*-14.618]Z[#*-30.11] +N6121Y[#*-14.595]Z[#*-29.97] +N6131Y[#*-14.571]Z[#*-29.832] +N6141Y[#*-14.563]Z[#*-29.792] +N6151Y[#*-14.555]Z[#*-29.755] +N6161Y[#*-14.055]Z[#*-27.768] +N6171Y[#*-13.555]Z[#*-26.211] +N6181Y[#*-12.555]Z[#*-23.683] +N6191Y[#*-12.055]Z[#*-22.389] +N6201Y[#*-11.805]Z[#*-21.791] +N6211Y[#*-11.555]Z[#*-21.113] +N6221Y[#*-11.055]Z[#*-19.281] +N6231Y[#*-10.555]Z[#*-17.354] +N6241Y[#*-9.555]Z[#*-14.264] +N6251Y[#*-8.555]Z[#*-11.895] +N6261Y[#*-8.055]Z[#*-10.826] +N6271Y[#*-7.805]Z[#*-10.325] +N6281Y[#*-7.555]Z[#*-9.651] +N6291Y[#*-7.055]Z[#*-7.998] +N6301Y[#*-6.805]Z[#*-7.28] +N6311Y[#*-6.305]Z[#*-6.083] +N6321Y[#*-6.055]Z[#*-5.574] +N6331Y[#*-5.555]Z[#*-4.716] +N6341Y[#*-5.055]Z[#*-4.009] +N6351Y[#*-4.555]Z[#*-3.427] +N6361Y[#*-4.055]Z[#*-2.89] +N6371Y[#*-3.805]Z[#*-2.67] +N6381Y[#*-3.555]Z[#*-2.495] +N6391Y[#*-3.055]Z[#*-2.246] +N6401Y[#*-2.055]Z[#*-1.895] +N6411Y[#*-1.555]Z[#*-1.747] +N6421Y[#*-0.555]Z[#*-1.593] +N6431Y[#*-0.055]Z[#*-1.546] +N6441Y[#*0.445]Z[#*-1.586] +N6451Y[#*1.32]Z[#*-1.711] +N6461Y[#*1.445]Z[#*-1.733] +N6471Y[#*1.945]Z[#*-1.885] +N6481Y[#*2.945]Z[#*-2.298] +N6491Y[#*3.195]Z[#*-2.418] +N6501Y[#*3.445]Z[#*-2.571] +N6511Y[#*3.945]Z[#*-2.945] +N6521Y[#*4.445]Z[#*-3.373] +N6531Y[#*4.945]Z[#*-3.921] +N6541Y[#*5.445]Z[#*-4.537] +N6551Y[#*5.945]Z[#*-5.382] +N6561Y[#*6.195]Z[#*-5.833] +N6571Y[#*6.445]Z[#*-6.365] +N6581Y[#*7.445]Z[#*-9.] +N6591Y[#*8.445]Z[#*-11.764] +N6601Y[#*9.445]Z[#*-14.079] +N6611Y[#*10.445]Z[#*-16.989] +N6621Y[#*10.945]Z[#*-18.808] +N6631Y[#*11.195]Z[#*-19.847] +N6641Y[#*11.445]Z[#*-20.762] +N6651Y[#*11.945]Z[#*-22.143] +N6661Y[#*12.945]Z[#*-24.635] +N6671Y[#*13.445]Z[#*-25.923] +N6681Y[#*13.945]Z[#*-27.421] +N6691Y[#*14.195]Z[#*-28.263] +N6701Y[#*14.32]Z[#*-28.777] +N6711Y[#*14.538]Z[#*-29.68] +N6721Y[#*14.601]Z[#*-30.008] +N6731Y[#*14.679]Z[#*-30.473] +N6741Y[#*14.687]Z[#*-30.5] +N6751Y[#*17.445] +N6761Y[#*18.445] +N6771Y[#*21.445] +N6781Y[#*25.445] +N6791Y[#*40.445] +N6801Y[#*47.445] +N6811Y[#*53.] +N6821Y[#*53.008] +N6831X[#*-22.028]Y[#*53.293] +N6841X[#*-22.107]Y[#*53.547] +N6851X[#*-22.231]Y[#*53.762] +N6861X[#*-22.391]Y[#*53.937] +N6871X[#*-22.58]Y[#*54.074] +N6881X[#*-22.791]Y[#*54.172] +N6891X[#*-23.017]Y[#*54.23] +N6901X[#*-23.25]Y[#*54.25] +N6911X[#*-23.483]Y[#*54.23] +N6921X[#*-23.709]Y[#*54.172] +N6931X[#*-23.92]Y[#*54.074] +N6941X[#*-24.109]Y[#*53.937] +N6951X[#*-24.269]Y[#*53.762] +N6961X[#*-24.393]Y[#*53.547] +N6971X[#*-24.472]Y[#*53.293] +N6981X[#*-24.5]Y[#*53.] +N6991Y[#*41.543] +N7001Y[#*34.543] +N7011Y[#*15.035] +N7021Y[#*15.027]Z[#*-30.463] +N7031Y[#*14.926]Z[#*-29.828] +N7041Y[#*14.871]Z[#*-29.55] +N7051Y[#*14.73]Z[#*-28.975] +N7061Y[#*14.543]Z[#*-28.203] +N7071Y[#*14.043]Z[#*-26.578] +N7081Y[#*13.543]Z[#*-25.286] +N7091Y[#*12.543]Z[#*-23.003] +N7101Y[#*11.543]Z[#*-20.762] +N7111Y[#*11.043]Z[#*-19.508] +N7121Y[#*10.793]Z[#*-18.723] +N7131Y[#*10.543]Z[#*-17.817] +N7141Y[#*9.543]Z[#*-13.949] +N7151Y[#*8.543]Z[#*-11.072] +N7161Y[#*7.543]Z[#*-8.642] +N7171Y[#*6.543]Z[#*-6.614] +N7181Y[#*6.043]Z[#*-5.712] +N7191Y[#*5.543]Z[#*-4.924] +N7201Y[#*5.043]Z[#*-4.236] +N7211Y[#*4.543]Z[#*-3.625] +N7221Y[#*4.043]Z[#*-3.172] +N7231Y[#*3.543]Z[#*-2.759] +N7241Y[#*3.043]Z[#*-2.441] +N7251Y[#*2.543]Z[#*-2.207] +N7261Y[#*2.043]Z[#*-1.99] +N7271Y[#*1.543]Z[#*-1.816] +N7281Y[#*1.418]Z[#*-1.788] +N7291Y[#*0.543]Z[#*-1.663] +N7301Y[#*0.043]Z[#*-1.611] +N7311Y[#*-0.473]Z[#*-1.645] +N7321Y[#*-0.582]Z[#*-1.665] +N7331Y[#*-0.957]Z[#*-1.749] +N7341Y[#*-1.457]Z[#*-1.866] +N7351Y[#*-1.957]Z[#*-2.011] +N7361Y[#*-2.457]Z[#*-2.246] +N7371Y[#*-2.957]Z[#*-2.507] +N7381Y[#*-3.457]Z[#*-2.801] +N7391Y[#*-3.957]Z[#*-3.19] +N7401Y[#*-4.457]Z[#*-3.599] +N7411Y[#*-4.707]Z[#*-3.853] +N7421Y[#*-4.957]Z[#*-4.167] +N7431Y[#*-5.457]Z[#*-4.825] +N7441Y[#*-5.957]Z[#*-5.58] +N7451Y[#*-6.457]Z[#*-6.454] +N7461Y[#*-7.457]Z[#*-8.436] +N7471Y[#*-8.457]Z[#*-10.792] +N7481Y[#*-9.457]Z[#*-13.623] +N7491Y[#*-9.957]Z[#*-15.471] +N7501Y[#*-10.457]Z[#*-17.549] +N7511Y[#*-10.957]Z[#*-19.34] +N7521Y[#*-11.207]Z[#*-20.02] +N7531Y[#*-11.957]Z[#*-21.767] +N7541Y[#*-12.457]Z[#*-22.834] +N7551Y[#*-13.457]Z[#*-25.078] +N7561Y[#*-13.957]Z[#*-26.321] +N7571Y[#*-14.457]Z[#*-27.859] +N7581Y[#*-14.895]Z[#*-29.655] +N7591Y[#*-14.926]Z[#*-29.831] +N7601Y[#*-15.028]Z[#*-30.466] +N7611Y[#*-15.035]Z[#*-30.5] +N7621Y[#*-15.207] +N7631Y[#*-24.457] +N7641Y[#*-25.457] +N7651Y[#*-34.457] +N7661Y[#*-40.457] +N7671Y[#*-53.] +N7681X[#*-24.528]Y[#*-53.293] +N7691X[#*-24.607]Y[#*-53.547] +N7701X[#*-24.731]Y[#*-53.762] +N7711X[#*-24.891]Y[#*-53.938] +N7721X[#*-25.08]Y[#*-54.074] +N7731X[#*-25.291]Y[#*-54.172] +N7741X[#*-25.517]Y[#*-54.23] +N7751X[#*-25.75]Y[#*-54.25] +N7761X[#*-25.983]Y[#*-54.23] +N7771X[#*-26.209]Y[#*-54.172] +N7781X[#*-26.426]Y[#*-54.07] +N7791X[#*-26.609]Y[#*-53.938] +N7801X[#*-26.769]Y[#*-53.762] +N7811X[#*-26.893]Y[#*-53.547] +N7821X[#*-26.972]Y[#*-53.293] +N7831X[#*-27.]Y[#*-53.] +N7841Y[#*-52.007] +N7851Y[#*-25.007] +N7861Y[#*-24.007] +N7871Y[#*-23.007] +N7881Y[#*-15.569] +N7891Y[#*-15.523] +N7901Y[#*-15.444]Z[#*-30.011] +N7911Y[#*-15.382]Z[#*-29.619] +N7921Y[#*-15.319]Z[#*-29.309] +N7931Y[#*-15.007]Z[#*-27.998] +N7941Y[#*-14.507]Z[#*-26.4] +N7951Y[#*-14.257]Z[#*-25.713] +N7961Y[#*-14.007]Z[#*-25.153] +N7971Y[#*-13.507]Z[#*-24.083] +N7981Y[#*-13.007]Z[#*-23.198] +N7991Y[#*-12.507]Z[#*-22.344] +N8001Y[#*-12.007]Z[#*-21.611] +N8011Y[#*-11.757]Z[#*-21.247] +N8021Y[#*-11.569]Z[#*-21.003] +N8031Y[#*-11.538]Z[#*-20.967] +N8041Y[#*-11.507]Z[#*-20.931] +N8051Y[#*-11.444]Z[#*-20.829] +N8061Y[#*-11.257]Z[#*-20.4] +N8071Y[#*-11.007]Z[#*-19.661] +N8081Y[#*-10.007]Z[#*-16.535] +N8091Y[#*-9.007]Z[#*-13.894] +N8101Y[#*-8.007]Z[#*-11.672] +N8111Y[#*-7.007]Z[#*-9.848] +N8121Y[#*-6.007]Z[#*-8.284] +N8131Y[#*-5.507]Z[#*-7.578] +N8141Y[#*-5.007]Z[#*-6.904] +N8151Y[#*-4.507]Z[#*-6.317] +N8161Y[#*-4.007]Z[#*-5.75] +N8171Y[#*-3.507]Z[#*-5.235] +N8181Y[#*-3.007]Z[#*-4.815] +N8191Y[#*-2.507]Z[#*-4.433] +N8201Y[#*-1.757]Z[#*-3.966] +N8211Y[#*-1.507]Z[#*-3.849] +N8221Y[#*-1.007]Z[#*-3.7] +N8231Y[#*-0.507]Z[#*-3.562] +N8241Y[#*-0.257]Z[#*-3.514] +N8251Y[#*-0.007]Z[#*-3.499] +N8261Y[#*0.493]Z[#*-3.556] +N8271Y[#*0.962]Z[#*-3.64] +N8281Y[#*0.993]Z[#*-3.646] +N8291Y[#*1.243]Z[#*-3.693] +N8301Y[#*1.493]Z[#*-3.769] +N8311Y[#*1.993]Z[#*-4.021] +N8321Y[#*2.493]Z[#*-4.298] +N8331Y[#*2.993]Z[#*-4.684] +N8341Y[#*3.493]Z[#*-5.107] +N8351Y[#*3.993]Z[#*-5.637] +N8361Y[#*4.993]Z[#*-6.815] +N8371Y[#*5.993]Z[#*-8.216] +N8381Y[#*6.993]Z[#*-9.825] +N8391Y[#*7.993]Z[#*-11.704] +N8401Y[#*8.993]Z[#*-13.896] +N8411Y[#*9.993]Z[#*-16.505] +N8421Y[#*10.493]Z[#*-18.03] +N8431Y[#*10.743]Z[#*-18.843] +N8441Y[#*11.243]Z[#*-20.346] +N8451Y[#*11.431]Z[#*-20.789] +N8461Y[#*11.493]Z[#*-20.91] +N8471Y[#*11.993]Z[#*-21.586] +N8481Y[#*12.493]Z[#*-22.32] +N8491Y[#*12.993]Z[#*-23.172] +N8501Y[#*13.493]Z[#*-24.058] +N8511Y[#*13.743]Z[#*-24.565] +N8521Y[#*13.993]Z[#*-25.123] +N8531Y[#*14.493]Z[#*-26.358] +N8541Y[#*14.743]Z[#*-27.108] +N8551Y[#*14.993]Z[#*-27.939] +N8561Y[#*15.212]Z[#*-28.866] +N8571Y[#*15.227]Z[#*-28.932] +N8581Y[#*15.306]Z[#*-29.252] +N8591Y[#*15.376]Z[#*-29.582] +N8601Y[#*15.431]Z[#*-29.925] +N8611Y[#*15.462]Z[#*-30.12] +N8621Y[#*15.517]Z[#*-30.462] +N8631Y[#*15.524]Z[#*-30.5] +N8641Y[#*15.743] +N8651Y[#*29.993] +N8661Y[#*40.993] +N8671Y[#*48.993] +N8681Y[#*52.993] +N8691X[#*-27.028]Y[#*53.286] +N8701X[#*-27.107]Y[#*53.54] +N8711X[#*-27.231]Y[#*53.755] +N8721X[#*-27.391]Y[#*53.932] +N8731X[#*-27.58]Y[#*54.069] +N8741X[#*-27.791]Y[#*54.167] +N8751X[#*-28.017]Y[#*54.226] +N8761X[#*-28.25]Y[#*54.247] +N8771X[#*-28.483]Y[#*54.228] +N8781X[#*-28.709]Y[#*54.17] +N8791X[#*-28.92]Y[#*54.073] +N8801X[#*-29.109]Y[#*53.936] +N8811X[#*-29.269]Y[#*53.761] +N8821X[#*-29.393]Y[#*53.547] +N8831X[#*-29.472]Y[#*53.293] +N8841X[#*-29.492]Y[#*53.083] +N8851X[#*-29.5]Y[#*53.] +N8861Y[#*49.237] +N8871Y[#*35.237] +N8881Y[#*30.237] +N8891Y[#*28.237] +N8901Y[#*17.237] +N8911Y[#*15.878] +N8921Y[#*15.87]Z[#*-30.457] +N8931Y[#*15.683]Z[#*-29.281] +N8941Y[#*15.636]Z[#*-29.036] +N8951Y[#*15.487]Z[#*-28.384] +N8961Y[#*15.237]Z[#*-27.322] +N8971Y[#*14.737]Z[#*-25.837] +N8981Y[#*14.487]Z[#*-25.252] +N8991Y[#*13.987]Z[#*-24.173] +N9001Y[#*13.737]Z[#*-23.73] +N9011Y[#*13.237]Z[#*-22.869] +N9021Y[#*12.737]Z[#*-22.13] +N9031Y[#*12.237]Z[#*-21.425] +N9041Y[#*11.737]Z[#*-20.826] +N9051Y[#*11.237]Z[#*-20.279] +N9061Y[#*10.987]Z[#*-20.071] +N9071Y[#*10.237]Z[#*-19.503] +N9081Y[#*9.737]Z[#*-19.228] +N9091Y[#*9.237]Z[#*-19.051] +N9101Y[#*9.175]Z[#*-19.036] +N9111Y[#*9.112]Z[#*-19.021] +N9121Y[#*9.05]Z[#*-18.948] +N9131Y[#*8.925]Z[#*-18.784] +N9141Y[#*8.737]Z[#*-18.528] +N9151Y[#*8.487]Z[#*-18.006] +N9161Y[#*7.737]Z[#*-16.575] +N9171Y[#*7.237]Z[#*-15.482] +N9181Y[#*6.237]Z[#*-13.677] +N9191Y[#*4.737]Z[#*-11.229] +N9201Y[#*4.237]Z[#*-10.475] +N9211Y[#*3.237]Z[#*-9.204] +N9221Y[#*2.737]Z[#*-8.696] +N9231Y[#*2.237]Z[#*-8.264] +N9241Y[#*1.737]Z[#*-7.875] +N9251Y[#*1.612]Z[#*-7.808] +N9261Y[#*1.487]Z[#*-7.751] +N9271Y[#*1.237]Z[#*-7.667] +N9281Y[#*0.987]Z[#*-7.589] +N9291Y[#*0.737]Z[#*-7.512] +N9301Y[#*0.237]Z[#*-7.381] +N9311Y[#*0.112]Z[#*-7.367] +N9321Y[#*-0.013]Z[#*-7.363] +N9331Y[#*-0.263]Z[#*-7.387] +N9341Y[#*-0.388]Z[#*-7.415] +N9351Y[#*-0.763]Z[#*-7.538] +N9361Y[#*-1.263]Z[#*-7.712] +N9371Y[#*-1.763]Z[#*-7.933] +N9381Y[#*-1.825]Z[#*-7.972] +N9391Y[#*-2.013]Z[#*-8.116] +N9401Y[#*-2.763]Z[#*-8.786] +N9411Y[#*-3.263]Z[#*-9.309] +N9421Y[#*-4.263]Z[#*-10.601] +N9431Y[#*-4.763]Z[#*-11.369] +N9441Y[#*-5.763]Z[#*-12.979] +N9451Y[#*-6.763]Z[#*-14.71] +N9461Y[#*-7.763]Z[#*-16.661] +N9471Y[#*-8.263]Z[#*-17.601] +N9481Y[#*-8.513]Z[#*-18.098] +N9491Y[#*-8.7]Z[#*-18.497] +N9501Y[#*-8.763]Z[#*-18.602] +N9511Y[#*-9.083]Z[#*-19.015] +N9521Y[#*-9.122]Z[#*-19.024] +N9531Y[#*-9.2]Z[#*-19.042] +N9541Y[#*-9.271]Z[#*-19.061] +N9551Y[#*-9.513]Z[#*-19.138] +N9561Y[#*-9.763]Z[#*-19.242] +N9571Y[#*-10.263]Z[#*-19.521] +N9581Y[#*-10.763]Z[#*-19.902] +N9591Y[#*-11.263]Z[#*-20.305] +N9601Y[#*-11.763]Z[#*-20.858] +N9611Y[#*-12.263]Z[#*-21.458] +N9621Y[#*-12.763]Z[#*-22.168] +N9631Y[#*-13.263]Z[#*-22.913] +N9641Y[#*-13.763]Z[#*-23.774] +N9651Y[#*-14.013]Z[#*-24.226] +N9661Y[#*-14.263]Z[#*-24.767] +N9671Y[#*-14.763]Z[#*-25.912] +N9681Y[#*-15.263]Z[#*-27.413] +N9691Y[#*-15.638]Z[#*-29.046] +N9701Y[#*-15.685]Z[#*-29.295] +N9711Y[#*-15.872]Z[#*-30.471] +N9721Y[#*-15.88]Z[#*-30.5] +N9731Y[#*-21.763] +N9741Y[#*-41.763] +N9751Y[#*-53.] +N9761X[#*-29.528]Y[#*-53.293] +N9771X[#*-29.607]Y[#*-53.547] +N9781X[#*-29.731]Y[#*-53.762] +N9791X[#*-29.891]Y[#*-53.938] +N9801X[#*-30.08]Y[#*-54.074] +N9811X[#*-30.291]Y[#*-54.172] +N9821X[#*-30.517]Y[#*-54.23] +N9831X[#*-30.75]Y[#*-54.25] +N9841X[#*-30.983]Y[#*-54.23] +N9851X[#*-31.209]Y[#*-54.172] +N9861X[#*-31.42]Y[#*-54.074] +N9871X[#*-31.609]Y[#*-53.938] +N9881X[#*-31.769]Y[#*-53.762] +N9891X[#*-31.893]Y[#*-53.547] +N9901X[#*-31.972]Y[#*-53.293] +N9911X[#*-32.]Y[#*-53.] +N9921Y[#*-44.682] +N9931Y[#*-33.682] +N9941Y[#*-30.682] +N9951Y[#*-25.682] +N9961Y[#*-16.12] +N9971Y[#*-16.034] +N9981Y[#*-15.839]Z[#*-29.25] +N9991Y[#*-15.823]Z[#*-29.15] +N1Y[#*-15.745]Z[#*-28.651] +N11Y[#*-15.682]Z[#*-28.324] +N21Y[#*-15.182]Z[#*-26.454] +N31Y[#*-14.932]Z[#*-25.761] +N41Y[#*-14.682]Z[#*-25.154] +N51Y[#*-14.182]Z[#*-24.098] +N61Y[#*-13.682]Z[#*-23.237] +N71Y[#*-13.182]Z[#*-22.464] +N81Y[#*-12.682]Z[#*-21.75] +N91Y[#*-12.182]Z[#*-21.121] +N101Y[#*-11.682]Z[#*-20.532] +N111Y[#*-10.932]Z[#*-19.866] +N121Y[#*-10.682]Z[#*-19.686] +N131Y[#*-10.182]Z[#*-19.423] +N141Y[#*-9.714]Z[#*-19.213] +N151Y[#*-9.682]Z[#*-19.201] +N161Y[#*-9.182]Z[#*-19.063] +N171Y[#*-8.807]Z[#*-19.016] +N181Y[#*-8.714]Z[#*-19.009] +N191Y[#*-8.526]Z[#*-18.996] +N201Y[#*-8.511]Z[#*-18.993] +N211Y[#*-8.182]Z[#*-18.721] +N221Y[#*-7.682]Z[#*-18.349] +N231Y[#*-7.182]Z[#*-18.031] +N241Y[#*-6.682]Z[#*-17.791] +N251Y[#*-6.182]Z[#*-17.604] +N261Y[#*-5.682]Z[#*-17.499] +N271Y[#*-5.182]Z[#*-17.43] +N281Y[#*-4.807] +N291Y[#*-4.714]Z[#*-17.435] +N301Y[#*-4.682]Z[#*-17.436] +N311Y[#*-4.284]Z[#*-17.462] +N321Y[#*-4.261]Z[#*-17.463] +N331Y[#*-4.245]Z[#*-17.417] +N341Y[#*-4.182]Z[#*-17.252] +N351Y[#*-3.932]Z[#*-16.662] +N361Y[#*-3.682]Z[#*-16.124] +N371Y[#*-3.182]Z[#*-15.243] +N381Y[#*-2.432]Z[#*-14.118] +N391Y[#*-2.182]Z[#*-13.772] +N401Y[#*-1.932]Z[#*-13.499] +N411Y[#*-1.682]Z[#*-13.297] +N421Y[#*-1.182]Z[#*-12.985] +N431Y[#*-0.932]Z[#*-12.85] +N441Y[#*-0.682]Z[#*-12.723] +N451Y[#*-0.432]Z[#*-12.608] +N461Y[#*-0.214]Z[#*-12.547] +N471Y[#*-0.057]Z[#*-12.529] +N481Y[#*0.068] +N491Y[#*0.286]Z[#*-12.56] +N501Y[#*0.818]Z[#*-12.779] +N511Y[#*1.255]Z[#*-13.004] +N521Y[#*1.693]Z[#*-13.273] +N531Y[#*1.818]Z[#*-13.366] +N541Y[#*2.318]Z[#*-13.912] +N551Y[#*2.818]Z[#*-14.641] +N561Y[#*3.318]Z[#*-15.418] +N571Y[#*3.818]Z[#*-16.348] +N581Y[#*4.068]Z[#*-16.906] +N591Y[#*4.271]Z[#*-17.415] +N601Y[#*4.286]Z[#*-17.462] +N611Y[#*4.318]Z[#*-17.459] +N621Y[#*4.818]Z[#*-17.432] +N631Y[#*5.068]Z[#*-17.427] +N641Y[#*5.318]Z[#*-17.441] +N651Y[#*5.818]Z[#*-17.523] +N661Y[#*6.068]Z[#*-17.573] +N671Y[#*6.318]Z[#*-17.641] +N681Y[#*6.818]Z[#*-17.849] +N691Y[#*7.318]Z[#*-18.101] +N701Y[#*7.818]Z[#*-18.434] +N711Y[#*8.193]Z[#*-18.722] +N721Y[#*8.255]Z[#*-18.773] +N731Y[#*8.31]Z[#*-18.818] +N741Y[#*8.474]Z[#*-18.954] +N751Y[#*8.489]Z[#*-18.968] +N761Y[#*8.513]Z[#*-18.989] +N771Y[#*8.521]Z[#*-18.995] +N781Y[#*8.818]Z[#*-19.017] +N791Y[#*9.193]Z[#*-19.065] +N801Y[#*9.318]Z[#*-19.091] +N811Y[#*9.818]Z[#*-19.255] +N821Y[#*10.068]Z[#*-19.37] +N831Y[#*10.302]Z[#*-19.477] +N841Y[#*10.818]Z[#*-19.778] +N851Y[#*11.318]Z[#*-20.202] +N861Y[#*11.818]Z[#*-20.676] +N871Y[#*12.318]Z[#*-21.287] +N881Y[#*12.818]Z[#*-21.943] +N891Y[#*13.318]Z[#*-22.658] +N901Y[#*13.818]Z[#*-23.458] +N911Y[#*14.068]Z[#*-23.874] +N921Y[#*14.318]Z[#*-24.365] +N931Y[#*14.568]Z[#*-24.879] +N941Y[#*15.068]Z[#*-26.1] +N951Y[#*15.318]Z[#*-26.956] +N961Y[#*15.7]Z[#*-28.402] +N971Y[#*15.755]Z[#*-28.716] +N981Y[#*15.818]Z[#*-29.115] +N991Y[#*15.997]Z[#*-30.272] +N1001Y[#*16.029]Z[#*-30.475] +N1011Y[#*16.036]Z[#*-30.5] +N1021Y[#*19.318] +N1031Y[#*32.318] +N1041Y[#*53.] +N1051X[#*-32.028]Y[#*53.293] +N1061X[#*-32.107]Y[#*53.547] +N1071X[#*-32.231]Y[#*53.762] +N1081X[#*-32.391]Y[#*53.937] +N1091X[#*-32.58]Y[#*54.074] +N1101X[#*-32.791]Y[#*54.172] +N1111X[#*-33.017]Y[#*54.23] +N1121X[#*-33.25]Y[#*54.25] +N1131X[#*-33.483]Y[#*54.23] +N1141X[#*-33.709]Y[#*54.172] +N1151X[#*-33.92]Y[#*54.074] +N1161X[#*-34.109]Y[#*53.937] +N1171X[#*-34.269]Y[#*53.762] +N1181X[#*-34.393]Y[#*53.547] +N1191X[#*-34.472]Y[#*53.293] +N1201X[#*-34.5]Y[#*53.] +N1211Y[#*52.86] +N1221Y[#*49.86] +N1231Y[#*45.86] +N1241Y[#*29.86] +N1251Y[#*19.86] +N1261Y[#*15.962] +N1271Y[#*15.938]Z[#*-30.388] +N1281Y[#*15.923]Z[#*-30.302] +N1291Y[#*15.915]Z[#*-30.256] +N1301Y[#*15.798]Z[#*-29.561] +N1311Y[#*15.735]Z[#*-29.199] +N1321Y[#*15.673]Z[#*-28.939] +N1331Y[#*15.36]Z[#*-27.758] +N1341Y[#*15.11]Z[#*-26.932] +N1351Y[#*14.86]Z[#*-26.22] +N1361Y[#*14.61]Z[#*-25.586] +N1371Y[#*14.36]Z[#*-25.029] +N1381Y[#*13.86]Z[#*-24.073] +N1391Y[#*13.36]Z[#*-23.222] +N1401Y[#*12.86]Z[#*-22.502] +N1411Y[#*11.86]Z[#*-21.168] +N1421Y[#*11.36]Z[#*-20.581] +N1431Y[#*10.86]Z[#*-20.124] +N1441Y[#*10.36]Z[#*-19.72] +N1451Y[#*9.86]Z[#*-19.434] +N1461Y[#*9.735]Z[#*-19.374] +N1471Y[#*9.61]Z[#*-19.32] +N1481Y[#*9.36]Z[#*-19.229] +N1491Y[#*8.86]Z[#*-19.091] +N1501Y[#*8.36]Z[#*-18.979] +N1511Y[#*7.86]Z[#*-18.878] +N1521Y[#*7.36]Z[#*-18.69] +N1531Y[#*6.86]Z[#*-18.426] +N1541Y[#*6.36]Z[#*-18.206] +N1551Y[#*5.86]Z[#*-18.057] +N1561Y[#*5.36]Z[#*-17.952] +N1571Y[#*4.86]Z[#*-17.898] +N1581Y[#*4.36] +N1591Y[#*4.11]Z[#*-17.918] +N1601Y[#*4.048]Z[#*-17.912] +N1611Y[#*3.86]Z[#*-17.863] +N1621Y[#*3.829]Z[#*-17.854] +N1631Y[#*3.61]Z[#*-17.789] +N1641Y[#*2.86]Z[#*-17.481] +N1651Y[#*2.36]Z[#*-17.324] +N1661Y[#*1.86]Z[#*-17.2] +N1671Y[#*1.36]Z[#*-17.113] +N1681Y[#*0.86]Z[#*-17.052] +N1691Y[#*0.36]Z[#*-17.005] +N1701Y[#*-0.14]Z[#*-16.995] +N1711Y[#*-0.64]Z[#*-17.026] +N1721Y[#*-1.14]Z[#*-17.086] +N1731Y[#*-1.64]Z[#*-17.161] +N1741Y[#*-2.14]Z[#*-17.272] +N1751Y[#*-2.64]Z[#*-17.402] +N1761Y[#*-3.14]Z[#*-17.585] +N1771Y[#*-3.64]Z[#*-17.781] +N1781Y[#*-4.015]Z[#*-17.873] +N1791Y[#*-4.054]Z[#*-17.883] +N1801Y[#*-4.093]Z[#*-17.879] +N1811Y[#*-4.109]Z[#*-17.877] +N1821Y[#*-4.171]Z[#*-17.87] +N1831Y[#*-4.64]Z[#*-17.849] +N1841Y[#*-5.14]Z[#*-17.876] +N1851Y[#*-5.64]Z[#*-17.946] +N1861Y[#*-6.14]Z[#*-18.08] +N1871Y[#*-6.64]Z[#*-18.269] +N1881Y[#*-7.14]Z[#*-18.512] +N1891Y[#*-7.577]Z[#*-18.772] +N1901Y[#*-7.609]Z[#*-18.787] +N1911Y[#*-7.655]Z[#*-18.802] +N1921Y[#*-8.14]Z[#*-18.94] +N1931Y[#*-8.265]Z[#*-18.961] +N1941Y[#*-8.64]Z[#*-19.034] +N1951Y[#*-9.14]Z[#*-19.163] +N1961Y[#*-9.64]Z[#*-19.331] +N1971Y[#*-10.14]Z[#*-19.58] +N1981Y[#*-10.39]Z[#*-19.74] +N1991Y[#*-10.64]Z[#*-19.929] +N2001Y[#*-11.14]Z[#*-20.375] +N2011Y[#*-11.64]Z[#*-20.893] +N2021Y[#*-12.14]Z[#*-21.514] +N2031Y[#*-12.64]Z[#*-22.185] +N2041Y[#*-13.14]Z[#*-22.904] +N2051Y[#*-13.64]Z[#*-23.691] +N2061Y[#*-14.14]Z[#*-24.564] +N2071Y[#*-14.64]Z[#*-25.647] +N2081Y[#*-15.14]Z[#*-27.019] +N2091Y[#*-15.39]Z[#*-27.87] +N2101Y[#*-15.734]Z[#*-29.191] +N2111Y[#*-15.741]Z[#*-29.231] +N2121Y[#*-15.757]Z[#*-29.32] +N2131Y[#*-15.913]Z[#*-30.246] +N2141Y[#*-15.921]Z[#*-30.293] +N2151Y[#*-15.952]Z[#*-30.466] +N2161Y[#*-15.96]Z[#*-30.5] +N2171Y[#*-31.14] +N2181Y[#*-32.14] +N2191Y[#*-37.14] +N2201Y[#*-50.14] +N2211Y[#*-53.] +N2221X[#*-34.528]Y[#*-53.293] +N2231X[#*-34.607]Y[#*-53.547] +N2241X[#*-34.731]Y[#*-53.762] +N2251X[#*-34.891]Y[#*-53.938] +N2261X[#*-35.08]Y[#*-54.074] +N2271X[#*-35.291]Y[#*-54.172] +N2281X[#*-35.517]Y[#*-54.23] +N2291X[#*-35.75]Y[#*-54.25] +N2301X[#*-35.983]Y[#*-54.23] +N2311X[#*-36.209]Y[#*-54.172] +N2321X[#*-36.42]Y[#*-54.074] +N2331X[#*-36.609]Y[#*-53.938] +N2341X[#*-36.769]Y[#*-53.762] +N2351X[#*-36.893]Y[#*-53.547] +N2361X[#*-36.972]Y[#*-53.293] +N2371X[#*-37.]Y[#*-53.] +N2381Y[#*-34.048] +N2391Y[#*-16.048] +N2401Y[#*-15.719] +N2411Y[#*-15.712]Z[#*-30.482] +N2421Y[#*-15.516]Z[#*-29.463] +N2431Y[#*-15.423]Z[#*-29.143] +N2441Y[#*-15.048]Z[#*-27.91] +N2451Y[#*-14.548]Z[#*-26.651] +N2461Y[#*-14.298]Z[#*-26.068] +N2471Y[#*-14.048]Z[#*-25.565] +N2481Y[#*-13.548]Z[#*-24.686] +N2491Y[#*-13.048]Z[#*-23.848] +N2501Y[#*-12.048]Z[#*-22.46] +N2511Y[#*-11.048]Z[#*-21.237] +N2521Y[#*-10.048]Z[#*-20.187] +N2531Y[#*-9.548]Z[#*-19.755] +N2541Y[#*-9.048]Z[#*-19.426] +N2551Y[#*-8.548]Z[#*-19.136] +N2561Y[#*-8.048]Z[#*-18.897] +N2571Y[#*-7.548]Z[#*-18.685] +N2581Y[#*-7.048]Z[#*-18.491] +N2591Y[#*-6.048]Z[#*-18.19] +N2601Y[#*-5.048]Z[#*-17.934] +N2611Y[#*-4.048]Z[#*-17.724] +N2621Y[#*-3.048]Z[#*-17.569] +N2631Y[#*-1.048]Z[#*-17.338] +N2641Y[#*-0.048]Z[#*-17.28] +N2651Y[#*0.452]Z[#*-17.295] +N2661Y[#*0.952]Z[#*-17.316] +N2671Y[#*1.952]Z[#*-17.414] +N2681Y[#*2.952]Z[#*-17.548] +N2691Y[#*3.952]Z[#*-17.725] +N2701Y[#*4.952]Z[#*-17.954] +N2711Y[#*5.952]Z[#*-18.215] +N2721Y[#*6.952]Z[#*-18.504] +N2731Y[#*7.452]Z[#*-18.686] +N2741Y[#*7.952]Z[#*-18.89] +N2751Y[#*8.452]Z[#*-19.115] +N2761Y[#*8.952]Z[#*-19.384] +N2771Y[#*9.452]Z[#*-19.696] +N2781Y[#*9.952]Z[#*-20.1] +N2791Y[#*10.452]Z[#*-20.612] +N2801Y[#*10.952]Z[#*-21.142] +N2811Y[#*11.952]Z[#*-22.35] +N2821Y[#*12.452]Z[#*-22.987] +N2831Y[#*12.952]Z[#*-23.706] +N2841Y[#*13.452]Z[#*-24.506] +N2851Y[#*13.952]Z[#*-25.398] +N2861Y[#*14.452]Z[#*-26.429] +N2871Y[#*14.952]Z[#*-27.611] +N2881Y[#*15.515]Z[#*-29.458] +N2891Y[#*15.577]Z[#*-29.76] +N2901Y[#*15.71]Z[#*-30.475] +N2911Y[#*15.718]Z[#*-30.5] +N2921Y[#*20.952] +N2931Y[#*30.952] +N2941Y[#*34.952] +N2951Y[#*53.] +N2961X[#*-37.028]Y[#*53.293] +N2971X[#*-37.107]Y[#*53.547] +N2981X[#*-37.231]Y[#*53.762] +N2991X[#*-37.391]Y[#*53.937] +N3001X[#*-37.58]Y[#*54.074] +N3011X[#*-37.791]Y[#*54.172] +N3021X[#*-38.017]Y[#*54.23] +N3031X[#*-38.25]Y[#*54.25] +N3041X[#*-38.483]Y[#*54.23] +N3051X[#*-38.709]Y[#*54.172] +N3061X[#*-38.92]Y[#*54.074] +N3071X[#*-39.109]Y[#*53.937] +N3081X[#*-39.269]Y[#*53.762] +N3091X[#*-39.393]Y[#*53.547] +N3101X[#*-39.472]Y[#*53.293] +N3111X[#*-39.5]Y[#*53.] +N3121Y[#*51.215] +N3131Y[#*22.215] +N3141Y[#*15.231] +N3151Y[#*15.223]Z[#*-30.491] +N3161Y[#*15.184]Z[#*-30.292] +N3171Y[#*15.09]Z[#*-29.815] +N3181Y[#*15.028]Z[#*-29.558] +N3191Y[#*14.465]Z[#*-27.841] +N3201Y[#*14.215]Z[#*-27.28] +N3211Y[#*13.715]Z[#*-26.208] +N3221Y[#*13.215]Z[#*-25.34] +N3231Y[#*12.715]Z[#*-24.539] +N3241Y[#*12.215]Z[#*-23.849] +N3251Y[#*11.215]Z[#*-22.606] +N3261Y[#*10.215]Z[#*-21.54] +N3271Y[#*9.715]Z[#*-21.077] +N3281Y[#*9.215]Z[#*-20.629] +N3291Y[#*8.215]Z[#*-19.881] +N3301Y[#*7.715]Z[#*-19.58] +N3311Y[#*7.215]Z[#*-19.294] +N3321Y[#*6.715]Z[#*-19.073] +N3331Y[#*5.715]Z[#*-18.754] +N3341Y[#*5.215]Z[#*-18.625] +N3351Y[#*4.215]Z[#*-18.39] +N3361Y[#*3.215]Z[#*-18.201] +N3371Y[#*2.215]Z[#*-18.054] +N3381Y[#*1.215]Z[#*-17.947] +N3391Y[#*0.215]Z[#*-17.896] +N3401Y[#*-0.785]Z[#*-17.926] +N3411Y[#*-1.785]Z[#*-17.998] +N3421Y[#*-2.785]Z[#*-18.128] +N3431Y[#*-3.785]Z[#*-18.318] +N3441Y[#*-4.785]Z[#*-18.525] +N3451Y[#*-5.785]Z[#*-18.766] +N3461Y[#*-6.285]Z[#*-18.913] +N3471Y[#*-6.785]Z[#*-19.109] +N3481Y[#*-7.285]Z[#*-19.331] +N3491Y[#*-7.785]Z[#*-19.611] +N3501Y[#*-8.285]Z[#*-19.915] +N3511Y[#*-9.285]Z[#*-20.678] +N3521Y[#*-9.785]Z[#*-21.131] +N3531Y[#*-10.285]Z[#*-21.6] +N3541Y[#*-10.785]Z[#*-22.141] +N3551Y[#*-11.785]Z[#*-23.292] +N3561Y[#*-12.785]Z[#*-24.65] +N3571Y[#*-13.285]Z[#*-25.451] +N3581Y[#*-13.785]Z[#*-26.357] +N3591Y[#*-14.285]Z[#*-27.426] +N3601Y[#*-14.535]Z[#*-28.047] +N3611Y[#*-14.785]Z[#*-28.81] +N3621Y[#*-15.035]Z[#*-29.582] +N3631Y[#*-15.097]Z[#*-29.849] +N3641Y[#*-15.222]Z[#*-30.485] +N3651Y[#*-15.23]Z[#*-30.5] +N3661Y[#*-15.285] +N3671Y[#*-21.785] +N3681Y[#*-30.785] +N3691Y[#*-42.785] +N3701Y[#*-44.785] +N3711Y[#*-46.785] +N3721Y[#*-49.785] +N3731Y[#*-53.] +N3741X[#*-39.53]Y[#*-53.299] +N3751X[#*-39.607]Y[#*-53.547] +N3761X[#*-39.731]Y[#*-53.762] +N3771X[#*-39.891]Y[#*-53.938] +N3781X[#*-40.08]Y[#*-54.074] +N3791X[#*-40.291]Y[#*-54.172] +N3801X[#*-40.517]Y[#*-54.23] +N3811X[#*-40.75]Y[#*-54.25] +N3821X[#*-40.983]Y[#*-54.23] +N3831X[#*-41.209]Y[#*-54.172] +N3841X[#*-41.42]Y[#*-54.074] +N3851X[#*-41.609]Y[#*-53.938] +N3861X[#*-41.769]Y[#*-53.762] +N3871X[#*-41.893]Y[#*-53.547] +N3881X[#*-41.972]Y[#*-53.293] +N3891X[#*-42.]Y[#*-53.] +N3901Y[#*-52.727] +N3911Y[#*-43.727] +N3921Y[#*-38.727] +N3931Y[#*-33.727] +N3941Y[#*-29.727] +N3951Y[#*-28.727] +N3961Y[#*-21.727] +N3971Y[#*-14.352] +N3981Y[#*-14.344]Z[#*-30.487] +N3991Y[#*-14.258]Z[#*-30.057] +N4001Y[#*-14.227]Z[#*-29.909] +N4011Y[#*-13.977]Z[#*-29.128] +N4021Y[#*-13.727]Z[#*-28.388] +N4031Y[#*-13.477]Z[#*-27.762] +N4041Y[#*-12.977]Z[#*-26.738] +N4051Y[#*-12.727]Z[#*-26.247] +N4061Y[#*-11.727]Z[#*-24.741] +N4071Y[#*-10.727]Z[#*-23.557] +N4081Y[#*-10.227]Z[#*-23.03] +N4091Y[#*-9.727]Z[#*-22.554] +N4101Y[#*-8.727]Z[#*-21.73] +N4111Y[#*-8.227]Z[#*-21.356] +N4121Y[#*-7.727]Z[#*-20.997] +N4131Y[#*-7.227]Z[#*-20.709] +N4141Y[#*-6.727]Z[#*-20.438] +N4151Y[#*-5.727]Z[#*-19.999] +N4161Y[#*-4.727]Z[#*-19.612] +N4171Y[#*-4.227]Z[#*-19.451] +N4181Y[#*-3.727]Z[#*-19.359] +N4191Y[#*-2.727]Z[#*-19.195] +N4201Y[#*-1.727]Z[#*-19.053] +N4211Y[#*-0.227]Z[#*-18.959] +N4221Y[#*0.273] +N4231Y[#*1.273]Z[#*-19.03] +N4241Y[#*2.273]Z[#*-19.124] +N4251Y[#*4.273]Z[#*-19.463] +N4261Y[#*4.773]Z[#*-19.608] +N4271Y[#*5.273]Z[#*-19.794] +N4281Y[#*5.773]Z[#*-20.007] +N4291Y[#*6.273]Z[#*-20.2] +N4301Y[#*6.773]Z[#*-20.448] +N4311Y[#*7.273]Z[#*-20.724] +N4321Y[#*8.273]Z[#*-21.381] +N4331Y[#*9.273]Z[#*-22.136] +N4341Y[#*9.773]Z[#*-22.593] +N4351Y[#*10.273]Z[#*-23.072] +N4361Y[#*10.773]Z[#*-23.61] +N4371Y[#*11.273]Z[#*-24.2] +N4381Y[#*11.773]Z[#*-24.806] +N4391Y[#*12.273]Z[#*-25.555] +N4401Y[#*12.773]Z[#*-26.327] +N4411Y[#*13.523]Z[#*-27.855] +N4421Y[#*13.773]Z[#*-28.524] +N4431Y[#*14.148]Z[#*-29.637] +N4441Y[#*14.21]Z[#*-29.843] +N4451Y[#*14.257]Z[#*-30.051] +N4461Y[#*14.343]Z[#*-30.482] +N4471Y[#*14.351]Z[#*-30.5] +N4481Y[#*15.273] +N4491Y[#*18.273] +N4501Y[#*24.273] +N4511Y[#*27.273] +N4521Y[#*31.273] +N4531Y[#*41.273] +N4541Y[#*46.273] +N4551Y[#*52.273] +N4561Y[#*53.] +N4571X[#*-42.028]Y[#*53.293] +N4581X[#*-42.107]Y[#*53.547] +N4591X[#*-42.231]Y[#*53.762] +N4601X[#*-42.391]Y[#*53.937] +N4611X[#*-42.58]Y[#*54.074] +N4621X[#*-42.791]Y[#*54.172] +N4631X[#*-43.017]Y[#*54.23] +N4641X[#*-43.25]Y[#*54.25] +N4651X[#*-43.483]Y[#*54.23] +N4661X[#*-43.709]Y[#*54.172] +N4671X[#*-43.92]Y[#*54.074] +N4681X[#*-44.109]Y[#*53.937] +N4691X[#*-44.269]Y[#*53.762] +N4701X[#*-44.393]Y[#*53.547] +N4711X[#*-44.472]Y[#*53.293] +N4721X[#*-44.5]Y[#*53.] +N4731Y[#*36.429] +N4741Y[#*35.429] +N4751Y[#*12.897] +N4761Y[#*12.89]Z[#*-30.468] +N4771Y[#*12.866]Z[#*-30.35] +N4781Y[#*12.835]Z[#*-30.214] +N4791Y[#*12.679]Z[#*-29.734] +N4801Y[#*12.366]Z[#*-28.81] +N4811Y[#*12.304]Z[#*-28.629] +N4821Y[#*12.179]Z[#*-28.348] +N4831Y[#*11.679]Z[#*-27.331] +N4841Y[#*11.429]Z[#*-26.867] +N4851Y[#*10.929]Z[#*-26.121] +N4861Y[#*10.429]Z[#*-25.416] +N4871Y[#*9.429]Z[#*-24.28] +N4881Y[#*8.429]Z[#*-23.386] +N4891Y[#*7.929]Z[#*-22.983] +N4901Y[#*6.929]Z[#*-22.31] +N4911Y[#*6.429]Z[#*-22.021] +N4921Y[#*5.429]Z[#*-21.531] +N4931Y[#*4.929]Z[#*-21.322] +N4941Y[#*3.929]Z[#*-20.991] +N4951Y[#*3.429]Z[#*-20.838] +N4961Y[#*2.429]Z[#*-20.639] +N4971Y[#*1.429]Z[#*-20.489] +N4981Y[#*0.429]Z[#*-20.418] +N4991Y[#*-0.571]Z[#*-20.428] +N5001Y[#*-1.571]Z[#*-20.497] +N5011Y[#*-2.071]Z[#*-20.568] +N5021Y[#*-2.571]Z[#*-20.667] +N5031Y[#*-3.571]Z[#*-20.875] +N5041Y[#*-4.571]Z[#*-21.206] +N5051Y[#*-5.571]Z[#*-21.605] +N5061Y[#*-6.571]Z[#*-22.092] +N5071Y[#*-7.071]Z[#*-22.409] +N5081Y[#*-7.571]Z[#*-22.745] +N5091Y[#*-8.571]Z[#*-23.514] +N5101Y[#*-9.071]Z[#*-23.954] +N5111Y[#*-9.571]Z[#*-24.439] +N5121Y[#*-10.571]Z[#*-25.592] +N5131Y[#*-11.071]Z[#*-26.334] +N5141Y[#*-11.571]Z[#*-27.113] +N5151Y[#*-12.071]Z[#*-28.13] +N5161Y[#*-12.571]Z[#*-29.416] +N5171Y[#*-12.821]Z[#*-30.164] +N5181Y[#*-12.899]Z[#*-30.5] +N5191Y[#*-14.571] +N5201Y[#*-23.571] +N5211Y[#*-38.571] +N5221Y[#*-45.571] +N5231Y[#*-48.571] +N5241Y[#*-53.] +N5251X[#*-44.528]Y[#*-53.293] +N5261X[#*-44.607]Y[#*-53.547] +N5271X[#*-44.731]Y[#*-53.762] +N5281X[#*-44.891]Y[#*-53.938] +N5291X[#*-45.08]Y[#*-54.074] +N5301X[#*-45.291]Y[#*-54.172] +N5311X[#*-45.517]Y[#*-54.23] +N5321X[#*-45.75]Y[#*-54.25] +N5331X[#*-45.983]Y[#*-54.23] +N5341X[#*-46.209]Y[#*-54.172] +N5351X[#*-46.42]Y[#*-54.074] +N5361X[#*-46.609]Y[#*-53.938] +N5371X[#*-46.769]Y[#*-53.762] +N5381X[#*-46.893]Y[#*-53.547] +N5391X[#*-46.972]Y[#*-53.293] +N5401X[#*-47.]Y[#*-53.] +N5411Y[#*-49.856] +N5421Y[#*-23.856] +N5431Y[#*-10.504] +N5441Y[#*-10.497]Z[#*-30.485] +N5451Y[#*-10.106]Z[#*-29.364] +N5461Y[#*-9.606]Z[#*-28.345] +N5471Y[#*-9.356]Z[#*-27.919] +N5481Y[#*-8.856]Z[#*-27.173] +N5491Y[#*-8.356]Z[#*-26.552] +N5501Y[#*-7.856]Z[#*-25.982] +N5511Y[#*-7.356]Z[#*-25.518] +N5521Y[#*-6.856]Z[#*-25.079] +N5531Y[#*-6.356]Z[#*-24.708] +N5541Y[#*-5.856]Z[#*-24.372] +N5551Y[#*-5.356]Z[#*-24.061] +N5561Y[#*-4.356]Z[#*-23.57] +N5571Y[#*-3.856]Z[#*-23.376] +N5581Y[#*-2.856]Z[#*-23.04] +N5591Y[#*-1.856]Z[#*-22.835] +N5601Y[#*-0.856]Z[#*-22.712] +N5611Y[#*-0.356]Z[#*-22.679] +N5621Y[#*0.144]Z[#*-22.664] +N5631Y[#*1.144]Z[#*-22.732] +N5641Y[#*1.644]Z[#*-22.793] +N5651Y[#*2.644]Z[#*-22.993] +N5661Y[#*3.144]Z[#*-23.135] +N5671Y[#*4.144]Z[#*-23.475] +N5681Y[#*5.144]Z[#*-23.957] +N5691Y[#*5.644]Z[#*-24.23] +N5701Y[#*6.644]Z[#*-24.903] +N5711Y[#*7.644]Z[#*-25.771] +N5721Y[#*8.144]Z[#*-26.31] +N5731Y[#*8.644]Z[#*-26.879] +N5741Y[#*9.144]Z[#*-27.602] +N5751Y[#*9.644]Z[#*-28.422] +N5761Y[#*10.144]Z[#*-29.452] +N5771Y[#*10.331]Z[#*-29.997] +N5781Y[#*10.496]Z[#*-30.482] +N5791Y[#*10.503]Z[#*-30.5] +N5801Y[#*33.144] +N5811Y[#*53.] +N5821X[#*-47.028]Y[#*53.293] +N5831X[#*-47.107]Y[#*53.547] +N5841X[#*-47.231]Y[#*53.762] +N5851X[#*-47.391]Y[#*53.937] +N5861X[#*-47.58]Y[#*54.074] +N5871X[#*-47.791]Y[#*54.172] +N5881X[#*-48.017]Y[#*54.23] +N5891X[#*-48.25]Y[#*54.25] +N5901X[#*-48.483]Y[#*54.23] +N5911X[#*-48.709]Y[#*54.172] +N5921X[#*-48.92]Y[#*54.074] +N5931X[#*-49.109]Y[#*53.937] +N5941X[#*-49.269]Y[#*53.762] +N5951X[#*-49.393]Y[#*53.547] +N5961X[#*-49.472]Y[#*53.293] +N5971X[#*-49.5]Y[#*53.] +N5981Y[#*51.241] +N5991Y[#*29.241] +N6001Y[#*27.241] +N6011Y[#*23.241] +N6021Y[#*19.241] +N6031Y[#*17.241] +N6041Y[#*5.733] +N6051Y[#*5.718]Z[#*-30.469] +N6061Y[#*5.616]Z[#*-30.289] +N6071Y[#*5.226]Z[#*-29.706] +N6081Y[#*5.116]Z[#*-29.569] +N6091Y[#*4.741]Z[#*-29.141] +N6101Y[#*4.241]Z[#*-28.672] +N6111Y[#*3.741]Z[#*-28.283] +N6121Y[#*3.241]Z[#*-27.953] +N6131Y[#*2.741]Z[#*-27.707] +N6141Y[#*2.241]Z[#*-27.502] +N6151Y[#*1.741]Z[#*-27.333] +N6161Y[#*1.241]Z[#*-27.226] +N6171Y[#*0.741]Z[#*-27.141] +N6181Y[#*0.241]Z[#*-27.107] +N6191Y[#*-0.259]Z[#*-27.108] +N6201Y[#*-0.759]Z[#*-27.142] +N6211Y[#*-1.259]Z[#*-27.229] +N6221Y[#*-1.759]Z[#*-27.339] +N6231Y[#*-2.259]Z[#*-27.508] +N6241Y[#*-2.759]Z[#*-27.716] +N6251Y[#*-3.259]Z[#*-27.963] +N6261Y[#*-3.759]Z[#*-28.294] +N6271Y[#*-4.259]Z[#*-28.687] +N6281Y[#*-4.759]Z[#*-29.162] +N6291Y[#*-5.259]Z[#*-29.756] +N6301Y[#*-5.634]Z[#*-30.316] +N6311Y[#*-5.735]Z[#*-30.5] +N6321Y[#*-8.759] +N6331Y[#*-37.759] +N6341Y[#*-48.759] +N6351Y[#*-53.] +N6361X[#*-49.528]Y[#*-53.293] +N6371X[#*-49.607]Y[#*-53.547] +N6381X[#*-49.731]Y[#*-53.762] +N6391X[#*-49.797]Y[#*-53.835] +N6401X[#*-49.891]Y[#*-53.938] +N6411X[#*-50.08]Y[#*-54.074] +N6421X[#*-50.291]Y[#*-54.172] +N6431X[#*-50.517]Y[#*-54.23] +N6441X[#*-50.75]Y[#*-54.25] +N6451X[#*-50.983]Y[#*-54.23] +N6461X[#*-51.209]Y[#*-54.172] +N6471X[#*-51.42]Y[#*-54.074] +N6481X[#*-51.605]Y[#*-53.941] +N6491X[#*-51.769]Y[#*-53.762] +N6501X[#*-51.893]Y[#*-53.547] +N6511X[#*-51.972]Y[#*-53.293] +N6521X[#*-52.]Y[#*-53.] +N6531Y[#*-45.473] +N6541Y[#*-39.473] +N6551Y[#*-18.473] +N6561Y[#*-15.473] +N6571Y[#*-9.473] +N6581Y[#*-3.473] +N6591Y[#*6.527] +N6601Y[#*17.527] +N6611Y[#*20.527] +N6621Y[#*21.527] +N6631Y[#*26.527] +N6641Y[#*30.527] +N6651Y[#*47.527] +N6661Y[#*50.527] +N6671Y[#*53.] +N6681Y[#*53.26]F[#*225] +N6691Y[#*53.264] +N6701Y[#*53.277]Z[#*-30.499] +N6711Y[#*53.555]Z[#*-30.471] +N6721Y[#*53.686]Z[#*-30.448] +N6731Y[#*53.947]Z[#*-30.387] +N6741Y[#*54.209]Z[#*-30.3] +N6751Y[#*54.471]Z[#*-30.185] +N6761Y[#*54.732]Z[#*-30.039] +N6771Y[#*54.994]Z[#*-29.852] +N6781Y[#*55.125]Z[#*-29.742] +N6791Y[#*55.387]Z[#*-29.477] +N6801Y[#*55.518]Z[#*-29.32] +N6811Y[#*55.648]Z[#*-29.133] +N6821Y[#*55.779]Z[#*-28.91] +N6831Y[#*55.91]Z[#*-28.63] +N6841Y[#*56.008]Z[#*-28.344] +N6851Y[#*56.025]Z[#*-28.283] +N6861Y[#*56.056]Z[#*-28.167] +N6871Y[#*56.061]Z[#*-28.146] +N6881Y[#*56.105]Z[#*-27.894] +N6891Y[#*56.11]Z[#*-27.838] +N6901Y[#*56.128]Z[#*-27.634] +N6911G0Z[#*10.] +N6931M9 +N6941M2 + + + + +