diff --git a/.gitignore b/.gitignore index fd4f2b066b339e4fd5c0efd44938231a398e9a81..817058cbed50aba2b6c3ccec9666269722abd160 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules .DS_Store +**/node_modules \ No newline at end of file diff --git a/files.html b/files.html index b677c47efed9746295d8d6c8756a13e115af1a42..4de0649c23e3398d94690ae94a4d7e4a3e7419e3 100644 --- a/files.html +++ b/files.html @@ -10,7 +10,6 @@ </script> <i> .git</i><br> <a href='./.gitignore'>.gitignore</a><br> - <a href='./README.md'>README.md</a><br> <a href='./files.html'>files.html</a><br> <a href='./index.html'>index.html</a><br> <i> js</i><br> @@ -19,7 +18,6 @@ <a href='./js/files.js'>files.js</a><br> <a href='./js/mods.js'>mods.js</a><br> <a href='./js/modules.js'>modules.js</a><br> -<i> node_modules</i><br> <a href='./js/printserver.js'>printserver.js</a><br> <a href='./js/programs.js'>programs.js</a><br> <a href='./js/serialserver.js'>serialserver.js</a><br> @@ -101,6 +99,1628 @@ <a href='./modules/frep/view/render%20(CPU)'>render (CPU)</a><br> <a href='./modules/frep/view/render%20(GPU)'>render (GPU)</a><br> <a href='./modules/frep/view/slice'>slice</a><br> +<i> hardware</i><br> + <a href='./modules/hardware/demo_toolpath'>demo_toolpath</a><br> +<i> motors</i><br> + <a href='./modules/hardware/motors/stepper'>stepper</a><br> +<i> network</i><br> + <a href='./modules/hardware/network/mkserial'>mkserial</a><br> + <a href='./modules/hardware/network/mkserialserver.js'>mkserialserver.js</a><br> +<i> node_modules</i><br> +<i> .bin</i><br> + <a href='./modules/hardware/network/node_modules/.bin/prebuild-install'>prebuild-install</a><br> + <a href='./modules/hardware/network/node_modules/.bin/prebuild-install.cmd'>prebuild-install.cmd</a><br> + <a href='./modules/hardware/network/node_modules/.bin/prominode'>prominode</a><br> + <a href='./modules/hardware/network/node_modules/.bin/prominode.cmd'>prominode.cmd</a><br> + <a href='./modules/hardware/network/node_modules/.bin/rc'>rc</a><br> + <a href='./modules/hardware/network/node_modules/.bin/rc.cmd'>rc.cmd</a><br> + <a href='./modules/hardware/network/node_modules/.bin/serialport-list'>serialport-list</a><br> + <a href='./modules/hardware/network/node_modules/.bin/serialport-list.cmd'>serialport-list.cmd</a><br> + <a href='./modules/hardware/network/node_modules/.bin/serialport-repl'>serialport-repl</a><br> + <a href='./modules/hardware/network/node_modules/.bin/serialport-repl.cmd'>serialport-repl.cmd</a><br> + <a href='./modules/hardware/network/node_modules/.bin/serialport-term'>serialport-term</a><br> + <a href='./modules/hardware/network/node_modules/.bin/serialport-term.cmd'>serialport-term.cmd</a><br> + <a href='./modules/hardware/network/node_modules/.bin/window-size'>window-size</a><br> + <a href='./modules/hardware/network/node_modules/.bin/window-size.cmd'>window-size.cmd</a><br> +<i> ansi-bgblack</i><br> + <a href='./modules/hardware/network/node_modules/ansi-bgblack/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgblack/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgblack/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgblack/README.md'>README.md</a><br> +<i> ansi-bgblue</i><br> + <a href='./modules/hardware/network/node_modules/ansi-bgblue/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgblue/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgblue/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgblue/readme.md'>readme.md</a><br> +<i> ansi-bgcyan</i><br> + <a href='./modules/hardware/network/node_modules/ansi-bgcyan/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgcyan/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgcyan/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgcyan/readme.md'>readme.md</a><br> +<i> ansi-bggreen</i><br> + <a href='./modules/hardware/network/node_modules/ansi-bggreen/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bggreen/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bggreen/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bggreen/readme.md'>readme.md</a><br> +<i> ansi-bgmagenta</i><br> + <a href='./modules/hardware/network/node_modules/ansi-bgmagenta/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgmagenta/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgmagenta/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgmagenta/readme.md'>readme.md</a><br> +<i> ansi-bgred</i><br> + <a href='./modules/hardware/network/node_modules/ansi-bgred/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgred/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgred/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgred/readme.md'>readme.md</a><br> +<i> ansi-bgwhite</i><br> + <a href='./modules/hardware/network/node_modules/ansi-bgwhite/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgwhite/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgwhite/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgwhite/readme.md'>readme.md</a><br> +<i> ansi-bgyellow</i><br> + <a href='./modules/hardware/network/node_modules/ansi-bgyellow/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgyellow/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgyellow/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bgyellow/readme.md'>readme.md</a><br> +<i> ansi-black</i><br> + <a href='./modules/hardware/network/node_modules/ansi-black/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-black/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-black/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-black/readme.md'>readme.md</a><br> +<i> ansi-blue</i><br> + <a href='./modules/hardware/network/node_modules/ansi-blue/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-blue/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-blue/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-blue/readme.md'>readme.md</a><br> +<i> ansi-bold</i><br> + <a href='./modules/hardware/network/node_modules/ansi-bold/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bold/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bold/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-bold/readme.md'>readme.md</a><br> +<i> ansi-colors</i><br> + <a href='./modules/hardware/network/node_modules/ansi-colors/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-colors/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-colors/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-colors/README.md'>README.md</a><br> +<i> ansi-cyan</i><br> + <a href='./modules/hardware/network/node_modules/ansi-cyan/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-cyan/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-cyan/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-cyan/readme.md'>readme.md</a><br> +<i> ansi-dim</i><br> + <a href='./modules/hardware/network/node_modules/ansi-dim/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-dim/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-dim/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-dim/readme.md'>readme.md</a><br> +<i> ansi-gray</i><br> + <a href='./modules/hardware/network/node_modules/ansi-gray/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-gray/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-gray/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-gray/readme.md'>readme.md</a><br> +<i> ansi-green</i><br> + <a href='./modules/hardware/network/node_modules/ansi-green/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-green/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-green/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-green/readme.md'>readme.md</a><br> +<i> ansi-grey</i><br> + <a href='./modules/hardware/network/node_modules/ansi-grey/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-grey/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-grey/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-grey/readme.md'>readme.md</a><br> +<i> ansi-hidden</i><br> + <a href='./modules/hardware/network/node_modules/ansi-hidden/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-hidden/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-hidden/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-hidden/readme.md'>readme.md</a><br> +<i> ansi-inverse</i><br> + <a href='./modules/hardware/network/node_modules/ansi-inverse/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-inverse/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-inverse/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-inverse/readme.md'>readme.md</a><br> +<i> ansi-italic</i><br> + <a href='./modules/hardware/network/node_modules/ansi-italic/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-italic/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-italic/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-italic/readme.md'>readme.md</a><br> +<i> ansi-magenta</i><br> + <a href='./modules/hardware/network/node_modules/ansi-magenta/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-magenta/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-magenta/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-magenta/readme.md'>readme.md</a><br> +<i> ansi-red</i><br> + <a href='./modules/hardware/network/node_modules/ansi-red/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-red/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-red/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-red/readme.md'>readme.md</a><br> +<i> ansi-regex</i><br> + <a href='./modules/hardware/network/node_modules/ansi-regex/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-regex/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/ansi-regex/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-regex/readme.md'>readme.md</a><br> +<i> ansi-reset</i><br> + <a href='./modules/hardware/network/node_modules/ansi-reset/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-reset/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-reset/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-reset/readme.md'>readme.md</a><br> +<i> ansi-strikethrough</i><br> + <a href='./modules/hardware/network/node_modules/ansi-strikethrough/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-strikethrough/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-strikethrough/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-strikethrough/readme.md'>readme.md</a><br> +<i> ansi-underline</i><br> + <a href='./modules/hardware/network/node_modules/ansi-underline/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-underline/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-underline/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-underline/readme.md'>readme.md</a><br> +<i> ansi-white</i><br> + <a href='./modules/hardware/network/node_modules/ansi-white/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-white/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-white/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-white/readme.md'>readme.md</a><br> +<i> ansi-wrap</i><br> + <a href='./modules/hardware/network/node_modules/ansi-wrap/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-wrap/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-wrap/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-wrap/README.md'>README.md</a><br> +<i> ansi-yellow</i><br> + <a href='./modules/hardware/network/node_modules/ansi-yellow/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ansi-yellow/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ansi-yellow/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ansi-yellow/readme.md'>readme.md</a><br> +<i> aproba</i><br> + <a href='./modules/hardware/network/node_modules/aproba/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/aproba/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/aproba/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/aproba/README.md'>README.md</a><br> +<i> are-we-there-yet</i><br> + <a href='./modules/hardware/network/node_modules/are-we-there-yet/CHANGES.md'>CHANGES.md</a><br> + <a href='./modules/hardware/network/node_modules/are-we-there-yet/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/are-we-there-yet/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/are-we-there-yet/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/are-we-there-yet/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/are-we-there-yet/tracker-base.js'>tracker-base.js</a><br> + <a href='./modules/hardware/network/node_modules/are-we-there-yet/tracker-group.js'>tracker-group.js</a><br> + <a href='./modules/hardware/network/node_modules/are-we-there-yet/tracker-stream.js'>tracker-stream.js</a><br> + <a href='./modules/hardware/network/node_modules/are-we-there-yet/tracker.js'>tracker.js</a><br> +<i> arr-flatten</i><br> + <a href='./modules/hardware/network/node_modules/arr-flatten/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/arr-flatten/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/arr-flatten/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/arr-flatten/README.md'>README.md</a><br> +<i> arr-swap</i><br> + <a href='./modules/hardware/network/node_modules/arr-swap/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/arr-swap/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> is-number</i><br> + <a href='./modules/hardware/network/node_modules/arr-swap/node_modules/is-number/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/arr-swap/node_modules/is-number/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/arr-swap/node_modules/is-number/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/arr-swap/node_modules/is-number/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/arr-swap/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/arr-swap/README.md'>README.md</a><br> +<i> async-limiter</i><br> + <a href='./modules/hardware/network/node_modules/async-limiter/.travis.yml'>.travis.yml</a><br> +<i> coverage</i><br> + <a href='./modules/hardware/network/node_modules/async-limiter/coverage/coverage.json'>coverage.json</a><br> +<i> lcov-report</i><br> +<i> async-throttle</i><br> + <a href='./modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html'>index.html</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html'>index.js.html</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/base.css'>base.css</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/index.html'>index.html</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/prettify.css'>prettify.css</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/prettify.js'>prettify.js</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png'>sort-arrow-sprite.png</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/sorter.js'>sorter.js</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/coverage/lcov.info'>lcov.info</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/async-limiter/readme.md'>readme.md</a><br> +<i> bindings</i><br> + <a href='./modules/hardware/network/node_modules/bindings/bindings.js'>bindings.js</a><br> + <a href='./modules/hardware/network/node_modules/bindings/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/bindings/README.md'>README.md</a><br> +<i> bl</i><br> + <a href='./modules/hardware/network/node_modules/bl/.jshintrc'>.jshintrc</a><br> + <a href='./modules/hardware/network/node_modules/bl/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/bl/bl.js'>bl.js</a><br> + <a href='./modules/hardware/network/node_modules/bl/LICENSE.md'>LICENSE.md</a><br> + <a href='./modules/hardware/network/node_modules/bl/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/bl/README.md'>README.md</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/bl/test/test.js'>test.js</a><br> +<i> buffer-alloc</i><br> + <a href='./modules/hardware/network/node_modules/buffer-alloc/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/buffer-alloc/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/buffer-alloc/readme.md'>readme.md</a><br> +<i> buffer-alloc-unsafe</i><br> + <a href='./modules/hardware/network/node_modules/buffer-alloc-unsafe/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/buffer-alloc-unsafe/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/buffer-alloc-unsafe/readme.md'>readme.md</a><br> +<i> buffer-fill</i><br> + <a href='./modules/hardware/network/node_modules/buffer-fill/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/buffer-fill/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/buffer-fill/readme.md'>readme.md</a><br> +<i> choices-separator</i><br> +<i> node_modules</i><br> +<i> debug</i><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/.coveralls.yml'>.coveralls.yml</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/.eslintrc'>.eslintrc</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/component.json'>component.json</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/karma.conf.js'>karma.conf.js</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/README.md'>README.md</a><br> +<i> src</i><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/src/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/src/debug.js'>debug.js</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/src/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/src/inspector-log.js'>inspector-log.js</a><br> + <a href='./modules/hardware/network/node_modules/choices-separator/node_modules/debug/src/node.js'>node.js</a><br> +<i> chownr</i><br> + <a href='./modules/hardware/network/node_modules/chownr/chownr.js'>chownr.js</a><br> + <a href='./modules/hardware/network/node_modules/chownr/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/chownr/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/chownr/README.md'>README.md</a><br> +<i> clone-deep</i><br> + <a href='./modules/hardware/network/node_modules/clone-deep/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/clone-deep/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/clone-deep/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/clone-deep/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/clone-deep/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/clone-deep/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/clone-deep/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/clone-deep/README.md'>README.md</a><br> +<i> code-point-at</i><br> + <a href='./modules/hardware/network/node_modules/code-point-at/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/code-point-at/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/code-point-at/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/code-point-at/readme.md'>readme.md</a><br> +<i> collection-visit</i><br> + <a href='./modules/hardware/network/node_modules/collection-visit/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/collection-visit/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/collection-visit/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/collection-visit/README.md'>README.md</a><br> +<i> commander</i><br> + <a href='./modules/hardware/network/node_modules/commander/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/commander/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/commander/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/commander/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/commander/Readme.md'>Readme.md</a><br> +<i> typings</i><br> + <a href='./modules/hardware/network/node_modules/commander/typings/index.d.ts'>index.d.ts</a><br> +<i> component-emitter</i><br> + <a href='./modules/hardware/network/node_modules/component-emitter/History.md'>History.md</a><br> + <a href='./modules/hardware/network/node_modules/component-emitter/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/component-emitter/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/component-emitter/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/component-emitter/Readme.md'>Readme.md</a><br> +<i> console-control-strings</i><br> + <a href='./modules/hardware/network/node_modules/console-control-strings/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/console-control-strings/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/console-control-strings/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/console-control-strings/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/console-control-strings/README.md~'>README.md~</a><br> +<i> copy-descriptor</i><br> + <a href='./modules/hardware/network/node_modules/copy-descriptor/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/copy-descriptor/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/copy-descriptor/package.json'>package.json</a><br> +<i> core-util-is</i><br> + <a href='./modules/hardware/network/node_modules/core-util-is/float.patch'>float.patch</a><br> +<i> lib</i><br> + <a href='./modules/hardware/network/node_modules/core-util-is/lib/util.js'>util.js</a><br> + <a href='./modules/hardware/network/node_modules/core-util-is/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/core-util-is/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/core-util-is/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/core-util-is/test.js'>test.js</a><br> +<i> debug</i><br> + <a href='./modules/hardware/network/node_modules/debug/.coveralls.yml'>.coveralls.yml</a><br> + <a href='./modules/hardware/network/node_modules/debug/.eslintrc'>.eslintrc</a><br> + <a href='./modules/hardware/network/node_modules/debug/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/debug/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/debug/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/debug/karma.conf.js'>karma.conf.js</a><br> + <a href='./modules/hardware/network/node_modules/debug/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/debug/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/debug/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/debug/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/debug/README.md'>README.md</a><br> +<i> src</i><br> + <a href='./modules/hardware/network/node_modules/debug/src/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/debug/src/debug.js'>debug.js</a><br> + <a href='./modules/hardware/network/node_modules/debug/src/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/debug/src/node.js'>node.js</a><br> +<i> decompress-response</i><br> + <a href='./modules/hardware/network/node_modules/decompress-response/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/decompress-response/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/decompress-response/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/decompress-response/readme.md'>readme.md</a><br> +<i> deep-extend</i><br> + <a href='./modules/hardware/network/node_modules/deep-extend/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/deep-extend/index.js'>index.js</a><br> +<i> lib</i><br> + <a href='./modules/hardware/network/node_modules/deep-extend/lib/deep-extend.js'>deep-extend.js</a><br> + <a href='./modules/hardware/network/node_modules/deep-extend/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/deep-extend/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/deep-extend/README.md'>README.md</a><br> +<i> define-property</i><br> + <a href='./modules/hardware/network/node_modules/define-property/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/define-property/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/define-property/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/define-property/README.md'>README.md</a><br> +<i> delegates</i><br> + <a href='./modules/hardware/network/node_modules/delegates/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/delegates/History.md'>History.md</a><br> + <a href='./modules/hardware/network/node_modules/delegates/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/delegates/License'>License</a><br> + <a href='./modules/hardware/network/node_modules/delegates/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/delegates/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/delegates/Readme.md'>Readme.md</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/delegates/test/index.js'>index.js</a><br> +<i> detect-libc</i><br> + <a href='./modules/hardware/network/node_modules/detect-libc/.npmignore'>.npmignore</a><br> +<i> bin</i><br> + <a href='./modules/hardware/network/node_modules/detect-libc/bin/detect-libc.js'>detect-libc.js</a><br> +<i> lib</i><br> + <a href='./modules/hardware/network/node_modules/detect-libc/lib/detect-libc.js'>detect-libc.js</a><br> + <a href='./modules/hardware/network/node_modules/detect-libc/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/detect-libc/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/detect-libc/README.md'>README.md</a><br> +<i> end-of-stream</i><br> + <a href='./modules/hardware/network/node_modules/end-of-stream/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/end-of-stream/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/end-of-stream/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/end-of-stream/README.md'>README.md</a><br> +<i> error-symbol</i><br> + <a href='./modules/hardware/network/node_modules/error-symbol/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/error-symbol/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/error-symbol/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/error-symbol/README.md'>README.md</a><br> +<i> expand-template</i><br> + <a href='./modules/hardware/network/node_modules/expand-template/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/expand-template/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/expand-template/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/expand-template/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/expand-template/test.js'>test.js</a><br> +<i> extend-shallow</i><br> + <a href='./modules/hardware/network/node_modules/extend-shallow/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/extend-shallow/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/extend-shallow/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/extend-shallow/README.md'>README.md</a><br> +<i> for-in</i><br> + <a href='./modules/hardware/network/node_modules/for-in/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/for-in/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/for-in/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/for-in/README.md'>README.md</a><br> +<i> for-own</i><br> + <a href='./modules/hardware/network/node_modules/for-own/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/for-own/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/for-own/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/for-own/README.md'>README.md</a><br> +<i> fs-constants</i><br> + <a href='./modules/hardware/network/node_modules/fs-constants/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/fs-constants/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/fs-constants/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/fs-constants/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/fs-constants/README.md'>README.md</a><br> +<i> gauge</i><br> + <a href='./modules/hardware/network/node_modules/gauge/base-theme.js'>base-theme.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/gauge/error.js'>error.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/has-color.js'>has-color.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/gauge/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/gauge/plumbing.js'>plumbing.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/process.js'>process.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/progress-bar.js'>progress-bar.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/gauge/render-template.js'>render-template.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/set-immediate.js'>set-immediate.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/set-interval.js'>set-interval.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/spin.js'>spin.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/template-item.js'>template-item.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/theme-set.js'>theme-set.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/themes.js'>themes.js</a><br> + <a href='./modules/hardware/network/node_modules/gauge/wide-truncate.js'>wide-truncate.js</a><br> +<i> github-from-package</i><br> + <a href='./modules/hardware/network/node_modules/github-from-package/.travis.yml'>.travis.yml</a><br> +<i> example</i><br> + <a href='./modules/hardware/network/node_modules/github-from-package/example/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/github-from-package/example/url.js'>url.js</a><br> + <a href='./modules/hardware/network/node_modules/github-from-package/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/github-from-package/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/github-from-package/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/github-from-package/readme.markdown'>readme.markdown</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/github-from-package/test/a.json'>a.json</a><br> + <a href='./modules/hardware/network/node_modules/github-from-package/test/b.json'>b.json</a><br> + <a href='./modules/hardware/network/node_modules/github-from-package/test/c.json'>c.json</a><br> + <a href='./modules/hardware/network/node_modules/github-from-package/test/d.json'>d.json</a><br> + <a href='./modules/hardware/network/node_modules/github-from-package/test/e.json'>e.json</a><br> + <a href='./modules/hardware/network/node_modules/github-from-package/test/url.js'>url.js</a><br> +<i> has-unicode</i><br> + <a href='./modules/hardware/network/node_modules/has-unicode/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/has-unicode/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/has-unicode/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/has-unicode/README.md'>README.md</a><br> +<i> info-symbol</i><br> + <a href='./modules/hardware/network/node_modules/info-symbol/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/info-symbol/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/info-symbol/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/info-symbol/README.md'>README.md</a><br> +<i> inherits</i><br> + <a href='./modules/hardware/network/node_modules/inherits/inherits.js'>inherits.js</a><br> + <a href='./modules/hardware/network/node_modules/inherits/inherits_browser.js'>inherits_browser.js</a><br> + <a href='./modules/hardware/network/node_modules/inherits/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/inherits/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/inherits/README.md'>README.md</a><br> +<i> ini</i><br> + <a href='./modules/hardware/network/node_modules/ini/ini.js'>ini.js</a><br> + <a href='./modules/hardware/network/node_modules/ini/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ini/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ini/README.md'>README.md</a><br> +<i> is-accessor-descriptor</i><br> + <a href='./modules/hardware/network/node_modules/is-accessor-descriptor/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-accessor-descriptor/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/is-accessor-descriptor/node_modules/kind-of/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-accessor-descriptor/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/is-accessor-descriptor/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-accessor-descriptor/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/is-accessor-descriptor/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-accessor-descriptor/README.md'>README.md</a><br> +<i> is-buffer</i><br> + <a href='./modules/hardware/network/node_modules/is-buffer/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-buffer/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/is-buffer/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-buffer/README.md'>README.md</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/is-buffer/test/basic.js'>basic.js</a><br> +<i> is-data-descriptor</i><br> + <a href='./modules/hardware/network/node_modules/is-data-descriptor/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-data-descriptor/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/is-data-descriptor/node_modules/kind-of/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/is-data-descriptor/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-data-descriptor/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/is-data-descriptor/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-data-descriptor/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/is-data-descriptor/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-data-descriptor/README.md'>README.md</a><br> +<i> is-descriptor</i><br> + <a href='./modules/hardware/network/node_modules/is-descriptor/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-descriptor/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/is-descriptor/node_modules/kind-of/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/is-descriptor/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-descriptor/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/is-descriptor/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-descriptor/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/is-descriptor/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-descriptor/README.md'>README.md</a><br> +<i> is-extendable</i><br> + <a href='./modules/hardware/network/node_modules/is-extendable/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-extendable/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/is-extendable/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-extendable/README.md'>README.md</a><br> +<i> is-fullwidth-code-point</i><br> + <a href='./modules/hardware/network/node_modules/is-fullwidth-code-point/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-fullwidth-code-point/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/is-fullwidth-code-point/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-fullwidth-code-point/readme.md'>readme.md</a><br> +<i> is-number</i><br> + <a href='./modules/hardware/network/node_modules/is-number/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-number/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/is-number/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-number/README.md'>README.md</a><br> +<i> is-plain-object</i><br> + <a href='./modules/hardware/network/node_modules/is-plain-object/index.d.ts'>index.d.ts</a><br> + <a href='./modules/hardware/network/node_modules/is-plain-object/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-plain-object/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/is-plain-object/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-plain-object/README.md'>README.md</a><br> +<i> is-windows</i><br> + <a href='./modules/hardware/network/node_modules/is-windows/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/is-windows/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/is-windows/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/is-windows/README.md'>README.md</a><br> +<i> isarray</i><br> + <a href='./modules/hardware/network/node_modules/isarray/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/isarray/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/isarray/component.json'>component.json</a><br> + <a href='./modules/hardware/network/node_modules/isarray/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/isarray/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/isarray/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/isarray/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/isarray/test.js'>test.js</a><br> +<i> isobject</i><br> + <a href='./modules/hardware/network/node_modules/isobject/index.d.ts'>index.d.ts</a><br> + <a href='./modules/hardware/network/node_modules/isobject/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/isobject/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/isobject/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/isobject/README.md'>README.md</a><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/kind-of/README.md'>README.md</a><br> +<i> koalas</i><br> + <a href='./modules/hardware/network/node_modules/koalas/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/koalas/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/koalas/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/koalas/README.md'>README.md</a><br> +<i> lazy-cache</i><br> + <a href='./modules/hardware/network/node_modules/lazy-cache/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/lazy-cache/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/lazy-cache/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/lazy-cache/README.md'>README.md</a><br> +<i> log-ok</i><br> + <a href='./modules/hardware/network/node_modules/log-ok/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/log-ok/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/log-ok/package.json'>package.json</a><br> +<i> log-utils</i><br> + <a href='./modules/hardware/network/node_modules/log-utils/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/log-utils/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/log-utils/package.json'>package.json</a><br> +<i> map-visit</i><br> + <a href='./modules/hardware/network/node_modules/map-visit/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/map-visit/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/map-visit/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/map-visit/README.md'>README.md</a><br> +<i> mimic-response</i><br> + <a href='./modules/hardware/network/node_modules/mimic-response/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/mimic-response/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/mimic-response/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/mimic-response/readme.md'>readme.md</a><br> +<i> minimist</i><br> + <a href='./modules/hardware/network/node_modules/minimist/.travis.yml'>.travis.yml</a><br> +<i> example</i><br> + <a href='./modules/hardware/network/node_modules/minimist/example/parse.js'>parse.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/minimist/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/minimist/readme.markdown'>readme.markdown</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/minimist/test/all_bool.js'>all_bool.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/bool.js'>bool.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/dash.js'>dash.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/default_bool.js'>default_bool.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/dotted.js'>dotted.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/kv_short.js'>kv_short.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/long.js'>long.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/num.js'>num.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/parse.js'>parse.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/parse_modified.js'>parse_modified.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/short.js'>short.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/stop_early.js'>stop_early.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/unknown.js'>unknown.js</a><br> + <a href='./modules/hardware/network/node_modules/minimist/test/whitespace.js'>whitespace.js</a><br> +<i> mixin-object</i><br> + <a href='./modules/hardware/network/node_modules/mixin-object/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/mixin-object/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> for-in</i><br> + <a href='./modules/hardware/network/node_modules/mixin-object/node_modules/for-in/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/mixin-object/node_modules/for-in/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/mixin-object/node_modules/for-in/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/mixin-object/node_modules/for-in/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/mixin-object/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/mixin-object/README.md'>README.md</a><br> +<i> mkdirp</i><br> + <a href='./modules/hardware/network/node_modules/mkdirp/.travis.yml'>.travis.yml</a><br> +<i> bin</i><br> + <a href='./modules/hardware/network/node_modules/mkdirp/bin/cmd.js'>cmd.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/bin/usage.txt'>usage.txt</a><br> +<i> examples</i><br> + <a href='./modules/hardware/network/node_modules/mkdirp/examples/pow.js'>pow.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> minimist</i><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/.travis.yml'>.travis.yml</a><br> +<i> example</i><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/example/parse.js'>parse.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/readme.markdown'>readme.markdown</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/dash.js'>dash.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/default_bool.js'>default_bool.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/dotted.js'>dotted.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/long.js'>long.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/parse.js'>parse.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js'>parse_modified.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/short.js'>short.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/whitespace.js'>whitespace.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/readme.markdown'>readme.markdown</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/chmod.js'>chmod.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/clobber.js'>clobber.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/mkdirp.js'>mkdirp.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/opts_fs.js'>opts_fs.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/opts_fs_sync.js'>opts_fs_sync.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/perm.js'>perm.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/perm_sync.js'>perm_sync.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/race.js'>race.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/rel.js'>rel.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/return.js'>return.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/return_sync.js'>return_sync.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/root.js'>root.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/sync.js'>sync.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/umask.js'>umask.js</a><br> + <a href='./modules/hardware/network/node_modules/mkdirp/test/umask_sync.js'>umask_sync.js</a><br> +<i> ms</i><br> + <a href='./modules/hardware/network/node_modules/ms/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/ms/license.md'>license.md</a><br> + <a href='./modules/hardware/network/node_modules/ms/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ms/readme.md'>readme.md</a><br> +<i> mute-stream</i><br> +<i> .nyc_output</i><br> + <a href='./modules/hardware/network/node_modules/mute-stream/.nyc_output/33508.json'>33508.json</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/.nyc_output/33510.json'>33510.json</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/.travis.yml'>.travis.yml</a><br> +<i> coverage</i><br> +<i> lcov-report</i><br> + <a href='./modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/base.css'>base.css</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/index.html'>index.html</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/prettify.css'>prettify.css</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/prettify.js'>prettify.js</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/sort-arrow-sprite.png'>sort-arrow-sprite.png</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/sorter.js'>sorter.js</a><br> +<i> __root__</i><br> + <a href='./modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/__root__/index.html'>index.html</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/__root__/mute.js.html'>mute.js.html</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/coverage/lcov.info'>lcov.info</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/mute.js'>mute.js</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/mute-stream/README.md'>README.md</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/mute-stream/test/basic.js'>basic.js</a><br> +<i> nan</i><br> + <a href='./modules/hardware/network/node_modules/nan/CHANGELOG.md'>CHANGELOG.md</a><br> +<i> doc</i><br> + <a href='./modules/hardware/network/node_modules/nan/doc/asyncworker.md'>asyncworker.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/buffers.md'>buffers.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/callback.md'>callback.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/converters.md'>converters.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/errors.md'>errors.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/json.md'>json.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/maybe_types.md'>maybe_types.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/methods.md'>methods.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/new.md'>new.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/node_misc.md'>node_misc.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/object_wrappers.md'>object_wrappers.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/persistent.md'>persistent.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/scopes.md'>scopes.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/script.md'>script.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/string_bytes.md'>string_bytes.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/v8_internals.md'>v8_internals.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/doc/v8_misc.md'>v8_misc.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/include_dirs.js'>include_dirs.js</a><br> + <a href='./modules/hardware/network/node_modules/nan/LICENSE.md'>LICENSE.md</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan.h'>nan.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_callbacks.h'>nan_callbacks.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_callbacks_12_inl.h'>nan_callbacks_12_inl.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_callbacks_pre_12_inl.h'>nan_callbacks_pre_12_inl.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_converters.h'>nan_converters.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_converters_43_inl.h'>nan_converters_43_inl.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_converters_pre_43_inl.h'>nan_converters_pre_43_inl.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_define_own_property_helper.h'>nan_define_own_property_helper.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_implementation_12_inl.h'>nan_implementation_12_inl.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_implementation_pre_12_inl.h'>nan_implementation_pre_12_inl.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_json.h'>nan_json.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_maybe_43_inl.h'>nan_maybe_43_inl.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_maybe_pre_43_inl.h'>nan_maybe_pre_43_inl.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_new.h'>nan_new.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_object_wrap.h'>nan_object_wrap.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_persistent_12_inl.h'>nan_persistent_12_inl.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_persistent_pre_12_inl.h'>nan_persistent_pre_12_inl.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_private.h'>nan_private.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_string_bytes.h'>nan_string_bytes.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_typedarray_contents.h'>nan_typedarray_contents.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/nan_weak.h'>nan_weak.h</a><br> + <a href='./modules/hardware/network/node_modules/nan/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/nan/README.md'>README.md</a><br> +<i> tools</i><br> + <a href='./modules/hardware/network/node_modules/nan/tools/1to2.js'>1to2.js</a><br> + <a href='./modules/hardware/network/node_modules/nan/tools/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/nan/tools/README.md'>README.md</a><br> +<i> node-abi</i><br> + <a href='./modules/hardware/network/node_modules/node-abi/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/node-abi/CODE_OF_CONDUCT.md'>CODE_OF_CONDUCT.md</a><br> + <a href='./modules/hardware/network/node_modules/node-abi/CONTRIBUTING.md'>CONTRIBUTING.md</a><br> + <a href='./modules/hardware/network/node_modules/node-abi/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/node-abi/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/node-abi/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/node-abi/README.md'>README.md</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/node-abi/test/index.js'>index.js</a><br> +<i> noop-logger</i><br> + <a href='./modules/hardware/network/node_modules/noop-logger/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/noop-logger/circle.yml'>circle.yml</a><br> + <a href='./modules/hardware/network/node_modules/noop-logger/History.md'>History.md</a><br> +<i> lib</i><br> + <a href='./modules/hardware/network/node_modules/noop-logger/lib/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/noop-logger/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/noop-logger/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/noop-logger/Readme.md'>Readme.md</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/noop-logger/test/index.js'>index.js</a><br> +<i> npmlog</i><br> + <a href='./modules/hardware/network/node_modules/npmlog/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/npmlog/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/npmlog/log.js'>log.js</a><br> + <a href='./modules/hardware/network/node_modules/npmlog/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/npmlog/README.md'>README.md</a><br> +<i> number-is-nan</i><br> + <a href='./modules/hardware/network/node_modules/number-is-nan/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/number-is-nan/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/number-is-nan/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/number-is-nan/readme.md'>readme.md</a><br> +<i> object-assign</i><br> + <a href='./modules/hardware/network/node_modules/object-assign/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/object-assign/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/object-assign/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/object-assign/readme.md'>readme.md</a><br> +<i> object-copy</i><br> + <a href='./modules/hardware/network/node_modules/object-copy/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> define-property</i><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/define-property/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/define-property/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/define-property/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/define-property/README.md'>README.md</a><br> +<i> is-accessor-descriptor</i><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-accessor-descriptor/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-accessor-descriptor/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-accessor-descriptor/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-accessor-descriptor/README.md'>README.md</a><br> +<i> is-data-descriptor</i><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-data-descriptor/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-data-descriptor/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-data-descriptor/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-data-descriptor/README.md'>README.md</a><br> +<i> is-descriptor</i><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/object-copy/package.json'>package.json</a><br> +<i> object-visit</i><br> + <a href='./modules/hardware/network/node_modules/object-visit/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/object-visit/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/object-visit/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/object-visit/README.md'>README.md</a><br> +<i> once</i><br> + <a href='./modules/hardware/network/node_modules/once/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/once/once.js'>once.js</a><br> + <a href='./modules/hardware/network/node_modules/once/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/once/README.md'>README.md</a><br> +<i> os-homedir</i><br> + <a href='./modules/hardware/network/node_modules/os-homedir/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/os-homedir/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/os-homedir/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/os-homedir/readme.md'>readme.md</a><br> +<i> parser-byte-length</i><br> + <a href='./modules/hardware/network/node_modules/parser-byte-length/byte-length.js'>byte-length.js</a><br> + <a href='./modules/hardware/network/node_modules/parser-byte-length/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/parser-byte-length/README.md'>README.md</a><br> +<i> parser-cctalk</i><br> + <a href='./modules/hardware/network/node_modules/parser-cctalk/cctalk.js'>cctalk.js</a><br> + <a href='./modules/hardware/network/node_modules/parser-cctalk/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/parser-cctalk/README.md'>README.md</a><br> +<i> parser-delimiter</i><br> + <a href='./modules/hardware/network/node_modules/parser-delimiter/delimiter.js'>delimiter.js</a><br> + <a href='./modules/hardware/network/node_modules/parser-delimiter/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/parser-delimiter/README.md'>README.md</a><br> +<i> parser-readline</i><br> + <a href='./modules/hardware/network/node_modules/parser-readline/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/parser-readline/readline.js'>readline.js</a><br> + <a href='./modules/hardware/network/node_modules/parser-readline/README.md'>README.md</a><br> +<i> parser-ready</i><br> + <a href='./modules/hardware/network/node_modules/parser-ready/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/parser-ready/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/parser-ready/ready.js'>ready.js</a><br> +<i> parser-regex</i><br> + <a href='./modules/hardware/network/node_modules/parser-regex/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/parser-regex/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/parser-regex/regex.js'>regex.js</a><br> +<i> pointer-symbol</i><br> + <a href='./modules/hardware/network/node_modules/pointer-symbol/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/pointer-symbol/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/pointer-symbol/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/pointer-symbol/README.md'>README.md</a><br> +<i> prebuild-install</i><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/appveyor.yml'>appveyor.yml</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/bin.js'>bin.js</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/CONTRIBUTING.md'>CONTRIBUTING.md</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/download.js'>download.js</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/error.js'>error.js</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/help.txt'>help.txt</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/log.js'>log.js</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/rc.js'>rc.js</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/prebuild-install/util.js'>util.js</a><br> +<i> process-nextick-args</i><br> + <a href='./modules/hardware/network/node_modules/process-nextick-args/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/process-nextick-args/license.md'>license.md</a><br> + <a href='./modules/hardware/network/node_modules/process-nextick-args/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/process-nextick-args/readme.md'>readme.md</a><br> +<i> promirepl</i><br> + <a href='./modules/hardware/network/node_modules/promirepl/.npmignore'>.npmignore</a><br> +<i> bin</i><br> + <a href='./modules/hardware/network/node_modules/promirepl/bin/prominode.js'>prominode.js</a><br> + <a href='./modules/hardware/network/node_modules/promirepl/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/promirepl/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/promirepl/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/promirepl/README.md'>README.md</a><br> +<i> prompt-actions</i><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> debug</i><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/.coveralls.yml'>.coveralls.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/.eslintrc'>.eslintrc</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/component.json'>component.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/karma.conf.js'>karma.conf.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/README.md'>README.md</a><br> +<i> src</i><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/src/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/src/debug.js'>debug.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/src/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/src/inspector-log.js'>inspector-log.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/node_modules/debug/src/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-actions/README.md'>README.md</a><br> +<i> prompt-base</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/changelog.md'>changelog.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> ansi-regex</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/ansi-regex/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/ansi-regex/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/ansi-regex/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/ansi-regex/readme.md'>readme.md</a><br> +<i> choices-separator</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> debug</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/.coveralls.yml'>.coveralls.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/.eslintrc'>.eslintrc</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/component.json'>component.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/karma.conf.js'>karma.conf.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/README.md'>README.md</a><br> +<i> src</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/src/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/src/debug.js'>debug.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/src/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/src/inspector-log.js'>inspector-log.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/src/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/README.md'>README.md</a><br> +<i> is-accessor-descriptor</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/README.md'>README.md</a><br> +<i> is-data-descriptor</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/README.md'>README.md</a><br> +<i> is-fullwidth-code-point</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-fullwidth-code-point/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-fullwidth-code-point/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-fullwidth-code-point/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/is-fullwidth-code-point/readme.md'>readme.md</a><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/kind-of/README.md'>README.md</a><br> +<i> prompt-choices</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/index.js'>index.js</a><br> +<i> lib</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/lib/choice.js'>choice.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/lib/utils.js'>utils.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> clone-deep</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/clone-deep/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/clone-deep/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/clone-deep/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/clone-deep/README.md'>README.md</a><br> +<i> define-property</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/define-property/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/define-property/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/define-property/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/define-property/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/define-property/README.md'>README.md</a><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/kind-of/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/README.md'>README.md</a><br> +<i> prompt-question</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-question/index.js'>index.js</a><br> +<i> lib</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-question/lib/utils.js'>utils.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-question/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-question/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/prompt-question/README.md'>README.md</a><br> +<i> readline-ui</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> debug</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/.coveralls.yml'>.coveralls.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/.eslintrc'>.eslintrc</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/component.json'>component.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/karma.conf.js'>karma.conf.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/README.md'>README.md</a><br> +<i> src</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/src/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/src/debug.js'>debug.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/src/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/src/inspector-log.js'>inspector-log.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/src/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/README.md'>README.md</a><br> +<i> readline-utils</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> is-number</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/is-number/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/is-number/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/is-number/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/is-number/README.md'>README.md</a><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/README.md'>README.md</a><br> +<i> shallow-clone</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/node_modules/kind-of/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/README.md'>README.md</a><br> +<i> static-extend</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> define-property</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/define-property/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/define-property/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/define-property/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/define-property/README.md'>README.md</a><br> +<i> is-descriptor</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/is-descriptor/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/is-descriptor/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/is-descriptor/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/is-descriptor/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/package.json'>package.json</a><br> +<i> string-width</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/string-width/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/string-width/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/string-width/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/string-width/readme.md'>readme.md</a><br> +<i> strip-ansi</i><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/strip-ansi/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/strip-ansi/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/strip-ansi/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/node_modules/strip-ansi/readme.md'>readme.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-base/README.md'>README.md</a><br> +<i> prompt-checkbox</i><br> +<i> node_modules</i><br> +<i> debug</i><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/.coveralls.yml'>.coveralls.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/.eslintrc'>.eslintrc</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/component.json'>component.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/karma.conf.js'>karma.conf.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/README.md'>README.md</a><br> +<i> src</i><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/src/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/src/debug.js'>debug.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/src/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/src/inspector-log.js'>inspector-log.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/src/node.js'>node.js</a><br> +<i> prompt-choices</i><br> +<i> node_modules</i><br> +<i> clone-deep</i><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/clone-deep/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/clone-deep/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/clone-deep/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/clone-deep/README.md'>README.md</a><br> +<i> define-property</i><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/define-property/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/define-property/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/define-property/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/define-property/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/define-property/README.md'>README.md</a><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/kind-of/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/kind-of/README.md'>README.md</a><br> +<i> shallow-clone</i><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/shallow-clone/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/shallow-clone/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/shallow-clone/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-choices/node_modules/shallow-clone/README.md'>README.md</a><br> +<i> prompt-list</i><br> + <a href='./modules/hardware/network/node_modules/prompt-list/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> debug</i><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/.coveralls.yml'>.coveralls.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/.eslintrc'>.eslintrc</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/component.json'>component.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/karma.conf.js'>karma.conf.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/README.md'>README.md</a><br> +<i> src</i><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/src/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/src/debug.js'>debug.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/src/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/src/inspector-log.js'>inspector-log.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/debug/src/node.js'>node.js</a><br> +<i> prompt-checkbox</i><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/prompt-checkbox/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/prompt-checkbox/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/prompt-checkbox/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/prompt-checkbox/README.md'>README.md</a><br> +<i> prompt-radio</i><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/prompt-radio/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/prompt-radio/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/prompt-radio/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/node_modules/prompt-radio/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-list/README.md'>README.md</a><br> +<i> prompt-question</i><br> +<i> node_modules</i><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/prompt-question/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-question/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-question/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-question/node_modules/kind-of/README.md'>README.md</a><br> +<i> prompt-radio</i><br> +<i> node_modules</i><br> +<i> debug</i><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/.coveralls.yml'>.coveralls.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/.eslintrc'>.eslintrc</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/component.json'>component.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/karma.conf.js'>karma.conf.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/README.md'>README.md</a><br> +<i> src</i><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/src/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/src/debug.js'>debug.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/src/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/src/inspector-log.js'>inspector-log.js</a><br> + <a href='./modules/hardware/network/node_modules/prompt-radio/node_modules/debug/src/node.js'>node.js</a><br> +<i> pump</i><br> + <a href='./modules/hardware/network/node_modules/pump/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/pump/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/pump/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/pump/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/pump/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/pump/test-browser.js'>test-browser.js</a><br> + <a href='./modules/hardware/network/node_modules/pump/test-node.js'>test-node.js</a><br> +<i> radio-symbol</i><br> + <a href='./modules/hardware/network/node_modules/radio-symbol/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/radio-symbol/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/radio-symbol/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/radio-symbol/README.md'>README.md</a><br> +<i> rc</i><br> + <a href='./modules/hardware/network/node_modules/rc/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/rc/cli.js'>cli.js</a><br> + <a href='./modules/hardware/network/node_modules/rc/index.js'>index.js</a><br> +<i> lib</i><br> + <a href='./modules/hardware/network/node_modules/rc/lib/utils.js'>utils.js</a><br> + <a href='./modules/hardware/network/node_modules/rc/LICENSE.APACHE2'>LICENSE.APACHE2</a><br> + <a href='./modules/hardware/network/node_modules/rc/LICENSE.BSD'>LICENSE.BSD</a><br> + <a href='./modules/hardware/network/node_modules/rc/LICENSE.MIT'>LICENSE.MIT</a><br> + <a href='./modules/hardware/network/node_modules/rc/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/rc/README.md'>README.md</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/rc/test/ini.js'>ini.js</a><br> + <a href='./modules/hardware/network/node_modules/rc/test/nested-env-vars.js'>nested-env-vars.js</a><br> + <a href='./modules/hardware/network/node_modules/rc/test/test.js'>test.js</a><br> +<i> readable-stream</i><br> + <a href='./modules/hardware/network/node_modules/readable-stream/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/CONTRIBUTING.md'>CONTRIBUTING.md</a><br> +<i> doc</i><br> +<i> wg-meetings</i><br> + <a href='./modules/hardware/network/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md'>2015-01-30.md</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/duplex-browser.js'>duplex-browser.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/duplex.js'>duplex.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/GOVERNANCE.md'>GOVERNANCE.md</a><br> +<i> lib</i><br> +<i> internal</i><br> +<i> streams</i><br> + <a href='./modules/hardware/network/node_modules/readable-stream/lib/internal/streams/BufferList.js'>BufferList.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/lib/internal/streams/destroy.js'>destroy.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/lib/internal/streams/stream-browser.js'>stream-browser.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/lib/internal/streams/stream.js'>stream.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/lib/_stream_duplex.js'>_stream_duplex.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/lib/_stream_passthrough.js'>_stream_passthrough.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/lib/_stream_readable.js'>_stream_readable.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/lib/_stream_transform.js'>_stream_transform.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/lib/_stream_writable.js'>_stream_writable.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/passthrough.js'>passthrough.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/readable-browser.js'>readable-browser.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/readable.js'>readable.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/transform.js'>transform.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/writable-browser.js'>writable-browser.js</a><br> + <a href='./modules/hardware/network/node_modules/readable-stream/writable.js'>writable.js</a><br> +<i> readline-ui</i><br> +<i> node_modules</i><br> +<i> ansi-regex</i><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/ansi-regex/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/ansi-regex/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/ansi-regex/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/ansi-regex/readme.md'>readme.md</a><br> +<i> debug</i><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/.coveralls.yml'>.coveralls.yml</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/.eslintrc'>.eslintrc</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/component.json'>component.json</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/karma.conf.js'>karma.conf.js</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/README.md'>README.md</a><br> +<i> src</i><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/src/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/src/debug.js'>debug.js</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/src/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/src/inspector-log.js'>inspector-log.js</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/debug/src/node.js'>node.js</a><br> +<i> is-fullwidth-code-point</i><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/is-fullwidth-code-point/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/is-fullwidth-code-point/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/is-fullwidth-code-point/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/is-fullwidth-code-point/readme.md'>readme.md</a><br> +<i> string-width</i><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/string-width/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/string-width/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/string-width/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/string-width/readme.md'>readme.md</a><br> +<i> strip-ansi</i><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/strip-ansi/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/strip-ansi/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/strip-ansi/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/readline-ui/node_modules/strip-ansi/readme.md'>readme.md</a><br> +<i> readline-utils</i><br> +<i> node_modules</i><br> +<i> is-number</i><br> + <a href='./modules/hardware/network/node_modules/readline-utils/node_modules/is-number/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/readline-utils/node_modules/is-number/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/readline-utils/node_modules/is-number/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/readline-utils/node_modules/is-number/README.md'>README.md</a><br> +<i> safe-buffer</i><br> + <a href='./modules/hardware/network/node_modules/safe-buffer/index.d.ts'>index.d.ts</a><br> + <a href='./modules/hardware/network/node_modules/safe-buffer/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/safe-buffer/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/safe-buffer/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/safe-buffer/README.md'>README.md</a><br> +<i> semver</i><br> +<i> bin</i><br> + <a href='./modules/hardware/network/node_modules/semver/bin/semver'>semver</a><br> + <a href='./modules/hardware/network/node_modules/semver/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/semver/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/semver/range.bnf'>range.bnf</a><br> + <a href='./modules/hardware/network/node_modules/semver/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/semver/semver.js'>semver.js</a><br> +<i> serialport</i><br> + <a href='./modules/hardware/network/node_modules/serialport/.jsdoc.json'>.jsdoc.json</a><br> +<i> bin</i><br> + <a href='./modules/hardware/network/node_modules/serialport/bin/echo.js'>echo.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/bin/find-arduino.js'>find-arduino.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/bin/list.js'>list.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/bin/repl.js'>repl.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/bin/terminal.js'>terminal.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/bin/write-a-lot.js'>write-a-lot.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/binding.gyp'>binding.gyp</a><br> +<i> build</i><br> +<i> Release</i><br> + <a href='./modules/hardware/network/node_modules/serialport/build/Release/serialport.node'>serialport.node</a><br> + <a href='./modules/hardware/network/node_modules/serialport/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/serialport/codecov.yml'>codecov.yml</a><br> +<i> lib</i><br> +<i> bindings</i><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/bindings/auto-detect.js'>auto-detect.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/bindings/base.js'>base.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/bindings/darwin.js'>darwin.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/bindings/linux-list.js'>linux-list.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/bindings/linux.js'>linux.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/bindings/mock.js'>mock.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/bindings/poller.js'>poller.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/bindings/unix-read.js'>unix-read.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/bindings/unix-write.js'>unix-write.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/bindings/win32-sn-parser.js'>win32-sn-parser.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/bindings/win32.js'>win32.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/parsers.js'>parsers.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/serialport.js'>serialport.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/lib/util.js'>util.js</a><br> + <a href='./modules/hardware/network/node_modules/serialport/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/serialport/package.json'>package.json</a><br> +<i> prebuilds</i><br> + <a href='./modules/hardware/network/node_modules/serialport/prebuilds/serialport-v6.1.1-node-v48-darwin-x64.tar.gz'>serialport-v6.1.1-node-v48-darwin-x64.tar.gz</a><br> + <a href='./modules/hardware/network/node_modules/serialport/README.md'>README.md</a><br> +<i> src</i><br> + <a href='./modules/hardware/network/node_modules/serialport/src/darwin_list.cpp'>darwin_list.cpp</a><br> + <a href='./modules/hardware/network/node_modules/serialport/src/darwin_list.h'>darwin_list.h</a><br> + <a href='./modules/hardware/network/node_modules/serialport/src/poller.cpp'>poller.cpp</a><br> + <a href='./modules/hardware/network/node_modules/serialport/src/poller.h'>poller.h</a><br> + <a href='./modules/hardware/network/node_modules/serialport/src/serialport.cpp'>serialport.cpp</a><br> + <a href='./modules/hardware/network/node_modules/serialport/src/serialport.h'>serialport.h</a><br> + <a href='./modules/hardware/network/node_modules/serialport/src/serialport_linux.cpp'>serialport_linux.cpp</a><br> + <a href='./modules/hardware/network/node_modules/serialport/src/serialport_linux.h'>serialport_linux.h</a><br> + <a href='./modules/hardware/network/node_modules/serialport/src/serialport_unix.cpp'>serialport_unix.cpp</a><br> + <a href='./modules/hardware/network/node_modules/serialport/src/serialport_unix.h'>serialport_unix.h</a><br> + <a href='./modules/hardware/network/node_modules/serialport/src/serialport_win.cpp'>serialport_win.cpp</a><br> + <a href='./modules/hardware/network/node_modules/serialport/src/serialport_win.h'>serialport_win.h</a><br> + <a href='./modules/hardware/network/node_modules/serialport/test.js'>test.js</a><br> +<i> set-blocking</i><br> + <a href='./modules/hardware/network/node_modules/set-blocking/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/set-blocking/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/set-blocking/LICENSE.txt'>LICENSE.txt</a><br> + <a href='./modules/hardware/network/node_modules/set-blocking/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/set-blocking/README.md'>README.md</a><br> +<i> set-getter</i><br> + <a href='./modules/hardware/network/node_modules/set-getter/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/set-getter/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/set-getter/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/set-getter/README.md'>README.md</a><br> +<i> set-value</i><br> + <a href='./modules/hardware/network/node_modules/set-value/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/set-value/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/set-value/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/set-value/README.md'>README.md</a><br> +<i> shallow-clone</i><br> + <a href='./modules/hardware/network/node_modules/shallow-clone/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/shallow-clone/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/shallow-clone/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/shallow-clone/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/shallow-clone/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/shallow-clone/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/shallow-clone/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/shallow-clone/README.md'>README.md</a><br> +<i> signal-exit</i><br> + <a href='./modules/hardware/network/node_modules/signal-exit/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/signal-exit/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/signal-exit/LICENSE.txt'>LICENSE.txt</a><br> + <a href='./modules/hardware/network/node_modules/signal-exit/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/signal-exit/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/signal-exit/signals.js'>signals.js</a><br> +<i> simple-concat</i><br> + <a href='./modules/hardware/network/node_modules/simple-concat/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/simple-concat/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/simple-concat/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/simple-concat/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/simple-concat/README.md'>README.md</a><br> +<i> test</i><br> + <a href='./modules/hardware/network/node_modules/simple-concat/test/basic.js'>basic.js</a><br> +<i> simple-get</i><br> + <a href='./modules/hardware/network/node_modules/simple-get/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/simple-get/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/simple-get/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/simple-get/README.md'>README.md</a><br> +<i> static-extend</i><br> +<i> node_modules</i><br> +<i> is-accessor-descriptor</i><br> + <a href='./modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> kind-of</i><br> + <a href='./modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/README.md'>README.md</a><br> +<i> string-width</i><br> + <a href='./modules/hardware/network/node_modules/string-width/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/string-width/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/string-width/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/string-width/readme.md'>readme.md</a><br> +<i> string_decoder</i><br> + <a href='./modules/hardware/network/node_modules/string_decoder/.travis.yml'>.travis.yml</a><br> +<i> lib</i><br> + <a href='./modules/hardware/network/node_modules/string_decoder/lib/string_decoder.js'>string_decoder.js</a><br> + <a href='./modules/hardware/network/node_modules/string_decoder/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/string_decoder/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/string_decoder/README.md'>README.md</a><br> +<i> strip-ansi</i><br> + <a href='./modules/hardware/network/node_modules/strip-ansi/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/strip-ansi/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/strip-ansi/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/strip-ansi/readme.md'>readme.md</a><br> +<i> strip-color</i><br> + <a href='./modules/hardware/network/node_modules/strip-color/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/strip-color/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/strip-color/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/strip-color/README.md'>README.md</a><br> +<i> strip-json-comments</i><br> + <a href='./modules/hardware/network/node_modules/strip-json-comments/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/strip-json-comments/license'>license</a><br> + <a href='./modules/hardware/network/node_modules/strip-json-comments/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/strip-json-comments/readme.md'>readme.md</a><br> +<i> success-symbol</i><br> + <a href='./modules/hardware/network/node_modules/success-symbol/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/success-symbol/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/success-symbol/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/success-symbol/README.md'>README.md</a><br> +<i> tar-fs</i><br> + <a href='./modules/hardware/network/node_modules/tar-fs/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> pump</i><br> + <a href='./modules/hardware/network/node_modules/tar-fs/node_modules/pump/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/node_modules/pump/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/node_modules/pump/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/node_modules/pump/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/node_modules/pump/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/node_modules/pump/test-browser.js'>test-browser.js</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/node_modules/pump/test.js'>test.js</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/README.md'>README.md</a><br> +<i> test</i><br> +<i> fixtures</i><br> +<i> a</i><br> + <a href='./modules/hardware/network/node_modules/tar-fs/test/fixtures/a/hello.txt'>hello.txt</a><br> +<i> b</i><br> +<i> a</i><br> + <a href='./modules/hardware/network/node_modules/tar-fs/test/fixtures/b/a/test.txt'>test.txt</a><br> +<i> d</i><br> + <a href='./modules/hardware/network/node_modules/tar-fs/test/fixtures/d/file1'>file1</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/test/fixtures/d/file2'>file2</a><br> +<i> sub-dir</i><br> + <a href='./modules/hardware/network/node_modules/tar-fs/test/fixtures/d/sub-dir/file5'>file5</a><br> +<i> sub-files</i><br> + <a href='./modules/hardware/network/node_modules/tar-fs/test/fixtures/d/sub-files/file3'>file3</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/test/fixtures/d/sub-files/file4'>file4</a><br> +<i> e</i><br> +<i> directory</i><br> + <a href='./modules/hardware/network/node_modules/tar-fs/test/fixtures/e/directory/.ignore'>.ignore</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/test/fixtures/e/file'>file</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/test/fixtures/invalid.tar'>invalid.tar</a><br> + <a href='./modules/hardware/network/node_modules/tar-fs/test/index.js'>index.js</a><br> +<i> tar-stream</i><br> + <a href='./modules/hardware/network/node_modules/tar-stream/extract.js'>extract.js</a><br> + <a href='./modules/hardware/network/node_modules/tar-stream/headers.js'>headers.js</a><br> + <a href='./modules/hardware/network/node_modules/tar-stream/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/tar-stream/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/tar-stream/pack.js'>pack.js</a><br> + <a href='./modules/hardware/network/node_modules/tar-stream/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/tar-stream/README.md'>README.md</a><br> +<i> terminal-paginator</i><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> debug</i><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/.coveralls.yml'>.coveralls.yml</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/.eslintrc'>.eslintrc</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/CHANGELOG.md'>CHANGELOG.md</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/component.json'>component.json</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/karma.conf.js'>karma.conf.js</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/README.md'>README.md</a><br> +<i> src</i><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/src/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/src/debug.js'>debug.js</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/src/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/src/inspector-log.js'>inspector-log.js</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/src/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/terminal-paginator/README.md'>README.md</a><br> +<i> time-stamp</i><br> + <a href='./modules/hardware/network/node_modules/time-stamp/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/time-stamp/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/time-stamp/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/time-stamp/README.md'>README.md</a><br> +<i> to-buffer</i><br> + <a href='./modules/hardware/network/node_modules/to-buffer/.travis.yml'>.travis.yml</a><br> + <a href='./modules/hardware/network/node_modules/to-buffer/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/to-buffer/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/to-buffer/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/to-buffer/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/to-buffer/test.js'>test.js</a><br> +<i> to-object-path</i><br> + <a href='./modules/hardware/network/node_modules/to-object-path/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/to-object-path/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/to-object-path/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/to-object-path/README.md'>README.md</a><br> +<i> toggle-array</i><br> + <a href='./modules/hardware/network/node_modules/toggle-array/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/toggle-array/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/toggle-array/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/toggle-array/README.md'>README.md</a><br> +<i> tunnel-agent</i><br> + <a href='./modules/hardware/network/node_modules/tunnel-agent/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/tunnel-agent/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/tunnel-agent/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/tunnel-agent/README.md'>README.md</a><br> +<i> util-deprecate</i><br> + <a href='./modules/hardware/network/node_modules/util-deprecate/browser.js'>browser.js</a><br> + <a href='./modules/hardware/network/node_modules/util-deprecate/History.md'>History.md</a><br> + <a href='./modules/hardware/network/node_modules/util-deprecate/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/util-deprecate/node.js'>node.js</a><br> + <a href='./modules/hardware/network/node_modules/util-deprecate/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/util-deprecate/README.md'>README.md</a><br> +<i> warning-symbol</i><br> + <a href='./modules/hardware/network/node_modules/warning-symbol/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/warning-symbol/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/warning-symbol/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/warning-symbol/README.md'>README.md</a><br> +<i> which-pm-runs</i><br> + <a href='./modules/hardware/network/node_modules/which-pm-runs/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/which-pm-runs/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/which-pm-runs/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/which-pm-runs/README.md'>README.md</a><br> +<i> wide-align</i><br> + <a href='./modules/hardware/network/node_modules/wide-align/align.js'>align.js</a><br> + <a href='./modules/hardware/network/node_modules/wide-align/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/wide-align/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/wide-align/README.md'>README.md</a><br> +<i> window-size</i><br> + <a href='./modules/hardware/network/node_modules/window-size/cli.js'>cli.js</a><br> + <a href='./modules/hardware/network/node_modules/window-size/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/window-size/LICENSE'>LICENSE</a><br> +<i> node_modules</i><br> +<i> is-number</i><br> + <a href='./modules/hardware/network/node_modules/window-size/node_modules/is-number/index.js'>index.js</a><br> + <a href='./modules/hardware/network/node_modules/window-size/node_modules/is-number/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/window-size/node_modules/is-number/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/window-size/node_modules/is-number/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/window-size/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/window-size/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/window-size/utils.js'>utils.js</a><br> +<i> wrappy</i><br> + <a href='./modules/hardware/network/node_modules/wrappy/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/wrappy/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/wrappy/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/wrappy/wrappy.js'>wrappy.js</a><br> +<i> ws</i><br> + <a href='./modules/hardware/network/node_modules/ws/index.js'>index.js</a><br> +<i> lib</i><br> + <a href='./modules/hardware/network/node_modules/ws/lib/.DS_Store'>.DS_Store</a><br> + <a href='./modules/hardware/network/node_modules/ws/lib/buffer-util.js'>buffer-util.js</a><br> + <a href='./modules/hardware/network/node_modules/ws/lib/constants.js'>constants.js</a><br> + <a href='./modules/hardware/network/node_modules/ws/lib/event-target.js'>event-target.js</a><br> + <a href='./modules/hardware/network/node_modules/ws/lib/extension.js'>extension.js</a><br> + <a href='./modules/hardware/network/node_modules/ws/lib/permessage-deflate.js'>permessage-deflate.js</a><br> + <a href='./modules/hardware/network/node_modules/ws/lib/receiver.js'>receiver.js</a><br> + <a href='./modules/hardware/network/node_modules/ws/lib/sender.js'>sender.js</a><br> + <a href='./modules/hardware/network/node_modules/ws/lib/validation.js'>validation.js</a><br> + <a href='./modules/hardware/network/node_modules/ws/lib/websocket-server.js'>websocket-server.js</a><br> + <a href='./modules/hardware/network/node_modules/ws/lib/websocket.js'>websocket.js</a><br> + <a href='./modules/hardware/network/node_modules/ws/LICENSE'>LICENSE</a><br> + <a href='./modules/hardware/network/node_modules/ws/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/ws/README.md'>README.md</a><br> +<i> xtend</i><br> + <a href='./modules/hardware/network/node_modules/xtend/.jshintrc'>.jshintrc</a><br> + <a href='./modules/hardware/network/node_modules/xtend/.npmignore'>.npmignore</a><br> + <a href='./modules/hardware/network/node_modules/xtend/immutable.js'>immutable.js</a><br> + <a href='./modules/hardware/network/node_modules/xtend/LICENCE'>LICENCE</a><br> + <a href='./modules/hardware/network/node_modules/xtend/Makefile'>Makefile</a><br> + <a href='./modules/hardware/network/node_modules/xtend/mutable.js'>mutable.js</a><br> + <a href='./modules/hardware/network/node_modules/xtend/package.json'>package.json</a><br> + <a href='./modules/hardware/network/node_modules/xtend/README.md'>README.md</a><br> + <a href='./modules/hardware/network/node_modules/xtend/test.js'>test.js</a><br> <i> image</i><br> <a href='./modules/image/boundingbox'>boundingbox</a><br> <a href='./modules/image/color%20separation'>color separation</a><br> @@ -139,6 +1759,14 @@ <a href='./modules/module/create'>create</a><br> <a href='./modules/module/delete'>delete</a><br> <a href='./modules/module/move'>move</a><br> +<i> motion</i><br> + <a href='./modules/motion/gcodeParser'>gcodeParser</a><br> + <a href='./modules/motion/machineController'>machineController</a><br> + <a href='./modules/motion/planner'>planner</a><br> + <a href='./modules/motion/planner-ye-olden'>planner-ye-olden</a><br> + <a href='./modules/motion/segments'>segments</a><br> + <a href='./modules/motion/textBlockIn'>textBlockIn</a><br> + <a href='./modules/motion/textLineIn'>textLineIn</a><br> <i> network</i><br> <a href='./modules/network/apa'>apa</a><br> <i> object</i><br> @@ -174,6 +1802,8 @@ <a href='./modules/toolpath/formats/dxf'>dxf</a><br> <a href='./modules/toolpath/formats/g-code'>g-code</a><br> <i> machines</i><br> +<i> laser cutter</i><br> + <a href='./modules/toolpath/machines/laser%20cutter/Epilog'>Epilog</a><br> <i> Roland</i><br> <i> milling</i><br> <a href='./modules/toolpath/machines/Roland/milling/MDX-20'>MDX-20</a><br> @@ -181,8 +1811,6 @@ <i> vinyl cutter</i><br> <a href='./modules/toolpath/machines/Roland/vinyl%20cutter/GX-24'>GX-24</a><br> <a href='./modules/toolpath/machines/ShopBot'>ShopBot</a><br> -<i> laser cutter</i><br> - <a href='./modules/toolpath/machines/laser%20cutter/Epilog'>Epilog</a><br> <a href='./modules/toolpath/view'>view</a><br> <i> ui</i><br> <a href='./modules/ui/bar%20graph'>bar graph</a><br> @@ -191,6 +1819,7 @@ <a href='./modules/ui/label'>label</a><br> <a href='./modules/ui/slider'>slider</a><br> <a href='./modules/ui/text%20window'>text window</a><br> + <a href='./planner-pre'>planner-pre</a><br> <i> programs</i><br> <i> frep</i><br> <a href='./programs/frep/gears'>gears</a><br> @@ -239,23 +1868,23 @@ <a href='./programs/processes/mill/raster/2D'>2D</a><br> <i> variable</i><br> <a href='./programs/variable/text%20variables'>text variables</a><br> + <a href='./README.md'>README.md</a><br> <i> scripts</i><br> <a href='./scripts/start%20mods%20server'>start mods server</a><br> <a href='./scripts/stop%20mods%20server'>stop mods server</a><br> <i> test</i><br> + <a href='./test/alien.png'>alien.png</a><br> <a href='./test/ATP.8E5.board.png'>ATP.8E5.board.png</a><br> <a href='./test/ATP.8E5.traces.png'>ATP.8E5.traces.png</a><br> + <a href='./test/cert.pem'>cert.pem</a><br> <a href='./test/David.png'>David.png</a><br> <a href='./test/David.small.png'>David.small.png</a><br> - <a href='./test/ML.jpg'>ML.jpg</a><br> - <a href='./test/ML.png'>ML.png</a><br> - <a href='./test/Suzanne.stl'>Suzanne.stl</a><br> - <a href='./test/alien.png'>alien.png</a><br> - <a href='./test/cert.pem'>cert.pem</a><br> <a href='./test/gradients.svg'>gradients.svg</a><br> <a href='./test/hsv.png'>hsv.png</a><br> <a href='./test/key.pem'>key.pem</a><br> <a href='./test/lines.png'>lines.png</a><br> + <a href='./test/ML.jpg'>ML.jpg</a><br> + <a href='./test/ML.png'>ML.png</a><br> <a href='./test/rhino.black.png'>rhino.black.png</a><br> <a href='./test/rhino.black.svg'>rhino.black.svg</a><br> <a href='./test/rhino.png'>rhino.png</a><br> @@ -270,6 +1899,7 @@ <a href='./test/shapes.svg'>shapes.svg</a><br> <a href='./test/sunset.jpg'>sunset.jpg</a><br> <a href='./test/sunset.png'>sunset.png</a><br> + <a href='./test/Suzanne.stl'>Suzanne.stl</a><br> <a href='./test/tall.png'>tall.png</a><br> <a href='./test/test.png'>test.png</a><br> <a href='./test/transparent.png'>transparent.png</a><br> diff --git a/modules/dev/log b/modules/dev/log index 082dd7ab6bb192a16899d38842771e0aa785b965..d76971484ceb54f2b8b7a2f26110a377e6970102 100644 --- a/modules/dev/log +++ b/modules/dev/log @@ -13,40 +13,85 @@ // closure // (function() { - // globals - var mod = {} - - // name - var name = 'event logger' - - var init = function(){ - mod.identifier.value = 'kx' - } - - var inputs = { - event: { - type: 'any', - event: function(evt) { - console.log(mod.identifier.value, ': ', evt.detail) - } - } - } - - var outputs = { - } - - var interface = function(div){ - mod.div = div - - mod.identifier = make_text_input(div, 'identifier', 12) - } - - return ({ - mod:mod, - name:name, - init:init, - inputs:inputs, - outputs:outputs, - interface:interface - }) -}()) + // globals + var mod = {} + + // name + var name = 'event logger' + + var init = function() { + mod.identifier.value = 'logger' + } + + var inputs = { + event: { + type: 'any', + event: function(evt) { + console.log(mod.identifier.value, ': ', JSON.parse(JSON.stringify(evt.detail))) + } + } + } + + var outputs = {} + + var interface = function(div) { + mod.div = div + + mod.identifier = make_text_input(div, 'identifier', 8) + } + + + /* + UI helpers + */ + function make_text_input(div, name, size) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + var input = document.createElement('input') + input.type = 'text' + input.size = size + div.appendChild(input) + + return input + } + + function make_button_input(div, text) { + div.appendChild(document.createElement('br')) + var button = document.createElement('button') + button.style.padding = mods.ui.padding + button.style.margin = 1 + button.appendChild(document.createTextNode(text)) + div.appendChild(button) + + return button + } + + function make_checkbox_input(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var checkbox = document.createElement('input') + checkbox.type = 'checkbox' + div.appendChild(checkbox) + + return checkbox + } + + function make_text_display(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var span = document.createElement('span') + span.innerHTML = '' + div.appendChild(span) + + return span + } + + return ({ + mod: mod, + name: name, + init: init, + inputs: inputs, + outputs: outputs, + interface: interface + }) +}()) \ No newline at end of file diff --git a/modules/hardware/demo_toolpath b/modules/hardware/demo_toolpath new file mode 100644 index 0000000000000000000000000000000000000000..df5e8978b69a3d56e373352417785a287ee21e76 --- /dev/null +++ b/modules/hardware/demo_toolpath @@ -0,0 +1,16578 @@ +// +// view toolpath +// +// Neil Gershenfeld +// (c) Massachusetts Institute of Technology 2016 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. +// +// todo: +// erase and update new path +// show depth info +// show size +// calculate camera far +// +// closure +// +(function() { + // + // module globals + // + var mod = {} + // + // name + // + var name = 'demo toolpath' + // + // initialization + // + var init = function() { + mod.path = [ + [ + [ + 72, + 72, -5 + ], + [ + 1782, + 72, -5 + ], + [ + 1782, + 1845, -5 + ], + [ + 72, + 1845, -5 + ], + [ + 72, + 72, -5 + ], + [ + 82, + 82, -5 + ], + [ + 352, + 82, -5 + ], + [ + 352, + 85, -5 + ], + [ + 349, + 88, -5 + ], + [ + 347, + 96, -5 + ], + [ + 347, + 116, -5 + ], + [ + 345, + 116, -5 + ], + [ + 338, + 120, -5 + ], + [ + 336, + 122, -5 + ], + [ + 332, + 129, -5 + ], + [ + 331, + 200, -5 + ], + [ + 335, + 207, -5 + ], + [ + 337, + 209, -5 + ], + [ + 344, + 213, -5 + ], + [ + 405, + 214, -5 + ], + [ + 412, + 210, -5 + ], + [ + 414, + 208, -5 + ], + [ + 416, + 206, -5 + ], + [ + 417, + 235, -5 + ], + [ + 414, + 235, -5 + ], + [ + 411, + 232, -5 + ], + [ + 403, + 230, -5 + ], + [ + 317, + 230, -5 + ], + [ + 310, + 234, -5 + ], + [ + 308, + 236, -5 + ], + [ + 304, + 243, -5 + ], + [ + 303, + 340, -5 + ], + [ + 307, + 347, -5 + ], + [ + 309, + 349, -5 + ], + [ + 316, + 353, -5 + ], + [ + 407, + 354, -5 + ], + [ + 414, + 350, -5 + ], + [ + 417, + 349, -5 + ], + [ + 417, + 417, -5 + ], + [ + 382, + 417, -5 + ], + [ + 375, + 412, -5 + ], + [ + 373, + 412, -5 + ], + [ + 313, + 411, -5 + ], + [ + 306, + 415, -5 + ], + [ + 304, + 417, -5 + ], + [ + 300, + 424, -5 + ], + [ + 299, + 464, -5 + ], + [ + 303, + 471, -5 + ], + [ + 305, + 473, -5 + ], + [ + 312, + 477, -5 + ], + [ + 373, + 478, -5 + ], + [ + 380, + 474, -5 + ], + [ + 384, + 472, -5 + ], + [ + 417, + 472, -5 + ], + [ + 417, + 540, -5 + ], + [ + 414, + 540, -5 + ], + [ + 411, + 537, -5 + ], + [ + 403, + 535, -5 + ], + [ + 317, + 535, -5 + ], + [ + 310, + 539, -5 + ], + [ + 308, + 541, -5 + ], + [ + 304, + 548, -5 + ], + [ + 302, + 570, -5 + ], + [ + 295, + 575, -5 + ], + [ + 291, + 582, -5 + ], + [ + 289, + 663, -5 + ], + [ + 286, + 663, -5 + ], + [ + 269, + 661, -5 + ], + [ + 269, + 549, -5 + ], + [ + 265, + 542, -5 + ], + [ + 263, + 540, -5 + ], + [ + 256, + 536, -5 + ], + [ + 237, + 534, -5 + ], + [ + 237, + 526, -5 + ], + [ + 258, + 526, -5 + ], + [ + 265, + 522, -5 + ], + [ + 267, + 520, -5 + ], + [ + 271, + 513, -5 + ], + [ + 272, + 472, -5 + ], + [ + 268, + 465, -5 + ], + [ + 266, + 463, -5 + ], + [ + 259, + 459, -5 + ], + [ + 199, + 458, -5 + ], + [ + 192, + 462, -5 + ], + [ + 190, + 464, -5 + ], + [ + 186, + 471, -5 + ], + [ + 182, + 481, -5 + ], + [ + 182, + 535, -5 + ], + [ + 164, + 535, -5 + ], + [ + 157, + 539, -5 + ], + [ + 155, + 541, -5 + ], + [ + 151, + 548, -5 + ], + [ + 150, + 644, -5 + ], + [ + 154, + 651, -5 + ], + [ + 156, + 653, -5 + ], + [ + 163, + 657, -5 + ], + [ + 214, + 659, -5 + ], + [ + 214, + 662, -5 + ], + [ + 196, + 662, -5 + ], + [ + 189, + 666, -5 + ], + [ + 187, + 668, -5 + ], + [ + 183, + 675, -5 + ], + [ + 182, + 771, -5 + ], + [ + 186, + 778, -5 + ], + [ + 188, + 780, -5 + ], + [ + 195, + 784, -5 + ], + [ + 214, + 786, -5 + ], + [ + 214, + 800, -5 + ], + [ + 139, + 800, -5 + ], + [ + 132, + 804, -5 + ], + [ + 130, + 806, -5 + ], + [ + 126, + 813, -5 + ], + [ + 124, + 823, -5 + ], + [ + 92, + 823, -5 + ], + [ + 85, + 827, -5 + ], + [ + 82, + 828, -5 + ], + [ + 82, + 82, -5 + ], + [ + 92, + 92, -5 + ], + [ + 337, + 92, -5 + ], + [ + 337, + 109, -5 + ], + [ + 329, + 115, -5 + ], + [ + 324, + 122, -5 + ], + [ + 321, + 133, -5 + ], + [ + 321, + 201, -5 + ], + [ + 327, + 213, -5 + ], + [ + 329, + 215, -5 + ], + [ + 333, + 219, -5 + ], + [ + 310, + 222, -5 + ], + [ + 301, + 229, -5 + ], + [ + 296, + 236, -5 + ], + [ + 293, + 247, -5 + ], + [ + 293, + 341, -5 + ], + [ + 299, + 353, -5 + ], + [ + 301, + 355, -5 + ], + [ + 309, + 361, -5 + ], + [ + 320, + 364, -5 + ], + [ + 407, + 364, -5 + ], + [ + 407, + 407, -5 + ], + [ + 385, + 407, -5 + ], + [ + 383, + 405, -5 + ], + [ + 371, + 401, -5 + ], + [ + 312, + 401, -5 + ], + [ + 300, + 407, -5 + ], + [ + 298, + 409, -5 + ], + [ + 292, + 417, -5 + ], + [ + 289, + 428, -5 + ], + [ + 289, + 465, -5 + ], + [ + 295, + 477, -5 + ], + [ + 297, + 479, -5 + ], + [ + 305, + 485, -5 + ], + [ + 316, + 488, -5 + ], + [ + 374, + 488, -5 + ], + [ + 389, + 482, -5 + ], + [ + 407, + 482, -5 + ], + [ + 407, + 525, -5 + ], + [ + 316, + 525, -5 + ], + [ + 304, + 531, -5 + ], + [ + 302, + 533, -5 + ], + [ + 296, + 541, -5 + ], + [ + 293, + 552, -5 + ], + [ + 293, + 564, -5 + ], + [ + 284, + 573, -5 + ], + [ + 280, + 582, -5 + ], + [ + 277, + 542, -5 + ], + [ + 270, + 533, -5 + ], + [ + 269, + 531, -5 + ], + [ + 278, + 522, -5 + ], + [ + 282, + 510, -5 + ], + [ + 282, + 471, -5 + ], + [ + 276, + 459, -5 + ], + [ + 274, + 457, -5 + ], + [ + 266, + 451, -5 + ], + [ + 255, + 448, -5 + ], + [ + 198, + 448, -5 + ], + [ + 186, + 454, -5 + ], + [ + 184, + 456, -5 + ], + [ + 178, + 464, -5 + ], + [ + 172, + 481, -5 + ], + [ + 172, + 525, -5 + ], + [ + 163, + 525, -5 + ], + [ + 151, + 531, -5 + ], + [ + 149, + 533, -5 + ], + [ + 143, + 541, -5 + ], + [ + 140, + 552, -5 + ], + [ + 140, + 645, -5 + ], + [ + 146, + 657, -5 + ], + [ + 148, + 659, -5 + ], + [ + 156, + 665, -5 + ], + [ + 167, + 668, -5 + ], + [ + 174, + 668, -5 + ], + [ + 174, + 672, -5 + ], + [ + 172, + 678, -5 + ], + [ + 172, + 772, -5 + ], + [ + 178, + 784, -5 + ], + [ + 180, + 786, -5 + ], + [ + 183, + 789, -5 + ], + [ + 132, + 792, -5 + ], + [ + 123, + 799, -5 + ], + [ + 118, + 806, -5 + ], + [ + 115, + 813, -5 + ], + [ + 92, + 813, -5 + ], + [ + 92, + 92, -5 + ], + [ + 102, + 102, -5 + ], + [ + 149, + 102, -5 + ], + [ + 149, + 104, -5 + ], + [ + 140, + 113, -5 + ], + [ + 135, + 123, -5 + ], + [ + 133, + 135, -5 + ], + [ + 133, + 201, -5 + ], + [ + 138, + 215, -5 + ], + [ + 140, + 217, -5 + ], + [ + 142, + 221, -5 + ], + [ + 134, + 232, -5 + ], + [ + 131, + 241, -5 + ], + [ + 131, + 243, -5 + ], + [ + 130, + 341, -5 + ], + [ + 135, + 355, -5 + ], + [ + 137, + 357, -5 + ], + [ + 147, + 367, -5 + ], + [ + 157, + 372, -5 + ], + [ + 162, + 374, -5 + ], + [ + 162, + 411, -5 + ], + [ + 167, + 425, -5 + ], + [ + 175, + 437, -5 + ], + [ + 177, + 439, -5 + ], + [ + 183, + 445, -5 + ], + [ + 181, + 445, -5 + ], + [ + 177, + 449, -5 + ], + [ + 169, + 460, -5 + ], + [ + 163, + 476, -5 + ], + [ + 163, + 478, -5 + ], + [ + 161, + 516, -5 + ], + [ + 158, + 516, -5 + ], + [ + 145, + 523, -5 + ], + [ + 142, + 526, -5 + ], + [ + 134, + 537, -5 + ], + [ + 131, + 546, -5 + ], + [ + 131, + 548, -5 + ], + [ + 130, + 645, -5 + ], + [ + 135, + 659, -5 + ], + [ + 137, + 661, -5 + ], + [ + 147, + 671, -5 + ], + [ + 157, + 676, -5 + ], + [ + 162, + 678, -5 + ], + [ + 162, + 772, -5 + ], + [ + 164, + 780, -5 + ], + [ + 138, + 780, -5 + ], + [ + 124, + 785, -5 + ], + [ + 122, + 787, -5 + ], + [ + 112, + 797, -5 + ], + [ + 107, + 803, -5 + ], + [ + 102, + 803, -5 + ], + [ + 102, + 102, -5 + ] + ], + [ + [ + 168, + 126, -5 + ], + [ + 168, + 127, -5 + ], + [ + 165, + 129, -5 + ], + [ + 163, + 133, -5 + ], + [ + 163, + 199, -5 + ], + [ + 165, + 201, -5 + ], + [ + 170, + 204, -5 + ], + [ + 192, + 204, -5 + ], + [ + 192, + 240, -5 + ], + [ + 165, + 240, -5 + ], + [ + 163, + 242, -5 + ], + [ + 160, + 247, -5 + ], + [ + 160, + 339, -5 + ], + [ + 162, + 341, -5 + ], + [ + 167, + 344, -5 + ], + [ + 192, + 344, -5 + ], + [ + 192, + 409, -5 + ], + [ + 194, + 411, -5 + ], + [ + 198, + 418, -5 + ], + [ + 202, + 420, -5 + ], + [ + 257, + 420, -5 + ], + [ + 259, + 418, -5 + ], + [ + 262, + 413, -5 + ], + [ + 262, + 378, -5 + ], + [ + 260, + 376, -5 + ], + [ + 255, + 373, -5 + ], + [ + 227, + 373, -5 + ], + [ + 227, + 344, -5 + ], + [ + 254, + 344, -5 + ], + [ + 256, + 342, -5 + ], + [ + 259, + 337, -5 + ], + [ + 259, + 245, -5 + ], + [ + 257, + 243, -5 + ], + [ + 252, + 240, -5 + ], + [ + 227, + 240, -5 + ], + [ + 227, + 202, -5 + ], + [ + 229, + 202, -5 + ], + [ + 229, + 200, -5 + ], + [ + 231, + 198, -5 + ], + [ + 231, + 131, -5 + ], + [ + 229, + 129, -5 + ], + [ + 224, + 126, -5 + ], + [ + 168, + 126, -5 + ], + [ + 167, + 116, -5 + ], + [ + 167, + 117, -5 + ], + [ + 164, + 117, -5 + ], + [ + 155, + 126, -5 + ], + [ + 153, + 134, -5 + ], + [ + 153, + 200, -5 + ], + [ + 157, + 207, -5 + ], + [ + 159, + 209, -5 + ], + [ + 166, + 213, -5 + ], + [ + 182, + 215, -5 + ], + [ + 182, + 230, -5 + ], + [ + 164, + 230, -5 + ], + [ + 157, + 234, -5 + ], + [ + 155, + 236, -5 + ], + [ + 151, + 243, -5 + ], + [ + 150, + 340, -5 + ], + [ + 154, + 347, -5 + ], + [ + 156, + 349, -5 + ], + [ + 163, + 353, -5 + ], + [ + 182, + 355, -5 + ], + [ + 182, + 410, -5 + ], + [ + 189, + 423, -5 + ], + [ + 191, + 425, -5 + ], + [ + 198, + 429, -5 + ], + [ + 258, + 430, -5 + ], + [ + 265, + 426, -5 + ], + [ + 267, + 424, -5 + ], + [ + 271, + 417, -5 + ], + [ + 272, + 377, -5 + ], + [ + 268, + 370, -5 + ], + [ + 266, + 368, -5 + ], + [ + 259, + 364, -5 + ], + [ + 237, + 362, -5 + ], + [ + 237, + 354, -5 + ], + [ + 255, + 354, -5 + ], + [ + 262, + 350, -5 + ], + [ + 264, + 348, -5 + ], + [ + 268, + 341, -5 + ], + [ + 269, + 244, -5 + ], + [ + 265, + 237, -5 + ], + [ + 263, + 235, -5 + ], + [ + 256, + 231, -5 + ], + [ + 237, + 229, -5 + ], + [ + 237, + 206, -5 + ], + [ + 239, + 204, -5 + ], + [ + 241, + 196, -5 + ], + [ + 241, + 130, -5 + ], + [ + 237, + 123, -5 + ], + [ + 235, + 121, -5 + ], + [ + 228, + 117, -5 + ], + [ + 167, + 116, -5 + ], + [ + 166, + 106, -5 + ], + [ + 166, + 107, -5 + ], + [ + 163, + 107, -5 + ], + [ + 154, + 112, -5 + ], + [ + 152, + 114, -5 + ], + [ + 146, + 122, -5 + ], + [ + 143, + 133, -5 + ], + [ + 143, + 201, -5 + ], + [ + 149, + 213, -5 + ], + [ + 151, + 215, -5 + ], + [ + 158, + 222, -5 + ], + [ + 151, + 226, -5 + ], + [ + 149, + 228, -5 + ], + [ + 143, + 236, -5 + ], + [ + 140, + 247, -5 + ], + [ + 140, + 341, -5 + ], + [ + 146, + 353, -5 + ], + [ + 148, + 355, -5 + ], + [ + 156, + 361, -5 + ], + [ + 167, + 364, -5 + ], + [ + 172, + 364, -5 + ], + [ + 172, + 411, -5 + ], + [ + 180, + 428, -5 + ], + [ + 183, + 431, -5 + ], + [ + 191, + 437, -5 + ], + [ + 202, + 440, -5 + ], + [ + 259, + 440, -5 + ], + [ + 271, + 434, -5 + ], + [ + 273, + 432, -5 + ], + [ + 279, + 424, -5 + ], + [ + 282, + 413, -5 + ], + [ + 282, + 376, -5 + ], + [ + 276, + 364, -5 + ], + [ + 274, + 362, -5 + ], + [ + 269, + 357, -5 + ], + [ + 271, + 355, -5 + ], + [ + 276, + 348, -5 + ], + [ + 279, + 337, -5 + ], + [ + 279, + 243, -5 + ], + [ + 273, + 231, -5 + ], + [ + 271, + 229, -5 + ], + [ + 263, + 223, -5 + ], + [ + 252, + 220, -5 + ], + [ + 247, + 220, -5 + ], + [ + 247, + 209, -5 + ], + [ + 249, + 205, -5 + ], + [ + 251, + 197, -5 + ], + [ + 251, + 129, -5 + ], + [ + 245, + 117, -5 + ], + [ + 243, + 115, -5 + ], + [ + 235, + 109, -5 + ], + [ + 224, + 106, -5 + ], + [ + 166, + 106, -5 + ] + ], + [ + [ + 245, + 102, -5 + ], + [ + 327, + 102, -5 + ], + [ + 327, + 104, -5 + ], + [ + 318, + 113, -5 + ], + [ + 313, + 123, -5 + ], + [ + 311, + 135, -5 + ], + [ + 311, + 201, -5 + ], + [ + 314, + 211, -5 + ], + [ + 311, + 211, -5 + ], + [ + 298, + 218, -5 + ], + [ + 295, + 221, -5 + ], + [ + 287, + 232, -5 + ], + [ + 285, + 233, -5 + ], + [ + 285, + 231, -5 + ], + [ + 277, + 221, -5 + ], + [ + 267, + 214, -5 + ], + [ + 258, + 210, -5 + ], + [ + 260, + 202, -5 + ], + [ + 261, + 129, -5 + ], + [ + 256, + 115, -5 + ], + [ + 254, + 113, -5 + ], + [ + 245, + 102, -5 + ] + ], + [ + [ + 362, + 88, -5 + ], + [ + 362, + 89, -5 + ], + [ + 359, + 91, -5 + ], + [ + 357, + 95, -5 + ], + [ + 357, + 126, -5 + ], + [ + 346, + 126, -5 + ], + [ + 344, + 128, -5 + ], + [ + 341, + 133, -5 + ], + [ + 341, + 199, -5 + ], + [ + 343, + 201, -5 + ], + [ + 348, + 204, -5 + ], + [ + 404, + 204, -5 + ], + [ + 406, + 202, -5 + ], + [ + 409, + 197, -5 + ], + [ + 409, + 131, -5 + ], + [ + 407, + 129, -5 + ], + [ + 402, + 126, -5 + ], + [ + 392, + 126, -5 + ], + [ + 392, + 123, -5 + ], + [ + 674, + 123, -5 + ], + [ + 674, + 173, -5 + ], + [ + 657, + 173, -5 + ], + [ + 655, + 175, -5 + ], + [ + 652, + 180, -5 + ], + [ + 652, + 312, -5 + ], + [ + 654, + 314, -5 + ], + [ + 659, + 317, -5 + ], + [ + 727, + 317, -5 + ], + [ + 729, + 315, -5 + ], + [ + 732, + 310, -5 + ], + [ + 732, + 178, -5 + ], + [ + 730, + 176, -5 + ], + [ + 725, + 173, -5 + ], + [ + 709, + 173, -5 + ], + [ + 709, + 123, -5 + ], + [ + 1320, + 123, -5 + ], + [ + 1320, + 173, -5 + ], + [ + 1302, + 173, -5 + ], + [ + 1300, + 175, -5 + ], + [ + 1297, + 180, -5 + ], + [ + 1297, + 312, -5 + ], + [ + 1299, + 314, -5 + ], + [ + 1304, + 317, -5 + ], + [ + 1372, + 317, -5 + ], + [ + 1374, + 315, -5 + ], + [ + 1377, + 310, -5 + ], + [ + 1377, + 178, -5 + ], + [ + 1375, + 176, -5 + ], + [ + 1370, + 173, -5 + ], + [ + 1355, + 173, -5 + ], + [ + 1355, + 123, -5 + ], + [ + 1731, + 123, -5 + ], + [ + 1731, + 1015, -5 + ], + [ + 1681, + 1015, -5 + ], + [ + 1681, + 997, -5 + ], + [ + 1679, + 995, -5 + ], + [ + 1674, + 992, -5 + ], + [ + 1542, + 992, -5 + ], + [ + 1540, + 994, -5 + ], + [ + 1537, + 999, -5 + ], + [ + 1537, + 1067, -5 + ], + [ + 1539, + 1069, -5 + ], + [ + 1544, + 1072, -5 + ], + [ + 1676, + 1072, -5 + ], + [ + 1678, + 1070, -5 + ], + [ + 1681, + 1065, -5 + ], + [ + 1681, + 1050, -5 + ], + [ + 1731, + 1050, -5 + ], + [ + 1731, + 1782, -5 + ], + [ + 1042, + 1782, -5 + ], + [ + 1042, + 1731, -5 + ], + [ + 1060, + 1731, -5 + ], + [ + 1062, + 1729, -5 + ], + [ + 1065, + 1724, -5 + ], + [ + 1065, + 1592, -5 + ], + [ + 1063, + 1590, -5 + ], + [ + 1058, + 1587, -5 + ], + [ + 990, + 1587, -5 + ], + [ + 988, + 1589, -5 + ], + [ + 985, + 1594, -5 + ], + [ + 985, + 1726, -5 + ], + [ + 987, + 1728, -5 + ], + [ + 992, + 1731, -5 + ], + [ + 1008, + 1731, -5 + ], + [ + 1008, + 1811, -5 + ], + [ + 1010, + 1813, -5 + ], + [ + 1015, + 1816, -5 + ], + [ + 1761, + 1816, -5 + ], + [ + 1763, + 1814, -5 + ], + [ + 1766, + 1809, -5 + ], + [ + 1766, + 93, -5 + ], + [ + 1764, + 91, -5 + ], + [ + 1759, + 88, -5 + ], + [ + 362, + 88, -5 + ] + ], + [ + [ + 432, + 126, -5 + ], + [ + 432, + 127, -5 + ], + [ + 429, + 129, -5 + ], + [ + 427, + 133, -5 + ], + [ + 427, + 275, -5 + ], + [ + 411, + 275, -5 + ], + [ + 411, + 245, -5 + ], + [ + 409, + 243, -5 + ], + [ + 404, + 240, -5 + ], + [ + 318, + 240, -5 + ], + [ + 316, + 242, -5 + ], + [ + 313, + 247, -5 + ], + [ + 313, + 339, -5 + ], + [ + 315, + 341, -5 + ], + [ + 320, + 344, -5 + ], + [ + 406, + 344, -5 + ], + [ + 408, + 342, -5 + ], + [ + 411, + 337, -5 + ], + [ + 411, + 309, -5 + ], + [ + 427, + 309, -5 + ], + [ + 427, + 427, -5 + ], + [ + 377, + 427, -5 + ], + [ + 374, + 423, -5 + ], + [ + 370, + 421, -5 + ], + [ + 314, + 421, -5 + ], + [ + 312, + 423, -5 + ], + [ + 309, + 428, -5 + ], + [ + 309, + 463, -5 + ], + [ + 311, + 465, -5 + ], + [ + 316, + 468, -5 + ], + [ + 372, + 468, -5 + ], + [ + 374, + 466, -5 + ], + [ + 378, + 462, -5 + ], + [ + 427, + 462, -5 + ], + [ + 427, + 579, -5 + ], + [ + 411, + 579, -5 + ], + [ + 411, + 550, -5 + ], + [ + 409, + 548, -5 + ], + [ + 404, + 545, -5 + ], + [ + 318, + 545, -5 + ], + [ + 316, + 547, -5 + ], + [ + 313, + 552, -5 + ], + [ + 313, + 579, -5 + ], + [ + 305, + 579, -5 + ], + [ + 303, + 581, -5 + ], + [ + 300, + 586, -5 + ], + [ + 300, + 1087, -5 + ], + [ + 279, + 1087, -5 + ], + [ + 279, + 1069, -5 + ], + [ + 277, + 1067, -5 + ], + [ + 272, + 1064, -5 + ], + [ + 140, + 1064, -5 + ], + [ + 138, + 1066, -5 + ], + [ + 135, + 1071, -5 + ], + [ + 135, + 1140, -5 + ], + [ + 137, + 1142, -5 + ], + [ + 142, + 1145, -5 + ], + [ + 274, + 1145, -5 + ], + [ + 276, + 1143, -5 + ], + [ + 279, + 1138, -5 + ], + [ + 279, + 1122, -5 + ], + [ + 300, + 1122, -5 + ], + [ + 300, + 1180, -5 + ], + [ + 302, + 1182, -5 + ], + [ + 307, + 1185, -5 + ], + [ + 622, + 1185, -5 + ], + [ + 624, + 1183, -5 + ], + [ + 627, + 1178, -5 + ], + [ + 627, + 1109, -5 + ], + [ + 708, + 1109, -5 + ], + [ + 710, + 1107, -5 + ], + [ + 713, + 1102, -5 + ], + [ + 713, + 1080, -5 + ], + [ + 711, + 1078, -5 + ], + [ + 706, + 1075, -5 + ], + [ + 597, + 1075, -5 + ], + [ + 595, + 1077, -5 + ], + [ + 592, + 1082, -5 + ], + [ + 592, + 1151, -5 + ], + [ + 335, + 1151, -5 + ], + [ + 335, + 648, -5 + ], + [ + 406, + 648, -5 + ], + [ + 408, + 646, -5 + ], + [ + 411, + 641, -5 + ], + [ + 411, + 614, -5 + ], + [ + 457, + 614, -5 + ], + [ + 459, + 612, -5 + ], + [ + 462, + 607, -5 + ], + [ + 462, + 161, -5 + ], + [ + 611, + 161, -5 + ], + [ + 611, + 368, -5 + ], + [ + 613, + 370, -5 + ], + [ + 618, + 373, -5 + ], + [ + 674, + 373, -5 + ], + [ + 674, + 445, -5 + ], + [ + 657, + 445, -5 + ], + [ + 655, + 447, -5 + ], + [ + 652, + 452, -5 + ], + [ + 652, + 584, -5 + ], + [ + 654, + 586, -5 + ], + [ + 659, + 589, -5 + ], + [ + 727, + 589, -5 + ], + [ + 729, + 587, -5 + ], + [ + 732, + 582, -5 + ], + [ + 732, + 450, -5 + ], + [ + 730, + 448, -5 + ], + [ + 725, + 445, -5 + ], + [ + 709, + 445, -5 + ], + [ + 709, + 373, -5 + ], + [ + 768, + 373, -5 + ], + [ + 770, + 371, -5 + ], + [ + 773, + 366, -5 + ], + [ + 773, + 161, -5 + ], + [ + 1256, + 161, -5 + ], + [ + 1256, + 393, -5 + ], + [ + 1258, + 395, -5 + ], + [ + 1263, + 398, -5 + ], + [ + 1320, + 398, -5 + ], + [ + 1320, + 445, -5 + ], + [ + 1302, + 445, -5 + ], + [ + 1300, + 447, -5 + ], + [ + 1297, + 452, -5 + ], + [ + 1297, + 584, -5 + ], + [ + 1299, + 586, -5 + ], + [ + 1304, + 589, -5 + ], + [ + 1372, + 589, -5 + ], + [ + 1374, + 587, -5 + ], + [ + 1377, + 582, -5 + ], + [ + 1377, + 450, -5 + ], + [ + 1375, + 448, -5 + ], + [ + 1370, + 445, -5 + ], + [ + 1355, + 445, -5 + ], + [ + 1355, + 398, -5 + ], + [ + 1413, + 398, -5 + ], + [ + 1415, + 396, -5 + ], + [ + 1418, + 391, -5 + ], + [ + 1418, + 161, -5 + ], + [ + 1693, + 161, -5 + ], + [ + 1693, + 795, -5 + ], + [ + 1223, + 795, -5 + ], + [ + 1221, + 797, -5 + ], + [ + 1218, + 802, -5 + ], + [ + 1218, + 835, -5 + ], + [ + 1095, + 835, -5 + ], + [ + 1093, + 837, -5 + ], + [ + 1090, + 842, -5 + ], + [ + 1090, + 865, -5 + ], + [ + 1092, + 867, -5 + ], + [ + 1097, + 870, -5 + ], + [ + 1248, + 870, -5 + ], + [ + 1250, + 868, -5 + ], + [ + 1253, + 863, -5 + ], + [ + 1253, + 830, -5 + ], + [ + 1693, + 830, -5 + ], + [ + 1693, + 951, -5 + ], + [ + 1486, + 951, -5 + ], + [ + 1484, + 953, -5 + ], + [ + 1481, + 958, -5 + ], + [ + 1481, + 1015, -5 + ], + [ + 1409, + 1015, -5 + ], + [ + 1409, + 997, -5 + ], + [ + 1407, + 995, -5 + ], + [ + 1402, + 992, -5 + ], + [ + 1270, + 992, -5 + ], + [ + 1268, + 994, -5 + ], + [ + 1265, + 999, -5 + ], + [ + 1265, + 1067, -5 + ], + [ + 1267, + 1069, -5 + ], + [ + 1272, + 1072, -5 + ], + [ + 1404, + 1072, -5 + ], + [ + 1406, + 1070, -5 + ], + [ + 1409, + 1065, -5 + ], + [ + 1409, + 1050, -5 + ], + [ + 1481, + 1050, -5 + ], + [ + 1481, + 1108, -5 + ], + [ + 1483, + 1110, -5 + ], + [ + 1488, + 1113, -5 + ], + [ + 1693, + 1113, -5 + ], + [ + 1693, + 1614, -5 + ], + [ + 1588, + 1614, -5 + ], + [ + 1588, + 1555, -5 + ], + [ + 1586, + 1553, -5 + ], + [ + 1581, + 1550, -5 + ], + [ + 1490, + 1550, -5 + ], + [ + 1488, + 1552, -5 + ], + [ + 1485, + 1557, -5 + ], + [ + 1485, + 1644, -5 + ], + [ + 1487, + 1646, -5 + ], + [ + 1492, + 1649, -5 + ], + [ + 1693, + 1649, -5 + ], + [ + 1693, + 1743, -5 + ], + [ + 1106, + 1743, -5 + ], + [ + 1106, + 1536, -5 + ], + [ + 1104, + 1534, -5 + ], + [ + 1099, + 1531, -5 + ], + [ + 1042, + 1531, -5 + ], + [ + 1042, + 1460, -5 + ], + [ + 1060, + 1460, -5 + ], + [ + 1062, + 1458, -5 + ], + [ + 1065, + 1453, -5 + ], + [ + 1065, + 1321, -5 + ], + [ + 1063, + 1319, -5 + ], + [ + 1058, + 1316, -5 + ], + [ + 990, + 1316, -5 + ], + [ + 988, + 1318, -5 + ], + [ + 985, + 1323, -5 + ], + [ + 985, + 1455, -5 + ], + [ + 987, + 1457, -5 + ], + [ + 992, + 1460, -5 + ], + [ + 1008, + 1460, -5 + ], + [ + 1008, + 1531, -5 + ], + [ + 949, + 1531, -5 + ], + [ + 947, + 1533, -5 + ], + [ + 944, + 1538, -5 + ], + [ + 944, + 1743, -5 + ], + [ + 614, + 1743, -5 + ], + [ + 614, + 1649, -5 + ], + [ + 644, + 1649, -5 + ], + [ + 646, + 1647, -5 + ], + [ + 649, + 1642, -5 + ], + [ + 649, + 1555, -5 + ], + [ + 647, + 1553, -5 + ], + [ + 642, + 1550, -5 + ], + [ + 550, + 1550, -5 + ], + [ + 548, + 1552, -5 + ], + [ + 545, + 1557, -5 + ], + [ + 545, + 1582, -5 + ], + [ + 259, + 1582, -5 + ], + [ + 259, + 1488, -5 + ], + [ + 283, + 1488, -5 + ], + [ + 285, + 1486, -5 + ], + [ + 288, + 1481, -5 + ], + [ + 288, + 1374, -5 + ], + [ + 286, + 1372, -5 + ], + [ + 281, + 1369, -5 + ], + [ + 259, + 1369, -5 + ], + [ + 259, + 1347, -5 + ], + [ + 334, + 1347, -5 + ], + [ + 336, + 1345, -5 + ], + [ + 339, + 1340, -5 + ], + [ + 339, + 1248, -5 + ], + [ + 337, + 1246, -5 + ], + [ + 332, + 1243, -5 + ], + [ + 245, + 1243, -5 + ], + [ + 243, + 1245, -5 + ], + [ + 240, + 1250, -5 + ], + [ + 240, + 1278, -5 + ], + [ + 229, + 1278, -5 + ], + [ + 227, + 1280, -5 + ], + [ + 224, + 1285, -5 + ], + [ + 224, + 1369, -5 + ], + [ + 200, + 1369, -5 + ], + [ + 198, + 1371, -5 + ], + [ + 195, + 1376, -5 + ], + [ + 195, + 1483, -5 + ], + [ + 197, + 1485, -5 + ], + [ + 202, + 1488, -5 + ], + [ + 224, + 1488, -5 + ], + [ + 224, + 1612, -5 + ], + [ + 226, + 1614, -5 + ], + [ + 231, + 1617, -5 + ], + [ + 545, + 1617, -5 + ], + [ + 545, + 1644, -5 + ], + [ + 547, + 1646, -5 + ], + [ + 552, + 1649, -5 + ], + [ + 579, + 1649, -5 + ], + [ + 579, + 1773, -5 + ], + [ + 581, + 1775, -5 + ], + [ + 586, + 1778, -5 + ], + [ + 974, + 1778, -5 + ], + [ + 976, + 1776, -5 + ], + [ + 979, + 1771, -5 + ], + [ + 979, + 1566, -5 + ], + [ + 1071, + 1566, -5 + ], + [ + 1071, + 1773, -5 + ], + [ + 1073, + 1775, -5 + ], + [ + 1078, + 1778, -5 + ], + [ + 1723, + 1778, -5 + ], + [ + 1725, + 1776, -5 + ], + [ + 1728, + 1771, -5 + ], + [ + 1728, + 1083, -5 + ], + [ + 1726, + 1081, -5 + ], + [ + 1721, + 1078, -5 + ], + [ + 1516, + 1078, -5 + ], + [ + 1516, + 986, -5 + ], + [ + 1723, + 986, -5 + ], + [ + 1725, + 984, -5 + ], + [ + 1728, + 979, -5 + ], + [ + 1728, + 131, -5 + ], + [ + 1726, + 129, -5 + ], + [ + 1721, + 126, -5 + ], + [ + 1388, + 126, -5 + ], + [ + 1386, + 128, -5 + ], + [ + 1383, + 133, -5 + ], + [ + 1383, + 363, -5 + ], + [ + 1291, + 363, -5 + ], + [ + 1291, + 131, -5 + ], + [ + 1289, + 129, -5 + ], + [ + 1284, + 126, -5 + ], + [ + 743, + 126, -5 + ], + [ + 741, + 128, -5 + ], + [ + 738, + 133, -5 + ], + [ + 738, + 338, -5 + ], + [ + 646, + 338, -5 + ], + [ + 646, + 131, -5 + ], + [ + 644, + 129, -5 + ], + [ + 639, + 126, -5 + ], + [ + 432, + 126, -5 + ] + ], + [ + [ + 530, + 173, -5 + ], + [ + 530, + 174, -5 + ], + [ + 527, + 176, -5 + ], + [ + 525, + 180, -5 + ], + [ + 525, + 312, -5 + ], + [ + 527, + 314, -5 + ], + [ + 532, + 317, -5 + ], + [ + 547, + 317, -5 + ], + [ + 547, + 419, -5 + ], + [ + 549, + 421, -5 + ], + [ + 554, + 424, -5 + ], + [ + 611, + 424, -5 + ], + [ + 611, + 656, -5 + ], + [ + 613, + 658, -5 + ], + [ + 618, + 661, -5 + ], + [ + 784, + 661, -5 + ], + [ + 784, + 915, -5 + ], + [ + 638, + 915, -5 + ], + [ + 636, + 917, -5 + ], + [ + 633, + 922, -5 + ], + [ + 633, + 945, -5 + ], + [ + 635, + 947, -5 + ], + [ + 640, + 950, -5 + ], + [ + 814, + 950, -5 + ], + [ + 816, + 948, -5 + ], + [ + 819, + 943, -5 + ], + [ + 819, + 631, -5 + ], + [ + 817, + 629, -5 + ], + [ + 812, + 626, -5 + ], + [ + 646, + 626, -5 + ], + [ + 646, + 394, -5 + ], + [ + 644, + 392, -5 + ], + [ + 639, + 389, -5 + ], + [ + 582, + 389, -5 + ], + [ + 582, + 317, -5 + ], + [ + 600, + 317, -5 + ], + [ + 602, + 315, -5 + ], + [ + 605, + 310, -5 + ], + [ + 605, + 178, -5 + ], + [ + 603, + 176, -5 + ], + [ + 598, + 173, -5 + ], + [ + 530, + 173, -5 + ] + ], + [ + [ + 656, + 133, -5 + ], + [ + 664, + 133, -5 + ], + [ + 664, + 163, -5 + ], + [ + 656, + 163, -5 + ], + [ + 656, + 133, -5 + ] + ], + [ + [ + 719, + 133, -5 + ], + [ + 728, + 133, -5 + ], + [ + 728, + 163, -5 + ], + [ + 719, + 163, -5 + ], + [ + 719, + 133, -5 + ] + ], + [ + [ + 472, + 171, -5 + ], + [ + 517, + 171, -5 + ], + [ + 517, + 174, -5 + ], + [ + 515, + 180, -5 + ], + [ + 515, + 313, -5 + ], + [ + 519, + 320, -5 + ], + [ + 521, + 322, -5 + ], + [ + 528, + 326, -5 + ], + [ + 537, + 328, -5 + ], + [ + 537, + 420, -5 + ], + [ + 541, + 427, -5 + ], + [ + 543, + 429, -5 + ], + [ + 550, + 433, -5 + ], + [ + 551, + 435, -5 + ], + [ + 529, + 435, -5 + ], + [ + 522, + 439, -5 + ], + [ + 520, + 441, -5 + ], + [ + 516, + 448, -5 + ], + [ + 515, + 585, -5 + ], + [ + 519, + 592, -5 + ], + [ + 521, + 594, -5 + ], + [ + 528, + 598, -5 + ], + [ + 537, + 600, -5 + ], + [ + 537, + 696, -5 + ], + [ + 453, + 696, -5 + ], + [ + 453, + 676, -5 + ], + [ + 449, + 669, -5 + ], + [ + 447, + 667, -5 + ], + [ + 440, + 663, -5 + ], + [ + 349, + 662, -5 + ], + [ + 345, + 663, -5 + ], + [ + 345, + 658, -5 + ], + [ + 407, + 658, -5 + ], + [ + 414, + 654, -5 + ], + [ + 416, + 652, -5 + ], + [ + 420, + 645, -5 + ], + [ + 422, + 624, -5 + ], + [ + 458, + 624, -5 + ], + [ + 465, + 620, -5 + ], + [ + 467, + 618, -5 + ], + [ + 471, + 611, -5 + ], + [ + 472, + 171, -5 + ], + [ + 482, + 181, -5 + ], + [ + 505, + 181, -5 + ], + [ + 505, + 314, -5 + ], + [ + 511, + 326, -5 + ], + [ + 513, + 328, -5 + ], + [ + 521, + 334, -5 + ], + [ + 527, + 337, -5 + ], + [ + 527, + 421, -5 + ], + [ + 528, + 426, -5 + ], + [ + 525, + 426, -5 + ], + [ + 516, + 431, -5 + ], + [ + 514, + 433, -5 + ], + [ + 508, + 441, -5 + ], + [ + 505, + 452, -5 + ], + [ + 505, + 586, -5 + ], + [ + 511, + 598, -5 + ], + [ + 513, + 600, -5 + ], + [ + 521, + 606, -5 + ], + [ + 527, + 609, -5 + ], + [ + 527, + 686, -5 + ], + [ + 463, + 686, -5 + ], + [ + 463, + 675, -5 + ], + [ + 457, + 663, -5 + ], + [ + 455, + 661, -5 + ], + [ + 447, + 655, -5 + ], + [ + 436, + 652, -5 + ], + [ + 429, + 652, -5 + ], + [ + 429, + 648, -5 + ], + [ + 431, + 642, -5 + ], + [ + 431, + 634, -5 + ], + [ + 459, + 634, -5 + ], + [ + 471, + 628, -5 + ], + [ + 473, + 626, -5 + ], + [ + 479, + 618, -5 + ], + [ + 482, + 607, -5 + ], + [ + 482, + 181, -5 + ], + [ + 492, + 191, -5 + ], + [ + 495, + 191, -5 + ], + [ + 495, + 314, -5 + ], + [ + 500, + 328, -5 + ], + [ + 502, + 330, -5 + ], + [ + 512, + 340, -5 + ], + [ + 517, + 344, -5 + ], + [ + 517, + 419, -5 + ], + [ + 508, + 425, -5 + ], + [ + 506, + 427, -5 + ], + [ + 499, + 437, -5 + ], + [ + 496, + 446, -5 + ], + [ + 496, + 448, -5 + ], + [ + 495, + 586, -5 + ], + [ + 500, + 600, -5 + ], + [ + 502, + 602, -5 + ], + [ + 512, + 612, -5 + ], + [ + 517, + 616, -5 + ], + [ + 517, + 676, -5 + ], + [ + 473, + 676, -5 + ], + [ + 469, + 663, -5 + ], + [ + 461, + 653, -5 + ], + [ + 451, + 646, -5 + ], + [ + 450, + 644, -5 + ], + [ + 459, + 644, -5 + ], + [ + 473, + 639, -5 + ], + [ + 475, + 637, -5 + ], + [ + 485, + 627, -5 + ], + [ + 490, + 617, -5 + ], + [ + 492, + 605, -5 + ], + [ + 492, + 191, -5 + ] + ], + [ + [ + 784, + 173, -5 + ], + [ + 784, + 174, -5 + ], + [ + 781, + 176, -5 + ], + [ + 779, + 180, -5 + ], + [ + 779, + 312, -5 + ], + [ + 781, + 314, -5 + ], + [ + 786, + 317, -5 + ], + [ + 854, + 317, -5 + ], + [ + 856, + 315, -5 + ], + [ + 859, + 310, -5 + ], + [ + 859, + 262, -5 + ], + [ + 864, + 262, -5 + ], + [ + 864, + 995, -5 + ], + [ + 638, + 995, -5 + ], + [ + 636, + 997, -5 + ], + [ + 633, + 1002, -5 + ], + [ + 633, + 1025, -5 + ], + [ + 635, + 1027, -5 + ], + [ + 640, + 1030, -5 + ], + [ + 894, + 1030, -5 + ], + [ + 896, + 1028, -5 + ], + [ + 899, + 1023, -5 + ], + [ + 899, + 233, -5 + ], + [ + 897, + 231, -5 + ], + [ + 892, + 228, -5 + ], + [ + 859, + 228, -5 + ], + [ + 859, + 178, -5 + ], + [ + 857, + 176, -5 + ], + [ + 852, + 173, -5 + ], + [ + 784, + 173, -5 + ] + ], + [ + [ + 867, + 171, -5 + ], + [ + 1162, + 171, -5 + ], + [ + 1162, + 174, -5 + ], + [ + 1160, + 180, -5 + ], + [ + 1160, + 218, -5 + ], + [ + 908, + 218, -5 + ], + [ + 900, + 221, -5 + ], + [ + 896, + 219, -5 + ], + [ + 869, + 217, -5 + ], + [ + 869, + 177, -5 + ], + [ + 867, + 171, -5 + ], + [ + 879, + 181, -5 + ], + [ + 1150, + 181, -5 + ], + [ + 1150, + 208, -5 + ], + [ + 907, + 208, -5 + ], + [ + 901, + 210, -5 + ], + [ + 899, + 210, -5 + ], + [ + 893, + 208, -5 + ], + [ + 879, + 208, -5 + ], + [ + 879, + 181, -5 + ], + [ + 889, + 191, -5 + ], + [ + 1140, + 191, -5 + ], + [ + 1140, + 198, -5 + ], + [ + 907, + 198, -5 + ], + [ + 896, + 199, -5 + ], + [ + 889, + 197, -5 + ], + [ + 889, + 191, -5 + ] + ], + [ + [ + 949, + 272, -5 + ], + [ + 1160, + 272, -5 + ], + [ + 1160, + 313, -5 + ], + [ + 1164, + 320, -5 + ], + [ + 1166, + 322, -5 + ], + [ + 1173, + 326, -5 + ], + [ + 1246, + 328, -5 + ], + [ + 1246, + 394, -5 + ], + [ + 1250, + 401, -5 + ], + [ + 1252, + 403, -5 + ], + [ + 1259, + 407, -5 + ], + [ + 1310, + 409, -5 + ], + [ + 1310, + 435, -5 + ], + [ + 1301, + 435, -5 + ], + [ + 1294, + 439, -5 + ], + [ + 1292, + 441, -5 + ], + [ + 1288, + 448, -5 + ], + [ + 1287, + 585, -5 + ], + [ + 1291, + 592, -5 + ], + [ + 1293, + 594, -5 + ], + [ + 1300, + 598, -5 + ], + [ + 1373, + 599, -5 + ], + [ + 1380, + 595, -5 + ], + [ + 1382, + 593, -5 + ], + [ + 1386, + 586, -5 + ], + [ + 1387, + 449, -5 + ], + [ + 1383, + 442, -5 + ], + [ + 1381, + 440, -5 + ], + [ + 1374, + 436, -5 + ], + [ + 1365, + 434, -5 + ], + [ + 1365, + 408, -5 + ], + [ + 1414, + 408, -5 + ], + [ + 1421, + 404, -5 + ], + [ + 1423, + 402, -5 + ], + [ + 1427, + 395, -5 + ], + [ + 1429, + 327, -5 + ], + [ + 1500, + 327, -5 + ], + [ + 1500, + 435, -5 + ], + [ + 1428, + 435, -5 + ], + [ + 1421, + 439, -5 + ], + [ + 1419, + 441, -5 + ], + [ + 1415, + 448, -5 + ], + [ + 1414, + 585, -5 + ], + [ + 1418, + 592, -5 + ], + [ + 1420, + 594, -5 + ], + [ + 1437, + 609, -5 + ], + [ + 1437, + 620, -5 + ], + [ + 989, + 620, -5 + ], + [ + 989, + 544, -5 + ], + [ + 1160, + 544, -5 + ], + [ + 1160, + 585, -5 + ], + [ + 1164, + 592, -5 + ], + [ + 1166, + 594, -5 + ], + [ + 1173, + 598, -5 + ], + [ + 1246, + 599, -5 + ], + [ + 1253, + 595, -5 + ], + [ + 1255, + 593, -5 + ], + [ + 1259, + 586, -5 + ], + [ + 1260, + 449, -5 + ], + [ + 1256, + 442, -5 + ], + [ + 1254, + 440, -5 + ], + [ + 1247, + 436, -5 + ], + [ + 1174, + 435, -5 + ], + [ + 1167, + 439, -5 + ], + [ + 1165, + 441, -5 + ], + [ + 1161, + 448, -5 + ], + [ + 1159, + 489, -5 + ], + [ + 949, + 489, -5 + ], + [ + 949, + 272, -5 + ], + [ + 959, + 282, -5 + ], + [ + 1150, + 282, -5 + ], + [ + 1150, + 314, -5 + ], + [ + 1156, + 326, -5 + ], + [ + 1158, + 328, -5 + ], + [ + 1166, + 334, -5 + ], + [ + 1177, + 337, -5 + ], + [ + 1236, + 337, -5 + ], + [ + 1236, + 395, -5 + ], + [ + 1242, + 407, -5 + ], + [ + 1244, + 409, -5 + ], + [ + 1252, + 415, -5 + ], + [ + 1263, + 418, -5 + ], + [ + 1300, + 418, -5 + ], + [ + 1300, + 426, -5 + ], + [ + 1297, + 426, -5 + ], + [ + 1288, + 431, -5 + ], + [ + 1286, + 433, -5 + ], + [ + 1280, + 441, -5 + ], + [ + 1277, + 452, -5 + ], + [ + 1277, + 586, -5 + ], + [ + 1283, + 598, -5 + ], + [ + 1285, + 600, -5 + ], + [ + 1293, + 606, -5 + ], + [ + 1300, + 609, -5 + ], + [ + 1247, + 610, -5 + ], + [ + 1247, + 608, -5 + ], + [ + 1250, + 608, -5 + ], + [ + 1259, + 603, -5 + ], + [ + 1261, + 601, -5 + ], + [ + 1267, + 593, -5 + ], + [ + 1270, + 582, -5 + ], + [ + 1270, + 448, -5 + ], + [ + 1264, + 436, -5 + ], + [ + 1262, + 434, -5 + ], + [ + 1254, + 428, -5 + ], + [ + 1243, + 425, -5 + ], + [ + 1173, + 425, -5 + ], + [ + 1161, + 431, -5 + ], + [ + 1159, + 433, -5 + ], + [ + 1153, + 441, -5 + ], + [ + 1150, + 452, -5 + ], + [ + 1150, + 479, -5 + ], + [ + 959, + 479, -5 + ], + [ + 959, + 282, -5 + ], + [ + 969, + 292, -5 + ], + [ + 1140, + 292, -5 + ], + [ + 1140, + 314, -5 + ], + [ + 1145, + 328, -5 + ], + [ + 1147, + 330, -5 + ], + [ + 1157, + 340, -5 + ], + [ + 1167, + 345, -5 + ], + [ + 1179, + 347, -5 + ], + [ + 1226, + 347, -5 + ], + [ + 1226, + 395, -5 + ], + [ + 1231, + 409, -5 + ], + [ + 1233, + 411, -5 + ], + [ + 1235, + 415, -5 + ], + [ + 1173, + 415, -5 + ], + [ + 1159, + 420, -5 + ], + [ + 1157, + 422, -5 + ], + [ + 1147, + 432, -5 + ], + [ + 1142, + 442, -5 + ], + [ + 1140, + 454, -5 + ], + [ + 1140, + 469, -5 + ], + [ + 969, + 469, -5 + ], + [ + 969, + 292, -5 + ] + ], + [ + [ + 784, + 445, -5 + ], + [ + 784, + 446, -5 + ], + [ + 781, + 448, -5 + ], + [ + 779, + 452, -5 + ], + [ + 779, + 584, -5 + ], + [ + 781, + 586, -5 + ], + [ + 789, + 593, -5 + ], + [ + 791, + 595, -5 + ], + [ + 803, + 603, -5 + ], + [ + 805, + 603, -5 + ], + [ + 813, + 605, -5 + ], + [ + 824, + 605, -5 + ], + [ + 824, + 955, -5 + ], + [ + 638, + 955, -5 + ], + [ + 636, + 957, -5 + ], + [ + 633, + 962, -5 + ], + [ + 633, + 985, -5 + ], + [ + 635, + 987, -5 + ], + [ + 640, + 990, -5 + ], + [ + 854, + 990, -5 + ], + [ + 856, + 988, -5 + ], + [ + 859, + 983, -5 + ], + [ + 859, + 450, -5 + ], + [ + 857, + 448, -5 + ], + [ + 852, + 445, -5 + ], + [ + 784, + 445, -5 + ] + ], + [ + [ + 783, + 327, -5 + ], + [ + 854, + 327, -5 + ], + [ + 854, + 435, -5 + ], + [ + 783, + 435, -5 + ], + [ + 776, + 439, -5 + ], + [ + 774, + 441, -5 + ], + [ + 770, + 448, -5 + ], + [ + 769, + 585, -5 + ], + [ + 773, + 592, -5 + ], + [ + 775, + 594, -5 + ], + [ + 782, + 600, -5 + ], + [ + 784, + 602, -5 + ], + [ + 797, + 611, -5 + ], + [ + 808, + 615, -5 + ], + [ + 656, + 616, -5 + ], + [ + 656, + 599, -5 + ], + [ + 728, + 599, -5 + ], + [ + 735, + 595, -5 + ], + [ + 737, + 593, -5 + ], + [ + 741, + 586, -5 + ], + [ + 742, + 449, -5 + ], + [ + 738, + 442, -5 + ], + [ + 736, + 440, -5 + ], + [ + 729, + 436, -5 + ], + [ + 719, + 434, -5 + ], + [ + 719, + 383, -5 + ], + [ + 769, + 383, -5 + ], + [ + 776, + 379, -5 + ], + [ + 778, + 377, -5 + ], + [ + 782, + 370, -5 + ], + [ + 783, + 327, -5 + ], + [ + 793, + 337, -5 + ], + [ + 844, + 337, -5 + ], + [ + 844, + 425, -5 + ], + [ + 782, + 425, -5 + ], + [ + 770, + 431, -5 + ], + [ + 768, + 433, -5 + ], + [ + 762, + 441, -5 + ], + [ + 759, + 452, -5 + ], + [ + 759, + 586, -5 + ], + [ + 765, + 598, -5 + ], + [ + 767, + 600, -5 + ], + [ + 772, + 605, -5 + ], + [ + 739, + 606, -5 + ], + [ + 739, + 604, -5 + ], + [ + 748, + 595, -5 + ], + [ + 752, + 583, -5 + ], + [ + 752, + 448, -5 + ], + [ + 746, + 436, -5 + ], + [ + 744, + 434, -5 + ], + [ + 736, + 428, -5 + ], + [ + 729, + 425, -5 + ], + [ + 729, + 393, -5 + ], + [ + 770, + 393, -5 + ], + [ + 782, + 387, -5 + ], + [ + 784, + 385, -5 + ], + [ + 790, + 377, -5 + ], + [ + 793, + 366, -5 + ], + [ + 793, + 337, -5 + ], + [ + 803, + 347, -5 + ], + [ + 834, + 347, -5 + ], + [ + 834, + 415, -5 + ], + [ + 782, + 415, -5 + ], + [ + 768, + 420, -5 + ], + [ + 766, + 422, -5 + ], + [ + 755, + 431, -5 + ], + [ + 751, + 427, -5 + ], + [ + 740, + 419, -5 + ], + [ + 739, + 403, -5 + ], + [ + 770, + 403, -5 + ], + [ + 784, + 398, -5 + ], + [ + 786, + 396, -5 + ], + [ + 796, + 386, -5 + ], + [ + 801, + 376, -5 + ], + [ + 803, + 364, -5 + ], + [ + 803, + 347, -5 + ] + ], + [ + [ + 530, + 445, -5 + ], + [ + 530, + 446, -5 + ], + [ + 527, + 448, -5 + ], + [ + 525, + 452, -5 + ], + [ + 525, + 584, -5 + ], + [ + 527, + 586, -5 + ], + [ + 532, + 589, -5 + ], + [ + 547, + 589, -5 + ], + [ + 547, + 694, -5 + ], + [ + 549, + 696, -5 + ], + [ + 554, + 699, -5 + ], + [ + 744, + 699, -5 + ], + [ + 744, + 875, -5 + ], + [ + 638, + 875, -5 + ], + [ + 636, + 877, -5 + ], + [ + 633, + 882, -5 + ], + [ + 633, + 905, -5 + ], + [ + 635, + 907, -5 + ], + [ + 640, + 910, -5 + ], + [ + 774, + 910, -5 + ], + [ + 776, + 908, -5 + ], + [ + 779, + 903, -5 + ], + [ + 779, + 669, -5 + ], + [ + 777, + 667, -5 + ], + [ + 772, + 664, -5 + ], + [ + 582, + 664, -5 + ], + [ + 582, + 589, -5 + ], + [ + 600, + 589, -5 + ], + [ + 602, + 587, -5 + ], + [ + 605, + 582, -5 + ], + [ + 605, + 450, -5 + ], + [ + 603, + 448, -5 + ], + [ + 598, + 445, -5 + ], + [ + 530, + 445, -5 + ] + ], + [ + [ + 592, + 599, -5 + ], + [ + 601, + 599, -5 + ], + [ + 601, + 654, -5 + ], + [ + 592, + 654, -5 + ], + [ + 592, + 599, -5 + ] + ], + [ + [ + 700, + 709, -5 + ], + [ + 734, + 709, -5 + ], + [ + 734, + 865, -5 + ], + [ + 723, + 865, -5 + ], + [ + 723, + 839, -5 + ], + [ + 720, + 831, -5 + ], + [ + 722, + 827, -5 + ], + [ + 723, + 799, -5 + ], + [ + 719, + 792, -5 + ], + [ + 717, + 790, -5 + ], + [ + 710, + 786, -5 + ], + [ + 700, + 784, -5 + ], + [ + 700, + 709, -5 + ], + [ + 710, + 719, -5 + ], + [ + 724, + 719, -5 + ], + [ + 724, + 782, -5 + ], + [ + 722, + 782, -5 + ], + [ + 719, + 779, -5 + ], + [ + 710, + 775, -5 + ], + [ + 710, + 719, -5 + ] + ], + [ + [ + 651, + 383, -5 + ], + [ + 664, + 383, -5 + ], + [ + 664, + 435, -5 + ], + [ + 656, + 435, -5 + ], + [ + 656, + 393, -5 + ], + [ + 652, + 386, -5 + ], + [ + 651, + 383, -5 + ] + ], + [ + [ + 592, + 327, -5 + ], + [ + 601, + 327, -5 + ], + [ + 601, + 369, -5 + ], + [ + 605, + 376, -5 + ], + [ + 606, + 379, -5 + ], + [ + 592, + 379, -5 + ], + [ + 592, + 327, -5 + ] + ], + [ + [ + 350, + 672, -5 + ], + [ + 350, + 673, -5 + ], + [ + 347, + 675, -5 + ], + [ + 345, + 679, -5 + ], + [ + 345, + 770, -5 + ], + [ + 347, + 772, -5 + ], + [ + 351, + 776, -5 + ], + [ + 351, + 1117, -5 + ], + [ + 353, + 1119, -5 + ], + [ + 358, + 1122, -5 + ], + [ + 407, + 1122, -5 + ], + [ + 407, + 1140, -5 + ], + [ + 409, + 1142, -5 + ], + [ + 414, + 1145, -5 + ], + [ + 546, + 1145, -5 + ], + [ + 548, + 1143, -5 + ], + [ + 551, + 1138, -5 + ], + [ + 551, + 1069, -5 + ], + [ + 549, + 1067, -5 + ], + [ + 544, + 1064, -5 + ], + [ + 412, + 1064, -5 + ], + [ + 410, + 1066, -5 + ], + [ + 407, + 1071, -5 + ], + [ + 407, + 1087, -5 + ], + [ + 386, + 1087, -5 + ], + [ + 386, + 775, -5 + ], + [ + 438, + 775, -5 + ], + [ + 440, + 773, -5 + ], + [ + 443, + 768, -5 + ], + [ + 443, + 741, -5 + ], + [ + 656, + 741, -5 + ], + [ + 656, + 795, -5 + ], + [ + 638, + 795, -5 + ], + [ + 636, + 797, -5 + ], + [ + 633, + 802, -5 + ], + [ + 633, + 825, -5 + ], + [ + 635, + 827, -5 + ], + [ + 640, + 830, -5 + ], + [ + 708, + 830, -5 + ], + [ + 710, + 828, -5 + ], + [ + 713, + 823, -5 + ], + [ + 713, + 800, -5 + ], + [ + 711, + 798, -5 + ], + [ + 706, + 795, -5 + ], + [ + 690, + 795, -5 + ], + [ + 690, + 711, -5 + ], + [ + 688, + 709, -5 + ], + [ + 683, + 706, -5 + ], + [ + 443, + 706, -5 + ], + [ + 443, + 677, -5 + ], + [ + 441, + 675, -5 + ], + [ + 436, + 672, -5 + ], + [ + 350, + 672, -5 + ] + ], + [ + [ + 200, + 468, -5 + ], + [ + 200, + 469, -5 + ], + [ + 197, + 471, -5 + ], + [ + 195, + 475, -5 + ], + [ + 195, + 477, -5 + ], + [ + 192, + 482, -5 + ], + [ + 192, + 545, -5 + ], + [ + 165, + 545, -5 + ], + [ + 163, + 547, -5 + ], + [ + 160, + 552, -5 + ], + [ + 160, + 643, -5 + ], + [ + 162, + 645, -5 + ], + [ + 167, + 648, -5 + ], + [ + 224, + 648, -5 + ], + [ + 224, + 672, -5 + ], + [ + 197, + 672, -5 + ], + [ + 195, + 674, -5 + ], + [ + 192, + 679, -5 + ], + [ + 192, + 770, -5 + ], + [ + 194, + 772, -5 + ], + [ + 199, + 775, -5 + ], + [ + 224, + 775, -5 + ], + [ + 224, + 810, -5 + ], + [ + 140, + 810, -5 + ], + [ + 138, + 812, -5 + ], + [ + 135, + 817, -5 + ], + [ + 135, + 833, -5 + ], + [ + 93, + 833, -5 + ], + [ + 91, + 835, -5 + ], + [ + 88, + 840, -5 + ], + [ + 88, + 1342, -5 + ], + [ + 90, + 1344, -5 + ], + [ + 95, + 1347, -5 + ], + [ + 181, + 1347, -5 + ], + [ + 183, + 1345, -5 + ], + [ + 186, + 1340, -5 + ], + [ + 186, + 1248, -5 + ], + [ + 184, + 1246, -5 + ], + [ + 179, + 1243, -5 + ], + [ + 123, + 1243, -5 + ], + [ + 123, + 1223, -5 + ], + [ + 774, + 1223, -5 + ], + [ + 776, + 1221, -5 + ], + [ + 779, + 1216, -5 + ], + [ + 779, + 1109, -5 + ], + [ + 974, + 1109, -5 + ], + [ + 976, + 1107, -5 + ], + [ + 979, + 1102, -5 + ], + [ + 979, + 830, -5 + ], + [ + 1165, + 830, -5 + ], + [ + 1167, + 828, -5 + ], + [ + 1170, + 823, -5 + ], + [ + 1170, + 800, -5 + ], + [ + 1168, + 798, -5 + ], + [ + 1163, + 795, -5 + ], + [ + 949, + 795, -5 + ], + [ + 947, + 797, -5 + ], + [ + 944, + 802, -5 + ], + [ + 944, + 1075, -5 + ], + [ + 749, + 1075, -5 + ], + [ + 747, + 1077, -5 + ], + [ + 744, + 1082, -5 + ], + [ + 744, + 1189, -5 + ], + [ + 123, + 1189, -5 + ], + [ + 123, + 868, -5 + ], + [ + 135, + 868, -5 + ], + [ + 135, + 886, -5 + ], + [ + 137, + 888, -5 + ], + [ + 142, + 891, -5 + ], + [ + 274, + 891, -5 + ], + [ + 276, + 889, -5 + ], + [ + 279, + 884, -5 + ], + [ + 279, + 815, -5 + ], + [ + 277, + 813, -5 + ], + [ + 272, + 810, -5 + ], + [ + 259, + 810, -5 + ], + [ + 259, + 775, -5 + ], + [ + 285, + 775, -5 + ], + [ + 287, + 773, -5 + ], + [ + 290, + 768, -5 + ], + [ + 290, + 677, -5 + ], + [ + 288, + 675, -5 + ], + [ + 283, + 672, -5 + ], + [ + 259, + 672, -5 + ], + [ + 259, + 550, -5 + ], + [ + 257, + 548, -5 + ], + [ + 252, + 545, -5 + ], + [ + 227, + 545, -5 + ], + [ + 227, + 516, -5 + ], + [ + 257, + 516, -5 + ], + [ + 259, + 514, -5 + ], + [ + 262, + 509, -5 + ], + [ + 262, + 473, -5 + ], + [ + 260, + 471, -5 + ], + [ + 255, + 468, -5 + ], + [ + 200, + 468, -5 + ] + ], + [ + [ + 277, + 441, -5 + ], + [ + 279, + 441, -5 + ], + [ + 279, + 447, -5 + ], + [ + 277, + 447, -5 + ], + [ + 275, + 445, -5 + ], + [ + 274, + 443, -5 + ], + [ + 276, + 443, -5 + ], + [ + 277, + 441, -5 + ] + ], + [ + [ + 292, + 489, -5 + ], + [ + 294, + 489, -5 + ], + [ + 296, + 491, -5 + ], + [ + 306, + 496, -5 + ], + [ + 318, + 498, -5 + ], + [ + 374, + 498, -5 + ], + [ + 388, + 493, -5 + ], + [ + 397, + 492, -5 + ], + [ + 397, + 515, -5 + ], + [ + 316, + 515, -5 + ], + [ + 302, + 520, -5 + ], + [ + 300, + 522, -5 + ], + [ + 290, + 532, -5 + ], + [ + 285, + 538, -5 + ], + [ + 285, + 536, -5 + ], + [ + 283, + 532, -5 + ], + [ + 290, + 519, -5 + ], + [ + 292, + 507, -5 + ], + [ + 292, + 489, -5 + ] + ], + [ + [ + 285, + 351, -5 + ], + [ + 287, + 351, -5 + ], + [ + 287, + 353, -5 + ], + [ + 295, + 363, -5 + ], + [ + 305, + 370, -5 + ], + [ + 314, + 373, -5 + ], + [ + 316, + 373, -5 + ], + [ + 397, + 375, -5 + ], + [ + 397, + 397, -5 + ], + [ + 388, + 397, -5 + ], + [ + 380, + 393, -5 + ], + [ + 368, + 391, -5 + ], + [ + 312, + 391, -5 + ], + [ + 298, + 396, -5 + ], + [ + 296, + 398, -5 + ], + [ + 292, + 400, -5 + ], + [ + 292, + 376, -5 + ], + [ + 287, + 362, -5 + ], + [ + 285, + 360, -5 + ], + [ + 283, + 356, -5 + ], + [ + 285, + 351, -5 + ] + ], + [ + [ + 412, + 810, -5 + ], + [ + 412, + 811, -5 + ], + [ + 409, + 813, -5 + ], + [ + 407, + 817, -5 + ], + [ + 407, + 886, -5 + ], + [ + 409, + 888, -5 + ], + [ + 414, + 891, -5 + ], + [ + 550, + 891, -5 + ], + [ + 563, + 886, -5 + ], + [ + 575, + 875, -5 + ], + [ + 579, + 870, -5 + ], + [ + 708, + 870, -5 + ], + [ + 710, + 868, -5 + ], + [ + 713, + 863, -5 + ], + [ + 713, + 840, -5 + ], + [ + 711, + 838, -5 + ], + [ + 706, + 835, -5 + ], + [ + 580, + 835, -5 + ], + [ + 572, + 822, -5 + ], + [ + 562, + 815, -5 + ], + [ + 558, + 813, -5 + ], + [ + 550, + 811, -5 + ], + [ + 412, + 810, -5 + ] + ], + [ + [ + 286, + 784, -5 + ], + [ + 290, + 784, -5 + ], + [ + 290, + 814, -5 + ], + [ + 288, + 814, -5 + ], + [ + 288, + 811, -5 + ], + [ + 279, + 802, -5 + ], + [ + 271, + 800, -5 + ], + [ + 269, + 800, -5 + ], + [ + 269, + 785, -5 + ], + [ + 286, + 785, -5 + ], + [ + 286, + 784, -5 + ] + ], + [ + [ + 288, + 887, -5 + ], + [ + 290, + 887, -5 + ], + [ + 290, + 941, -5 + ], + [ + 288, + 941, -5 + ], + [ + 288, + 938, -5 + ], + [ + 279, + 929, -5 + ], + [ + 271, + 927, -5 + ], + [ + 139, + 927, -5 + ], + [ + 133, + 929, -5 + ], + [ + 133, + 899, -5 + ], + [ + 136, + 899, -5 + ], + [ + 142, + 901, -5 + ], + [ + 275, + 901, -5 + ], + [ + 282, + 897, -5 + ], + [ + 284, + 895, -5 + ], + [ + 288, + 888, -5 + ], + [ + 288, + 887, -5 + ] + ], + [ + [ + 276, + 910, -5 + ], + [ + 280, + 910, -5 + ], + [ + 280, + 918, -5 + ], + [ + 276, + 918, -5 + ], + [ + 143, + 916, -5 + ], + [ + 143, + 911, -5 + ], + [ + 276, + 911, -5 + ], + [ + 276, + 910, -5 + ] + ], + [ + [ + 288, + 1014, -5 + ], + [ + 290, + 1014, -5 + ], + [ + 290, + 1068, -5 + ], + [ + 288, + 1068, -5 + ], + [ + 288, + 1065, -5 + ], + [ + 279, + 1056, -5 + ], + [ + 271, + 1054, -5 + ], + [ + 139, + 1054, -5 + ], + [ + 133, + 1056, -5 + ], + [ + 133, + 1026, -5 + ], + [ + 136, + 1026, -5 + ], + [ + 142, + 1028, -5 + ], + [ + 275, + 1028, -5 + ], + [ + 282, + 1024, -5 + ], + [ + 284, + 1022, -5 + ], + [ + 288, + 1015, -5 + ], + [ + 288, + 1014, -5 + ] + ], + [ + [ + 276, + 1037, -5 + ], + [ + 280, + 1037, -5 + ], + [ + 280, + 1045, -5 + ], + [ + 276, + 1045, -5 + ], + [ + 143, + 1043, -5 + ], + [ + 143, + 1038, -5 + ], + [ + 276, + 1038, -5 + ], + [ + 276, + 1037, -5 + ] + ], + [ + [ + 345, + 1127, -5 + ], + [ + 348, + 1127, -5 + ], + [ + 351, + 1130, -5 + ], + [ + 359, + 1132, -5 + ], + [ + 397, + 1132, -5 + ], + [ + 397, + 1141, -5 + ], + [ + 345, + 1141, -5 + ], + [ + 345, + 1127, -5 + ] + ], + [ + [ + 288, + 1141, -5 + ], + [ + 290, + 1141, -5 + ], + [ + 290, + 1179, -5 + ], + [ + 133, + 1179, -5 + ], + [ + 133, + 1153, -5 + ], + [ + 136, + 1153, -5 + ], + [ + 142, + 1155, -5 + ], + [ + 275, + 1155, -5 + ], + [ + 282, + 1151, -5 + ], + [ + 284, + 1149, -5 + ], + [ + 288, + 1142, -5 + ], + [ + 288, + 1141, -5 + ] + ], + [ + [ + 276, + 1164, -5 + ], + [ + 280, + 1164, -5 + ], + [ + 280, + 1169, -5 + ], + [ + 143, + 1169, -5 + ], + [ + 143, + 1165, -5 + ], + [ + 276, + 1165, -5 + ], + [ + 276, + 1164, -5 + ] + ], + [ + [ + 185, + 1233, -5 + ], + [ + 241, + 1233, -5 + ], + [ + 241, + 1235, -5 + ], + [ + 239, + 1235, -5 + ], + [ + 236, + 1238, -5 + ], + [ + 231, + 1245, -5 + ], + [ + 231, + 1247, -5 + ], + [ + 229, + 1268, -5 + ], + [ + 221, + 1272, -5 + ], + [ + 219, + 1274, -5 + ], + [ + 215, + 1281, -5 + ], + [ + 213, + 1359, -5 + ], + [ + 199, + 1359, -5 + ], + [ + 192, + 1363, -5 + ], + [ + 190, + 1365, -5 + ], + [ + 186, + 1372, -5 + ], + [ + 185, + 1484, -5 + ], + [ + 189, + 1491, -5 + ], + [ + 191, + 1493, -5 + ], + [ + 198, + 1497, -5 + ], + [ + 214, + 1499, -5 + ], + [ + 214, + 1613, -5 + ], + [ + 218, + 1620, -5 + ], + [ + 220, + 1622, -5 + ], + [ + 227, + 1626, -5 + ], + [ + 535, + 1628, -5 + ], + [ + 535, + 1645, -5 + ], + [ + 539, + 1652, -5 + ], + [ + 541, + 1654, -5 + ], + [ + 548, + 1658, -5 + ], + [ + 569, + 1660, -5 + ], + [ + 569, + 1774, -5 + ], + [ + 573, + 1781, -5 + ], + [ + 575, + 1783, -5 + ], + [ + 582, + 1787, -5 + ], + [ + 975, + 1788, -5 + ], + [ + 982, + 1784, -5 + ], + [ + 984, + 1782, -5 + ], + [ + 988, + 1775, -5 + ], + [ + 990, + 1741, -5 + ], + [ + 998, + 1741, -5 + ], + [ + 998, + 1812, -5 + ], + [ + 1002, + 1819, -5 + ], + [ + 1004, + 1821, -5 + ], + [ + 1011, + 1825, -5 + ], + [ + 1762, + 1826, -5 + ], + [ + 1769, + 1822, -5 + ], + [ + 1772, + 1821, -5 + ], + [ + 1772, + 1835, -5 + ], + [ + 82, + 1835, -5 + ], + [ + 82, + 1352, -5 + ], + [ + 85, + 1352, -5 + ], + [ + 88, + 1355, -5 + ], + [ + 96, + 1357, -5 + ], + [ + 182, + 1357, -5 + ], + [ + 189, + 1353, -5 + ], + [ + 191, + 1351, -5 + ], + [ + 195, + 1344, -5 + ], + [ + 196, + 1247, -5 + ], + [ + 192, + 1240, -5 + ], + [ + 190, + 1238, -5 + ], + [ + 185, + 1233, -5 + ] + ], + [ + [ + 92, + 1367, -5 + ], + [ + 177, + 1367, -5 + ], + [ + 177, + 1369, -5 + ], + [ + 175, + 1375, -5 + ], + [ + 175, + 1485, -5 + ], + [ + 181, + 1497, -5 + ], + [ + 183, + 1499, -5 + ], + [ + 191, + 1505, -5 + ], + [ + 202, + 1508, -5 + ], + [ + 204, + 1508, -5 + ], + [ + 204, + 1614, -5 + ], + [ + 210, + 1626, -5 + ], + [ + 212, + 1628, -5 + ], + [ + 220, + 1634, -5 + ], + [ + 231, + 1637, -5 + ], + [ + 525, + 1637, -5 + ], + [ + 525, + 1646, -5 + ], + [ + 531, + 1658, -5 + ], + [ + 533, + 1660, -5 + ], + [ + 541, + 1666, -5 + ], + [ + 552, + 1669, -5 + ], + [ + 559, + 1669, -5 + ], + [ + 559, + 1775, -5 + ], + [ + 565, + 1787, -5 + ], + [ + 567, + 1789, -5 + ], + [ + 575, + 1795, -5 + ], + [ + 586, + 1798, -5 + ], + [ + 976, + 1798, -5 + ], + [ + 988, + 1793, -5 + ], + [ + 988, + 1813, -5 + ], + [ + 993, + 1825, -5 + ], + [ + 491, + 1825, -5 + ], + [ + 491, + 1823, -5 + ], + [ + 494, + 1823, -5 + ], + [ + 503, + 1816, -5 + ], + [ + 508, + 1809, -5 + ], + [ + 511, + 1798, -5 + ], + [ + 511, + 1689, -5 + ], + [ + 505, + 1677, -5 + ], + [ + 503, + 1675, -5 + ], + [ + 495, + 1669, -5 + ], + [ + 484, + 1666, -5 + ], + [ + 401, + 1666, -5 + ], + [ + 389, + 1672, -5 + ], + [ + 387, + 1674, -5 + ], + [ + 381, + 1682, -5 + ], + [ + 378, + 1693, -5 + ], + [ + 378, + 1802, -5 + ], + [ + 384, + 1814, -5 + ], + [ + 386, + 1816, -5 + ], + [ + 394, + 1822, -5 + ], + [ + 398, + 1824, -5 + ], + [ + 288, + 1825, -5 + ], + [ + 288, + 1823, -5 + ], + [ + 291, + 1823, -5 + ], + [ + 300, + 1816, -5 + ], + [ + 305, + 1809, -5 + ], + [ + 308, + 1798, -5 + ], + [ + 308, + 1689, -5 + ], + [ + 302, + 1677, -5 + ], + [ + 300, + 1675, -5 + ], + [ + 292, + 1669, -5 + ], + [ + 281, + 1666, -5 + ], + [ + 198, + 1666, -5 + ], + [ + 186, + 1672, -5 + ], + [ + 184, + 1674, -5 + ], + [ + 178, + 1682, -5 + ], + [ + 175, + 1693, -5 + ], + [ + 175, + 1802, -5 + ], + [ + 181, + 1814, -5 + ], + [ + 183, + 1816, -5 + ], + [ + 191, + 1822, -5 + ], + [ + 195, + 1824, -5 + ], + [ + 92, + 1825, -5 + ], + [ + 92, + 1367, -5 + ], + [ + 102, + 1377, -5 + ], + [ + 165, + 1377, -5 + ], + [ + 165, + 1485, -5 + ], + [ + 170, + 1499, -5 + ], + [ + 172, + 1501, -5 + ], + [ + 182, + 1511, -5 + ], + [ + 192, + 1516, -5 + ], + [ + 194, + 1518, -5 + ], + [ + 194, + 1614, -5 + ], + [ + 199, + 1628, -5 + ], + [ + 201, + 1630, -5 + ], + [ + 211, + 1640, -5 + ], + [ + 221, + 1645, -5 + ], + [ + 233, + 1647, -5 + ], + [ + 516, + 1647, -5 + ], + [ + 516, + 1651, -5 + ], + [ + 523, + 1664, -5 + ], + [ + 526, + 1667, -5 + ], + [ + 537, + 1675, -5 + ], + [ + 546, + 1678, -5 + ], + [ + 548, + 1678, -5 + ], + [ + 551, + 1783, -5 + ], + [ + 559, + 1795, -5 + ], + [ + 561, + 1797, -5 + ], + [ + 571, + 1804, -5 + ], + [ + 580, + 1807, -5 + ], + [ + 582, + 1807, -5 + ], + [ + 976, + 1808, -5 + ], + [ + 978, + 1807, -5 + ], + [ + 978, + 1813, -5 + ], + [ + 979, + 1815, -5 + ], + [ + 517, + 1815, -5 + ], + [ + 517, + 1812, -5 + ], + [ + 519, + 1808, -5 + ], + [ + 521, + 1796, -5 + ], + [ + 521, + 1689, -5 + ], + [ + 516, + 1675, -5 + ], + [ + 514, + 1673, -5 + ], + [ + 504, + 1663, -5 + ], + [ + 494, + 1658, -5 + ], + [ + 482, + 1656, -5 + ], + [ + 401, + 1656, -5 + ], + [ + 387, + 1661, -5 + ], + [ + 385, + 1663, -5 + ], + [ + 375, + 1673, -5 + ], + [ + 370, + 1683, -5 + ], + [ + 368, + 1695, -5 + ], + [ + 368, + 1802, -5 + ], + [ + 372, + 1815, -5 + ], + [ + 314, + 1815, -5 + ], + [ + 314, + 1812, -5 + ], + [ + 316, + 1808, -5 + ], + [ + 318, + 1796, -5 + ], + [ + 318, + 1689, -5 + ], + [ + 313, + 1675, -5 + ], + [ + 311, + 1673, -5 + ], + [ + 301, + 1663, -5 + ], + [ + 291, + 1658, -5 + ], + [ + 279, + 1656, -5 + ], + [ + 198, + 1656, -5 + ], + [ + 184, + 1661, -5 + ], + [ + 182, + 1663, -5 + ], + [ + 172, + 1673, -5 + ], + [ + 167, + 1683, -5 + ], + [ + 165, + 1695, -5 + ], + [ + 165, + 1802, -5 + ], + [ + 169, + 1815, -5 + ], + [ + 102, + 1815, -5 + ], + [ + 102, + 1377, -5 + ] + ], + [ + [ + 205, + 1243, -5 + ], + [ + 221, + 1243, -5 + ], + [ + 221, + 1246, -5 + ], + [ + 218, + 1262, -5 + ], + [ + 208, + 1272, -5 + ], + [ + 206, + 1273, -5 + ], + [ + 206, + 1246, -5 + ], + [ + 205, + 1243, -5 + ] + ], + [ + [ + 338, + 1233, -5 + ], + [ + 417, + 1233, -5 + ], + [ + 417, + 1359, -5 + ], + [ + 402, + 1359, -5 + ], + [ + 395, + 1363, -5 + ], + [ + 393, + 1365, -5 + ], + [ + 389, + 1372, -5 + ], + [ + 388, + 1484, -5 + ], + [ + 392, + 1491, -5 + ], + [ + 394, + 1493, -5 + ], + [ + 401, + 1497, -5 + ], + [ + 487, + 1498, -5 + ], + [ + 494, + 1494, -5 + ], + [ + 496, + 1492, -5 + ], + [ + 500, + 1485, -5 + ], + [ + 501, + 1373, -5 + ], + [ + 497, + 1366, -5 + ], + [ + 495, + 1364, -5 + ], + [ + 488, + 1360, -5 + ], + [ + 472, + 1358, -5 + ], + [ + 472, + 1272, -5 + ], + [ + 696, + 1272, -5 + ], + [ + 696, + 1388, -5 + ], + [ + 676, + 1388, -5 + ], + [ + 669, + 1392, -5 + ], + [ + 667, + 1394, -5 + ], + [ + 663, + 1401, -5 + ], + [ + 662, + 1492, -5 + ], + [ + 663, + 1496, -5 + ], + [ + 658, + 1496, -5 + ], + [ + 658, + 1492, -5 + ], + [ + 659, + 1402, -5 + ], + [ + 655, + 1395, -5 + ], + [ + 653, + 1393, -5 + ], + [ + 646, + 1389, -5 + ], + [ + 549, + 1388, -5 + ], + [ + 542, + 1392, -5 + ], + [ + 540, + 1394, -5 + ], + [ + 536, + 1401, -5 + ], + [ + 535, + 1492, -5 + ], + [ + 539, + 1499, -5 + ], + [ + 541, + 1501, -5 + ], + [ + 548, + 1505, -5 + ], + [ + 569, + 1507, -5 + ], + [ + 569, + 1537, -5 + ], + [ + 570, + 1540, -5 + ], + [ + 549, + 1540, -5 + ], + [ + 542, + 1544, -5 + ], + [ + 540, + 1546, -5 + ], + [ + 536, + 1553, -5 + ], + [ + 534, + 1572, -5 + ], + [ + 269, + 1572, -5 + ], + [ + 269, + 1498, -5 + ], + [ + 284, + 1498, -5 + ], + [ + 291, + 1494, -5 + ], + [ + 293, + 1492, -5 + ], + [ + 297, + 1485, -5 + ], + [ + 298, + 1373, -5 + ], + [ + 294, + 1366, -5 + ], + [ + 292, + 1364, -5 + ], + [ + 285, + 1360, -5 + ], + [ + 269, + 1358, -5 + ], + [ + 340, + 1355, -5 + ], + [ + 343, + 1352, -5 + ], + [ + 348, + 1345, -5 + ], + [ + 348, + 1343, -5 + ], + [ + 349, + 1247, -5 + ], + [ + 345, + 1240, -5 + ], + [ + 343, + 1238, -5 + ], + [ + 338, + 1233, -5 + ] + ], + [ + [ + 358, + 1243, -5 + ], + [ + 407, + 1243, -5 + ], + [ + 407, + 1349, -5 + ], + [ + 401, + 1349, -5 + ], + [ + 389, + 1355, -5 + ], + [ + 387, + 1357, -5 + ], + [ + 381, + 1365, -5 + ], + [ + 378, + 1376, -5 + ], + [ + 378, + 1485, -5 + ], + [ + 384, + 1497, -5 + ], + [ + 386, + 1499, -5 + ], + [ + 394, + 1505, -5 + ], + [ + 405, + 1508, -5 + ], + [ + 488, + 1508, -5 + ], + [ + 500, + 1502, -5 + ], + [ + 502, + 1500, -5 + ], + [ + 508, + 1492, -5 + ], + [ + 511, + 1481, -5 + ], + [ + 511, + 1372, -5 + ], + [ + 505, + 1360, -5 + ], + [ + 503, + 1358, -5 + ], + [ + 495, + 1352, -5 + ], + [ + 484, + 1349, -5 + ], + [ + 482, + 1349, -5 + ], + [ + 482, + 1282, -5 + ], + [ + 686, + 1282, -5 + ], + [ + 686, + 1378, -5 + ], + [ + 675, + 1378, -5 + ], + [ + 663, + 1384, -5 + ], + [ + 661, + 1386, -5 + ], + [ + 659, + 1386, -5 + ], + [ + 655, + 1382, -5 + ], + [ + 643, + 1378, -5 + ], + [ + 548, + 1378, -5 + ], + [ + 536, + 1384, -5 + ], + [ + 534, + 1386, -5 + ], + [ + 528, + 1394, -5 + ], + [ + 525, + 1405, -5 + ], + [ + 525, + 1493, -5 + ], + [ + 531, + 1505, -5 + ], + [ + 533, + 1507, -5 + ], + [ + 541, + 1513, -5 + ], + [ + 552, + 1516, -5 + ], + [ + 559, + 1516, -5 + ], + [ + 559, + 1530, -5 + ], + [ + 548, + 1530, -5 + ], + [ + 536, + 1536, -5 + ], + [ + 534, + 1538, -5 + ], + [ + 528, + 1546, -5 + ], + [ + 525, + 1557, -5 + ], + [ + 525, + 1562, -5 + ], + [ + 279, + 1562, -5 + ], + [ + 279, + 1508, -5 + ], + [ + 285, + 1508, -5 + ], + [ + 297, + 1502, -5 + ], + [ + 299, + 1500, -5 + ], + [ + 305, + 1492, -5 + ], + [ + 308, + 1481, -5 + ], + [ + 308, + 1372, -5 + ], + [ + 306, + 1367, -5 + ], + [ + 336, + 1367, -5 + ], + [ + 348, + 1361, -5 + ], + [ + 350, + 1359, -5 + ], + [ + 356, + 1351, -5 + ], + [ + 359, + 1340, -5 + ], + [ + 359, + 1246, -5 + ], + [ + 358, + 1243, -5 + ], + [ + 369, + 1253, -5 + ], + [ + 397, + 1253, -5 + ], + [ + 397, + 1340, -5 + ], + [ + 386, + 1345, -5 + ], + [ + 375, + 1356, -5 + ], + [ + 370, + 1366, -5 + ], + [ + 368, + 1378, -5 + ], + [ + 368, + 1485, -5 + ], + [ + 373, + 1499, -5 + ], + [ + 375, + 1501, -5 + ], + [ + 385, + 1511, -5 + ], + [ + 395, + 1516, -5 + ], + [ + 407, + 1518, -5 + ], + [ + 488, + 1518, -5 + ], + [ + 502, + 1513, -5 + ], + [ + 504, + 1511, -5 + ], + [ + 514, + 1501, -5 + ], + [ + 516, + 1499, -5 + ], + [ + 525, + 1513, -5 + ], + [ + 527, + 1515, -5 + ], + [ + 537, + 1522, -5 + ], + [ + 538, + 1524, -5 + ], + [ + 536, + 1524, -5 + ], + [ + 526, + 1532, -5 + ], + [ + 519, + 1542, -5 + ], + [ + 516, + 1551, -5 + ], + [ + 289, + 1552, -5 + ], + [ + 289, + 1517, -5 + ], + [ + 300, + 1512, -5 + ], + [ + 311, + 1501, -5 + ], + [ + 316, + 1491, -5 + ], + [ + 318, + 1479, -5 + ], + [ + 318, + 1377, -5 + ], + [ + 336, + 1377, -5 + ], + [ + 350, + 1372, -5 + ], + [ + 352, + 1370, -5 + ], + [ + 362, + 1360, -5 + ], + [ + 367, + 1350, -5 + ], + [ + 369, + 1338, -5 + ], + [ + 369, + 1253, -5 + ] + ], + [ + [ + 453, + 751, -5 + ], + [ + 646, + 751, -5 + ], + [ + 646, + 785, -5 + ], + [ + 637, + 785, -5 + ], + [ + 630, + 789, -5 + ], + [ + 628, + 791, -5 + ], + [ + 624, + 798, -5 + ], + [ + 622, + 825, -5 + ], + [ + 586, + 825, -5 + ], + [ + 577, + 813, -5 + ], + [ + 562, + 804, -5 + ], + [ + 551, + 801, -5 + ], + [ + 411, + 800, -5 + ], + [ + 404, + 804, -5 + ], + [ + 402, + 806, -5 + ], + [ + 398, + 813, -5 + ], + [ + 396, + 814, -5 + ], + [ + 396, + 785, -5 + ], + [ + 439, + 785, -5 + ], + [ + 446, + 781, -5 + ], + [ + 448, + 779, -5 + ], + [ + 452, + 772, -5 + ], + [ + 453, + 751, -5 + ], + [ + 463, + 761, -5 + ], + [ + 636, + 761, -5 + ], + [ + 636, + 776, -5 + ], + [ + 633, + 776, -5 + ], + [ + 624, + 781, -5 + ], + [ + 622, + 783, -5 + ], + [ + 616, + 791, -5 + ], + [ + 613, + 802, -5 + ], + [ + 613, + 815, -5 + ], + [ + 591, + 815, -5 + ], + [ + 581, + 804, -5 + ], + [ + 574, + 799, -5 + ], + [ + 566, + 795, -5 + ], + [ + 552, + 791, -5 + ], + [ + 452, + 789, -5 + ], + [ + 454, + 787, -5 + ], + [ + 460, + 779, -5 + ], + [ + 463, + 768, -5 + ], + [ + 463, + 761, -5 + ], + [ + 473, + 771, -5 + ], + [ + 619, + 771, -5 + ], + [ + 619, + 773, -5 + ], + [ + 610, + 782, -5 + ], + [ + 605, + 792, -5 + ], + [ + 603, + 804, -5 + ], + [ + 595, + 805, -5 + ], + [ + 595, + 803, -5 + ], + [ + 580, + 791, -5 + ], + [ + 568, + 785, -5 + ], + [ + 557, + 782, -5 + ], + [ + 545, + 780, -5 + ], + [ + 471, + 780, -5 + ], + [ + 471, + 777, -5 + ], + [ + 473, + 771, -5 + ] + ], + [ + [ + 412, + 937, -5 + ], + [ + 412, + 938, -5 + ], + [ + 409, + 940, -5 + ], + [ + 407, + 944, -5 + ], + [ + 407, + 1013, -5 + ], + [ + 409, + 1015, -5 + ], + [ + 414, + 1018, -5 + ], + [ + 546, + 1018, -5 + ], + [ + 548, + 1016, -5 + ], + [ + 551, + 1011, -5 + ], + [ + 551, + 942, -5 + ], + [ + 549, + 940, -5 + ], + [ + 544, + 937, -5 + ], + [ + 412, + 937, -5 + ] + ], + [ + [ + 140, + 937, -5 + ], + [ + 140, + 938, -5 + ], + [ + 137, + 940, -5 + ], + [ + 135, + 944, -5 + ], + [ + 135, + 1013, -5 + ], + [ + 137, + 1015, -5 + ], + [ + 142, + 1018, -5 + ], + [ + 274, + 1018, -5 + ], + [ + 276, + 1016, -5 + ], + [ + 279, + 1011, -5 + ], + [ + 279, + 942, -5 + ], + [ + 277, + 940, -5 + ], + [ + 272, + 937, -5 + ], + [ + 140, + 937, -5 + ] + ], + [ + [ + 597, + 1035, -5 + ], + [ + 597, + 1036, -5 + ], + [ + 594, + 1038, -5 + ], + [ + 592, + 1042, -5 + ], + [ + 592, + 1065, -5 + ], + [ + 594, + 1067, -5 + ], + [ + 599, + 1070, -5 + ], + [ + 708, + 1070, -5 + ], + [ + 710, + 1068, -5 + ], + [ + 713, + 1063, -5 + ], + [ + 713, + 1040, -5 + ], + [ + 711, + 1038, -5 + ], + [ + 706, + 1035, -5 + ], + [ + 597, + 1035, -5 + ] + ], + [ + [ + 583, + 880, -5 + ], + [ + 623, + 880, -5 + ], + [ + 623, + 906, -5 + ], + [ + 626, + 914, -5 + ], + [ + 624, + 918, -5 + ], + [ + 623, + 946, -5 + ], + [ + 626, + 954, -5 + ], + [ + 624, + 958, -5 + ], + [ + 623, + 986, -5 + ], + [ + 626, + 994, -5 + ], + [ + 624, + 998, -5 + ], + [ + 622, + 1025, -5 + ], + [ + 596, + 1025, -5 + ], + [ + 589, + 1029, -5 + ], + [ + 587, + 1031, -5 + ], + [ + 583, + 1038, -5 + ], + [ + 582, + 1066, -5 + ], + [ + 585, + 1074, -5 + ], + [ + 583, + 1078, -5 + ], + [ + 581, + 1141, -5 + ], + [ + 561, + 1141, -5 + ], + [ + 561, + 1068, -5 + ], + [ + 557, + 1061, -5 + ], + [ + 555, + 1059, -5 + ], + [ + 548, + 1055, -5 + ], + [ + 411, + 1054, -5 + ], + [ + 404, + 1058, -5 + ], + [ + 402, + 1060, -5 + ], + [ + 398, + 1067, -5 + ], + [ + 396, + 1068, -5 + ], + [ + 396, + 1014, -5 + ], + [ + 398, + 1014, -5 + ], + [ + 398, + 1017, -5 + ], + [ + 407, + 1026, -5 + ], + [ + 415, + 1028, -5 + ], + [ + 547, + 1028, -5 + ], + [ + 554, + 1024, -5 + ], + [ + 556, + 1022, -5 + ], + [ + 560, + 1015, -5 + ], + [ + 561, + 941, -5 + ], + [ + 557, + 934, -5 + ], + [ + 555, + 932, -5 + ], + [ + 548, + 928, -5 + ], + [ + 411, + 927, -5 + ], + [ + 404, + 931, -5 + ], + [ + 402, + 933, -5 + ], + [ + 398, + 940, -5 + ], + [ + 396, + 941, -5 + ], + [ + 396, + 887, -5 + ], + [ + 398, + 887, -5 + ], + [ + 398, + 890, -5 + ], + [ + 407, + 899, -5 + ], + [ + 415, + 901, -5 + ], + [ + 551, + 901, -5 + ], + [ + 568, + 895, -5 + ], + [ + 570, + 893, -5 + ], + [ + 582, + 882, -5 + ], + [ + 583, + 880, -5 + ], + [ + 588, + 890, -5 + ], + [ + 613, + 890, -5 + ], + [ + 613, + 907, -5 + ], + [ + 615, + 913, -5 + ], + [ + 615, + 915, -5 + ], + [ + 613, + 921, -5 + ], + [ + 613, + 947, -5 + ], + [ + 615, + 953, -5 + ], + [ + 615, + 955, -5 + ], + [ + 613, + 961, -5 + ], + [ + 613, + 987, -5 + ], + [ + 615, + 993, -5 + ], + [ + 615, + 995, -5 + ], + [ + 613, + 1001, -5 + ], + [ + 613, + 1015, -5 + ], + [ + 595, + 1015, -5 + ], + [ + 583, + 1021, -5 + ], + [ + 581, + 1023, -5 + ], + [ + 575, + 1031, -5 + ], + [ + 572, + 1042, -5 + ], + [ + 572, + 1067, -5 + ], + [ + 574, + 1073, -5 + ], + [ + 574, + 1075, -5 + ], + [ + 572, + 1078, -5 + ], + [ + 569, + 1061, -5 + ], + [ + 562, + 1052, -5 + ], + [ + 555, + 1047, -5 + ], + [ + 544, + 1044, -5 + ], + [ + 410, + 1044, -5 + ], + [ + 406, + 1045, -5 + ], + [ + 406, + 1037, -5 + ], + [ + 410, + 1037, -5 + ], + [ + 548, + 1038, -5 + ], + [ + 560, + 1032, -5 + ], + [ + 562, + 1030, -5 + ], + [ + 568, + 1022, -5 + ], + [ + 571, + 1011, -5 + ], + [ + 571, + 940, -5 + ], + [ + 565, + 928, -5 + ], + [ + 563, + 926, -5 + ], + [ + 555, + 920, -5 + ], + [ + 544, + 917, -5 + ], + [ + 410, + 917, -5 + ], + [ + 406, + 918, -5 + ], + [ + 406, + 910, -5 + ], + [ + 410, + 910, -5 + ], + [ + 552, + 911, -5 + ], + [ + 570, + 905, -5 + ], + [ + 585, + 894, -5 + ], + [ + 588, + 890, -5 + ], + [ + 592, + 900, -5 + ], + [ + 603, + 900, -5 + ], + [ + 603, + 907, -5 + ], + [ + 604, + 918, -5 + ], + [ + 603, + 947, -5 + ], + [ + 604, + 958, -5 + ], + [ + 603, + 987, -5 + ], + [ + 604, + 998, -5 + ], + [ + 602, + 1005, -5 + ], + [ + 595, + 1005, -5 + ], + [ + 581, + 1009, -5 + ], + [ + 581, + 940, -5 + ], + [ + 576, + 926, -5 + ], + [ + 574, + 924, -5 + ], + [ + 568, + 916, -5 + ], + [ + 570, + 916, -5 + ], + [ + 586, + 906, -5 + ], + [ + 588, + 904, -5 + ], + [ + 592, + 900, -5 + ] + ], + [ + [ + 789, + 1140, -5 + ], + [ + 789, + 1141, -5 + ], + [ + 786, + 1143, -5 + ], + [ + 784, + 1147, -5 + ], + [ + 784, + 1227, -5 + ], + [ + 432, + 1227, -5 + ], + [ + 430, + 1229, -5 + ], + [ + 427, + 1234, -5 + ], + [ + 427, + 1369, -5 + ], + [ + 403, + 1369, -5 + ], + [ + 401, + 1371, -5 + ], + [ + 398, + 1376, -5 + ], + [ + 398, + 1483, -5 + ], + [ + 400, + 1485, -5 + ], + [ + 405, + 1488, -5 + ], + [ + 486, + 1488, -5 + ], + [ + 488, + 1486, -5 + ], + [ + 491, + 1481, -5 + ], + [ + 491, + 1374, -5 + ], + [ + 489, + 1372, -5 + ], + [ + 484, + 1369, -5 + ], + [ + 462, + 1369, -5 + ], + [ + 462, + 1262, -5 + ], + [ + 814, + 1262, -5 + ], + [ + 816, + 1260, -5 + ], + [ + 819, + 1255, -5 + ], + [ + 819, + 1145, -5 + ], + [ + 817, + 1143, -5 + ], + [ + 812, + 1140, -5 + ], + [ + 789, + 1140, -5 + ] + ], + [ + [ + 722, + 1122, -5 + ], + [ + 724, + 1122, -5 + ], + [ + 724, + 1169, -5 + ], + [ + 647, + 1169, -5 + ], + [ + 647, + 1129, -5 + ], + [ + 710, + 1129, -5 + ], + [ + 722, + 1123, -5 + ], + [ + 722, + 1122, -5 + ] + ], + [ + [ + 710, + 1138, -5 + ], + [ + 714, + 1138, -5 + ], + [ + 714, + 1159, -5 + ], + [ + 657, + 1159, -5 + ], + [ + 657, + 1139, -5 + ], + [ + 710, + 1139, -5 + ], + [ + 710, + 1138, -5 + ] + ], + [ + [ + 751, + 1310, -5 + ], + [ + 853, + 1310, -5 + ], + [ + 853, + 1313, -5 + ], + [ + 850, + 1316, -5 + ], + [ + 848, + 1324, -5 + ], + [ + 848, + 1456, -5 + ], + [ + 852, + 1463, -5 + ], + [ + 854, + 1465, -5 + ], + [ + 861, + 1469, -5 + ], + [ + 885, + 1471, -5 + ], + [ + 878, + 1475, -5 + ], + [ + 876, + 1477, -5 + ], + [ + 872, + 1484, -5 + ], + [ + 870, + 1577, -5 + ], + [ + 862, + 1577, -5 + ], + [ + 855, + 1581, -5 + ], + [ + 853, + 1583, -5 + ], + [ + 849, + 1590, -5 + ], + [ + 848, + 1727, -5 + ], + [ + 850, + 1733, -5 + ], + [ + 624, + 1733, -5 + ], + [ + 624, + 1659, -5 + ], + [ + 645, + 1659, -5 + ], + [ + 652, + 1655, -5 + ], + [ + 654, + 1653, -5 + ], + [ + 658, + 1646, -5 + ], + [ + 659, + 1554, -5 + ], + [ + 658, + 1551, -5 + ], + [ + 663, + 1551, -5 + ], + [ + 663, + 1554, -5 + ], + [ + 662, + 1645, -5 + ], + [ + 666, + 1652, -5 + ], + [ + 668, + 1654, -5 + ], + [ + 675, + 1658, -5 + ], + [ + 771, + 1659, -5 + ], + [ + 778, + 1655, -5 + ], + [ + 780, + 1653, -5 + ], + [ + 784, + 1646, -5 + ], + [ + 785, + 1554, -5 + ], + [ + 781, + 1547, -5 + ], + [ + 779, + 1545, -5 + ], + [ + 772, + 1541, -5 + ], + [ + 751, + 1539, -5 + ], + [ + 751, + 1510, -5 + ], + [ + 750, + 1506, -5 + ], + [ + 771, + 1506, -5 + ], + [ + 778, + 1502, -5 + ], + [ + 780, + 1500, -5 + ], + [ + 784, + 1493, -5 + ], + [ + 785, + 1402, -5 + ], + [ + 781, + 1395, -5 + ], + [ + 779, + 1393, -5 + ], + [ + 772, + 1389, -5 + ], + [ + 751, + 1387, -5 + ], + [ + 751, + 1310, -5 + ], + [ + 761, + 1320, -5 + ], + [ + 838, + 1320, -5 + ], + [ + 838, + 1457, -5 + ], + [ + 844, + 1469, -5 + ], + [ + 846, + 1471, -5 + ], + [ + 854, + 1477, -5 + ], + [ + 862, + 1481, -5 + ], + [ + 862, + 1484, -5 + ], + [ + 860, + 1568, -5 + ], + [ + 858, + 1568, -5 + ], + [ + 849, + 1573, -5 + ], + [ + 847, + 1575, -5 + ], + [ + 841, + 1583, -5 + ], + [ + 838, + 1594, -5 + ], + [ + 838, + 1723, -5 + ], + [ + 634, + 1723, -5 + ], + [ + 634, + 1669, -5 + ], + [ + 646, + 1669, -5 + ], + [ + 658, + 1663, -5 + ], + [ + 660, + 1661, -5 + ], + [ + 662, + 1661, -5 + ], + [ + 666, + 1665, -5 + ], + [ + 678, + 1669, -5 + ], + [ + 772, + 1669, -5 + ], + [ + 784, + 1663, -5 + ], + [ + 786, + 1661, -5 + ], + [ + 792, + 1653, -5 + ], + [ + 795, + 1642, -5 + ], + [ + 795, + 1553, -5 + ], + [ + 789, + 1541, -5 + ], + [ + 787, + 1539, -5 + ], + [ + 779, + 1533, -5 + ], + [ + 768, + 1530, -5 + ], + [ + 761, + 1530, -5 + ], + [ + 761, + 1516, -5 + ], + [ + 772, + 1516, -5 + ], + [ + 784, + 1510, -5 + ], + [ + 786, + 1508, -5 + ], + [ + 792, + 1500, -5 + ], + [ + 795, + 1489, -5 + ], + [ + 795, + 1401, -5 + ], + [ + 789, + 1389, -5 + ], + [ + 787, + 1387, -5 + ], + [ + 779, + 1381, -5 + ], + [ + 768, + 1378, -5 + ], + [ + 761, + 1378, -5 + ], + [ + 761, + 1320, -5 + ], + [ + 771, + 1330, -5 + ], + [ + 828, + 1330, -5 + ], + [ + 828, + 1457, -5 + ], + [ + 833, + 1471, -5 + ], + [ + 835, + 1473, -5 + ], + [ + 845, + 1483, -5 + ], + [ + 851, + 1488, -5 + ], + [ + 851, + 1561, -5 + ], + [ + 849, + 1561, -5 + ], + [ + 839, + 1569, -5 + ], + [ + 832, + 1579, -5 + ], + [ + 829, + 1588, -5 + ], + [ + 829, + 1590, -5 + ], + [ + 827, + 1713, -5 + ], + [ + 644, + 1713, -5 + ], + [ + 644, + 1679, -5 + ], + [ + 646, + 1679, -5 + ], + [ + 663, + 1674, -5 + ], + [ + 669, + 1677, -5 + ], + [ + 681, + 1679, -5 + ], + [ + 772, + 1679, -5 + ], + [ + 786, + 1674, -5 + ], + [ + 788, + 1672, -5 + ], + [ + 798, + 1662, -5 + ], + [ + 803, + 1652, -5 + ], + [ + 805, + 1640, -5 + ], + [ + 805, + 1553, -5 + ], + [ + 800, + 1539, -5 + ], + [ + 798, + 1537, -5 + ], + [ + 788, + 1527, -5 + ], + [ + 782, + 1522, -5 + ], + [ + 784, + 1522, -5 + ], + [ + 794, + 1514, -5 + ], + [ + 801, + 1504, -5 + ], + [ + 804, + 1495, -5 + ], + [ + 804, + 1493, -5 + ], + [ + 805, + 1401, -5 + ], + [ + 800, + 1387, -5 + ], + [ + 798, + 1385, -5 + ], + [ + 788, + 1375, -5 + ], + [ + 778, + 1370, -5 + ], + [ + 771, + 1367, -5 + ], + [ + 771, + 1330, -5 + ] + ], + [ + [ + 869, + 1272, -5 + ], + [ + 894, + 1272, -5 + ], + [ + 894, + 1289, -5 + ], + [ + 889, + 1289, -5 + ], + [ + 873, + 1295, -5 + ], + [ + 868, + 1298, -5 + ], + [ + 868, + 1296, -5 + ], + [ + 869, + 1272, -5 + ] + ], + [ + [ + 989, + 1275, -5 + ], + [ + 1061, + 1275, -5 + ], + [ + 1061, + 1306, -5 + ], + [ + 989, + 1306, -5 + ], + [ + 989, + 1275, -5 + ], + [ + 999, + 1285, -5 + ], + [ + 1051, + 1285, -5 + ], + [ + 1051, + 1296, -5 + ], + [ + 999, + 1296, -5 + ], + [ + 999, + 1285, -5 + ] + ], + [ + [ + 989, + 1470, -5 + ], + [ + 998, + 1470, -5 + ], + [ + 998, + 1521, -5 + ], + [ + 984, + 1521, -5 + ], + [ + 984, + 1518, -5 + ], + [ + 987, + 1515, -5 + ], + [ + 989, + 1507, -5 + ], + [ + 989, + 1470, -5 + ] + ], + [ + [ + 925, + 1525, -5 + ], + [ + 939, + 1525, -5 + ], + [ + 939, + 1528, -5 + ], + [ + 936, + 1531, -5 + ], + [ + 934, + 1539, -5 + ], + [ + 934, + 1577, -5 + ], + [ + 925, + 1577, -5 + ], + [ + 925, + 1525, -5 + ] + ], + [ + [ + 1052, + 1470, -5 + ], + [ + 1061, + 1470, -5 + ], + [ + 1061, + 1511, -5 + ], + [ + 1065, + 1518, -5 + ], + [ + 1066, + 1521, -5 + ], + [ + 1052, + 1521, -5 + ], + [ + 1052, + 1470, -5 + ] + ], + [ + [ + 1111, + 1525, -5 + ], + [ + 1125, + 1525, -5 + ], + [ + 1125, + 1577, -5 + ], + [ + 1116, + 1577, -5 + ], + [ + 1116, + 1535, -5 + ], + [ + 1112, + 1528, -5 + ], + [ + 1111, + 1525, -5 + ] + ], + [ + [ + 1052, + 1741, -5 + ], + [ + 1061, + 1741, -5 + ], + [ + 1061, + 1772, -5 + ], + [ + 1052, + 1772, -5 + ], + [ + 1052, + 1741, -5 + ] + ], + [ + [ + 550, + 1398, -5 + ], + [ + 550, + 1399, -5 + ], + [ + 547, + 1401, -5 + ], + [ + 545, + 1405, -5 + ], + [ + 545, + 1491, -5 + ], + [ + 547, + 1493, -5 + ], + [ + 552, + 1496, -5 + ], + [ + 579, + 1496, -5 + ], + [ + 579, + 1536, -5 + ], + [ + 581, + 1538, -5 + ], + [ + 586, + 1541, -5 + ], + [ + 706, + 1541, -5 + ], + [ + 706, + 1550, -5 + ], + [ + 677, + 1550, -5 + ], + [ + 675, + 1552, -5 + ], + [ + 672, + 1557, -5 + ], + [ + 672, + 1644, -5 + ], + [ + 674, + 1646, -5 + ], + [ + 679, + 1649, -5 + ], + [ + 770, + 1649, -5 + ], + [ + 772, + 1647, -5 + ], + [ + 775, + 1642, -5 + ], + [ + 775, + 1555, -5 + ], + [ + 773, + 1553, -5 + ], + [ + 768, + 1550, -5 + ], + [ + 741, + 1550, -5 + ], + [ + 741, + 1511, -5 + ], + [ + 739, + 1509, -5 + ], + [ + 734, + 1506, -5 + ], + [ + 614, + 1506, -5 + ], + [ + 614, + 1496, -5 + ], + [ + 644, + 1496, -5 + ], + [ + 646, + 1494, -5 + ], + [ + 649, + 1489, -5 + ], + [ + 649, + 1403, -5 + ], + [ + 647, + 1401, -5 + ], + [ + 642, + 1398, -5 + ], + [ + 550, + 1398, -5 + ] + ], + [ + [ + 492, + 1292, -5 + ], + [ + 676, + 1292, -5 + ], + [ + 676, + 1368, -5 + ], + [ + 663, + 1372, -5 + ], + [ + 658, + 1373, -5 + ], + [ + 652, + 1370, -5 + ], + [ + 640, + 1368, -5 + ], + [ + 548, + 1368, -5 + ], + [ + 534, + 1373, -5 + ], + [ + 532, + 1375, -5 + ], + [ + 521, + 1384, -5 + ], + [ + 521, + 1372, -5 + ], + [ + 516, + 1358, -5 + ], + [ + 514, + 1356, -5 + ], + [ + 504, + 1346, -5 + ], + [ + 494, + 1341, -5 + ], + [ + 492, + 1339, -5 + ], + [ + 492, + 1292, -5 + ] + ], + [ + [ + 403, + 1686, -5 + ], + [ + 403, + 1687, -5 + ], + [ + 400, + 1689, -5 + ], + [ + 398, + 1693, -5 + ], + [ + 398, + 1800, -5 + ], + [ + 400, + 1802, -5 + ], + [ + 405, + 1805, -5 + ], + [ + 486, + 1805, -5 + ], + [ + 488, + 1803, -5 + ], + [ + 491, + 1798, -5 + ], + [ + 491, + 1691, -5 + ], + [ + 489, + 1689, -5 + ], + [ + 484, + 1686, -5 + ], + [ + 403, + 1686, -5 + ], + [ + 402, + 1676, -5 + ], + [ + 402, + 1677, -5 + ], + [ + 399, + 1677, -5 + ], + [ + 390, + 1686, -5 + ], + [ + 388, + 1694, -5 + ], + [ + 388, + 1801, -5 + ], + [ + 392, + 1808, -5 + ], + [ + 394, + 1810, -5 + ], + [ + 401, + 1814, -5 + ], + [ + 487, + 1815, -5 + ], + [ + 494, + 1811, -5 + ], + [ + 496, + 1809, -5 + ], + [ + 500, + 1802, -5 + ], + [ + 501, + 1690, -5 + ], + [ + 497, + 1683, -5 + ], + [ + 495, + 1681, -5 + ], + [ + 488, + 1677, -5 + ], + [ + 402, + 1676, -5 + ] + ], + [ + [ + 200, + 1686, -5 + ], + [ + 200, + 1687, -5 + ], + [ + 197, + 1689, -5 + ], + [ + 195, + 1693, -5 + ], + [ + 195, + 1800, -5 + ], + [ + 197, + 1802, -5 + ], + [ + 202, + 1805, -5 + ], + [ + 283, + 1805, -5 + ], + [ + 285, + 1803, -5 + ], + [ + 288, + 1798, -5 + ], + [ + 288, + 1691, -5 + ], + [ + 286, + 1689, -5 + ], + [ + 281, + 1686, -5 + ], + [ + 200, + 1686, -5 + ], + [ + 199, + 1676, -5 + ], + [ + 199, + 1677, -5 + ], + [ + 196, + 1677, -5 + ], + [ + 187, + 1686, -5 + ], + [ + 185, + 1694, -5 + ], + [ + 185, + 1801, -5 + ], + [ + 189, + 1808, -5 + ], + [ + 191, + 1810, -5 + ], + [ + 198, + 1814, -5 + ], + [ + 284, + 1815, -5 + ], + [ + 291, + 1811, -5 + ], + [ + 293, + 1809, -5 + ], + [ + 297, + 1802, -5 + ], + [ + 298, + 1690, -5 + ], + [ + 294, + 1683, -5 + ], + [ + 292, + 1681, -5 + ], + [ + 285, + 1677, -5 + ], + [ + 199, + 1676, -5 + ] + ], + [ + [ + 829, + 1140, -5 + ], + [ + 829, + 1141, -5 + ], + [ + 826, + 1143, -5 + ], + [ + 824, + 1147, -5 + ], + [ + 824, + 1265, -5 + ], + [ + 711, + 1265, -5 + ], + [ + 709, + 1267, -5 + ], + [ + 706, + 1272, -5 + ], + [ + 706, + 1398, -5 + ], + [ + 677, + 1398, -5 + ], + [ + 675, + 1400, -5 + ], + [ + 672, + 1405, -5 + ], + [ + 672, + 1491, -5 + ], + [ + 674, + 1493, -5 + ], + [ + 679, + 1496, -5 + ], + [ + 770, + 1496, -5 + ], + [ + 772, + 1494, -5 + ], + [ + 775, + 1489, -5 + ], + [ + 775, + 1403, -5 + ], + [ + 773, + 1401, -5 + ], + [ + 768, + 1398, -5 + ], + [ + 741, + 1398, -5 + ], + [ + 741, + 1300, -5 + ], + [ + 854, + 1300, -5 + ], + [ + 856, + 1298, -5 + ], + [ + 859, + 1293, -5 + ], + [ + 859, + 1145, -5 + ], + [ + 857, + 1143, -5 + ], + [ + 852, + 1140, -5 + ], + [ + 829, + 1140, -5 + ] + ], + [ + [ + 869, + 1140, -5 + ], + [ + 869, + 1141, -5 + ], + [ + 866, + 1143, -5 + ], + [ + 864, + 1147, -5 + ], + [ + 864, + 1257, -5 + ], + [ + 866, + 1259, -5 + ], + [ + 871, + 1262, -5 + ], + [ + 894, + 1262, -5 + ], + [ + 896, + 1260, -5 + ], + [ + 899, + 1255, -5 + ], + [ + 899, + 1145, -5 + ], + [ + 897, + 1143, -5 + ], + [ + 892, + 1140, -5 + ], + [ + 869, + 1140, -5 + ] + ], + [ + [ + 909, + 1140, -5 + ], + [ + 909, + 1141, -5 + ], + [ + 906, + 1143, -5 + ], + [ + 904, + 1147, -5 + ], + [ + 904, + 1299, -5 + ], + [ + 890, + 1299, -5 + ], + [ + 879, + 1303, -5 + ], + [ + 866, + 1314, -5 + ], + [ + 864, + 1316, -5 + ], + [ + 860, + 1319, -5 + ], + [ + 858, + 1323, -5 + ], + [ + 858, + 1455, -5 + ], + [ + 860, + 1457, -5 + ], + [ + 865, + 1460, -5 + ], + [ + 933, + 1460, -5 + ], + [ + 935, + 1458, -5 + ], + [ + 938, + 1453, -5 + ], + [ + 938, + 1400, -5 + ], + [ + 939, + 1145, -5 + ], + [ + 937, + 1143, -5 + ], + [ + 932, + 1140, -5 + ], + [ + 909, + 1140, -5 + ] + ], + [ + [ + 949, + 1140, -5 + ], + [ + 949, + 1141, -5 + ], + [ + 946, + 1143, -5 + ], + [ + 944, + 1147, -5 + ], + [ + 944, + 1481, -5 + ], + [ + 886, + 1481, -5 + ], + [ + 884, + 1483, -5 + ], + [ + 881, + 1488, -5 + ], + [ + 881, + 1587, -5 + ], + [ + 863, + 1587, -5 + ], + [ + 861, + 1589, -5 + ], + [ + 858, + 1594, -5 + ], + [ + 858, + 1726, -5 + ], + [ + 860, + 1728, -5 + ], + [ + 865, + 1731, -5 + ], + [ + 933, + 1731, -5 + ], + [ + 935, + 1729, -5 + ], + [ + 938, + 1724, -5 + ], + [ + 938, + 1592, -5 + ], + [ + 936, + 1590, -5 + ], + [ + 931, + 1587, -5 + ], + [ + 915, + 1587, -5 + ], + [ + 915, + 1515, -5 + ], + [ + 974, + 1515, -5 + ], + [ + 976, + 1513, -5 + ], + [ + 979, + 1508, -5 + ], + [ + 979, + 1145, -5 + ], + [ + 977, + 1143, -5 + ], + [ + 972, + 1140, -5 + ], + [ + 949, + 1140, -5 + ] + ], + [ + [ + 989, + 1140, -5 + ], + [ + 989, + 1141, -5 + ], + [ + 986, + 1143, -5 + ], + [ + 984, + 1147, -5 + ], + [ + 984, + 1260, -5 + ], + [ + 986, + 1262, -5 + ], + [ + 991, + 1265, -5 + ], + [ + 1071, + 1265, -5 + ], + [ + 1071, + 1510, -5 + ], + [ + 1073, + 1512, -5 + ], + [ + 1078, + 1515, -5 + ], + [ + 1135, + 1515, -5 + ], + [ + 1135, + 1587, -5 + ], + [ + 1117, + 1587, -5 + ], + [ + 1115, + 1589, -5 + ], + [ + 1112, + 1594, -5 + ], + [ + 1112, + 1726, -5 + ], + [ + 1114, + 1728, -5 + ], + [ + 1119, + 1731, -5 + ], + [ + 1187, + 1731, -5 + ], + [ + 1189, + 1729, -5 + ], + [ + 1192, + 1724, -5 + ], + [ + 1192, + 1649, -5 + ], + [ + 1456, + 1649, -5 + ], + [ + 1458, + 1647, -5 + ], + [ + 1461, + 1642, -5 + ], + [ + 1461, + 1555, -5 + ], + [ + 1459, + 1553, -5 + ], + [ + 1454, + 1550, -5 + ], + [ + 1363, + 1550, -5 + ], + [ + 1361, + 1552, -5 + ], + [ + 1358, + 1557, -5 + ], + [ + 1358, + 1614, -5 + ], + [ + 1192, + 1614, -5 + ], + [ + 1192, + 1592, -5 + ], + [ + 1190, + 1590, -5 + ], + [ + 1185, + 1587, -5 + ], + [ + 1169, + 1587, -5 + ], + [ + 1169, + 1486, -5 + ], + [ + 1167, + 1484, -5 + ], + [ + 1162, + 1481, -5 + ], + [ + 1106, + 1481, -5 + ], + [ + 1106, + 1236, -5 + ], + [ + 1104, + 1234, -5 + ], + [ + 1099, + 1231, -5 + ], + [ + 1019, + 1231, -5 + ], + [ + 1019, + 1145, -5 + ], + [ + 1017, + 1143, -5 + ], + [ + 1012, + 1140, -5 + ], + [ + 989, + 1140, -5 + ] + ], + [ + [ + 1029, + 1140, -5 + ], + [ + 1029, + 1141, -5 + ], + [ + 1026, + 1143, -5 + ], + [ + 1024, + 1147, -5 + ], + [ + 1024, + 1218, -5 + ], + [ + 1026, + 1220, -5 + ], + [ + 1031, + 1223, -5 + ], + [ + 1135, + 1223, -5 + ], + [ + 1135, + 1316, -5 + ], + [ + 1117, + 1316, -5 + ], + [ + 1115, + 1318, -5 + ], + [ + 1112, + 1323, -5 + ], + [ + 1112, + 1455, -5 + ], + [ + 1114, + 1457, -5 + ], + [ + 1119, + 1460, -5 + ], + [ + 1187, + 1460, -5 + ], + [ + 1189, + 1458, -5 + ], + [ + 1192, + 1453, -5 + ], + [ + 1192, + 1321, -5 + ], + [ + 1190, + 1319, -5 + ], + [ + 1185, + 1316, -5 + ], + [ + 1169, + 1316, -5 + ], + [ + 1169, + 1194, -5 + ], + [ + 1167, + 1192, -5 + ], + [ + 1162, + 1189, -5 + ], + [ + 1059, + 1189, -5 + ], + [ + 1059, + 1145, -5 + ], + [ + 1057, + 1143, -5 + ], + [ + 1052, + 1140, -5 + ], + [ + 1029, + 1140, -5 + ] + ], + [ + [ + 1088, + 1138, -5 + ], + [ + 1093, + 1138, -5 + ], + [ + 1150, + 1140, -5 + ], + [ + 1150, + 1159, -5 + ], + [ + 1089, + 1159, -5 + ], + [ + 1089, + 1143, -5 + ], + [ + 1088, + 1138, -5 + ] + ], + [ + [ + 1115, + 1233, -5 + ], + [ + 1125, + 1233, -5 + ], + [ + 1125, + 1306, -5 + ], + [ + 1116, + 1306, -5 + ], + [ + 1116, + 1235, -5 + ], + [ + 1115, + 1233, -5 + ] + ], + [ + [ + 1095, + 1075, -5 + ], + [ + 1095, + 1076, -5 + ], + [ + 1092, + 1078, -5 + ], + [ + 1090, + 1082, -5 + ], + [ + 1090, + 1104, -5 + ], + [ + 1092, + 1106, -5 + ], + [ + 1097, + 1109, -5 + ], + [ + 1180, + 1109, -5 + ], + [ + 1180, + 1171, -5 + ], + [ + 1182, + 1173, -5 + ], + [ + 1187, + 1176, -5 + ], + [ + 1252, + 1176, -5 + ], + [ + 1252, + 1178, -5 + ], + [ + 1254, + 1180, -5 + ], + [ + 1261, + 1189, -5 + ], + [ + 1265, + 1193, -5 + ], + [ + 1268, + 1197, -5 + ], + [ + 1272, + 1199, -5 + ], + [ + 1404, + 1199, -5 + ], + [ + 1406, + 1197, -5 + ], + [ + 1409, + 1192, -5 + ], + [ + 1409, + 1124, -5 + ], + [ + 1407, + 1122, -5 + ], + [ + 1402, + 1119, -5 + ], + [ + 1270, + 1119, -5 + ], + [ + 1268, + 1121, -5 + ], + [ + 1257, + 1134, -5 + ], + [ + 1250, + 1142, -5 + ], + [ + 1215, + 1142, -5 + ], + [ + 1215, + 1080, -5 + ], + [ + 1213, + 1078, -5 + ], + [ + 1208, + 1075, -5 + ], + [ + 1095, + 1075, -5 + ] + ], + [ + [ + 1225, + 1123, -5 + ], + [ + 1252, + 1123, -5 + ], + [ + 1252, + 1125, -5 + ], + [ + 1249, + 1128, -5 + ], + [ + 1245, + 1132, -5 + ], + [ + 1225, + 1132, -5 + ], + [ + 1225, + 1123, -5 + ] + ], + [ + [ + 1199, + 1206, -5 + ], + [ + 1237, + 1206, -5 + ], + [ + 1240, + 1210, -5 + ], + [ + 1242, + 1212, -5 + ], + [ + 1252, + 1222, -5 + ], + [ + 1262, + 1227, -5 + ], + [ + 1274, + 1229, -5 + ], + [ + 1406, + 1229, -5 + ], + [ + 1420, + 1224, -5 + ], + [ + 1422, + 1222, -5 + ], + [ + 1432, + 1212, -5 + ], + [ + 1437, + 1206, -5 + ], + [ + 1511, + 1206, -5 + ], + [ + 1511, + 1208, -5 + ], + [ + 1519, + 1218, -5 + ], + [ + 1529, + 1225, -5 + ], + [ + 1538, + 1228, -5 + ], + [ + 1540, + 1228, -5 + ], + [ + 1663, + 1230, -5 + ], + [ + 1663, + 1584, -5 + ], + [ + 1618, + 1584, -5 + ], + [ + 1618, + 1553, -5 + ], + [ + 1613, + 1539, -5 + ], + [ + 1611, + 1537, -5 + ], + [ + 1601, + 1527, -5 + ], + [ + 1595, + 1522, -5 + ], + [ + 1597, + 1522, -5 + ], + [ + 1607, + 1514, -5 + ], + [ + 1614, + 1504, -5 + ], + [ + 1617, + 1495, -5 + ], + [ + 1617, + 1493, -5 + ], + [ + 1618, + 1401, -5 + ], + [ + 1613, + 1387, -5 + ], + [ + 1611, + 1385, -5 + ], + [ + 1601, + 1375, -5 + ], + [ + 1591, + 1370, -5 + ], + [ + 1579, + 1368, -5 + ], + [ + 1488, + 1368, -5 + ], + [ + 1474, + 1373, -5 + ], + [ + 1472, + 1374, -5 + ], + [ + 1464, + 1370, -5 + ], + [ + 1452, + 1368, -5 + ], + [ + 1361, + 1368, -5 + ], + [ + 1347, + 1373, -5 + ], + [ + 1345, + 1375, -5 + ], + [ + 1335, + 1385, -5 + ], + [ + 1330, + 1395, -5 + ], + [ + 1328, + 1407, -5 + ], + [ + 1328, + 1493, -5 + ], + [ + 1333, + 1507, -5 + ], + [ + 1335, + 1509, -5 + ], + [ + 1345, + 1519, -5 + ], + [ + 1351, + 1524, -5 + ], + [ + 1349, + 1524, -5 + ], + [ + 1339, + 1532, -5 + ], + [ + 1332, + 1542, -5 + ], + [ + 1329, + 1551, -5 + ], + [ + 1329, + 1553, -5 + ], + [ + 1327, + 1584, -5 + ], + [ + 1220, + 1584, -5 + ], + [ + 1220, + 1582, -5 + ], + [ + 1212, + 1570, -5 + ], + [ + 1210, + 1568, -5 + ], + [ + 1200, + 1561, -5 + ], + [ + 1199, + 1486, -5 + ], + [ + 1201, + 1486, -5 + ], + [ + 1211, + 1478, -5 + ], + [ + 1218, + 1468, -5 + ], + [ + 1221, + 1459, -5 + ], + [ + 1221, + 1457, -5 + ], + [ + 1222, + 1319, -5 + ], + [ + 1217, + 1305, -5 + ], + [ + 1215, + 1303, -5 + ], + [ + 1205, + 1293, -5 + ], + [ + 1199, + 1288, -5 + ], + [ + 1199, + 1206, -5 + ] + ], + [ + [ + 1363, + 1398, -5 + ], + [ + 1363, + 1399, -5 + ], + [ + 1360, + 1401, -5 + ], + [ + 1358, + 1405, -5 + ], + [ + 1358, + 1491, -5 + ], + [ + 1360, + 1493, -5 + ], + [ + 1365, + 1496, -5 + ], + [ + 1456, + 1496, -5 + ], + [ + 1458, + 1494, -5 + ], + [ + 1461, + 1489, -5 + ], + [ + 1461, + 1465, -5 + ], + [ + 1485, + 1465, -5 + ], + [ + 1485, + 1491, -5 + ], + [ + 1487, + 1493, -5 + ], + [ + 1492, + 1496, -5 + ], + [ + 1583, + 1496, -5 + ], + [ + 1585, + 1494, -5 + ], + [ + 1588, + 1489, -5 + ], + [ + 1588, + 1403, -5 + ], + [ + 1586, + 1401, -5 + ], + [ + 1581, + 1398, -5 + ], + [ + 1490, + 1398, -5 + ], + [ + 1488, + 1400, -5 + ], + [ + 1485, + 1405, -5 + ], + [ + 1485, + 1430, -5 + ], + [ + 1461, + 1430, -5 + ], + [ + 1461, + 1403, -5 + ], + [ + 1459, + 1401, -5 + ], + [ + 1454, + 1398, -5 + ], + [ + 1363, + 1398, -5 + ] + ], + [ + [ + 1471, + 1661, -5 + ], + [ + 1475, + 1661, -5 + ], + [ + 1479, + 1665, -5 + ], + [ + 1491, + 1669, -5 + ], + [ + 1673, + 1669, -5 + ], + [ + 1673, + 1723, -5 + ], + [ + 1212, + 1723, -5 + ], + [ + 1212, + 1669, -5 + ], + [ + 1458, + 1669, -5 + ], + [ + 1470, + 1663, -5 + ], + [ + 1471, + 1661, -5 + ], + [ + 1472, + 1673, -5 + ], + [ + 1474, + 1673, -5 + ], + [ + 1482, + 1677, -5 + ], + [ + 1494, + 1679, -5 + ], + [ + 1663, + 1679, -5 + ], + [ + 1663, + 1713, -5 + ], + [ + 1222, + 1713, -5 + ], + [ + 1222, + 1679, -5 + ], + [ + 1458, + 1679, -5 + ], + [ + 1472, + 1674, -5 + ], + [ + 1472, + 1673, -5 + ] + ], + [ + [ + 1472, + 1520, -5 + ], + [ + 1474, + 1520, -5 + ], + [ + 1478, + 1523, -5 + ], + [ + 1472, + 1526, -5 + ], + [ + 1468, + 1523, -5 + ], + [ + 1472, + 1520, -5 + ] + ], + [ + [ + 1362, + 1388, -5 + ], + [ + 1362, + 1389, -5 + ], + [ + 1359, + 1389, -5 + ], + [ + 1350, + 1398, -5 + ], + [ + 1348, + 1406, -5 + ], + [ + 1348, + 1492, -5 + ], + [ + 1352, + 1499, -5 + ], + [ + 1354, + 1501, -5 + ], + [ + 1361, + 1505, -5 + ], + [ + 1457, + 1506, -5 + ], + [ + 1464, + 1502, -5 + ], + [ + 1466, + 1500, -5 + ], + [ + 1470, + 1493, -5 + ], + [ + 1472, + 1475, -5 + ], + [ + 1475, + 1475, -5 + ], + [ + 1475, + 1492, -5 + ], + [ + 1479, + 1499, -5 + ], + [ + 1481, + 1501, -5 + ], + [ + 1488, + 1505, -5 + ], + [ + 1584, + 1506, -5 + ], + [ + 1591, + 1502, -5 + ], + [ + 1593, + 1500, -5 + ], + [ + 1597, + 1493, -5 + ], + [ + 1598, + 1402, -5 + ], + [ + 1594, + 1395, -5 + ], + [ + 1592, + 1393, -5 + ], + [ + 1585, + 1389, -5 + ], + [ + 1489, + 1388, -5 + ], + [ + 1482, + 1392, -5 + ], + [ + 1480, + 1394, -5 + ], + [ + 1476, + 1401, -5 + ], + [ + 1474, + 1420, -5 + ], + [ + 1471, + 1420, -5 + ], + [ + 1471, + 1402, -5 + ], + [ + 1467, + 1395, -5 + ], + [ + 1465, + 1393, -5 + ], + [ + 1458, + 1389, -5 + ], + [ + 1362, + 1388, -5 + ], + [ + 1361, + 1378, -5 + ], + [ + 1361, + 1379, -5 + ], + [ + 1358, + 1379, -5 + ], + [ + 1349, + 1384, -5 + ], + [ + 1347, + 1386, -5 + ], + [ + 1341, + 1394, -5 + ], + [ + 1338, + 1405, -5 + ], + [ + 1338, + 1493, -5 + ], + [ + 1344, + 1505, -5 + ], + [ + 1346, + 1507, -5 + ], + [ + 1354, + 1513, -5 + ], + [ + 1365, + 1516, -5 + ], + [ + 1458, + 1516, -5 + ], + [ + 1470, + 1510, -5 + ], + [ + 1472, + 1508, -5 + ], + [ + 1475, + 1508, -5 + ], + [ + 1479, + 1512, -5 + ], + [ + 1491, + 1516, -5 + ], + [ + 1585, + 1516, -5 + ], + [ + 1597, + 1510, -5 + ], + [ + 1599, + 1508, -5 + ], + [ + 1605, + 1500, -5 + ], + [ + 1608, + 1489, -5 + ], + [ + 1608, + 1401, -5 + ], + [ + 1602, + 1389, -5 + ], + [ + 1600, + 1387, -5 + ], + [ + 1592, + 1381, -5 + ], + [ + 1581, + 1378, -5 + ], + [ + 1488, + 1378, -5 + ], + [ + 1476, + 1384, -5 + ], + [ + 1474, + 1386, -5 + ], + [ + 1471, + 1386, -5 + ], + [ + 1467, + 1382, -5 + ], + [ + 1455, + 1378, -5 + ], + [ + 1361, + 1378, -5 + ] + ], + [ + [ + 1095, + 1035, -5 + ], + [ + 1095, + 1036, -5 + ], + [ + 1092, + 1038, -5 + ], + [ + 1090, + 1042, -5 + ], + [ + 1090, + 1065, -5 + ], + [ + 1092, + 1067, -5 + ], + [ + 1097, + 1070, -5 + ], + [ + 1218, + 1070, -5 + ], + [ + 1218, + 1108, -5 + ], + [ + 1220, + 1110, -5 + ], + [ + 1225, + 1113, -5 + ], + [ + 1430, + 1113, -5 + ], + [ + 1430, + 1171, -5 + ], + [ + 1432, + 1173, -5 + ], + [ + 1437, + 1176, -5 + ], + [ + 1537, + 1176, -5 + ], + [ + 1537, + 1194, -5 + ], + [ + 1539, + 1196, -5 + ], + [ + 1544, + 1199, -5 + ], + [ + 1676, + 1199, -5 + ], + [ + 1678, + 1197, -5 + ], + [ + 1681, + 1192, -5 + ], + [ + 1681, + 1124, -5 + ], + [ + 1679, + 1122, -5 + ], + [ + 1674, + 1119, -5 + ], + [ + 1542, + 1119, -5 + ], + [ + 1540, + 1121, -5 + ], + [ + 1537, + 1126, -5 + ], + [ + 1537, + 1142, -5 + ], + [ + 1465, + 1142, -5 + ], + [ + 1465, + 1083, -5 + ], + [ + 1463, + 1081, -5 + ], + [ + 1458, + 1078, -5 + ], + [ + 1253, + 1078, -5 + ], + [ + 1253, + 1040, -5 + ], + [ + 1251, + 1038, -5 + ], + [ + 1246, + 1035, -5 + ], + [ + 1095, + 1035, -5 + ] + ], + [ + [ + 1054, + 915, -5 + ], + [ + 1054, + 916, -5 + ], + [ + 1051, + 918, -5 + ], + [ + 1049, + 922, -5 + ], + [ + 1049, + 945, -5 + ], + [ + 1051, + 947, -5 + ], + [ + 1056, + 950, -5 + ], + [ + 1165, + 950, -5 + ], + [ + 1167, + 948, -5 + ], + [ + 1170, + 943, -5 + ], + [ + 1170, + 920, -5 + ], + [ + 1168, + 918, -5 + ], + [ + 1163, + 915, -5 + ], + [ + 1054, + 915, -5 + ] + ], + [ + [ + 1054, + 875, -5 + ], + [ + 1054, + 876, -5 + ], + [ + 1051, + 878, -5 + ], + [ + 1049, + 882, -5 + ], + [ + 1049, + 905, -5 + ], + [ + 1051, + 907, -5 + ], + [ + 1056, + 910, -5 + ], + [ + 1165, + 910, -5 + ], + [ + 1167, + 908, -5 + ], + [ + 1170, + 903, -5 + ], + [ + 1170, + 880, -5 + ], + [ + 1168, + 878, -5 + ], + [ + 1163, + 875, -5 + ], + [ + 1054, + 875, -5 + ] + ], + [ + [ + 989, + 840, -5 + ], + [ + 1080, + 840, -5 + ], + [ + 1080, + 865, -5 + ], + [ + 1053, + 865, -5 + ], + [ + 1046, + 869, -5 + ], + [ + 1044, + 871, -5 + ], + [ + 1040, + 878, -5 + ], + [ + 1039, + 906, -5 + ], + [ + 1042, + 914, -5 + ], + [ + 1040, + 918, -5 + ], + [ + 1039, + 946, -5 + ], + [ + 1043, + 953, -5 + ], + [ + 1045, + 955, -5 + ], + [ + 1052, + 959, -5 + ], + [ + 1080, + 961, -5 + ], + [ + 1080, + 986, -5 + ], + [ + 1083, + 994, -5 + ], + [ + 1081, + 998, -5 + ], + [ + 1080, + 1026, -5 + ], + [ + 1083, + 1034, -5 + ], + [ + 1081, + 1038, -5 + ], + [ + 1080, + 1066, -5 + ], + [ + 1083, + 1074, -5 + ], + [ + 1081, + 1078, -5 + ], + [ + 1080, + 1105, -5 + ], + [ + 1084, + 1112, -5 + ], + [ + 1086, + 1114, -5 + ], + [ + 1093, + 1118, -5 + ], + [ + 1170, + 1120, -5 + ], + [ + 1170, + 1172, -5 + ], + [ + 1174, + 1179, -5 + ], + [ + 1176, + 1181, -5 + ], + [ + 1183, + 1185, -5 + ], + [ + 1248, + 1188, -5 + ], + [ + 1254, + 1196, -5 + ], + [ + 1257, + 1199, -5 + ], + [ + 1265, + 1207, -5 + ], + [ + 1273, + 1209, -5 + ], + [ + 1405, + 1209, -5 + ], + [ + 1412, + 1205, -5 + ], + [ + 1414, + 1203, -5 + ], + [ + 1418, + 1196, -5 + ], + [ + 1420, + 1172, -5 + ], + [ + 1424, + 1179, -5 + ], + [ + 1426, + 1181, -5 + ], + [ + 1433, + 1185, -5 + ], + [ + 1527, + 1187, -5 + ], + [ + 1527, + 1195, -5 + ], + [ + 1531, + 1202, -5 + ], + [ + 1533, + 1204, -5 + ], + [ + 1540, + 1208, -5 + ], + [ + 1677, + 1209, -5 + ], + [ + 1683, + 1207, -5 + ], + [ + 1683, + 1604, -5 + ], + [ + 1598, + 1604, -5 + ], + [ + 1598, + 1554, -5 + ], + [ + 1594, + 1547, -5 + ], + [ + 1592, + 1545, -5 + ], + [ + 1585, + 1541, -5 + ], + [ + 1489, + 1540, -5 + ], + [ + 1482, + 1544, -5 + ], + [ + 1480, + 1546, -5 + ], + [ + 1476, + 1553, -5 + ], + [ + 1475, + 1645, -5 + ], + [ + 1479, + 1652, -5 + ], + [ + 1481, + 1654, -5 + ], + [ + 1488, + 1658, -5 + ], + [ + 1683, + 1660, -5 + ], + [ + 1683, + 1733, -5 + ], + [ + 1200, + 1733, -5 + ], + [ + 1200, + 1730, -5 + ], + [ + 1202, + 1724, -5 + ], + [ + 1202, + 1659, -5 + ], + [ + 1457, + 1659, -5 + ], + [ + 1464, + 1655, -5 + ], + [ + 1466, + 1653, -5 + ], + [ + 1470, + 1646, -5 + ], + [ + 1471, + 1554, -5 + ], + [ + 1467, + 1547, -5 + ], + [ + 1465, + 1545, -5 + ], + [ + 1458, + 1541, -5 + ], + [ + 1362, + 1540, -5 + ], + [ + 1355, + 1544, -5 + ], + [ + 1353, + 1546, -5 + ], + [ + 1349, + 1553, -5 + ], + [ + 1347, + 1604, -5 + ], + [ + 1202, + 1604, -5 + ], + [ + 1202, + 1591, -5 + ], + [ + 1198, + 1584, -5 + ], + [ + 1196, + 1582, -5 + ], + [ + 1189, + 1578, -5 + ], + [ + 1179, + 1576, -5 + ], + [ + 1179, + 1485, -5 + ], + [ + 1175, + 1478, -5 + ], + [ + 1173, + 1476, -5 + ], + [ + 1166, + 1472, -5 + ], + [ + 1165, + 1470, -5 + ], + [ + 1188, + 1470, -5 + ], + [ + 1195, + 1466, -5 + ], + [ + 1197, + 1464, -5 + ], + [ + 1201, + 1457, -5 + ], + [ + 1202, + 1320, -5 + ], + [ + 1198, + 1313, -5 + ], + [ + 1196, + 1311, -5 + ], + [ + 1189, + 1307, -5 + ], + [ + 1179, + 1305, -5 + ], + [ + 1179, + 1193, -5 + ], + [ + 1175, + 1186, -5 + ], + [ + 1173, + 1184, -5 + ], + [ + 1166, + 1180, -5 + ], + [ + 1069, + 1178, -5 + ], + [ + 1069, + 1144, -5 + ], + [ + 1065, + 1137, -5 + ], + [ + 1063, + 1135, -5 + ], + [ + 1056, + 1131, -5 + ], + [ + 1028, + 1130, -5 + ], + [ + 1020, + 1133, -5 + ], + [ + 1016, + 1131, -5 + ], + [ + 988, + 1130, -5 + ], + [ + 980, + 1133, -5 + ], + [ + 976, + 1131, -5 + ], + [ + 948, + 1130, -5 + ], + [ + 940, + 1133, -5 + ], + [ + 936, + 1131, -5 + ], + [ + 908, + 1130, -5 + ], + [ + 900, + 1133, -5 + ], + [ + 896, + 1131, -5 + ], + [ + 868, + 1130, -5 + ], + [ + 860, + 1133, -5 + ], + [ + 856, + 1131, -5 + ], + [ + 828, + 1130, -5 + ], + [ + 820, + 1133, -5 + ], + [ + 816, + 1131, -5 + ], + [ + 789, + 1129, -5 + ], + [ + 789, + 1119, -5 + ], + [ + 975, + 1119, -5 + ], + [ + 982, + 1115, -5 + ], + [ + 984, + 1113, -5 + ], + [ + 988, + 1106, -5 + ], + [ + 989, + 840, -5 + ], + [ + 999, + 850, -5 + ], + [ + 1070, + 850, -5 + ], + [ + 1070, + 855, -5 + ], + [ + 1052, + 855, -5 + ], + [ + 1040, + 861, -5 + ], + [ + 1038, + 863, -5 + ], + [ + 1032, + 871, -5 + ], + [ + 1029, + 882, -5 + ], + [ + 1029, + 907, -5 + ], + [ + 1031, + 913, -5 + ], + [ + 1031, + 915, -5 + ], + [ + 1029, + 921, -5 + ], + [ + 1029, + 947, -5 + ], + [ + 1035, + 959, -5 + ], + [ + 1037, + 961, -5 + ], + [ + 1045, + 967, -5 + ], + [ + 1056, + 970, -5 + ], + [ + 1070, + 970, -5 + ], + [ + 1070, + 987, -5 + ], + [ + 1072, + 993, -5 + ], + [ + 1072, + 995, -5 + ], + [ + 1070, + 1001, -5 + ], + [ + 1070, + 1027, -5 + ], + [ + 1072, + 1033, -5 + ], + [ + 1072, + 1035, -5 + ], + [ + 1070, + 1041, -5 + ], + [ + 1070, + 1067, -5 + ], + [ + 1072, + 1073, -5 + ], + [ + 1072, + 1075, -5 + ], + [ + 1070, + 1081, -5 + ], + [ + 1070, + 1106, -5 + ], + [ + 1076, + 1118, -5 + ], + [ + 1078, + 1120, -5 + ], + [ + 1086, + 1126, -5 + ], + [ + 1097, + 1129, -5 + ], + [ + 1160, + 1129, -5 + ], + [ + 1160, + 1169, -5 + ], + [ + 1079, + 1169, -5 + ], + [ + 1079, + 1143, -5 + ], + [ + 1073, + 1131, -5 + ], + [ + 1071, + 1129, -5 + ], + [ + 1063, + 1123, -5 + ], + [ + 1052, + 1120, -5 + ], + [ + 1027, + 1120, -5 + ], + [ + 1021, + 1122, -5 + ], + [ + 1019, + 1122, -5 + ], + [ + 1013, + 1120, -5 + ], + [ + 992, + 1120, -5 + ], + [ + 992, + 1118, -5 + ], + [ + 995, + 1115, -5 + ], + [ + 999, + 1103, -5 + ], + [ + 999, + 850, -5 + ], + [ + 1009, + 860, -5 + ], + [ + 1026, + 860, -5 + ], + [ + 1026, + 863, -5 + ], + [ + 1024, + 865, -5 + ], + [ + 1020, + 875, -5 + ], + [ + 1020, + 878, -5 + ], + [ + 1019, + 907, -5 + ], + [ + 1020, + 918, -5 + ], + [ + 1019, + 947, -5 + ], + [ + 1024, + 961, -5 + ], + [ + 1026, + 963, -5 + ], + [ + 1036, + 973, -5 + ], + [ + 1046, + 978, -5 + ], + [ + 1058, + 980, -5 + ], + [ + 1060, + 980, -5 + ], + [ + 1060, + 987, -5 + ], + [ + 1061, + 998, -5 + ], + [ + 1060, + 1027, -5 + ], + [ + 1061, + 1038, -5 + ], + [ + 1060, + 1067, -5 + ], + [ + 1061, + 1078, -5 + ], + [ + 1060, + 1106, -5 + ], + [ + 1061, + 1111, -5 + ], + [ + 1056, + 1111, -5 + ], + [ + 1027, + 1110, -5 + ], + [ + 1016, + 1111, -5 + ], + [ + 1008, + 1109, -5 + ], + [ + 1008, + 1106, -5 + ], + [ + 1009, + 860, -5 + ] + ], + [ + [ + 919, + 784, -5 + ], + [ + 931, + 784, -5 + ], + [ + 931, + 786, -5 + ], + [ + 928, + 789, -5 + ], + [ + 924, + 801, -5 + ], + [ + 924, + 1055, -5 + ], + [ + 747, + 1055, -5 + ], + [ + 735, + 1061, -5 + ], + [ + 733, + 1062, -5 + ], + [ + 733, + 1050, -5 + ], + [ + 896, + 1050, -5 + ], + [ + 908, + 1044, -5 + ], + [ + 910, + 1042, -5 + ], + [ + 916, + 1034, -5 + ], + [ + 919, + 1023, -5 + ], + [ + 919, + 784, -5 + ] + ], + [ + [ + 1270, + 865, -5 + ], + [ + 1270, + 866, -5 + ], + [ + 1267, + 868, -5 + ], + [ + 1265, + 872, -5 + ], + [ + 1265, + 888, -5 + ], + [ + 1185, + 888, -5 + ], + [ + 1183, + 890, -5 + ], + [ + 1180, + 895, -5 + ], + [ + 1180, + 955, -5 + ], + [ + 1095, + 955, -5 + ], + [ + 1093, + 957, -5 + ], + [ + 1090, + 962, -5 + ], + [ + 1090, + 985, -5 + ], + [ + 1092, + 987, -5 + ], + [ + 1097, + 990, -5 + ], + [ + 1210, + 990, -5 + ], + [ + 1212, + 988, -5 + ], + [ + 1215, + 983, -5 + ], + [ + 1215, + 923, -5 + ], + [ + 1265, + 923, -5 + ], + [ + 1265, + 940, -5 + ], + [ + 1267, + 942, -5 + ], + [ + 1272, + 945, -5 + ], + [ + 1404, + 945, -5 + ], + [ + 1406, + 943, -5 + ], + [ + 1409, + 938, -5 + ], + [ + 1409, + 870, -5 + ], + [ + 1407, + 868, -5 + ], + [ + 1402, + 865, -5 + ], + [ + 1270, + 865, -5 + ] + ], + [ + [ + 1263, + 840, -5 + ], + [ + 1683, + 840, -5 + ], + [ + 1683, + 857, -5 + ], + [ + 1680, + 857, -5 + ], + [ + 1674, + 855, -5 + ], + [ + 1541, + 855, -5 + ], + [ + 1534, + 859, -5 + ], + [ + 1532, + 861, -5 + ], + [ + 1528, + 868, -5 + ], + [ + 1526, + 878, -5 + ], + [ + 1434, + 878, -5 + ], + [ + 1427, + 882, -5 + ], + [ + 1425, + 884, -5 + ], + [ + 1421, + 891, -5 + ], + [ + 1419, + 892, -5 + ], + [ + 1419, + 869, -5 + ], + [ + 1415, + 862, -5 + ], + [ + 1413, + 860, -5 + ], + [ + 1406, + 856, -5 + ], + [ + 1269, + 855, -5 + ], + [ + 1263, + 857, -5 + ], + [ + 1263, + 840, -5 + ] + ], + [ + [ + 1184, + 771, -5 + ], + [ + 1204, + 771, -5 + ], + [ + 1204, + 773, -5 + ], + [ + 1195, + 782, -5 + ], + [ + 1193, + 783, -5 + ], + [ + 1193, + 781, -5 + ], + [ + 1189, + 777, -5 + ], + [ + 1184, + 772, -5 + ], + [ + 1184, + 771, -5 + ] + ], + [ + [ + 1225, + 933, -5 + ], + [ + 1255, + 933, -5 + ], + [ + 1255, + 941, -5 + ], + [ + 1225, + 941, -5 + ], + [ + 1225, + 933, -5 + ] + ], + [ + [ + 1542, + 865, -5 + ], + [ + 1542, + 866, -5 + ], + [ + 1539, + 868, -5 + ], + [ + 1537, + 872, -5 + ], + [ + 1537, + 888, -5 + ], + [ + 1435, + 888, -5 + ], + [ + 1433, + 890, -5 + ], + [ + 1430, + 895, -5 + ], + [ + 1430, + 951, -5 + ], + [ + 1223, + 951, -5 + ], + [ + 1221, + 953, -5 + ], + [ + 1218, + 958, -5 + ], + [ + 1218, + 995, -5 + ], + [ + 1095, + 995, -5 + ], + [ + 1093, + 997, -5 + ], + [ + 1090, + 1002, -5 + ], + [ + 1090, + 1025, -5 + ], + [ + 1092, + 1027, -5 + ], + [ + 1097, + 1030, -5 + ], + [ + 1248, + 1030, -5 + ], + [ + 1250, + 1028, -5 + ], + [ + 1253, + 1023, -5 + ], + [ + 1253, + 986, -5 + ], + [ + 1460, + 986, -5 + ], + [ + 1462, + 984, -5 + ], + [ + 1465, + 979, -5 + ], + [ + 1465, + 923, -5 + ], + [ + 1537, + 923, -5 + ], + [ + 1537, + 940, -5 + ], + [ + 1539, + 942, -5 + ], + [ + 1544, + 945, -5 + ], + [ + 1676, + 945, -5 + ], + [ + 1678, + 943, -5 + ], + [ + 1681, + 938, -5 + ], + [ + 1681, + 870, -5 + ], + [ + 1679, + 868, -5 + ], + [ + 1674, + 865, -5 + ], + [ + 1542, + 865, -5 + ] + ], + [ + [ + 1475, + 933, -5 + ], + [ + 1527, + 933, -5 + ], + [ + 1527, + 941, -5 + ], + [ + 1485, + 941, -5 + ], + [ + 1478, + 945, -5 + ], + [ + 1475, + 946, -5 + ], + [ + 1475, + 933, -5 + ] + ], + [ + [ + 1418, + 850, -5 + ], + [ + 1528, + 850, -5 + ], + [ + 1528, + 852, -5 + ], + [ + 1525, + 854, -5 + ], + [ + 1520, + 861, -5 + ], + [ + 1517, + 868, -5 + ], + [ + 1433, + 868, -5 + ], + [ + 1429, + 869, -5 + ], + [ + 1424, + 857, -5 + ], + [ + 1421, + 854, -5 + ], + [ + 1418, + 851, -5 + ], + [ + 1418, + 850, -5 + ] + ], + [ + [ + 1468, + 991, -5 + ], + [ + 1471, + 991, -5 + ], + [ + 1471, + 1005, -5 + ], + [ + 1419, + 1005, -5 + ], + [ + 1419, + 996, -5 + ], + [ + 1461, + 996, -5 + ], + [ + 1468, + 992, -5 + ], + [ + 1468, + 991, -5 + ] + ], + [ + [ + 1419, + 1060, -5 + ], + [ + 1471, + 1060, -5 + ], + [ + 1471, + 1073, -5 + ], + [ + 1468, + 1073, -5 + ], + [ + 1465, + 1070, -5 + ], + [ + 1457, + 1068, -5 + ], + [ + 1419, + 1068, -5 + ], + [ + 1419, + 1060, -5 + ] + ], + [ + [ + 1475, + 1118, -5 + ], + [ + 1478, + 1118, -5 + ], + [ + 1481, + 1121, -5 + ], + [ + 1489, + 1123, -5 + ], + [ + 1527, + 1123, -5 + ], + [ + 1527, + 1132, -5 + ], + [ + 1475, + 1132, -5 + ], + [ + 1475, + 1118, -5 + ] + ], + [ + [ + 1429, + 1195, -5 + ], + [ + 1433, + 1195, -5 + ], + [ + 1518, + 1197, -5 + ], + [ + 1518, + 1199, -5 + ], + [ + 1523, + 1208, -5 + ], + [ + 1525, + 1210, -5 + ], + [ + 1533, + 1216, -5 + ], + [ + 1544, + 1219, -5 + ], + [ + 1673, + 1219, -5 + ], + [ + 1673, + 1594, -5 + ], + [ + 1608, + 1594, -5 + ], + [ + 1608, + 1553, -5 + ], + [ + 1602, + 1541, -5 + ], + [ + 1600, + 1539, -5 + ], + [ + 1592, + 1533, -5 + ], + [ + 1581, + 1530, -5 + ], + [ + 1488, + 1530, -5 + ], + [ + 1476, + 1536, -5 + ], + [ + 1474, + 1538, -5 + ], + [ + 1471, + 1538, -5 + ], + [ + 1467, + 1534, -5 + ], + [ + 1455, + 1530, -5 + ], + [ + 1361, + 1530, -5 + ], + [ + 1349, + 1536, -5 + ], + [ + 1347, + 1538, -5 + ], + [ + 1341, + 1546, -5 + ], + [ + 1338, + 1557, -5 + ], + [ + 1338, + 1594, -5 + ], + [ + 1212, + 1594, -5 + ], + [ + 1212, + 1590, -5 + ], + [ + 1206, + 1578, -5 + ], + [ + 1204, + 1576, -5 + ], + [ + 1196, + 1570, -5 + ], + [ + 1189, + 1567, -5 + ], + [ + 1189, + 1484, -5 + ], + [ + 1188, + 1480, -5 + ], + [ + 1200, + 1475, -5 + ], + [ + 1203, + 1472, -5 + ], + [ + 1209, + 1464, -5 + ], + [ + 1212, + 1453, -5 + ], + [ + 1212, + 1319, -5 + ], + [ + 1206, + 1307, -5 + ], + [ + 1204, + 1305, -5 + ], + [ + 1196, + 1299, -5 + ], + [ + 1189, + 1296, -5 + ], + [ + 1189, + 1196, -5 + ], + [ + 1241, + 1196, -5 + ], + [ + 1247, + 1203, -5 + ], + [ + 1249, + 1205, -5 + ], + [ + 1259, + 1215, -5 + ], + [ + 1271, + 1219, -5 + ], + [ + 1406, + 1219, -5 + ], + [ + 1418, + 1213, -5 + ], + [ + 1420, + 1211, -5 + ], + [ + 1426, + 1203, -5 + ], + [ + 1429, + 1195, -5 + ] + ], + [ + [ + 1691, + 1060, -5 + ], + [ + 1721, + 1060, -5 + ], + [ + 1721, + 1068, -5 + ], + [ + 1691, + 1068, -5 + ], + [ + 1691, + 1060, -5 + ] + ], + [ + [ + 1691, + 996, -5 + ], + [ + 1721, + 996, -5 + ], + [ + 1721, + 1005, -5 + ], + [ + 1691, + 1005, -5 + ], + [ + 1691, + 996, -5 + ] + ], + [ + [ + 1429, + 445, -5 + ], + [ + 1429, + 446, -5 + ], + [ + 1426, + 448, -5 + ], + [ + 1424, + 452, -5 + ], + [ + 1424, + 584, -5 + ], + [ + 1426, + 586, -5 + ], + [ + 1431, + 589, -5 + ], + [ + 1439, + 597, -5 + ], + [ + 1447, + 603, -5 + ], + [ + 1447, + 630, -5 + ], + [ + 989, + 630, -5 + ], + [ + 987, + 632, -5 + ], + [ + 984, + 637, -5 + ], + [ + 984, + 759, -5 + ], + [ + 986, + 761, -5 + ], + [ + 991, + 764, -5 + ], + [ + 1014, + 764, -5 + ], + [ + 1016, + 762, -5 + ], + [ + 1019, + 757, -5 + ], + [ + 1019, + 665, -5 + ], + [ + 1477, + 665, -5 + ], + [ + 1479, + 663, -5 + ], + [ + 1482, + 658, -5 + ], + [ + 1482, + 601, -5 + ], + [ + 1484, + 601, -5 + ], + [ + 1497, + 590, -5 + ], + [ + 1504, + 583, -5 + ], + [ + 1504, + 450, -5 + ], + [ + 1502, + 448, -5 + ], + [ + 1497, + 445, -5 + ], + [ + 1429, + 445, -5 + ] + ], + [ + [ + 1398, + 428, -5 + ], + [ + 1403, + 428, -5 + ], + [ + 1403, + 430, -5 + ], + [ + 1399, + 431, -5 + ], + [ + 1398, + 428, -5 + ] + ], + [ + [ + 1438, + 337, -5 + ], + [ + 1490, + 337, -5 + ], + [ + 1490, + 425, -5 + ], + [ + 1427, + 425, -5 + ], + [ + 1415, + 431, -5 + ], + [ + 1413, + 433, -5 + ], + [ + 1407, + 441, -5 + ], + [ + 1404, + 452, -5 + ], + [ + 1404, + 586, -5 + ], + [ + 1410, + 598, -5 + ], + [ + 1412, + 600, -5 + ], + [ + 1422, + 609, -5 + ], + [ + 1374, + 610, -5 + ], + [ + 1374, + 608, -5 + ], + [ + 1377, + 608, -5 + ], + [ + 1386, + 603, -5 + ], + [ + 1388, + 601, -5 + ], + [ + 1394, + 593, -5 + ], + [ + 1397, + 582, -5 + ], + [ + 1397, + 448, -5 + ], + [ + 1391, + 436, -5 + ], + [ + 1389, + 434, -5 + ], + [ + 1381, + 428, -5 + ], + [ + 1375, + 425, -5 + ], + [ + 1375, + 418, -5 + ], + [ + 1415, + 418, -5 + ], + [ + 1427, + 412, -5 + ], + [ + 1429, + 410, -5 + ], + [ + 1435, + 402, -5 + ], + [ + 1438, + 391, -5 + ], + [ + 1438, + 337, -5 + ], + [ + 1448, + 347, -5 + ], + [ + 1480, + 347, -5 + ], + [ + 1480, + 415, -5 + ], + [ + 1439, + 415, -5 + ], + [ + 1439, + 413, -5 + ], + [ + 1441, + 411, -5 + ], + [ + 1446, + 401, -5 + ], + [ + 1448, + 389, -5 + ], + [ + 1448, + 347, -5 + ] + ], + [ + [ + 1498, + 602, -5 + ], + [ + 1500, + 602, -5 + ], + [ + 1500, + 696, -5 + ], + [ + 1069, + 696, -5 + ], + [ + 1069, + 687, -5 + ], + [ + 1065, + 680, -5 + ], + [ + 1063, + 678, -5 + ], + [ + 1061, + 676, -5 + ], + [ + 1483, + 673, -5 + ], + [ + 1486, + 670, -5 + ], + [ + 1491, + 663, -5 + ], + [ + 1491, + 661, -5 + ], + [ + 1494, + 605, -5 + ], + [ + 1496, + 605, -5 + ], + [ + 1498, + 602, -5 + ] + ], + [ + [ + 1487, + 681, -5 + ], + [ + 1490, + 681, -5 + ], + [ + 1490, + 686, -5 + ], + [ + 1479, + 686, -5 + ], + [ + 1479, + 684, -5 + ], + [ + 1482, + 684, -5 + ], + [ + 1487, + 681, -5 + ] + ], + [ + [ + 1175, + 445, -5 + ], + [ + 1175, + 446, -5 + ], + [ + 1172, + 448, -5 + ], + [ + 1170, + 452, -5 + ], + [ + 1170, + 499, -5 + ], + [ + 949, + 499, -5 + ], + [ + 947, + 501, -5 + ], + [ + 944, + 506, -5 + ], + [ + 944, + 759, -5 + ], + [ + 946, + 761, -5 + ], + [ + 951, + 764, -5 + ], + [ + 974, + 764, -5 + ], + [ + 976, + 762, -5 + ], + [ + 979, + 757, -5 + ], + [ + 979, + 534, -5 + ], + [ + 1170, + 534, -5 + ], + [ + 1170, + 584, -5 + ], + [ + 1172, + 586, -5 + ], + [ + 1177, + 589, -5 + ], + [ + 1245, + 589, -5 + ], + [ + 1247, + 587, -5 + ], + [ + 1250, + 582, -5 + ], + [ + 1250, + 450, -5 + ], + [ + 1248, + 448, -5 + ], + [ + 1243, + 445, -5 + ], + [ + 1175, + 445, -5 + ] + ], + [ + [ + 1271, + 428, -5 + ], + [ + 1276, + 428, -5 + ], + [ + 1276, + 430, -5 + ], + [ + 1272, + 431, -5 + ], + [ + 1271, + 428, -5 + ] + ], + [ + [ + 999, + 554, -5 + ], + [ + 1150, + 554, -5 + ], + [ + 1150, + 586, -5 + ], + [ + 1156, + 598, -5 + ], + [ + 1158, + 600, -5 + ], + [ + 1166, + 606, -5 + ], + [ + 1173, + 609, -5 + ], + [ + 999, + 610, -5 + ], + [ + 999, + 554, -5 + ], + [ + 1009, + 564, -5 + ], + [ + 1140, + 564, -5 + ], + [ + 1140, + 586, -5 + ], + [ + 1144, + 600, -5 + ], + [ + 1009, + 600, -5 + ], + [ + 1009, + 564, -5 + ] + ], + [ + [ + 1301, + 327, -5 + ], + [ + 1373, + 327, -5 + ], + [ + 1373, + 353, -5 + ], + [ + 1301, + 353, -5 + ], + [ + 1301, + 327, -5 + ], + [ + 1311, + 337, -5 + ], + [ + 1363, + 337, -5 + ], + [ + 1363, + 343, -5 + ], + [ + 1311, + 343, -5 + ], + [ + 1311, + 337, -5 + ] + ], + [ + [ + 1175, + 173, -5 + ], + [ + 1175, + 174, -5 + ], + [ + 1172, + 176, -5 + ], + [ + 1170, + 180, -5 + ], + [ + 1170, + 228, -5 + ], + [ + 909, + 228, -5 + ], + [ + 907, + 230, -5 + ], + [ + 904, + 235, -5 + ], + [ + 904, + 759, -5 + ], + [ + 906, + 761, -5 + ], + [ + 911, + 764, -5 + ], + [ + 934, + 764, -5 + ], + [ + 936, + 762, -5 + ], + [ + 939, + 757, -5 + ], + [ + 939, + 262, -5 + ], + [ + 1170, + 262, -5 + ], + [ + 1170, + 312, -5 + ], + [ + 1172, + 314, -5 + ], + [ + 1177, + 317, -5 + ], + [ + 1245, + 317, -5 + ], + [ + 1247, + 315, -5 + ], + [ + 1250, + 310, -5 + ], + [ + 1250, + 178, -5 + ], + [ + 1248, + 176, -5 + ], + [ + 1243, + 173, -5 + ], + [ + 1175, + 173, -5 + ] + ], + [ + [ + 1301, + 133, -5 + ], + [ + 1310, + 133, -5 + ], + [ + 1310, + 163, -5 + ], + [ + 1301, + 163, -5 + ], + [ + 1301, + 133, -5 + ] + ], + [ + [ + 1365, + 133, -5 + ], + [ + 1373, + 133, -5 + ], + [ + 1373, + 163, -5 + ], + [ + 1365, + 163, -5 + ], + [ + 1365, + 133, -5 + ] + ], + [ + [ + 1429, + 173, -5 + ], + [ + 1429, + 174, -5 + ], + [ + 1426, + 176, -5 + ], + [ + 1424, + 180, -5 + ], + [ + 1424, + 312, -5 + ], + [ + 1426, + 314, -5 + ], + [ + 1431, + 317, -5 + ], + [ + 1499, + 317, -5 + ], + [ + 1501, + 315, -5 + ], + [ + 1504, + 310, -5 + ], + [ + 1504, + 262, -5 + ], + [ + 1510, + 262, -5 + ], + [ + 1510, + 706, -5 + ], + [ + 1059, + 706, -5 + ], + [ + 1059, + 688, -5 + ], + [ + 1057, + 686, -5 + ], + [ + 1052, + 683, -5 + ], + [ + 1029, + 683, -5 + ], + [ + 1027, + 685, -5 + ], + [ + 1024, + 690, -5 + ], + [ + 1024, + 759, -5 + ], + [ + 1026, + 761, -5 + ], + [ + 1031, + 764, -5 + ], + [ + 1054, + 764, -5 + ], + [ + 1056, + 762, -5 + ], + [ + 1059, + 757, -5 + ], + [ + 1059, + 741, -5 + ], + [ + 1540, + 741, -5 + ], + [ + 1542, + 739, -5 + ], + [ + 1545, + 734, -5 + ], + [ + 1545, + 233, -5 + ], + [ + 1543, + 231, -5 + ], + [ + 1538, + 228, -5 + ], + [ + 1504, + 228, -5 + ], + [ + 1504, + 178, -5 + ], + [ + 1502, + 176, -5 + ], + [ + 1497, + 173, -5 + ], + [ + 1429, + 173, -5 + ] + ], + [ + [ + 1512, + 171, -5 + ], + [ + 1683, + 171, -5 + ], + [ + 1683, + 785, -5 + ], + [ + 1222, + 785, -5 + ], + [ + 1215, + 789, -5 + ], + [ + 1213, + 791, -5 + ], + [ + 1209, + 798, -5 + ], + [ + 1207, + 825, -5 + ], + [ + 1180, + 825, -5 + ], + [ + 1180, + 799, -5 + ], + [ + 1176, + 792, -5 + ], + [ + 1174, + 790, -5 + ], + [ + 1167, + 786, -5 + ], + [ + 948, + 785, -5 + ], + [ + 941, + 789, -5 + ], + [ + 939, + 791, -5 + ], + [ + 935, + 798, -5 + ], + [ + 933, + 1065, -5 + ], + [ + 748, + 1065, -5 + ], + [ + 741, + 1069, -5 + ], + [ + 739, + 1071, -5 + ], + [ + 735, + 1078, -5 + ], + [ + 733, + 1179, -5 + ], + [ + 637, + 1179, -5 + ], + [ + 637, + 1119, -5 + ], + [ + 709, + 1119, -5 + ], + [ + 716, + 1115, -5 + ], + [ + 718, + 1113, -5 + ], + [ + 722, + 1106, -5 + ], + [ + 723, + 1079, -5 + ], + [ + 720, + 1071, -5 + ], + [ + 722, + 1067, -5 + ], + [ + 724, + 1040, -5 + ], + [ + 895, + 1040, -5 + ], + [ + 902, + 1036, -5 + ], + [ + 904, + 1034, -5 + ], + [ + 908, + 1027, -5 + ], + [ + 910, + 774, -5 + ], + [ + 935, + 774, -5 + ], + [ + 943, + 771, -5 + ], + [ + 947, + 773, -5 + ], + [ + 975, + 774, -5 + ], + [ + 983, + 771, -5 + ], + [ + 987, + 773, -5 + ], + [ + 1015, + 774, -5 + ], + [ + 1023, + 771, -5 + ], + [ + 1027, + 773, -5 + ], + [ + 1055, + 774, -5 + ], + [ + 1062, + 770, -5 + ], + [ + 1064, + 768, -5 + ], + [ + 1068, + 761, -5 + ], + [ + 1070, + 751, -5 + ], + [ + 1541, + 751, -5 + ], + [ + 1548, + 747, -5 + ], + [ + 1550, + 745, -5 + ], + [ + 1554, + 738, -5 + ], + [ + 1555, + 232, -5 + ], + [ + 1551, + 225, -5 + ], + [ + 1549, + 223, -5 + ], + [ + 1542, + 219, -5 + ], + [ + 1514, + 217, -5 + ], + [ + 1514, + 177, -5 + ], + [ + 1512, + 171, -5 + ], + [ + 1524, + 181, -5 + ], + [ + 1673, + 181, -5 + ], + [ + 1673, + 775, -5 + ], + [ + 1221, + 775, -5 + ], + [ + 1209, + 781, -5 + ], + [ + 1207, + 783, -5 + ], + [ + 1201, + 791, -5 + ], + [ + 1198, + 802, -5 + ], + [ + 1198, + 815, -5 + ], + [ + 1190, + 815, -5 + ], + [ + 1190, + 798, -5 + ], + [ + 1184, + 786, -5 + ], + [ + 1182, + 784, -5 + ], + [ + 1174, + 778, -5 + ], + [ + 1163, + 775, -5 + ], + [ + 1072, + 775, -5 + ], + [ + 1072, + 773, -5 + ], + [ + 1075, + 770, -5 + ], + [ + 1079, + 761, -5 + ], + [ + 1542, + 761, -5 + ], + [ + 1554, + 755, -5 + ], + [ + 1556, + 753, -5 + ], + [ + 1562, + 745, -5 + ], + [ + 1565, + 734, -5 + ], + [ + 1565, + 231, -5 + ], + [ + 1559, + 219, -5 + ], + [ + 1557, + 217, -5 + ], + [ + 1549, + 211, -5 + ], + [ + 1538, + 208, -5 + ], + [ + 1524, + 208, -5 + ], + [ + 1524, + 181, -5 + ], + [ + 1534, + 191, -5 + ], + [ + 1663, + 191, -5 + ], + [ + 1663, + 765, -5 + ], + [ + 1559, + 765, -5 + ], + [ + 1559, + 763, -5 + ], + [ + 1568, + 754, -5 + ], + [ + 1573, + 744, -5 + ], + [ + 1575, + 732, -5 + ], + [ + 1575, + 231, -5 + ], + [ + 1570, + 217, -5 + ], + [ + 1568, + 215, -5 + ], + [ + 1558, + 205, -5 + ], + [ + 1548, + 200, -5 + ], + [ + 1536, + 198, -5 + ], + [ + 1534, + 198, -5 + ], + [ + 1534, + 191, -5 + ] + ] + ] + mod.name = "ATP.8E5.traces.png" + mod.dpi = 1269.848 + mod.width = 1854 + mod.height = 1917 + mod.depth = 5 + show_path_info() + } + // + // inputs + // + var inputs = { + toolpath: { + type: 'object', + event: function(evt) { + mod.path = evt.detail.path + mod.name = evt.detail.name + mod.dpi = evt.detail.dpi + mod.width = evt.detail.width + mod.height = evt.detail.height + mod.depth = evt.detail.depth + show_path_info() + show_path() + outputs.toolpath.event() + } + }, + response: { + type: 'three.js', + event: function(evt) { + var script = document.createElement('script') + //script.type = 'text/javascript' + script.onload = init_window + script.src = 'data:text/javascript,' + encodeURIComponent(evt.detail) + mod.div.appendChild(script) + //init_window(evt.detail) + } + } + } + // + // outputs + // + var outputs = { + toolpath: { + type: 'object', + event: function() { + cmd = {} + cmd.path = mod.path + cmd.name = mod.name + cmd.dpi = mod.dpi + cmd.width = mod.width + cmd.height = mod.height + mods.output(mod, 'toolpath', cmd) + } + }, + request: { + type: 'three.js', + event: function(arg) { + mods.output(mod, 'request', arg) + } + } + } + // + // interface + // + var interface = function(div) { + mod.div = div + // + // info + // + var text = document.createTextNode('name: ') + div.appendChild(text) + mod.nametext = text + div.appendChild(document.createElement('br')) + var text = document.createTextNode('(mm)') + div.appendChild(text) + mod.mmtext = text + div.appendChild(document.createElement('br')) + var text = document.createTextNode('(in)') + div.appendChild(text) + mod.intext = text + // + // view + // + div.appendChild(document.createElement('br')) + var btn = document.createElement('button') + btn.style.padding = mods.ui.padding + btn.style.margin = 1 + var span = document.createElement('span') + var text = document.createTextNode('view') + span.appendChild(text) + btn.appendChild(span) + btn.addEventListener('click', function() { + open_view_window() + }) + div.appendChild(btn) + // + // dump + // + mod.drive_button = make_button_input(div, 'toolpath out') + mod.drive_button.addEventListener('click', function() { + outputs.toolpath.event() + }) + } + // + // local functions + // + // show_path_info + // + function show_path_info() { + mod.nametext.nodeValue = 'name: ' + mod.name + var width = (25.4 * mod.width / mod.dpi).toFixed(3) + var height = (25.4 * mod.height / mod.dpi).toFixed(3) + var depth = (25.4 * mod.depth / mod.dpi).toFixed(3) + if (mod.depth == undefined) + mod.mmtext.nodeValue = width + ' x ' + height + ' (mm)' + else + mod.mmtext.nodeValue = width + ' x ' + height + ' x ' + depth + ' (mm)' + var width = (mod.width / mod.dpi).toFixed(3) + var height = (mod.height / mod.dpi).toFixed(3) + var depth = (mod.depth / mod.dpi).toFixed(3) + if (mod.depth == undefined) + mod.intext.nodeValue = width + ' x ' + height + ' (in)' + else + mod.intext.nodeValue = width + ' x ' + height + ' x ' + depth + ' (in)' + mods.fit(mod.div) + } + // + // show_path + // + function show_path() { + var scene = mod.scene + var camera = mod.camera + var renderer = mod.renderer + // + // check if view window open + // + if (mod.win == undefined) { + open_view_window() + return + } + // + // check for path + // + if (mod.path == undefined) + return + // + // clear scene, leave camera + // + var length = scene.children.length + for (var c = (length - 1); c > 1; --c) { + scene.remove(scene.children[c]) + } + // + // fit camera + // + mod.thetaxy = 0 + mod.thetaz = 0 + mod.r = mod.height / 2 + mod.x0 = mod.width / 2 + mod.y0 = mod.height / 2 + camera.position.set(mod.x0, mod.y0, mod.r) + camera.up = new THREE.Vector3(0, 1, 0) + camera.lookAt(new THREE.Vector3(mod.x0, mod.y0, 0)) + camera.updateProjectionMatrix() + // + // draw segments + // + var arrow_size = 1 + mod.width / 200 + var path = mod.path + for (var segment = 0; segment < path.length; ++segment) { + if (segment > 0) + add_arrow(path[segment - 1][path[segment - 1].length - 1], path[segment][0], 0xff0000, arrow_size) + for (var point = 1; point < path[segment].length; ++point) { + add_arrow(path[segment][point - 1], path[segment][point], 0x0000ff, arrow_size) + } + } + // + // add axes + // + var length = mod.height / 10 + add_arrow([0, 0, 0], [length, 0, 0], 0xff0000, arrow_size) + add_arrow([0, 0, 0], [0, length, 0], 0x00ff00, arrow_size) + add_arrow([0, 0, 0], [0, 0, length], 0x0000ff, arrow_size) + // + // render + // + update() + // + // add_arrow + // + function add_arrow(start, stop, color, size) { + var origin = new THREE.Vector3().fromArray(start) + if (mod.depth == undefined) + origin.z = 0 + var end = new THREE.Vector3().fromArray(stop) + if (mod.depth == undefined) + end.z = 0 + var length = new THREE.Vector3().subVectors(end, origin).length() + if (length <= size) { + add_line(origin, end, color) + //length = 1.1*size + return + } + var direction = new THREE.Vector3().subVectors(end, origin).normalize() + var arrow = new THREE.ArrowHelper(direction, origin, length, color, size, size) + scene.add(arrow) + } + // + // add_line + // + function add_line(start, stop, colorhex) { + var geometry = new THREE.Geometry() + geometry.vertices.push(start, stop) + var material = new THREE.LineBasicMaterial({ color: colorhex }) + var line = new THREE.Line(geometry, material) + scene.add(line) + } + // + // update + // + function update() { + renderer.render(scene, camera) + } + } + // + // open_view_window + // + function open_view_window() { + // + // open window + // + win = window.open('') + mod.win = win + // + // load three.js + // + outputs.request.event('three.js') + } + // + // init_window + // + function init_window() { + //document.write('<script type="text/javascript">'+arg+'</script>') + //document.close() + // + // close button + // + var btn = document.createElement('button') + btn.appendChild(document.createTextNode('close')) + btn.style.padding = mods.ui.padding + btn.style.margin = 1 + btn.addEventListener('click', function() { + mod.win.close() + mod.win = undefined + }) + mod.win.document.body.appendChild(btn) + // + // label text + // + var text = win.document.createTextNode(' left: pan, right: rotate, scroll: zoom') + mod.win.document.body.appendChild(text) + // + // GL container + // + mod.win.document.body.appendChild(document.createElement('br')) + container = mod.win.document.createElement('div') + container.style.overflow = 'hidden' + mod.win.document.body.appendChild(container) + // + // event handlers + // + container.addEventListener('contextmenu', context_menu) + container.addEventListener('mousedown', mouse_down) + container.addEventListener('mouseup', mouse_up) + container.addEventListener('mousemove', mouse_move) + container.addEventListener('wheel', mouse_wheel) + // + // add scene + // + scene = new THREE.Scene() + mod.scene = scene + var width = mod.win.innerWidth + var height = mod.win.innerHeight + var aspect = width / height + var near = 0.1 + var far = 1000000 + camera = new THREE.PerspectiveCamera(90, aspect, near, far) + mod.camera = camera + scene.add(camera) + // + // add renderer + // + renderer = new THREE.WebGLRenderer({ antialias: true }) + mod.renderer = renderer + renderer.setClearColor(0xffffff) + renderer.setSize(width, height) + container.appendChild(renderer.domElement) + // + // show the path if available + // + show_path() + // + // context_menu + // + function context_menu(evt) { + evt.preventDefault() + evt.stopPropagation() + return (false) + } + // + // mouse_down + // + function mouse_down(evt) { + evt.preventDefault() + evt.stopPropagation() + mod.button = evt.button + mod.x = evt.clientX + mod.y = evt.clientY + } + // + // mouse_up + // + function mouse_up(evt) { + mod.button = undefined + mod.x = evt.clientX + mod.y = evt.clientY + } + // + // mouse_move + // + function mouse_move(evt) { + evt.preventDefault() + evt.stopPropagation() + var dx = evt.clientX - mod.x + var dy = evt.clientY - mod.y + mod.x = evt.clientX + mod.y = evt.clientY + if (mod.button == 0) { + mod.x0 += + Math.sin(mod.thetaz) * mod.height * dy / mod.win.innerHeight - + Math.cos(mod.thetaz) * mod.width * dx / mod.win.innerWidth + mod.y0 += + Math.cos(mod.thetaz) * mod.height * dy / mod.win.innerHeight + + Math.sin(mod.thetaz) * mod.width * dx / mod.win.innerWidth + camera.position.x = mod.x0 + Math.sin(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.y = mod.y0 + Math.cos(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.z = mod.r * Math.cos(mod.thetaxy) + camera.position.z = mod.r * Math.cos(mod.thetaxy) + camera.up = new THREE.Vector3(Math.sin(mod.thetaz), Math.cos(mod.thetaz), 0) + camera.lookAt(new THREE.Vector3(mod.x0, mod.y0, 0)) + camera.updateProjectionMatrix() + renderer.render(scene, camera) + } else if (mod.button == 2) { + mod.thetaxy += dy / mod.win.innerHeight + mod.thetaz += dx / mod.win.innerWidth + camera.position.x = mod.x0 + Math.sin(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.y = mod.y0 + Math.cos(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.z = mod.r * Math.cos(mod.thetaxy) + camera.up = new THREE.Vector3(Math.sin(mod.thetaz), Math.cos(mod.thetaz), 0) + camera.lookAt(new THREE.Vector3(mod.x0, mod.y0, 0)) + camera.updateProjectionMatrix() + renderer.render(scene, camera) + } + } + // + // mouse_wheel + // + function mouse_wheel(evt) { + evt.preventDefault() + evt.stopPropagation() + var dy = evt.deltaY / mod.win.innerHeight + mod.r += mod.height * dy + camera.position.x = mod.x0 + Math.sin(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.y = mod.y0 + Math.cos(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.z = mod.r * Math.cos(mod.thetaxy) + camera.lookAt(new THREE.Vector3(mod.x0, mod.y0, 0)) + camera.updateProjectionMatrix() + renderer.render(scene, camera) + } + } + // + // old_open_view_window + // + function old_open_view_window() { + // + // globals + // + var container, scene, camera, renderer, win, controls + // + // open the window + // + open_window() + // + // open_window + // + function open_window() { + // + // open window + // + win = window.open('') + mod.win = win + // + // load three.js + // + var script = document.createElement('script') + script.type = 'text/javascript' + script.onload = init_window + script.src = 'js/three.js/three.min.js' + mod.div.appendChild(script) + } + // + // init_window + // + function init_window() { + // + // close button + // + var btn = document.createElement('button') + btn.appendChild(document.createTextNode('close')) + btn.style.padding = mods.ui.padding + btn.style.margin = 1 + btn.addEventListener('click', function() { + win.close() + mod.win = undefined + }) + win.document.body.appendChild(btn) + // + // label text + // + var text = win.document.createTextNode(' left: pan, right: rotate, scroll: zoom') + win.document.body.appendChild(text) + // + // GL container + // + win.document.body.appendChild(document.createElement('br')) + container = win.document.createElement('div') + container.style.overflow = 'hidden' + win.document.body.appendChild(container) + // + // event handlers + // + container.addEventListener('contextmenu', context_menu) + container.addEventListener('mousedown', mouse_down) + container.addEventListener('mouseup', mouse_up) + container.addEventListener('mousemove', mouse_move) + container.addEventListener('wheel', mouse_wheel) + // + // add scene + // + scene = new THREE.Scene() + mod.scene = scene + var width = win.innerWidth + var height = win.innerHeight + var aspect = width / height + var near = 0.1 + var far = 1000000 + camera = new THREE.PerspectiveCamera(90, aspect, near, far) + mod.camera = camera + scene.add(camera) + // + // add renderer + // + renderer = new THREE.WebGLRenderer({ antialias: true }) + mod.renderer = renderer + renderer.setClearColor(0xffffff) + renderer.setSize(width, height) + container.appendChild(renderer.domElement) + // + // show the path if available + // + show_path() + } + // + // context_menu + // + function context_menu(evt) { + evt.preventDefault() + evt.stopPropagation() + return (false) + } + // + // mouse_down + // + function mouse_down(evt) { + evt.preventDefault() + evt.stopPropagation() + mod.button = evt.button + mod.x = evt.clientX + mod.y = evt.clientY + } + // + // mouse_up + // + function mouse_up(evt) { + mod.button = undefined + mod.x = evt.clientX + mod.y = evt.clientY + } + // + // mouse_move + // + function mouse_move(evt) { + evt.preventDefault() + evt.stopPropagation() + var dx = evt.clientX - mod.x + var dy = evt.clientY - mod.y + mod.x = evt.clientX + mod.y = evt.clientY + if (mod.button == 0) { + mod.x0 += + Math.sin(mod.thetaz) * mod.height * dy / win.innerHeight - + Math.cos(mod.thetaz) * mod.width * dx / win.innerWidth + mod.y0 += + Math.cos(mod.thetaz) * mod.height * dy / win.innerHeight + + Math.sin(mod.thetaz) * mod.width * dx / win.innerWidth + camera.position.x = mod.x0 + Math.sin(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.y = mod.y0 + Math.cos(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.z = mod.r * Math.cos(mod.thetaxy) + camera.position.z = mod.r * Math.cos(mod.thetaxy) + camera.up = new THREE.Vector3(Math.sin(mod.thetaz), Math.cos(mod.thetaz), 0) + camera.lookAt(new THREE.Vector3(mod.x0, mod.y0, 0)) + camera.updateProjectionMatrix() + renderer.render(scene, camera) + } else if (mod.button == 2) { + mod.thetaxy += dy / win.innerHeight + mod.thetaz += dx / win.innerWidth + camera.position.x = mod.x0 + Math.sin(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.y = mod.y0 + Math.cos(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.z = mod.r * Math.cos(mod.thetaxy) + camera.up = new THREE.Vector3(Math.sin(mod.thetaz), Math.cos(mod.thetaz), 0) + camera.lookAt(new THREE.Vector3(mod.x0, mod.y0, 0)) + camera.updateProjectionMatrix() + renderer.render(scene, camera) + } + } + // + // mouse_wheel + // + function mouse_wheel(evt) { + evt.preventDefault() + evt.stopPropagation() + var dy = evt.deltaY / win.innerHeight + mod.r += mod.height * dy + camera.position.x = mod.x0 + Math.sin(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.y = mod.y0 + Math.cos(mod.thetaz) * mod.r * Math.sin(mod.thetaxy) + camera.position.z = mod.r * Math.cos(mod.thetaxy) + camera.lookAt(new THREE.Vector3(mod.x0, mod.y0, 0)) + camera.updateProjectionMatrix() + renderer.render(scene, camera) + } + } + + + /* + UI helpers + */ + function make_text_input(div, name, size) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + var input = document.createElement('input') + input.type = 'text' + input.size = size + div.appendChild(input) + + return input + } + + function make_button_input(div, text) { + div.appendChild(document.createElement('br')) + var button = document.createElement('button') + button.style.padding = mods.ui.padding + button.style.margin = 1 + button.appendChild(document.createTextNode(text)) + div.appendChild(button) + + return button + } + + function make_checkbox_input(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var checkbox = document.createElement('input') + checkbox.type = 'checkbox' + div.appendChild(checkbox) + + return checkbox + } + + function make_text_display(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var span = document.createElement('span') + span.innerHTML = '' + div.appendChild(span) + + return span + } + + // + // return values + // + return ({ + mod: mod, + name: name, + init: init, + inputs: inputs, + outputs: outputs, + interface: interface + }) +}()) \ No newline at end of file diff --git a/modules/hardware/motors/stepper b/modules/hardware/motors/stepper new file mode 100644 index 0000000000000000000000000000000000000000..8ef0a123434e498a077f6cbd83e4e07e9e8344bf --- /dev/null +++ b/modules/hardware/motors/stepper @@ -0,0 +1,474 @@ +// +// converts toolpath objects into segments for accel planning +// +// Neil Gershenfeld and Jake Read +// (c) Massachusetts Institute of Technology 2018 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. +// +// closure +// +(function() { + // + // module globals + // + var mod = {} + // + // name + // + var name = 'stepper' + // + // initialization + // + var init = function() { + mod.stepper_axis_num_in.value = '0' + mod.axis_num = 0 + mod.steps_per_mm_in.value = '80' + mod.convert = 80 + mod.block = { + accel: 50, + cruise: 120, + entry: 0, + exit: 30, + p1: [0, 0, 0], + p2: [10, 10, 10] + } + } + // + // inputs + // + var inputs = { + block: { + type: 'objects', + label: 'block', + event: function(evt) { + mod.block = JSON.parse(JSON.stringify(evt.detail)) // dereference pls + shipIt() + } + }, + ack: { + type: 'packet', + label: 'headless packet', + event: function(evt) { + outputs.blockRequest.event() + } + } + } + // + // outputs + // + var outputs = { + blockRequest: { + type: 'event', + label: 'block request', + event: function() { + mods.output(mod, 'blockRequest', mod.axis_num) + } + }, + packet: { + type: 'packet', + label: 'headless packet', + event: function() { + //mods.output(mod, 'segments', null) + } + } + } + // + // interface + // + var interface = function(div) { + mod.div = div + // + // inputs + // + // settings + // the axis to pull out of the block - index of posistions on p1, p2 + mod.stepper_axis_num_in = make_text_input(div, 'axis index', 12) + mod.stepper_axis_num_in.addEventListener('change', function() { + mod.axis_num = parseInt(mod.stepper_axis_num_in.value) + }) + // steps per mm + mod.steps_per_mm_in = make_text_input(div, 'steps per mm', 12) + mod.steps_per_mm_in.addEventListener('change', function() { + mod.covert = parseFloat(mod.steps_per_mm_in.value) + }) + // + // request to do the business + // + mod.send_button = make_button_input(div, 'send') + mod.send_button.addEventListener('click', function() { + shipIt() + }) + } + + function cartesianDistance(p1, p2) { + // takes p1, p2 to be arrays of same length + // computes cartesian distance + var sum = 0 + for (var i = 0; i < p1.length; i++) { + sum += Math.pow((p1[i] - p2[i]), 2) + } + return Math.sqrt(sum) + } + + function cartesianLength(v) { + // length of vector + var sum = 0 + for (var i = 0; i < v.length; i++) { + sum += Math.pow(v[i], 2) + } + return Math.sqrt(sum) + } + + function addMatrix(a, b, c) { + // c = a + b + a.forEach(function(item, index) { + c[index] = b[index] + a[index] + }) + } + + function subtractMatrix(a, b, c) { + // c = a - b + b.forEach(function(item, index) { + c[index] = a[index] - b[index] + }) + } + + function multiplyMatrix(a, scalar, b) { + // b = a * scalar + a.forEach(function(item, index) { + b[index] = a[index] * scalar + }) + } + + function multiply2dMatrix(a, scalar, b) { + // b = a * scalar + for (var i = 0; i < a.length; i++) { + for (var j = 0; j < a[i].length; j++) { + b[i][j] = a[i][j] * scalar; + } + } + } + + function divideMatrix(a, scalar, b) { + // b = a / scalar + for (var i = 0; i < a.length; i++) { + b[i] = a[i] / scalar + } + } + + function unitVector(p1, p2) { + // returns new array, is unit vector of p2-p1 + var unit = new Array() + subtractMatrix(p2, p1, unit) + var length = cartesianLength(unit) + divideMatrix(unit, length, unit) + + return unit + } + + function dotProduct(a, b) { + // returns a dot b + var sum = 0; + for (var i = 0; i < a.length; i++) { + sum += a[i] * b[i] + } + + return sum + } + + function toFixedMatrix(a, digits) { + var rounded = new Array() + for (var i = 0; i < a.length; i++) { + rounded[i] = a[i].toFixed(digits) + } + + return rounded + } + + /* + now: + + start from segment and find a corner + do planner + + */ + + // + // local functions + // + function shipIt() { + // sends integer values, I think we maintain positioning because we round before subtracting + + var trapezoid = calculateTrapezoid(mod.axis_num) + if (trapezoid.length == 0) { + console.log('zero length step block') + var ok = 0 + var i = 0 + var waitTrap + while (!ok && i < mod.block.p1.length) { + waitTrap = calculateTrapezoid(i) + if (waitTrap.delta != 0) { + ok = 1 + } else { + i++ + } + } + if (ok) { + sendWait(waitTrap) + } else { + console.log('step zero packets: no axis of nonzero length found', JSON.parse(JSON.stringify(mod.block))) + } + } else { + sendTrapezoid(trapezoid) + } + } + + function calculateTrapezoid(axis) { + // packet (per stepper block) + // steps, entry, accel, accelLength, deccelLength + // first we fill this with all of the info we'll use to calculated + // the trapezoid in planner-space units, then we convert to steps last + var trap = {} + + // lengths and positions for the move + trap.x1 = mod.block.p1[axis] + trap.x2 = mod.block.p2[axis] + trap.delta = trap.x2 - trap.x1 + trap.length = Math.abs(trap.delta) + + // rates for the move + var unit = unitVector(mod.block.p1, mod.block.p2) + var relativeRate = Math.abs(unit[axis]) + trap.entry = mod.block.entry * relativeRate + trap.accel = mod.block.accel * relativeRate + trap.cruise = mod.block.cruise * relativeRate + trap.exit = mod.block.exit * relativeRate + + // now accelLength and deccelLength + // using the maximum deltaV for the move, + // we'll figure out what type of move we have + var maxExit = Math.sqrt(trap.entry * trap.entry + 2 * trap.accel * trap.length) + var maxEntry = Math.sqrt(trap.exit * trap.entry + 2 * trap.accel * trap.length) + + // there are 7 possible profiles + if (trap.length <= 0) { + // console.log('zero length trap') + } else if (maxExit <= trap.exit) { + // full ramp-up: have to push iiit to get there + //console.log('full rampup') + trap.ramptype = 'rampup' + trap.accelLength = trap.length + trap.deccelLength = trap.length + mod.convert // never decel + // for the wait function + trap.vAvg = (trap.entry + trap.exit) / 2 + } else if (maxEntry <= trap.entry) { + // full ramp-down: have to deccel all the way with this rate + //console.log('full rampdown') + trap.ramptype = 'rampdown' + trap.deccelLength = 0 // start immmeeeeediately + trap.accelLength = 0 // never accel + // for the wait + trap.vAvg = (trap.entry + trap.exit) / 2 + } else if (trap.cruise == trap.entry && trap.cruise == trap.exit) { + // str8 relaxin, no maxin + //console.log('full cruise') + trap.ramptype = 'cruise' + trap.accelLength = 0 // never accel + trap.deccelLength = trap.length + mod.convert // never decel + // wait + trap.vAvg = trap.cruise + } else if (trap.cruise == trap.entry) { + // cruise, then deccel + //console.log('cruise then deccel') + // for how long do we have to decel? we have to have deltaV for + trap.ramptype = 'cruiseDeccel' + var deccelDistance = (trap.cruise * trap.cruise - trap.exit * trap.exit) / (2 * trap.accel) + trap.deccelLength = trap.length - deccelDistance + trap.accelLength = 0; // never accel + // we really want speed by multiple times, and total distance we know, for vAvg + var tSum = (trap.cruise - trap.exit) / trap.accel + trap.deccelLength / trap.cruise + trap.vAvg = trap.delta / tSum + } else if (trap.cruise == trap.exit) { + // accel, cruise? unless entry also cruise? + //console.log('accel then cruise') + trap.ramptype = 'cruiseAccel' + trap.accelLength = (trap.cruise * trap.cruise - trap.entry * trap.entry) / (2 * trap.accel) + trap.deccelLength = trap.length + 1; // and never deccel + // wait + var tSum = (trap.cruise - trap.entry) / trap.accel + (trap.delta - trap.accellength) / trap.cruise + trap.vAvg = trap.dela / tSum + } else { + // it's either a full trap, or a triangle + var accelDistance = (trap.cruise * trap.cruise - trap.entry * trap.entry) / (2 * trap.accel) + var deccelDistance = (trap.cruise * trap.cruise - trap.exit * trap.exit) / (2 * trap.accel) + if ((accelDistance + deccelDistance) < trap.length) { + //console.log('full trap') + trap.ramptype = 'fullTrap' + trap.accelLength = accelDistance + trap.deccelLength = trap.length - deccelDistance + // wait + var tSum = (trap.cruise - trap.entry) / trap.accel + (trap.deccelLength - trap.accellength) / trap.cruise + (trap.cruise - trap.exit) / trap.accel + trap.vAvg = trap.delta / tSum + } else { + //console.log('triangle') + trap.ramptype = 'triangle' + // find intersection point + var vPeak = Math.sqrt((2 * trap.accel * trap.length + Math.pow(trap.entry, 2) + Math.pow(trap.exit, 2)) / 2) + //console.log('entry, peak, exit', trap.entry, vPeak, trap.exit) + var midPoint = (vPeak * vPeak - trap.entry * trap.entry) / (2 * trap.accel) + trap.accelLength = midPoint + trap.deccelLength = midPoint + var tSum = (trap.vPeak - trap.entry) / trap.accel + (trap.vPeak - trap.exit) / trap.accel + trap.vAvg = trap.delta / tSum + } + } + + return trap + } + + function sendTrapezoid(trap) { + //console.log('trapezoid', trapezoid) + var stepwiseTrap = trapezoidToStepwise(trap); + + var packet = new Array(); + // first, the packet header: the route, ptr and end_addr delimiter + // #define APA_END_ROUTE_DELIMITER 255 + // #define APA_ROUTE_POINTER 254 + // #define DELIM_KEY_TRAPEZOID 131 // is 32 bit int + // #define DELIM_KEY_WAIT 132 + packet.push(131) + // now we pack these values into C-readable bytes + // int32_t steps, uint32_t entryspeed, accel, accellength, decellength + packet = packet.concat(pack32(stepwiseTrap.steps)) + packet = packet.concat(pack32(stepwiseTrap.entry)) + packet = packet.concat(pack32(stepwiseTrap.accel)) + packet = packet.concat(pack32(stepwiseTrap.accelLength)) + packet = packet.concat(pack32(stepwiseTrap.deccelLength)) + // log this if you wish + //console.log('packet from stepper', packet) + // send it along! + mods.output(mod, 'packet', packet) + } + + function sendWait(trap) { + var stepWait = trapezoidToStepWait(trap); + var packet = new Array(); + // #define DELIM_KEY_WAIT 132 + packet.push(132) + // now we pack these values into C-readable bytes + // int32_t steps, uint32_t entryspeed, accel, accellength, decellength + packet = packet.concat(pack32(stepWait.delta)) + + if(isNaN(stepWait.vAvg)){ + console.log('maths failure on vAvg') + packet = packet.concat(pack32(1000)) + console.log('wait block', stepWait.steps, 1000) + } else { + packet = packet.concat(pack32(stepWait.vAvg)) + console.log('wait block', stepWait.steps, stepWait.vAvg) + } + // log this if you wish + //console.log('packet from stepper', packet) + // send it along! + mods.output(mod, 'packet', packet) + } + + function trapezoidToStepwise(trap) { + var stepwise = {} + // planner units -> steps + stepwise.steps = Math.round(trap.delta * mod.convert) + // planner units -> steps/min (for less integer error) + stepwise.entry = Math.round(trap.entry * mod.convert) + // planner units -> steps/min/s (a messed up unit, I know) + stepwise.accel = Math.round(trap.accel * mod.convert) + // planner units -> steps + stepwise.accelLength = Math.round(trap.accelLength * mod.convert) + stepwise.deccelLength = Math.round(trap.deccelLength * mod.convert) + + return stepwise + } + + function trapezoidToStepWait(trap) { + var stepWait = {} + // planner units -> steps + stepWait.steps = Math.round(trap.delta * mod.convert) + // + stepWait.vAvg = Math.round(trap.vAvg * mod.convert) + + return stepWait + } + + function pack32(val) { + var pack = new Array(); + pack[0] = (val >> 24) & 255; + pack[1] = (val >> 16) & 255; + pack[2] = (val >> 8) & 255; + pack[3] = val & 255; + + return pack; + } + + + /* + UI helpers + */ + function make_text_input(div, name, size) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + var input = document.createElement('input') + input.type = 'text' + input.size = size + div.appendChild(input) + + return input + } + + function make_button_input(div, text) { + div.appendChild(document.createElement('br')) + var button = document.createElement('button') + button.style.padding = mods.ui.padding + button.style.margin = 1 + button.appendChild(document.createTextNode(text)) + div.appendChild(button) + + return button + } + + function make_checkbox_input(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var checkbox = document.createElement('input') + checkbox.type = 'checkbox' + div.appendChild(checkbox) + + return checkbox + } + + function make_text_display(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var span = document.createElement('span') + span.innerHTML = '' + div.appendChild(span) + + return span + } + + + // + // return values + // + return ({ + mod: mod, + name: name, + init: init, + inputs: inputs, + outputs: outputs, + interface: interface + }) +}()) \ No newline at end of file diff --git a/modules/hardware/network/mkserial b/modules/hardware/network/mkserial new file mode 100644 index 0000000000000000000000000000000000000000..c3191224d068b8aaf9cf93d09bf6119d4d365afc --- /dev/null +++ b/modules/hardware/network/mkserial @@ -0,0 +1,464 @@ +// +// converts toolpath objects into segments for accel planning +// +// Neil Gershenfeld and Jake Read +// (c) Massachusetts Institute of Technology 2018 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. +// +// closure +// +(function() { + // + // module globals + // + var mod = {} + // + // name + // + var name = 'mkserial demuxer' + // + // initialization + // + var init = function() { + mod.address.value = '127.0.0.1' + mod.port.value = 6789 + mod.socket = null + socket_open() + } + // + // inputs + // + var inputs = { + packetOne: { + type: 'packet', + label: '1 packet payload', + event: function(evt) { + var headlessPacket = JSON.parse(JSON.stringify(evt.detail)) + packetOutput(0, headlessPacket) + } + }, + packetTwo: { + type: 'packet', + label: '2 packet payload', + event: function(evt) { + var headlessPacket = JSON.parse(JSON.stringify(evt.detail)) + packetOutput(1, headlessPacket) + } + }, + packetThree: { + type: 'packet', + label: '3 packet payload', + event: function(evt) { + var headlessPacket = JSON.parse(JSON.stringify(evt.detail)) + packetOutput(2, headlessPacket) + } + }, + packetFour: { + type: 'packet', + label: '4 packet payload', + event: function(evt) { + var headlessPacket = JSON.parse(JSON.stringify(evt.detail)) + packetOutput(3, headlessPacket) + } + }, + packetFive: { + type: 'packet', + label: '5 packet payload', + event: function(evt) { + var headlessPacket = JSON.parse(JSON.stringify(evt.detail)) + packetOutput(4, headlessPacket) + } + } + } + // + // outputs + // + var outputs = { + packetOne: { + type: 'packet', + label: '1 packet payload', + event: function(evt) { + // fires elswhere with mods.output(mod, 'packetOne', data) + } + }, + packetTwo: { + type: 'packet', + label: '2 packet payload' + }, + packetThree: { + type: 'packet', + label: '3 packet payload' + }, + packetFour: { + type: 'packet', + label: '4 packet payload' + }, + packetFive: { + type: 'packet', + label: '5 packet payload' + } + } + // + // interface + // + var interface = function(div) { + mod.div = div + // + // inputs + // + mod.netpath_in = new Array() // of UI + mod.netpath = new Array() // of paths + // settings + // the network paths to the thing + for (var i = 0; i < 5; i++) { + add_netpath(div) + } + + div.appendChild(document.createElement('br')) + + var a = document.createElement('a') + a.href = './js/serialserver.js' + a.innerHTML = 'serialserver:' + a.target = '_blank' + div.appendChild(a) + div.appendChild(document.createElement('br')) + // + // open/close + // + var btn = document.createElement('button') + btn.style.margin = 1 + btn.appendChild(document.createTextNode('open')) + btn.addEventListener('click', function() { + socket_open() + }) + div.appendChild(btn) + var btn = document.createElement('button') + btn.style.margin = 1 + btn.appendChild(document.createTextNode('close')) + btn.addEventListener('click', function() { + socket_close() + }) + div.appendChild(btn) + div.appendChild(document.createElement('br')) + // + // address + // + div.appendChild(document.createTextNode('address: ')) + input = document.createElement('input') + input.type = 'text' + input.size = 10 + div.appendChild(input) + mod.address = input + div.appendChild(document.createElement('br')) + // + // port + // + div.appendChild(document.createTextNode('\u00a0\u00a0\u00a0\u00a0\u00a0port: ')) + var input = document.createElement('input') + input.type = 'text' + input.size = 10 + div.appendChild(input) + mod.port = input + div.appendChild(document.createElement('br')) + // + // status + // + div.appendChild(document.createTextNode('\u00a0\u00a0status: ')) + var input = document.createElement('input') + input.type = 'text' + input.size = 10 + div.appendChild(input) + mod.status = input + div.appendChild(document.createElement('br')) + // + // serial + // + div.appendChild(document.createTextNode('serial device:')) + div.appendChild(document.createElement('br')) + // + // open/close + // + var btn = document.createElement('button') + btn.style.margin = 1 + btn.appendChild(document.createTextNode('open')) + btn.addEventListener('click', function() { + serial_open() + }) + div.appendChild(btn) + var btn = document.createElement('button') + btn.style.margin = 1 + btn.appendChild(document.createTextNode('close')) + btn.addEventListener('click', function() { + serial_close() + }) + div.appendChild(btn) + div.appendChild(document.createElement('br')) + } + + function add_netpath(div) { + var numCurrentPaths = mod.netpath.length; + mod.netpath_in[numCurrentPaths] = make_text_input(div, (numCurrentPaths + 1).toString() + ' network path', 12) + mod.netpath_in[numCurrentPaths].addEventListener('change', function() { + mod.netpath[numCurrentPaths] = mod.netpath_in[numCurrentPaths].value.split(',') + if (mod.netpath[numCurrentPaths] == '') { + mod.netpath[0] = [] + console.log('zero length address') + } else { + for (var i = 0; i < mod.netpath[numCurrentPaths].length; i++) { + mod.netpath[numCurrentPaths][i] = parseInt(mod.netpath[numCurrentPaths][i]) + } + console.log('new address', mod.netpath) + } + }) + mod.netpath_in[numCurrentPaths].value = '0,' + numCurrentPaths.toString() + mod.netpath[numCurrentPaths] = [0, numCurrentPaths] + } + + function packetOutput(index, headlessPacket) { + // add ptr and delimiter (unshifting, so reverse order) + headlessPacket.unshift(255) //end addr delimiter + headlessPacket.unshift(254) //ptr + // add path descending thru + for (var i = mod.netpath[index].length - 1; i >= 0; i--) { + headlessPacket.unshift(mod.netpath[index][i]) + } + // add length + headlessPacket.unshift(headlessPacket.length + 1) + // log it + // console.log('packet from demux', headlessPacket) + // put it on the serial + var wsMessage = { + type: 'packet', + packet: JSON.parse(JSON.stringify(headlessPacket)) + } + socket_send(JSON.stringify(wsMessage)) + } + + function packetInput(packet) { + // shift pointer + shiftPacketPointer(packet) + // find address in packet, address has been flipped + // assuming this is a terminal packet, i.e. we are the recipient, + // cut + var returnPacketHeader = packet.slice(2, packet.indexOf(255)) + // and then flip the header + var packetHeader = new Array() + for (var i = 0; i < returnPacketHeader.length; i++) { + packetHeader[i] = returnPacketHeader[returnPacketHeader.length - i - 1] + } + var indexMatch = null + // match to addresses mod.netpath[i] + for (var i = 0; i < mod.netpath.length; i++) { + if (packetHeader.length === mod.netpath[i].length) { + if (packetHeader.toString() === mod.netpath[i].toString()) { + // just takes 1st match + // actually, we are receiving ack'd packets, w/ reversed headers + + indexMatch = i + } + } + } + // is match? + if (indexMatch != null) { + // console.log('match on ', indexMatch) + // dereference header + var headlessPacket = packet.slice(packetHeader.length + 3, packet.length) + // console.log('headless', headlessPacket) + // send on port + // big messy nasty no thank you + switch (indexMatch) { + case 0: + mods.output(mod, 'packetOne', headlessPacket) + break + case 1: + mods.output(mod, 'packetTwo', headlessPacket) + break + case 2: + mods.output(mod, 'packetThree', headlessPacket) + break + case 3: + mods.output(mod, 'packetFour', headlessPacket) + break + case 4: + mods.output(mod, 'packetFive', headlessPacket) + break + } + } else { + console.log('no match on returned packet') + } + } + + function shiftPacketPointer(array) { + // find end of packet header + var end = 0 + var i = 0 + while (end == 0) { + if (array[i] === 255) { + end = i + } else if (i >= array.length) { + break + } + i++ + } + // we'll assume we're the last drop, put the pointer at the head + array[1] = 254 + // and then shift the address bytes forward + for (var j = 2; j < end - 1; j++) { + array[j] = array[j + 1] + } + array[end-1] = 0 // incoming port + } + + var thisPacket = new Array() // we sometimes receive incomplete packets, have to track and parse + // + function socket_open() { + var url = "ws://" + mod.address.value + ':' + mod.port.value + mod.socket = new WebSocket(url) + mod.socket.onopen = function(event) { + mod.status.value = "socket opened" + serial_open() + } + mod.socket.onerror = function(event) { + mod.status.value = "can not open" + mod.socket = null + } + mod.socket.onmessage = function(event) { + var wsMessage = JSON.parse(event.data) + if (wsMessage.type === 'message') { + mod.status.value = wsMessage.message + } else if (wsMessage.type === 'array') { + // we are the 0th port, + thisPacket = thisPacket.concat(wsMessage.array) + + if (thisPacket[0] <= 0) { + thisPacket = [] + console.log('throwing packet with leading zero') + } + + while (thisPacket.length >= thisPacket[0]) { + if (thisPacket.length == thisPacket[0]) { + //console.log('one packet', thisPacket) + packetInput(JSON.parse(JSON.stringify(thisPacket))) + thisPacket = [] + } else { + var fullPacket = thisPacket.slice(0, thisPacket[0]) + packetInput(JSON.parse(JSON.stringify(fullPacket))) + //console.log('second packet', fullPacket) + thisPacket = thisPacket.slice(thisPacket[0]) + } + } + + } else { + mod.status.value = 'message not recognized' + } + } + } + + function socket_close() { + mod.socket.close() + mod.status.value = "socket closed" + mod.socket = null + } + + function socket_send(msg) { + if (mod.socket != null) { + mod.status.value = "send" + mod.socket.send(msg) + } else { + mod.status.value = "can't send, not open" + } + } + + function serial_open() { + if (mod.socket == null) { + mod.status.value = "socket not open" + } else { + var msg = {} + msg.type = 'open' + mod.socket.send(JSON.stringify(msg)) + } + } + + function serial_close() { + if (mod.socket == null) { + mod.status.value = "socket not open" + } else { + var msg = {} + msg.type = 'close' + msg.device = mod.device.value + mod.socket.send(JSON.stringify(msg)) + } + } + + function serial_send(wsMessage) { + if (mod.socket == null) { + mod.status.value = "socket not open" + } else { + mod.socket.send(JSON.stringify(wsMessage)) + mod.status.value = 'transmit' + } + } + + /* + UI helpers + */ + function make_text_input(div, name, size) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + var input = document.createElement('input') + input.type = 'text' + input.size = size + div.appendChild(input) + + return input + } + + function make_button_input(div, text) { + div.appendChild(document.createElement('br')) + var button = document.createElement('button') + button.style.padding = mods.ui.padding + button.style.margin = 1 + button.appendChild(document.createTextNode(text)) + div.appendChild(button) + + return button + } + + function make_checkbox_input(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var checkbox = document.createElement('input') + checkbox.type = 'checkbox' + div.appendChild(checkbox) + + return checkbox + } + + function make_text_display(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var span = document.createElement('span') + span.innerHTML = '' + div.appendChild(span) + + return span + } + + + // + // return values + // + return ({ + mod: mod, + name: name, + init: init, + inputs: inputs, + outputs: outputs, + interface: interface + }) +}()) \ No newline at end of file diff --git a/modules/hardware/network/mkserialserver.js b/modules/hardware/network/mkserialserver.js new file mode 100644 index 0000000000000000000000000000000000000000..17c2eb72f4b166fa88ef7b2bee53c39b1563700d --- /dev/null +++ b/modules/hardware/network/mkserialserver.js @@ -0,0 +1,151 @@ +// +// serialserver.js +// WebSocket serial server +// +// Neil Gershenfeld and Jake Read +// (c) Massachusetts Institute of Technology 2016 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. +// +// check command line +// +var client_address, server_port, com_port + +if (process.argv.length < 4 && process.argv[2] != 'default') { + console.log("command line: node serialserver.js client_address server_port com_port") + process.exit(-1) +} else if (process.argv[2] === 'default' || process.argv.length < 3) { + client_address = '::ffff:127.0.0.1' + server_port = '6789' + com_port = 'COM9' +} else { + client_address = process.argv[2] + server_port = process.argv[3] + com_port = process.argv[4] +} +// +// startup WebSocketServer +// +var WebSocketServer = require('ws').Server +wss = new WebSocketServer({ + port: server_port +}) +var ws // socket, particular connection +var wsConnected = false +// +// startup SerialPort +// +var SerialPort = require('serialport') +var port = new SerialPort(com_port, { + baudRate: 750000, +/* dataBits: 8, + parity: 'none', + flowControl: false*/ +}) +// +// SerialPort handlers +// +port.on('open', function() { + var wsMessage = { + type: 'message', + message: 'serial port opened' + } + // send hello to ready usb serial + console.log('opened port ' + com_port) + if (wsConnected) { + ws.send(JSON.stringify(wsMessage)) + } +}) + +console.log('waiting for connection from ' + client_address + ' on port ' + server_port) + +port.on('error', function(err) { + var wsMessage = { + type: 'message', + message: err.message + } + if (wsConnected) { + ws.send(JSON.stringify(wsMessage)) + } +}) + +port.on('data', function(data) { + var dataArray = new Array() + for (var i = 0; i < data.length; i++) { + dataArray[i] = data[i] + } + console.log('data in', dataArray) + var wsMessage = { + type: 'array', + array: dataArray + } + if (wsConnected) { + ws.send(JSON.stringify(wsMessage)) + } +}) + +// +// WebSocketServer handlers +// +wss.on('connection', function(socketConnection) { + // + // check address + // + if (socketConnection._socket.remoteAddress != client_address) { + console.log("connection rejected from " + ws._socket.remoteAddress) + var wsMessage = { + type: 'message', + message: 'socket closed' + } + socketConnection.send(JSON.stringify(wsMessage)) + socketConnection.close() + } else { + ws = socketConnection + console.log("connection accepted from " + ws._socket.remoteAddress) + wsConnected = true + } + // + // handle messages + // + var cancel + var packet = new Array() + + ws.on("message", function(message) { + var msg = JSON.parse(message) + + if (msg.type == 'packet') { + console.log('packet out', msg.packet) // packet is an array + port.write(msg.packet) + + /*, function() { + port.drain(function(err) { + if (err) { + var wsMessage = { + type: 'message', + message: err.message + } + ws.send(JSON.stringify(wsMessage)) + } + }) + }) + */ + } else if (msg.type == 'open'){ + console.log('mod requests open') + } else { + console.log('unrecognized socket message') + } + }) + // + // close + // + ws.on("close", function() { + console.log("connection closed") + if (port != null) + port.close() + port = null + }) +}) \ No newline at end of file diff --git a/modules/index.js b/modules/index.js index 0f6ffa939f28d45b04aceb7479f12846add1daf5..a2d0e8205ae06b344917d266a233388ecd03f869 100644 --- a/modules/index.js +++ b/modules/index.js @@ -71,6 +71,1628 @@ module_label(' view') module_menu(' render (CPU)','modules/frep/view/render%20(CPU)') module_menu(' render (GPU)','modules/frep/view/render%20(GPU)') module_menu(' slice','modules/frep/view/slice') +module_label('hardware') +module_menu(' demo_toolpath','modules/hardware/demo_toolpath') +module_label(' motors') +module_menu(' stepper','modules/hardware/motors/stepper') +module_label(' network') +module_menu(' mkserial','modules/hardware/network/mkserial') +module_menu(' mkserialserver.js','modules/hardware/network/mkserialserver.js') +module_label(' node_modules') +module_label(' .bin') +module_menu(' prebuild-install','modules/hardware/network/node_modules/.bin/prebuild-install') +module_menu(' prebuild-install.cmd','modules/hardware/network/node_modules/.bin/prebuild-install.cmd') +module_menu(' prominode','modules/hardware/network/node_modules/.bin/prominode') +module_menu(' prominode.cmd','modules/hardware/network/node_modules/.bin/prominode.cmd') +module_menu(' rc','modules/hardware/network/node_modules/.bin/rc') +module_menu(' rc.cmd','modules/hardware/network/node_modules/.bin/rc.cmd') +module_menu(' serialport-list','modules/hardware/network/node_modules/.bin/serialport-list') +module_menu(' serialport-list.cmd','modules/hardware/network/node_modules/.bin/serialport-list.cmd') +module_menu(' serialport-repl','modules/hardware/network/node_modules/.bin/serialport-repl') +module_menu(' serialport-repl.cmd','modules/hardware/network/node_modules/.bin/serialport-repl.cmd') +module_menu(' serialport-term','modules/hardware/network/node_modules/.bin/serialport-term') +module_menu(' serialport-term.cmd','modules/hardware/network/node_modules/.bin/serialport-term.cmd') +module_menu(' window-size','modules/hardware/network/node_modules/.bin/window-size') +module_menu(' window-size.cmd','modules/hardware/network/node_modules/.bin/window-size.cmd') +module_label(' ansi-bgblack') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-bgblack/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-bgblack/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-bgblack/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/ansi-bgblack/README.md') +module_label(' ansi-bgblue') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-bgblue/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-bgblue/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-bgblue/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-bgblue/readme.md') +module_label(' ansi-bgcyan') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-bgcyan/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-bgcyan/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-bgcyan/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-bgcyan/readme.md') +module_label(' ansi-bggreen') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-bggreen/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-bggreen/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-bggreen/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-bggreen/readme.md') +module_label(' ansi-bgmagenta') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-bgmagenta/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-bgmagenta/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-bgmagenta/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-bgmagenta/readme.md') +module_label(' ansi-bgred') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-bgred/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-bgred/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-bgred/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-bgred/readme.md') +module_label(' ansi-bgwhite') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-bgwhite/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-bgwhite/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-bgwhite/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-bgwhite/readme.md') +module_label(' ansi-bgyellow') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-bgyellow/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-bgyellow/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-bgyellow/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-bgyellow/readme.md') +module_label(' ansi-black') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-black/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-black/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-black/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-black/readme.md') +module_label(' ansi-blue') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-blue/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-blue/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-blue/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-blue/readme.md') +module_label(' ansi-bold') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-bold/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-bold/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-bold/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-bold/readme.md') +module_label(' ansi-colors') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-colors/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-colors/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-colors/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/ansi-colors/README.md') +module_label(' ansi-cyan') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-cyan/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-cyan/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-cyan/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-cyan/readme.md') +module_label(' ansi-dim') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-dim/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-dim/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-dim/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-dim/readme.md') +module_label(' ansi-gray') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-gray/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-gray/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-gray/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-gray/readme.md') +module_label(' ansi-green') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-green/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-green/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-green/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-green/readme.md') +module_label(' ansi-grey') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-grey/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-grey/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-grey/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-grey/readme.md') +module_label(' ansi-hidden') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-hidden/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-hidden/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-hidden/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-hidden/readme.md') +module_label(' ansi-inverse') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-inverse/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-inverse/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-inverse/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-inverse/readme.md') +module_label(' ansi-italic') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-italic/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-italic/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-italic/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-italic/readme.md') +module_label(' ansi-magenta') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-magenta/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-magenta/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-magenta/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-magenta/readme.md') +module_label(' ansi-red') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-red/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-red/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-red/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-red/readme.md') +module_label(' ansi-regex') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-regex/index.js') +module_menu(' license','modules/hardware/network/node_modules/ansi-regex/license') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-regex/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-regex/readme.md') +module_label(' ansi-reset') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-reset/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-reset/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-reset/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-reset/readme.md') +module_label(' ansi-strikethrough') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-strikethrough/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-strikethrough/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-strikethrough/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-strikethrough/readme.md') +module_label(' ansi-underline') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-underline/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-underline/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-underline/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-underline/readme.md') +module_label(' ansi-white') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-white/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-white/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-white/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-white/readme.md') +module_label(' ansi-wrap') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-wrap/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-wrap/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-wrap/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/ansi-wrap/README.md') +module_label(' ansi-yellow') +module_menu(' index.js','modules/hardware/network/node_modules/ansi-yellow/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ansi-yellow/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ansi-yellow/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ansi-yellow/readme.md') +module_label(' aproba') +module_menu(' index.js','modules/hardware/network/node_modules/aproba/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/aproba/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/aproba/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/aproba/README.md') +module_label(' are-we-there-yet') +module_menu(' CHANGES.md','modules/hardware/network/node_modules/are-we-there-yet/CHANGES.md') +module_menu(' index.js','modules/hardware/network/node_modules/are-we-there-yet/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/are-we-there-yet/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/are-we-there-yet/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/are-we-there-yet/README.md') +module_menu(' tracker-base.js','modules/hardware/network/node_modules/are-we-there-yet/tracker-base.js') +module_menu(' tracker-group.js','modules/hardware/network/node_modules/are-we-there-yet/tracker-group.js') +module_menu(' tracker-stream.js','modules/hardware/network/node_modules/are-we-there-yet/tracker-stream.js') +module_menu(' tracker.js','modules/hardware/network/node_modules/are-we-there-yet/tracker.js') +module_label(' arr-flatten') +module_menu(' index.js','modules/hardware/network/node_modules/arr-flatten/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/arr-flatten/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/arr-flatten/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/arr-flatten/README.md') +module_label(' arr-swap') +module_menu(' index.js','modules/hardware/network/node_modules/arr-swap/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/arr-swap/LICENSE') +module_label(' node_modules') +module_label(' is-number') +module_menu(' index.js','modules/hardware/network/node_modules/arr-swap/node_modules/is-number/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/arr-swap/node_modules/is-number/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/arr-swap/node_modules/is-number/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/arr-swap/node_modules/is-number/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/arr-swap/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/arr-swap/README.md') +module_label(' async-limiter') +module_menu(' .travis.yml','modules/hardware/network/node_modules/async-limiter/.travis.yml') +module_label(' coverage') +module_menu(' coverage.json','modules/hardware/network/node_modules/async-limiter/coverage/coverage.json') +module_label(' lcov-report') +module_label(' async-throttle') +module_menu(' index.html','modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html') +module_menu(' index.js.html','modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html') +module_menu(' base.css','modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/base.css') +module_menu(' index.html','modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/index.html') +module_menu(' prettify.css','modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/prettify.css') +module_menu(' prettify.js','modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/prettify.js') +module_menu(' sort-arrow-sprite.png','modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png') +module_menu(' sorter.js','modules/hardware/network/node_modules/async-limiter/coverage/lcov-report/sorter.js') +module_menu(' lcov.info','modules/hardware/network/node_modules/async-limiter/coverage/lcov.info') +module_menu(' index.js','modules/hardware/network/node_modules/async-limiter/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/async-limiter/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/async-limiter/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/async-limiter/readme.md') +module_label(' bindings') +module_menu(' bindings.js','modules/hardware/network/node_modules/bindings/bindings.js') +module_menu(' package.json','modules/hardware/network/node_modules/bindings/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/bindings/README.md') +module_label(' bl') +module_menu(' .jshintrc','modules/hardware/network/node_modules/bl/.jshintrc') +module_menu(' .travis.yml','modules/hardware/network/node_modules/bl/.travis.yml') +module_menu(' bl.js','modules/hardware/network/node_modules/bl/bl.js') +module_menu(' LICENSE.md','modules/hardware/network/node_modules/bl/LICENSE.md') +module_menu(' package.json','modules/hardware/network/node_modules/bl/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/bl/README.md') +module_label(' test') +module_menu(' test.js','modules/hardware/network/node_modules/bl/test/test.js') +module_label(' buffer-alloc') +module_menu(' index.js','modules/hardware/network/node_modules/buffer-alloc/index.js') +module_menu(' package.json','modules/hardware/network/node_modules/buffer-alloc/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/buffer-alloc/readme.md') +module_label(' buffer-alloc-unsafe') +module_menu(' index.js','modules/hardware/network/node_modules/buffer-alloc-unsafe/index.js') +module_menu(' package.json','modules/hardware/network/node_modules/buffer-alloc-unsafe/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/buffer-alloc-unsafe/readme.md') +module_label(' buffer-fill') +module_menu(' index.js','modules/hardware/network/node_modules/buffer-fill/index.js') +module_menu(' package.json','modules/hardware/network/node_modules/buffer-fill/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/buffer-fill/readme.md') +module_label(' choices-separator') +module_label(' node_modules') +module_label(' debug') +module_menu(' .coveralls.yml','modules/hardware/network/node_modules/choices-separator/node_modules/debug/.coveralls.yml') +module_menu(' .eslintrc','modules/hardware/network/node_modules/choices-separator/node_modules/debug/.eslintrc') +module_menu(' .npmignore','modules/hardware/network/node_modules/choices-separator/node_modules/debug/.npmignore') +module_menu(' .travis.yml','modules/hardware/network/node_modules/choices-separator/node_modules/debug/.travis.yml') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/choices-separator/node_modules/debug/CHANGELOG.md') +module_menu(' component.json','modules/hardware/network/node_modules/choices-separator/node_modules/debug/component.json') +module_menu(' karma.conf.js','modules/hardware/network/node_modules/choices-separator/node_modules/debug/karma.conf.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/choices-separator/node_modules/debug/LICENSE') +module_menu(' Makefile','modules/hardware/network/node_modules/choices-separator/node_modules/debug/Makefile') +module_menu(' node.js','modules/hardware/network/node_modules/choices-separator/node_modules/debug/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/choices-separator/node_modules/debug/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/choices-separator/node_modules/debug/README.md') +module_label(' src') +module_menu(' browser.js','modules/hardware/network/node_modules/choices-separator/node_modules/debug/src/browser.js') +module_menu(' debug.js','modules/hardware/network/node_modules/choices-separator/node_modules/debug/src/debug.js') +module_menu(' index.js','modules/hardware/network/node_modules/choices-separator/node_modules/debug/src/index.js') +module_menu(' inspector-log.js','modules/hardware/network/node_modules/choices-separator/node_modules/debug/src/inspector-log.js') +module_menu(' node.js','modules/hardware/network/node_modules/choices-separator/node_modules/debug/src/node.js') +module_label(' chownr') +module_menu(' chownr.js','modules/hardware/network/node_modules/chownr/chownr.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/chownr/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/chownr/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/chownr/README.md') +module_label(' clone-deep') +module_menu(' index.js','modules/hardware/network/node_modules/clone-deep/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/clone-deep/LICENSE') +module_label(' node_modules') +module_label(' kind-of') +module_menu(' index.js','modules/hardware/network/node_modules/clone-deep/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/clone-deep/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/clone-deep/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/clone-deep/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/clone-deep/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/clone-deep/README.md') +module_label(' code-point-at') +module_menu(' index.js','modules/hardware/network/node_modules/code-point-at/index.js') +module_menu(' license','modules/hardware/network/node_modules/code-point-at/license') +module_menu(' package.json','modules/hardware/network/node_modules/code-point-at/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/code-point-at/readme.md') +module_label(' collection-visit') +module_menu(' index.js','modules/hardware/network/node_modules/collection-visit/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/collection-visit/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/collection-visit/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/collection-visit/README.md') +module_label(' commander') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/commander/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/commander/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/commander/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/commander/package.json') +module_menu(' Readme.md','modules/hardware/network/node_modules/commander/Readme.md') +module_label(' typings') +module_menu(' index.d.ts','modules/hardware/network/node_modules/commander/typings/index.d.ts') +module_label(' component-emitter') +module_menu(' History.md','modules/hardware/network/node_modules/component-emitter/History.md') +module_menu(' index.js','modules/hardware/network/node_modules/component-emitter/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/component-emitter/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/component-emitter/package.json') +module_menu(' Readme.md','modules/hardware/network/node_modules/component-emitter/Readme.md') +module_label(' console-control-strings') +module_menu(' index.js','modules/hardware/network/node_modules/console-control-strings/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/console-control-strings/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/console-control-strings/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/console-control-strings/README.md') +module_menu(' README.md~','modules/hardware/network/node_modules/console-control-strings/README.md~') +module_label(' copy-descriptor') +module_menu(' index.js','modules/hardware/network/node_modules/copy-descriptor/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/copy-descriptor/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/copy-descriptor/package.json') +module_label(' core-util-is') +module_menu(' float.patch','modules/hardware/network/node_modules/core-util-is/float.patch') +module_label(' lib') +module_menu(' util.js','modules/hardware/network/node_modules/core-util-is/lib/util.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/core-util-is/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/core-util-is/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/core-util-is/README.md') +module_menu(' test.js','modules/hardware/network/node_modules/core-util-is/test.js') +module_label(' debug') +module_menu(' .coveralls.yml','modules/hardware/network/node_modules/debug/.coveralls.yml') +module_menu(' .eslintrc','modules/hardware/network/node_modules/debug/.eslintrc') +module_menu(' .npmignore','modules/hardware/network/node_modules/debug/.npmignore') +module_menu(' .travis.yml','modules/hardware/network/node_modules/debug/.travis.yml') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/debug/CHANGELOG.md') +module_menu(' karma.conf.js','modules/hardware/network/node_modules/debug/karma.conf.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/debug/LICENSE') +module_menu(' Makefile','modules/hardware/network/node_modules/debug/Makefile') +module_menu(' node.js','modules/hardware/network/node_modules/debug/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/debug/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/debug/README.md') +module_label(' src') +module_menu(' browser.js','modules/hardware/network/node_modules/debug/src/browser.js') +module_menu(' debug.js','modules/hardware/network/node_modules/debug/src/debug.js') +module_menu(' index.js','modules/hardware/network/node_modules/debug/src/index.js') +module_menu(' node.js','modules/hardware/network/node_modules/debug/src/node.js') +module_label(' decompress-response') +module_menu(' index.js','modules/hardware/network/node_modules/decompress-response/index.js') +module_menu(' license','modules/hardware/network/node_modules/decompress-response/license') +module_menu(' package.json','modules/hardware/network/node_modules/decompress-response/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/decompress-response/readme.md') +module_label(' deep-extend') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/deep-extend/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/deep-extend/index.js') +module_label(' lib') +module_menu(' deep-extend.js','modules/hardware/network/node_modules/deep-extend/lib/deep-extend.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/deep-extend/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/deep-extend/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/deep-extend/README.md') +module_label(' define-property') +module_menu(' index.js','modules/hardware/network/node_modules/define-property/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/define-property/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/define-property/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/define-property/README.md') +module_label(' delegates') +module_menu(' .npmignore','modules/hardware/network/node_modules/delegates/.npmignore') +module_menu(' History.md','modules/hardware/network/node_modules/delegates/History.md') +module_menu(' index.js','modules/hardware/network/node_modules/delegates/index.js') +module_menu(' License','modules/hardware/network/node_modules/delegates/License') +module_menu(' Makefile','modules/hardware/network/node_modules/delegates/Makefile') +module_menu(' package.json','modules/hardware/network/node_modules/delegates/package.json') +module_menu(' Readme.md','modules/hardware/network/node_modules/delegates/Readme.md') +module_label(' test') +module_menu(' index.js','modules/hardware/network/node_modules/delegates/test/index.js') +module_label(' detect-libc') +module_menu(' .npmignore','modules/hardware/network/node_modules/detect-libc/.npmignore') +module_label(' bin') +module_menu(' detect-libc.js','modules/hardware/network/node_modules/detect-libc/bin/detect-libc.js') +module_label(' lib') +module_menu(' detect-libc.js','modules/hardware/network/node_modules/detect-libc/lib/detect-libc.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/detect-libc/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/detect-libc/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/detect-libc/README.md') +module_label(' end-of-stream') +module_menu(' index.js','modules/hardware/network/node_modules/end-of-stream/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/end-of-stream/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/end-of-stream/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/end-of-stream/README.md') +module_label(' error-symbol') +module_menu(' index.js','modules/hardware/network/node_modules/error-symbol/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/error-symbol/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/error-symbol/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/error-symbol/README.md') +module_label(' expand-template') +module_menu(' .travis.yml','modules/hardware/network/node_modules/expand-template/.travis.yml') +module_menu(' index.js','modules/hardware/network/node_modules/expand-template/index.js') +module_menu(' package.json','modules/hardware/network/node_modules/expand-template/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/expand-template/README.md') +module_menu(' test.js','modules/hardware/network/node_modules/expand-template/test.js') +module_label(' extend-shallow') +module_menu(' index.js','modules/hardware/network/node_modules/extend-shallow/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/extend-shallow/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/extend-shallow/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/extend-shallow/README.md') +module_label(' for-in') +module_menu(' index.js','modules/hardware/network/node_modules/for-in/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/for-in/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/for-in/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/for-in/README.md') +module_label(' for-own') +module_menu(' index.js','modules/hardware/network/node_modules/for-own/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/for-own/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/for-own/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/for-own/README.md') +module_label(' fs-constants') +module_menu(' browser.js','modules/hardware/network/node_modules/fs-constants/browser.js') +module_menu(' index.js','modules/hardware/network/node_modules/fs-constants/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/fs-constants/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/fs-constants/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/fs-constants/README.md') +module_label(' gauge') +module_menu(' base-theme.js','modules/hardware/network/node_modules/gauge/base-theme.js') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/gauge/CHANGELOG.md') +module_menu(' error.js','modules/hardware/network/node_modules/gauge/error.js') +module_menu(' has-color.js','modules/hardware/network/node_modules/gauge/has-color.js') +module_menu(' index.js','modules/hardware/network/node_modules/gauge/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/gauge/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/gauge/package.json') +module_menu(' plumbing.js','modules/hardware/network/node_modules/gauge/plumbing.js') +module_menu(' process.js','modules/hardware/network/node_modules/gauge/process.js') +module_menu(' progress-bar.js','modules/hardware/network/node_modules/gauge/progress-bar.js') +module_menu(' README.md','modules/hardware/network/node_modules/gauge/README.md') +module_menu(' render-template.js','modules/hardware/network/node_modules/gauge/render-template.js') +module_menu(' set-immediate.js','modules/hardware/network/node_modules/gauge/set-immediate.js') +module_menu(' set-interval.js','modules/hardware/network/node_modules/gauge/set-interval.js') +module_menu(' spin.js','modules/hardware/network/node_modules/gauge/spin.js') +module_menu(' template-item.js','modules/hardware/network/node_modules/gauge/template-item.js') +module_menu(' theme-set.js','modules/hardware/network/node_modules/gauge/theme-set.js') +module_menu(' themes.js','modules/hardware/network/node_modules/gauge/themes.js') +module_menu(' wide-truncate.js','modules/hardware/network/node_modules/gauge/wide-truncate.js') +module_label(' github-from-package') +module_menu(' .travis.yml','modules/hardware/network/node_modules/github-from-package/.travis.yml') +module_label(' example') +module_menu(' package.json','modules/hardware/network/node_modules/github-from-package/example/package.json') +module_menu(' url.js','modules/hardware/network/node_modules/github-from-package/example/url.js') +module_menu(' index.js','modules/hardware/network/node_modules/github-from-package/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/github-from-package/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/github-from-package/package.json') +module_menu(' readme.markdown','modules/hardware/network/node_modules/github-from-package/readme.markdown') +module_label(' test') +module_menu(' a.json','modules/hardware/network/node_modules/github-from-package/test/a.json') +module_menu(' b.json','modules/hardware/network/node_modules/github-from-package/test/b.json') +module_menu(' c.json','modules/hardware/network/node_modules/github-from-package/test/c.json') +module_menu(' d.json','modules/hardware/network/node_modules/github-from-package/test/d.json') +module_menu(' e.json','modules/hardware/network/node_modules/github-from-package/test/e.json') +module_menu(' url.js','modules/hardware/network/node_modules/github-from-package/test/url.js') +module_label(' has-unicode') +module_menu(' index.js','modules/hardware/network/node_modules/has-unicode/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/has-unicode/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/has-unicode/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/has-unicode/README.md') +module_label(' info-symbol') +module_menu(' index.js','modules/hardware/network/node_modules/info-symbol/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/info-symbol/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/info-symbol/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/info-symbol/README.md') +module_label(' inherits') +module_menu(' inherits.js','modules/hardware/network/node_modules/inherits/inherits.js') +module_menu(' inherits_browser.js','modules/hardware/network/node_modules/inherits/inherits_browser.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/inherits/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/inherits/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/inherits/README.md') +module_label(' ini') +module_menu(' ini.js','modules/hardware/network/node_modules/ini/ini.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ini/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ini/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/ini/README.md') +module_label(' is-accessor-descriptor') +module_menu(' index.js','modules/hardware/network/node_modules/is-accessor-descriptor/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/is-accessor-descriptor/LICENSE') +module_label(' node_modules') +module_label(' kind-of') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/is-accessor-descriptor/node_modules/kind-of/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/is-accessor-descriptor/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/is-accessor-descriptor/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/is-accessor-descriptor/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/is-accessor-descriptor/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/is-accessor-descriptor/README.md') +module_label(' is-buffer') +module_menu(' index.js','modules/hardware/network/node_modules/is-buffer/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/is-buffer/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/is-buffer/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/is-buffer/README.md') +module_label(' test') +module_menu(' basic.js','modules/hardware/network/node_modules/is-buffer/test/basic.js') +module_label(' is-data-descriptor') +module_menu(' index.js','modules/hardware/network/node_modules/is-data-descriptor/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/is-data-descriptor/LICENSE') +module_label(' node_modules') +module_label(' kind-of') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/is-data-descriptor/node_modules/kind-of/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/is-data-descriptor/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/is-data-descriptor/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/is-data-descriptor/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/is-data-descriptor/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/is-data-descriptor/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/is-data-descriptor/README.md') +module_label(' is-descriptor') +module_menu(' index.js','modules/hardware/network/node_modules/is-descriptor/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/is-descriptor/LICENSE') +module_label(' node_modules') +module_label(' kind-of') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/is-descriptor/node_modules/kind-of/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/is-descriptor/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/is-descriptor/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/is-descriptor/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/is-descriptor/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/is-descriptor/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/is-descriptor/README.md') +module_label(' is-extendable') +module_menu(' index.js','modules/hardware/network/node_modules/is-extendable/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/is-extendable/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/is-extendable/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/is-extendable/README.md') +module_label(' is-fullwidth-code-point') +module_menu(' index.js','modules/hardware/network/node_modules/is-fullwidth-code-point/index.js') +module_menu(' license','modules/hardware/network/node_modules/is-fullwidth-code-point/license') +module_menu(' package.json','modules/hardware/network/node_modules/is-fullwidth-code-point/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/is-fullwidth-code-point/readme.md') +module_label(' is-number') +module_menu(' index.js','modules/hardware/network/node_modules/is-number/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/is-number/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/is-number/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/is-number/README.md') +module_label(' is-plain-object') +module_menu(' index.d.ts','modules/hardware/network/node_modules/is-plain-object/index.d.ts') +module_menu(' index.js','modules/hardware/network/node_modules/is-plain-object/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/is-plain-object/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/is-plain-object/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/is-plain-object/README.md') +module_label(' is-windows') +module_menu(' index.js','modules/hardware/network/node_modules/is-windows/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/is-windows/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/is-windows/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/is-windows/README.md') +module_label(' isarray') +module_menu(' .npmignore','modules/hardware/network/node_modules/isarray/.npmignore') +module_menu(' .travis.yml','modules/hardware/network/node_modules/isarray/.travis.yml') +module_menu(' component.json','modules/hardware/network/node_modules/isarray/component.json') +module_menu(' index.js','modules/hardware/network/node_modules/isarray/index.js') +module_menu(' Makefile','modules/hardware/network/node_modules/isarray/Makefile') +module_menu(' package.json','modules/hardware/network/node_modules/isarray/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/isarray/README.md') +module_menu(' test.js','modules/hardware/network/node_modules/isarray/test.js') +module_label(' isobject') +module_menu(' index.d.ts','modules/hardware/network/node_modules/isobject/index.d.ts') +module_menu(' index.js','modules/hardware/network/node_modules/isobject/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/isobject/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/isobject/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/isobject/README.md') +module_label(' kind-of') +module_menu(' index.js','modules/hardware/network/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/kind-of/README.md') +module_label(' koalas') +module_menu(' index.js','modules/hardware/network/node_modules/koalas/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/koalas/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/koalas/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/koalas/README.md') +module_label(' lazy-cache') +module_menu(' index.js','modules/hardware/network/node_modules/lazy-cache/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/lazy-cache/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/lazy-cache/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/lazy-cache/README.md') +module_label(' log-ok') +module_menu(' index.js','modules/hardware/network/node_modules/log-ok/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/log-ok/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/log-ok/package.json') +module_label(' log-utils') +module_menu(' index.js','modules/hardware/network/node_modules/log-utils/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/log-utils/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/log-utils/package.json') +module_label(' map-visit') +module_menu(' index.js','modules/hardware/network/node_modules/map-visit/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/map-visit/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/map-visit/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/map-visit/README.md') +module_label(' mimic-response') +module_menu(' index.js','modules/hardware/network/node_modules/mimic-response/index.js') +module_menu(' license','modules/hardware/network/node_modules/mimic-response/license') +module_menu(' package.json','modules/hardware/network/node_modules/mimic-response/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/mimic-response/readme.md') +module_label(' minimist') +module_menu(' .travis.yml','modules/hardware/network/node_modules/minimist/.travis.yml') +module_label(' example') +module_menu(' parse.js','modules/hardware/network/node_modules/minimist/example/parse.js') +module_menu(' index.js','modules/hardware/network/node_modules/minimist/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/minimist/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/minimist/package.json') +module_menu(' readme.markdown','modules/hardware/network/node_modules/minimist/readme.markdown') +module_label(' test') +module_menu(' all_bool.js','modules/hardware/network/node_modules/minimist/test/all_bool.js') +module_menu(' bool.js','modules/hardware/network/node_modules/minimist/test/bool.js') +module_menu(' dash.js','modules/hardware/network/node_modules/minimist/test/dash.js') +module_menu(' default_bool.js','modules/hardware/network/node_modules/minimist/test/default_bool.js') +module_menu(' dotted.js','modules/hardware/network/node_modules/minimist/test/dotted.js') +module_menu(' kv_short.js','modules/hardware/network/node_modules/minimist/test/kv_short.js') +module_menu(' long.js','modules/hardware/network/node_modules/minimist/test/long.js') +module_menu(' num.js','modules/hardware/network/node_modules/minimist/test/num.js') +module_menu(' parse.js','modules/hardware/network/node_modules/minimist/test/parse.js') +module_menu(' parse_modified.js','modules/hardware/network/node_modules/minimist/test/parse_modified.js') +module_menu(' short.js','modules/hardware/network/node_modules/minimist/test/short.js') +module_menu(' stop_early.js','modules/hardware/network/node_modules/minimist/test/stop_early.js') +module_menu(' unknown.js','modules/hardware/network/node_modules/minimist/test/unknown.js') +module_menu(' whitespace.js','modules/hardware/network/node_modules/minimist/test/whitespace.js') +module_label(' mixin-object') +module_menu(' index.js','modules/hardware/network/node_modules/mixin-object/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/mixin-object/LICENSE') +module_label(' node_modules') +module_label(' for-in') +module_menu(' index.js','modules/hardware/network/node_modules/mixin-object/node_modules/for-in/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/mixin-object/node_modules/for-in/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/mixin-object/node_modules/for-in/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/mixin-object/node_modules/for-in/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/mixin-object/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/mixin-object/README.md') +module_label(' mkdirp') +module_menu(' .travis.yml','modules/hardware/network/node_modules/mkdirp/.travis.yml') +module_label(' bin') +module_menu(' cmd.js','modules/hardware/network/node_modules/mkdirp/bin/cmd.js') +module_menu(' usage.txt','modules/hardware/network/node_modules/mkdirp/bin/usage.txt') +module_label(' examples') +module_menu(' pow.js','modules/hardware/network/node_modules/mkdirp/examples/pow.js') +module_menu(' index.js','modules/hardware/network/node_modules/mkdirp/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/mkdirp/LICENSE') +module_label(' node_modules') +module_label(' minimist') +module_menu(' .travis.yml','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/.travis.yml') +module_label(' example') +module_menu(' parse.js','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/example/parse.js') +module_menu(' index.js','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/package.json') +module_menu(' readme.markdown','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/readme.markdown') +module_label(' test') +module_menu(' dash.js','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/dash.js') +module_menu(' default_bool.js','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/default_bool.js') +module_menu(' dotted.js','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/dotted.js') +module_menu(' long.js','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/long.js') +module_menu(' parse.js','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/parse.js') +module_menu(' parse_modified.js','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js') +module_menu(' short.js','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/short.js') +module_menu(' whitespace.js','modules/hardware/network/node_modules/mkdirp/node_modules/minimist/test/whitespace.js') +module_menu(' package.json','modules/hardware/network/node_modules/mkdirp/package.json') +module_menu(' readme.markdown','modules/hardware/network/node_modules/mkdirp/readme.markdown') +module_label(' test') +module_menu(' chmod.js','modules/hardware/network/node_modules/mkdirp/test/chmod.js') +module_menu(' clobber.js','modules/hardware/network/node_modules/mkdirp/test/clobber.js') +module_menu(' mkdirp.js','modules/hardware/network/node_modules/mkdirp/test/mkdirp.js') +module_menu(' opts_fs.js','modules/hardware/network/node_modules/mkdirp/test/opts_fs.js') +module_menu(' opts_fs_sync.js','modules/hardware/network/node_modules/mkdirp/test/opts_fs_sync.js') +module_menu(' perm.js','modules/hardware/network/node_modules/mkdirp/test/perm.js') +module_menu(' perm_sync.js','modules/hardware/network/node_modules/mkdirp/test/perm_sync.js') +module_menu(' race.js','modules/hardware/network/node_modules/mkdirp/test/race.js') +module_menu(' rel.js','modules/hardware/network/node_modules/mkdirp/test/rel.js') +module_menu(' return.js','modules/hardware/network/node_modules/mkdirp/test/return.js') +module_menu(' return_sync.js','modules/hardware/network/node_modules/mkdirp/test/return_sync.js') +module_menu(' root.js','modules/hardware/network/node_modules/mkdirp/test/root.js') +module_menu(' sync.js','modules/hardware/network/node_modules/mkdirp/test/sync.js') +module_menu(' umask.js','modules/hardware/network/node_modules/mkdirp/test/umask.js') +module_menu(' umask_sync.js','modules/hardware/network/node_modules/mkdirp/test/umask_sync.js') +module_label(' ms') +module_menu(' index.js','modules/hardware/network/node_modules/ms/index.js') +module_menu(' license.md','modules/hardware/network/node_modules/ms/license.md') +module_menu(' package.json','modules/hardware/network/node_modules/ms/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/ms/readme.md') +module_label(' mute-stream') +module_label(' .nyc_output') +module_menu(' 33508.json','modules/hardware/network/node_modules/mute-stream/.nyc_output/33508.json') +module_menu(' 33510.json','modules/hardware/network/node_modules/mute-stream/.nyc_output/33510.json') +module_menu(' .travis.yml','modules/hardware/network/node_modules/mute-stream/.travis.yml') +module_label(' coverage') +module_label(' lcov-report') +module_menu(' base.css','modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/base.css') +module_menu(' index.html','modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/index.html') +module_menu(' prettify.css','modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/prettify.css') +module_menu(' prettify.js','modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/prettify.js') +module_menu(' sort-arrow-sprite.png','modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/sort-arrow-sprite.png') +module_menu(' sorter.js','modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/sorter.js') +module_label(' __root__') +module_menu(' index.html','modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/__root__/index.html') +module_menu(' mute.js.html','modules/hardware/network/node_modules/mute-stream/coverage/lcov-report/__root__/mute.js.html') +module_menu(' lcov.info','modules/hardware/network/node_modules/mute-stream/coverage/lcov.info') +module_menu(' LICENSE','modules/hardware/network/node_modules/mute-stream/LICENSE') +module_menu(' mute.js','modules/hardware/network/node_modules/mute-stream/mute.js') +module_menu(' package.json','modules/hardware/network/node_modules/mute-stream/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/mute-stream/README.md') +module_label(' test') +module_menu(' basic.js','modules/hardware/network/node_modules/mute-stream/test/basic.js') +module_label(' nan') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/nan/CHANGELOG.md') +module_label(' doc') +module_menu(' asyncworker.md','modules/hardware/network/node_modules/nan/doc/asyncworker.md') +module_menu(' buffers.md','modules/hardware/network/node_modules/nan/doc/buffers.md') +module_menu(' callback.md','modules/hardware/network/node_modules/nan/doc/callback.md') +module_menu(' converters.md','modules/hardware/network/node_modules/nan/doc/converters.md') +module_menu(' errors.md','modules/hardware/network/node_modules/nan/doc/errors.md') +module_menu(' json.md','modules/hardware/network/node_modules/nan/doc/json.md') +module_menu(' maybe_types.md','modules/hardware/network/node_modules/nan/doc/maybe_types.md') +module_menu(' methods.md','modules/hardware/network/node_modules/nan/doc/methods.md') +module_menu(' new.md','modules/hardware/network/node_modules/nan/doc/new.md') +module_menu(' node_misc.md','modules/hardware/network/node_modules/nan/doc/node_misc.md') +module_menu(' object_wrappers.md','modules/hardware/network/node_modules/nan/doc/object_wrappers.md') +module_menu(' persistent.md','modules/hardware/network/node_modules/nan/doc/persistent.md') +module_menu(' scopes.md','modules/hardware/network/node_modules/nan/doc/scopes.md') +module_menu(' script.md','modules/hardware/network/node_modules/nan/doc/script.md') +module_menu(' string_bytes.md','modules/hardware/network/node_modules/nan/doc/string_bytes.md') +module_menu(' v8_internals.md','modules/hardware/network/node_modules/nan/doc/v8_internals.md') +module_menu(' v8_misc.md','modules/hardware/network/node_modules/nan/doc/v8_misc.md') +module_menu(' include_dirs.js','modules/hardware/network/node_modules/nan/include_dirs.js') +module_menu(' LICENSE.md','modules/hardware/network/node_modules/nan/LICENSE.md') +module_menu(' nan.h','modules/hardware/network/node_modules/nan/nan.h') +module_menu(' nan_callbacks.h','modules/hardware/network/node_modules/nan/nan_callbacks.h') +module_menu(' nan_callbacks_12_inl.h','modules/hardware/network/node_modules/nan/nan_callbacks_12_inl.h') +module_menu(' nan_callbacks_pre_12_inl.h','modules/hardware/network/node_modules/nan/nan_callbacks_pre_12_inl.h') +module_menu(' nan_converters.h','modules/hardware/network/node_modules/nan/nan_converters.h') +module_menu(' nan_converters_43_inl.h','modules/hardware/network/node_modules/nan/nan_converters_43_inl.h') +module_menu(' nan_converters_pre_43_inl.h','modules/hardware/network/node_modules/nan/nan_converters_pre_43_inl.h') +module_menu(' nan_define_own_property_helper.h','modules/hardware/network/node_modules/nan/nan_define_own_property_helper.h') +module_menu(' nan_implementation_12_inl.h','modules/hardware/network/node_modules/nan/nan_implementation_12_inl.h') +module_menu(' nan_implementation_pre_12_inl.h','modules/hardware/network/node_modules/nan/nan_implementation_pre_12_inl.h') +module_menu(' nan_json.h','modules/hardware/network/node_modules/nan/nan_json.h') +module_menu(' nan_maybe_43_inl.h','modules/hardware/network/node_modules/nan/nan_maybe_43_inl.h') +module_menu(' nan_maybe_pre_43_inl.h','modules/hardware/network/node_modules/nan/nan_maybe_pre_43_inl.h') +module_menu(' nan_new.h','modules/hardware/network/node_modules/nan/nan_new.h') +module_menu(' nan_object_wrap.h','modules/hardware/network/node_modules/nan/nan_object_wrap.h') +module_menu(' nan_persistent_12_inl.h','modules/hardware/network/node_modules/nan/nan_persistent_12_inl.h') +module_menu(' nan_persistent_pre_12_inl.h','modules/hardware/network/node_modules/nan/nan_persistent_pre_12_inl.h') +module_menu(' nan_private.h','modules/hardware/network/node_modules/nan/nan_private.h') +module_menu(' nan_string_bytes.h','modules/hardware/network/node_modules/nan/nan_string_bytes.h') +module_menu(' nan_typedarray_contents.h','modules/hardware/network/node_modules/nan/nan_typedarray_contents.h') +module_menu(' nan_weak.h','modules/hardware/network/node_modules/nan/nan_weak.h') +module_menu(' package.json','modules/hardware/network/node_modules/nan/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/nan/README.md') +module_label(' tools') +module_menu(' 1to2.js','modules/hardware/network/node_modules/nan/tools/1to2.js') +module_menu(' package.json','modules/hardware/network/node_modules/nan/tools/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/nan/tools/README.md') +module_label(' node-abi') +module_menu(' .travis.yml','modules/hardware/network/node_modules/node-abi/.travis.yml') +module_menu(' CODE_OF_CONDUCT.md','modules/hardware/network/node_modules/node-abi/CODE_OF_CONDUCT.md') +module_menu(' CONTRIBUTING.md','modules/hardware/network/node_modules/node-abi/CONTRIBUTING.md') +module_menu(' index.js','modules/hardware/network/node_modules/node-abi/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/node-abi/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/node-abi/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/node-abi/README.md') +module_label(' test') +module_menu(' index.js','modules/hardware/network/node_modules/node-abi/test/index.js') +module_label(' noop-logger') +module_menu(' .npmignore','modules/hardware/network/node_modules/noop-logger/.npmignore') +module_menu(' circle.yml','modules/hardware/network/node_modules/noop-logger/circle.yml') +module_menu(' History.md','modules/hardware/network/node_modules/noop-logger/History.md') +module_label(' lib') +module_menu(' index.js','modules/hardware/network/node_modules/noop-logger/lib/index.js') +module_menu(' Makefile','modules/hardware/network/node_modules/noop-logger/Makefile') +module_menu(' package.json','modules/hardware/network/node_modules/noop-logger/package.json') +module_menu(' Readme.md','modules/hardware/network/node_modules/noop-logger/Readme.md') +module_label(' test') +module_menu(' index.js','modules/hardware/network/node_modules/noop-logger/test/index.js') +module_label(' npmlog') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/npmlog/CHANGELOG.md') +module_menu(' LICENSE','modules/hardware/network/node_modules/npmlog/LICENSE') +module_menu(' log.js','modules/hardware/network/node_modules/npmlog/log.js') +module_menu(' package.json','modules/hardware/network/node_modules/npmlog/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/npmlog/README.md') +module_label(' number-is-nan') +module_menu(' index.js','modules/hardware/network/node_modules/number-is-nan/index.js') +module_menu(' license','modules/hardware/network/node_modules/number-is-nan/license') +module_menu(' package.json','modules/hardware/network/node_modules/number-is-nan/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/number-is-nan/readme.md') +module_label(' object-assign') +module_menu(' index.js','modules/hardware/network/node_modules/object-assign/index.js') +module_menu(' license','modules/hardware/network/node_modules/object-assign/license') +module_menu(' package.json','modules/hardware/network/node_modules/object-assign/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/object-assign/readme.md') +module_label(' object-copy') +module_menu(' index.js','modules/hardware/network/node_modules/object-copy/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/object-copy/LICENSE') +module_label(' node_modules') +module_label(' define-property') +module_menu(' index.js','modules/hardware/network/node_modules/object-copy/node_modules/define-property/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/object-copy/node_modules/define-property/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/object-copy/node_modules/define-property/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/object-copy/node_modules/define-property/README.md') +module_label(' is-accessor-descriptor') +module_menu(' index.js','modules/hardware/network/node_modules/object-copy/node_modules/is-accessor-descriptor/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/object-copy/node_modules/is-accessor-descriptor/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/object-copy/node_modules/is-accessor-descriptor/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/object-copy/node_modules/is-accessor-descriptor/README.md') +module_label(' is-data-descriptor') +module_menu(' index.js','modules/hardware/network/node_modules/object-copy/node_modules/is-data-descriptor/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/object-copy/node_modules/is-data-descriptor/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/object-copy/node_modules/is-data-descriptor/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/object-copy/node_modules/is-data-descriptor/README.md') +module_label(' is-descriptor') +module_menu(' index.js','modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/LICENSE') +module_label(' node_modules') +module_label(' kind-of') +module_menu(' index.js','modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/object-copy/node_modules/is-descriptor/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/object-copy/package.json') +module_label(' object-visit') +module_menu(' index.js','modules/hardware/network/node_modules/object-visit/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/object-visit/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/object-visit/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/object-visit/README.md') +module_label(' once') +module_menu(' LICENSE','modules/hardware/network/node_modules/once/LICENSE') +module_menu(' once.js','modules/hardware/network/node_modules/once/once.js') +module_menu(' package.json','modules/hardware/network/node_modules/once/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/once/README.md') +module_label(' os-homedir') +module_menu(' index.js','modules/hardware/network/node_modules/os-homedir/index.js') +module_menu(' license','modules/hardware/network/node_modules/os-homedir/license') +module_menu(' package.json','modules/hardware/network/node_modules/os-homedir/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/os-homedir/readme.md') +module_label(' parser-byte-length') +module_menu(' byte-length.js','modules/hardware/network/node_modules/parser-byte-length/byte-length.js') +module_menu(' package.json','modules/hardware/network/node_modules/parser-byte-length/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/parser-byte-length/README.md') +module_label(' parser-cctalk') +module_menu(' cctalk.js','modules/hardware/network/node_modules/parser-cctalk/cctalk.js') +module_menu(' package.json','modules/hardware/network/node_modules/parser-cctalk/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/parser-cctalk/README.md') +module_label(' parser-delimiter') +module_menu(' delimiter.js','modules/hardware/network/node_modules/parser-delimiter/delimiter.js') +module_menu(' package.json','modules/hardware/network/node_modules/parser-delimiter/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/parser-delimiter/README.md') +module_label(' parser-readline') +module_menu(' package.json','modules/hardware/network/node_modules/parser-readline/package.json') +module_menu(' readline.js','modules/hardware/network/node_modules/parser-readline/readline.js') +module_menu(' README.md','modules/hardware/network/node_modules/parser-readline/README.md') +module_label(' parser-ready') +module_menu(' package.json','modules/hardware/network/node_modules/parser-ready/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/parser-ready/README.md') +module_menu(' ready.js','modules/hardware/network/node_modules/parser-ready/ready.js') +module_label(' parser-regex') +module_menu(' package.json','modules/hardware/network/node_modules/parser-regex/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/parser-regex/README.md') +module_menu(' regex.js','modules/hardware/network/node_modules/parser-regex/regex.js') +module_label(' pointer-symbol') +module_menu(' index.js','modules/hardware/network/node_modules/pointer-symbol/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/pointer-symbol/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/pointer-symbol/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/pointer-symbol/README.md') +module_label(' prebuild-install') +module_menu(' .travis.yml','modules/hardware/network/node_modules/prebuild-install/.travis.yml') +module_menu(' appveyor.yml','modules/hardware/network/node_modules/prebuild-install/appveyor.yml') +module_menu(' bin.js','modules/hardware/network/node_modules/prebuild-install/bin.js') +module_menu(' CONTRIBUTING.md','modules/hardware/network/node_modules/prebuild-install/CONTRIBUTING.md') +module_menu(' download.js','modules/hardware/network/node_modules/prebuild-install/download.js') +module_menu(' error.js','modules/hardware/network/node_modules/prebuild-install/error.js') +module_menu(' help.txt','modules/hardware/network/node_modules/prebuild-install/help.txt') +module_menu(' index.js','modules/hardware/network/node_modules/prebuild-install/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prebuild-install/LICENSE') +module_menu(' log.js','modules/hardware/network/node_modules/prebuild-install/log.js') +module_menu(' package.json','modules/hardware/network/node_modules/prebuild-install/package.json') +module_menu(' rc.js','modules/hardware/network/node_modules/prebuild-install/rc.js') +module_menu(' README.md','modules/hardware/network/node_modules/prebuild-install/README.md') +module_menu(' util.js','modules/hardware/network/node_modules/prebuild-install/util.js') +module_label(' process-nextick-args') +module_menu(' index.js','modules/hardware/network/node_modules/process-nextick-args/index.js') +module_menu(' license.md','modules/hardware/network/node_modules/process-nextick-args/license.md') +module_menu(' package.json','modules/hardware/network/node_modules/process-nextick-args/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/process-nextick-args/readme.md') +module_label(' promirepl') +module_menu(' .npmignore','modules/hardware/network/node_modules/promirepl/.npmignore') +module_label(' bin') +module_menu(' prominode.js','modules/hardware/network/node_modules/promirepl/bin/prominode.js') +module_menu(' index.js','modules/hardware/network/node_modules/promirepl/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/promirepl/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/promirepl/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/promirepl/README.md') +module_label(' prompt-actions') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-actions/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-actions/LICENSE') +module_label(' node_modules') +module_label(' debug') +module_menu(' .coveralls.yml','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/.coveralls.yml') +module_menu(' .eslintrc','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/.eslintrc') +module_menu(' .npmignore','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/.npmignore') +module_menu(' .travis.yml','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/.travis.yml') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/CHANGELOG.md') +module_menu(' component.json','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/component.json') +module_menu(' karma.conf.js','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/karma.conf.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/LICENSE') +module_menu(' Makefile','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/Makefile') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/README.md') +module_label(' src') +module_menu(' browser.js','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/src/browser.js') +module_menu(' debug.js','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/src/debug.js') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/src/index.js') +module_menu(' inspector-log.js','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/src/inspector-log.js') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-actions/node_modules/debug/src/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-actions/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-actions/README.md') +module_label(' prompt-base') +module_menu(' changelog.md','modules/hardware/network/node_modules/prompt-base/changelog.md') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/LICENSE') +module_label(' node_modules') +module_label(' ansi-regex') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/ansi-regex/index.js') +module_menu(' license','modules/hardware/network/node_modules/prompt-base/node_modules/ansi-regex/license') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/ansi-regex/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/prompt-base/node_modules/ansi-regex/readme.md') +module_label(' choices-separator') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/LICENSE') +module_label(' node_modules') +module_label(' debug') +module_menu(' .coveralls.yml','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/.coveralls.yml') +module_menu(' .eslintrc','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/.eslintrc') +module_menu(' .npmignore','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/.npmignore') +module_menu(' .travis.yml','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/.travis.yml') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/CHANGELOG.md') +module_menu(' component.json','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/component.json') +module_menu(' karma.conf.js','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/karma.conf.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/LICENSE') +module_menu(' Makefile','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/Makefile') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/README.md') +module_label(' src') +module_menu(' browser.js','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/src/browser.js') +module_menu(' debug.js','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/src/debug.js') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/src/index.js') +module_menu(' inspector-log.js','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/src/inspector-log.js') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/node_modules/debug/src/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/choices-separator/README.md') +module_label(' is-accessor-descriptor') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/LICENSE') +module_label(' node_modules') +module_label(' kind-of') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/is-accessor-descriptor/README.md') +module_label(' is-data-descriptor') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/LICENSE') +module_label(' node_modules') +module_label(' kind-of') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/is-data-descriptor/README.md') +module_label(' is-fullwidth-code-point') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/is-fullwidth-code-point/index.js') +module_menu(' license','modules/hardware/network/node_modules/prompt-base/node_modules/is-fullwidth-code-point/license') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/is-fullwidth-code-point/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/prompt-base/node_modules/is-fullwidth-code-point/readme.md') +module_label(' kind-of') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/kind-of/README.md') +module_label(' prompt-choices') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/index.js') +module_label(' lib') +module_menu(' choice.js','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/lib/choice.js') +module_menu(' utils.js','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/lib/utils.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/LICENSE') +module_label(' node_modules') +module_label(' clone-deep') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/clone-deep/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/clone-deep/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/clone-deep/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/clone-deep/README.md') +module_label(' define-property') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/define-property/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/define-property/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/define-property/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/define-property/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/define-property/README.md') +module_label(' kind-of') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/kind-of/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-choices/README.md') +module_label(' prompt-question') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-question/index.js') +module_label(' lib') +module_menu(' utils.js','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-question/lib/utils.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-question/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-question/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/prompt-question/README.md') +module_label(' readline-ui') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/LICENSE') +module_label(' node_modules') +module_label(' debug') +module_menu(' .coveralls.yml','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/.coveralls.yml') +module_menu(' .eslintrc','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/.eslintrc') +module_menu(' .npmignore','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/.npmignore') +module_menu(' .travis.yml','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/.travis.yml') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/CHANGELOG.md') +module_menu(' component.json','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/component.json') +module_menu(' karma.conf.js','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/karma.conf.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/LICENSE') +module_menu(' Makefile','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/Makefile') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/README.md') +module_label(' src') +module_menu(' browser.js','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/src/browser.js') +module_menu(' debug.js','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/src/debug.js') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/src/index.js') +module_menu(' inspector-log.js','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/src/inspector-log.js') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/node_modules/debug/src/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/readline-ui/README.md') +module_label(' readline-utils') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/LICENSE') +module_label(' node_modules') +module_label(' is-number') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/is-number/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/is-number/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/is-number/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/is-number/README.md') +module_label(' kind-of') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/readline-utils/README.md') +module_label(' shallow-clone') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/LICENSE') +module_label(' node_modules') +module_label(' kind-of') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/node_modules/kind-of/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/shallow-clone/README.md') +module_label(' static-extend') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/LICENSE') +module_label(' node_modules') +module_label(' define-property') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/define-property/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/define-property/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/define-property/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/define-property/README.md') +module_label(' is-descriptor') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/is-descriptor/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/is-descriptor/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/is-descriptor/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/node_modules/is-descriptor/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/static-extend/package.json') +module_label(' string-width') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/string-width/index.js') +module_menu(' license','modules/hardware/network/node_modules/prompt-base/node_modules/string-width/license') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/string-width/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/prompt-base/node_modules/string-width/readme.md') +module_label(' strip-ansi') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-base/node_modules/strip-ansi/index.js') +module_menu(' license','modules/hardware/network/node_modules/prompt-base/node_modules/strip-ansi/license') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/node_modules/strip-ansi/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/prompt-base/node_modules/strip-ansi/readme.md') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-base/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-base/README.md') +module_label(' prompt-checkbox') +module_label(' node_modules') +module_label(' debug') +module_menu(' .coveralls.yml','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/.coveralls.yml') +module_menu(' .eslintrc','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/.eslintrc') +module_menu(' .npmignore','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/.npmignore') +module_menu(' .travis.yml','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/.travis.yml') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/CHANGELOG.md') +module_menu(' component.json','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/component.json') +module_menu(' karma.conf.js','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/karma.conf.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/LICENSE') +module_menu(' Makefile','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/Makefile') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/README.md') +module_label(' src') +module_menu(' browser.js','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/src/browser.js') +module_menu(' debug.js','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/src/debug.js') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/src/index.js') +module_menu(' inspector-log.js','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/src/inspector-log.js') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-checkbox/node_modules/debug/src/node.js') +module_label(' prompt-choices') +module_label(' node_modules') +module_label(' clone-deep') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-choices/node_modules/clone-deep/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-choices/node_modules/clone-deep/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-choices/node_modules/clone-deep/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-choices/node_modules/clone-deep/README.md') +module_label(' define-property') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/prompt-choices/node_modules/define-property/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-choices/node_modules/define-property/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-choices/node_modules/define-property/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-choices/node_modules/define-property/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-choices/node_modules/define-property/README.md') +module_label(' kind-of') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/prompt-choices/node_modules/kind-of/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-choices/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-choices/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-choices/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-choices/node_modules/kind-of/README.md') +module_label(' shallow-clone') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-choices/node_modules/shallow-clone/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-choices/node_modules/shallow-clone/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-choices/node_modules/shallow-clone/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-choices/node_modules/shallow-clone/README.md') +module_label(' prompt-list') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-list/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-list/LICENSE') +module_label(' node_modules') +module_label(' debug') +module_menu(' .coveralls.yml','modules/hardware/network/node_modules/prompt-list/node_modules/debug/.coveralls.yml') +module_menu(' .eslintrc','modules/hardware/network/node_modules/prompt-list/node_modules/debug/.eslintrc') +module_menu(' .npmignore','modules/hardware/network/node_modules/prompt-list/node_modules/debug/.npmignore') +module_menu(' .travis.yml','modules/hardware/network/node_modules/prompt-list/node_modules/debug/.travis.yml') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/prompt-list/node_modules/debug/CHANGELOG.md') +module_menu(' component.json','modules/hardware/network/node_modules/prompt-list/node_modules/debug/component.json') +module_menu(' karma.conf.js','modules/hardware/network/node_modules/prompt-list/node_modules/debug/karma.conf.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-list/node_modules/debug/LICENSE') +module_menu(' Makefile','modules/hardware/network/node_modules/prompt-list/node_modules/debug/Makefile') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-list/node_modules/debug/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-list/node_modules/debug/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-list/node_modules/debug/README.md') +module_label(' src') +module_menu(' browser.js','modules/hardware/network/node_modules/prompt-list/node_modules/debug/src/browser.js') +module_menu(' debug.js','modules/hardware/network/node_modules/prompt-list/node_modules/debug/src/debug.js') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-list/node_modules/debug/src/index.js') +module_menu(' inspector-log.js','modules/hardware/network/node_modules/prompt-list/node_modules/debug/src/inspector-log.js') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-list/node_modules/debug/src/node.js') +module_label(' prompt-checkbox') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-list/node_modules/prompt-checkbox/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-list/node_modules/prompt-checkbox/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-list/node_modules/prompt-checkbox/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-list/node_modules/prompt-checkbox/README.md') +module_label(' prompt-radio') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-list/node_modules/prompt-radio/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-list/node_modules/prompt-radio/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-list/node_modules/prompt-radio/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-list/node_modules/prompt-radio/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-list/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-list/README.md') +module_label(' prompt-question') +module_label(' node_modules') +module_label(' kind-of') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-question/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-question/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-question/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-question/node_modules/kind-of/README.md') +module_label(' prompt-radio') +module_label(' node_modules') +module_label(' debug') +module_menu(' .coveralls.yml','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/.coveralls.yml') +module_menu(' .eslintrc','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/.eslintrc') +module_menu(' .npmignore','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/.npmignore') +module_menu(' .travis.yml','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/.travis.yml') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/CHANGELOG.md') +module_menu(' component.json','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/component.json') +module_menu(' karma.conf.js','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/karma.conf.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/LICENSE') +module_menu(' Makefile','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/Makefile') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/README.md') +module_label(' src') +module_menu(' browser.js','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/src/browser.js') +module_menu(' debug.js','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/src/debug.js') +module_menu(' index.js','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/src/index.js') +module_menu(' inspector-log.js','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/src/inspector-log.js') +module_menu(' node.js','modules/hardware/network/node_modules/prompt-radio/node_modules/debug/src/node.js') +module_label(' pump') +module_menu(' .travis.yml','modules/hardware/network/node_modules/pump/.travis.yml') +module_menu(' index.js','modules/hardware/network/node_modules/pump/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/pump/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/pump/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/pump/README.md') +module_menu(' test-browser.js','modules/hardware/network/node_modules/pump/test-browser.js') +module_menu(' test-node.js','modules/hardware/network/node_modules/pump/test-node.js') +module_label(' radio-symbol') +module_menu(' index.js','modules/hardware/network/node_modules/radio-symbol/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/radio-symbol/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/radio-symbol/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/radio-symbol/README.md') +module_label(' rc') +module_menu(' browser.js','modules/hardware/network/node_modules/rc/browser.js') +module_menu(' cli.js','modules/hardware/network/node_modules/rc/cli.js') +module_menu(' index.js','modules/hardware/network/node_modules/rc/index.js') +module_label(' lib') +module_menu(' utils.js','modules/hardware/network/node_modules/rc/lib/utils.js') +module_menu(' LICENSE.APACHE2','modules/hardware/network/node_modules/rc/LICENSE.APACHE2') +module_menu(' LICENSE.BSD','modules/hardware/network/node_modules/rc/LICENSE.BSD') +module_menu(' LICENSE.MIT','modules/hardware/network/node_modules/rc/LICENSE.MIT') +module_menu(' package.json','modules/hardware/network/node_modules/rc/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/rc/README.md') +module_label(' test') +module_menu(' ini.js','modules/hardware/network/node_modules/rc/test/ini.js') +module_menu(' nested-env-vars.js','modules/hardware/network/node_modules/rc/test/nested-env-vars.js') +module_menu(' test.js','modules/hardware/network/node_modules/rc/test/test.js') +module_label(' readable-stream') +module_menu(' .travis.yml','modules/hardware/network/node_modules/readable-stream/.travis.yml') +module_menu(' CONTRIBUTING.md','modules/hardware/network/node_modules/readable-stream/CONTRIBUTING.md') +module_label(' doc') +module_label(' wg-meetings') +module_menu(' 2015-01-30.md','modules/hardware/network/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md') +module_menu(' duplex-browser.js','modules/hardware/network/node_modules/readable-stream/duplex-browser.js') +module_menu(' duplex.js','modules/hardware/network/node_modules/readable-stream/duplex.js') +module_menu(' GOVERNANCE.md','modules/hardware/network/node_modules/readable-stream/GOVERNANCE.md') +module_label(' lib') +module_label(' internal') +module_label(' streams') +module_menu(' BufferList.js','modules/hardware/network/node_modules/readable-stream/lib/internal/streams/BufferList.js') +module_menu(' destroy.js','modules/hardware/network/node_modules/readable-stream/lib/internal/streams/destroy.js') +module_menu(' stream-browser.js','modules/hardware/network/node_modules/readable-stream/lib/internal/streams/stream-browser.js') +module_menu(' stream.js','modules/hardware/network/node_modules/readable-stream/lib/internal/streams/stream.js') +module_menu(' _stream_duplex.js','modules/hardware/network/node_modules/readable-stream/lib/_stream_duplex.js') +module_menu(' _stream_passthrough.js','modules/hardware/network/node_modules/readable-stream/lib/_stream_passthrough.js') +module_menu(' _stream_readable.js','modules/hardware/network/node_modules/readable-stream/lib/_stream_readable.js') +module_menu(' _stream_transform.js','modules/hardware/network/node_modules/readable-stream/lib/_stream_transform.js') +module_menu(' _stream_writable.js','modules/hardware/network/node_modules/readable-stream/lib/_stream_writable.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/readable-stream/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/readable-stream/package.json') +module_menu(' passthrough.js','modules/hardware/network/node_modules/readable-stream/passthrough.js') +module_menu(' readable-browser.js','modules/hardware/network/node_modules/readable-stream/readable-browser.js') +module_menu(' readable.js','modules/hardware/network/node_modules/readable-stream/readable.js') +module_menu(' README.md','modules/hardware/network/node_modules/readable-stream/README.md') +module_menu(' transform.js','modules/hardware/network/node_modules/readable-stream/transform.js') +module_menu(' writable-browser.js','modules/hardware/network/node_modules/readable-stream/writable-browser.js') +module_menu(' writable.js','modules/hardware/network/node_modules/readable-stream/writable.js') +module_label(' readline-ui') +module_label(' node_modules') +module_label(' ansi-regex') +module_menu(' index.js','modules/hardware/network/node_modules/readline-ui/node_modules/ansi-regex/index.js') +module_menu(' license','modules/hardware/network/node_modules/readline-ui/node_modules/ansi-regex/license') +module_menu(' package.json','modules/hardware/network/node_modules/readline-ui/node_modules/ansi-regex/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/readline-ui/node_modules/ansi-regex/readme.md') +module_label(' debug') +module_menu(' .coveralls.yml','modules/hardware/network/node_modules/readline-ui/node_modules/debug/.coveralls.yml') +module_menu(' .eslintrc','modules/hardware/network/node_modules/readline-ui/node_modules/debug/.eslintrc') +module_menu(' .npmignore','modules/hardware/network/node_modules/readline-ui/node_modules/debug/.npmignore') +module_menu(' .travis.yml','modules/hardware/network/node_modules/readline-ui/node_modules/debug/.travis.yml') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/readline-ui/node_modules/debug/CHANGELOG.md') +module_menu(' component.json','modules/hardware/network/node_modules/readline-ui/node_modules/debug/component.json') +module_menu(' karma.conf.js','modules/hardware/network/node_modules/readline-ui/node_modules/debug/karma.conf.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/readline-ui/node_modules/debug/LICENSE') +module_menu(' Makefile','modules/hardware/network/node_modules/readline-ui/node_modules/debug/Makefile') +module_menu(' node.js','modules/hardware/network/node_modules/readline-ui/node_modules/debug/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/readline-ui/node_modules/debug/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/readline-ui/node_modules/debug/README.md') +module_label(' src') +module_menu(' browser.js','modules/hardware/network/node_modules/readline-ui/node_modules/debug/src/browser.js') +module_menu(' debug.js','modules/hardware/network/node_modules/readline-ui/node_modules/debug/src/debug.js') +module_menu(' index.js','modules/hardware/network/node_modules/readline-ui/node_modules/debug/src/index.js') +module_menu(' inspector-log.js','modules/hardware/network/node_modules/readline-ui/node_modules/debug/src/inspector-log.js') +module_menu(' node.js','modules/hardware/network/node_modules/readline-ui/node_modules/debug/src/node.js') +module_label(' is-fullwidth-code-point') +module_menu(' index.js','modules/hardware/network/node_modules/readline-ui/node_modules/is-fullwidth-code-point/index.js') +module_menu(' license','modules/hardware/network/node_modules/readline-ui/node_modules/is-fullwidth-code-point/license') +module_menu(' package.json','modules/hardware/network/node_modules/readline-ui/node_modules/is-fullwidth-code-point/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/readline-ui/node_modules/is-fullwidth-code-point/readme.md') +module_label(' string-width') +module_menu(' index.js','modules/hardware/network/node_modules/readline-ui/node_modules/string-width/index.js') +module_menu(' license','modules/hardware/network/node_modules/readline-ui/node_modules/string-width/license') +module_menu(' package.json','modules/hardware/network/node_modules/readline-ui/node_modules/string-width/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/readline-ui/node_modules/string-width/readme.md') +module_label(' strip-ansi') +module_menu(' index.js','modules/hardware/network/node_modules/readline-ui/node_modules/strip-ansi/index.js') +module_menu(' license','modules/hardware/network/node_modules/readline-ui/node_modules/strip-ansi/license') +module_menu(' package.json','modules/hardware/network/node_modules/readline-ui/node_modules/strip-ansi/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/readline-ui/node_modules/strip-ansi/readme.md') +module_label(' readline-utils') +module_label(' node_modules') +module_label(' is-number') +module_menu(' index.js','modules/hardware/network/node_modules/readline-utils/node_modules/is-number/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/readline-utils/node_modules/is-number/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/readline-utils/node_modules/is-number/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/readline-utils/node_modules/is-number/README.md') +module_label(' safe-buffer') +module_menu(' index.d.ts','modules/hardware/network/node_modules/safe-buffer/index.d.ts') +module_menu(' index.js','modules/hardware/network/node_modules/safe-buffer/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/safe-buffer/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/safe-buffer/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/safe-buffer/README.md') +module_label(' semver') +module_label(' bin') +module_menu(' semver','modules/hardware/network/node_modules/semver/bin/semver') +module_menu(' LICENSE','modules/hardware/network/node_modules/semver/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/semver/package.json') +module_menu(' range.bnf','modules/hardware/network/node_modules/semver/range.bnf') +module_menu(' README.md','modules/hardware/network/node_modules/semver/README.md') +module_menu(' semver.js','modules/hardware/network/node_modules/semver/semver.js') +module_label(' serialport') +module_menu(' .jsdoc.json','modules/hardware/network/node_modules/serialport/.jsdoc.json') +module_label(' bin') +module_menu(' echo.js','modules/hardware/network/node_modules/serialport/bin/echo.js') +module_menu(' find-arduino.js','modules/hardware/network/node_modules/serialport/bin/find-arduino.js') +module_menu(' list.js','modules/hardware/network/node_modules/serialport/bin/list.js') +module_menu(' repl.js','modules/hardware/network/node_modules/serialport/bin/repl.js') +module_menu(' terminal.js','modules/hardware/network/node_modules/serialport/bin/terminal.js') +module_menu(' write-a-lot.js','modules/hardware/network/node_modules/serialport/bin/write-a-lot.js') +module_menu(' binding.gyp','modules/hardware/network/node_modules/serialport/binding.gyp') +module_label(' build') +module_label(' Release') +module_menu(' serialport.node','modules/hardware/network/node_modules/serialport/build/Release/serialport.node') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/serialport/CHANGELOG.md') +module_menu(' codecov.yml','modules/hardware/network/node_modules/serialport/codecov.yml') +module_label(' lib') +module_label(' bindings') +module_menu(' auto-detect.js','modules/hardware/network/node_modules/serialport/lib/bindings/auto-detect.js') +module_menu(' base.js','modules/hardware/network/node_modules/serialport/lib/bindings/base.js') +module_menu(' darwin.js','modules/hardware/network/node_modules/serialport/lib/bindings/darwin.js') +module_menu(' linux-list.js','modules/hardware/network/node_modules/serialport/lib/bindings/linux-list.js') +module_menu(' linux.js','modules/hardware/network/node_modules/serialport/lib/bindings/linux.js') +module_menu(' mock.js','modules/hardware/network/node_modules/serialport/lib/bindings/mock.js') +module_menu(' poller.js','modules/hardware/network/node_modules/serialport/lib/bindings/poller.js') +module_menu(' unix-read.js','modules/hardware/network/node_modules/serialport/lib/bindings/unix-read.js') +module_menu(' unix-write.js','modules/hardware/network/node_modules/serialport/lib/bindings/unix-write.js') +module_menu(' win32-sn-parser.js','modules/hardware/network/node_modules/serialport/lib/bindings/win32-sn-parser.js') +module_menu(' win32.js','modules/hardware/network/node_modules/serialport/lib/bindings/win32.js') +module_menu(' index.js','modules/hardware/network/node_modules/serialport/lib/index.js') +module_menu(' parsers.js','modules/hardware/network/node_modules/serialport/lib/parsers.js') +module_menu(' serialport.js','modules/hardware/network/node_modules/serialport/lib/serialport.js') +module_menu(' util.js','modules/hardware/network/node_modules/serialport/lib/util.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/serialport/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/serialport/package.json') +module_label(' prebuilds') +module_menu(' serialport-v6.1.1-node-v48-darwin-x64.tar.gz','modules/hardware/network/node_modules/serialport/prebuilds/serialport-v6.1.1-node-v48-darwin-x64.tar.gz') +module_menu(' README.md','modules/hardware/network/node_modules/serialport/README.md') +module_label(' src') +module_menu(' darwin_list.cpp','modules/hardware/network/node_modules/serialport/src/darwin_list.cpp') +module_menu(' darwin_list.h','modules/hardware/network/node_modules/serialport/src/darwin_list.h') +module_menu(' poller.cpp','modules/hardware/network/node_modules/serialport/src/poller.cpp') +module_menu(' poller.h','modules/hardware/network/node_modules/serialport/src/poller.h') +module_menu(' serialport.cpp','modules/hardware/network/node_modules/serialport/src/serialport.cpp') +module_menu(' serialport.h','modules/hardware/network/node_modules/serialport/src/serialport.h') +module_menu(' serialport_linux.cpp','modules/hardware/network/node_modules/serialport/src/serialport_linux.cpp') +module_menu(' serialport_linux.h','modules/hardware/network/node_modules/serialport/src/serialport_linux.h') +module_menu(' serialport_unix.cpp','modules/hardware/network/node_modules/serialport/src/serialport_unix.cpp') +module_menu(' serialport_unix.h','modules/hardware/network/node_modules/serialport/src/serialport_unix.h') +module_menu(' serialport_win.cpp','modules/hardware/network/node_modules/serialport/src/serialport_win.cpp') +module_menu(' serialport_win.h','modules/hardware/network/node_modules/serialport/src/serialport_win.h') +module_menu(' test.js','modules/hardware/network/node_modules/serialport/test.js') +module_label(' set-blocking') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/set-blocking/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/set-blocking/index.js') +module_menu(' LICENSE.txt','modules/hardware/network/node_modules/set-blocking/LICENSE.txt') +module_menu(' package.json','modules/hardware/network/node_modules/set-blocking/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/set-blocking/README.md') +module_label(' set-getter') +module_menu(' index.js','modules/hardware/network/node_modules/set-getter/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/set-getter/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/set-getter/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/set-getter/README.md') +module_label(' set-value') +module_menu(' index.js','modules/hardware/network/node_modules/set-value/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/set-value/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/set-value/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/set-value/README.md') +module_label(' shallow-clone') +module_menu(' index.js','modules/hardware/network/node_modules/shallow-clone/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/shallow-clone/LICENSE') +module_label(' node_modules') +module_label(' kind-of') +module_menu(' index.js','modules/hardware/network/node_modules/shallow-clone/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/shallow-clone/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/shallow-clone/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/shallow-clone/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/shallow-clone/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/shallow-clone/README.md') +module_label(' signal-exit') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/signal-exit/CHANGELOG.md') +module_menu(' index.js','modules/hardware/network/node_modules/signal-exit/index.js') +module_menu(' LICENSE.txt','modules/hardware/network/node_modules/signal-exit/LICENSE.txt') +module_menu(' package.json','modules/hardware/network/node_modules/signal-exit/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/signal-exit/README.md') +module_menu(' signals.js','modules/hardware/network/node_modules/signal-exit/signals.js') +module_label(' simple-concat') +module_menu(' .travis.yml','modules/hardware/network/node_modules/simple-concat/.travis.yml') +module_menu(' index.js','modules/hardware/network/node_modules/simple-concat/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/simple-concat/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/simple-concat/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/simple-concat/README.md') +module_label(' test') +module_menu(' basic.js','modules/hardware/network/node_modules/simple-concat/test/basic.js') +module_label(' simple-get') +module_menu(' index.js','modules/hardware/network/node_modules/simple-get/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/simple-get/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/simple-get/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/simple-get/README.md') +module_label(' static-extend') +module_label(' node_modules') +module_label(' is-accessor-descriptor') +module_menu(' index.js','modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/LICENSE') +module_label(' node_modules') +module_label(' kind-of') +module_menu(' index.js','modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/static-extend/node_modules/is-accessor-descriptor/README.md') +module_label(' string-width') +module_menu(' index.js','modules/hardware/network/node_modules/string-width/index.js') +module_menu(' license','modules/hardware/network/node_modules/string-width/license') +module_menu(' package.json','modules/hardware/network/node_modules/string-width/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/string-width/readme.md') +module_label(' string_decoder') +module_menu(' .travis.yml','modules/hardware/network/node_modules/string_decoder/.travis.yml') +module_label(' lib') +module_menu(' string_decoder.js','modules/hardware/network/node_modules/string_decoder/lib/string_decoder.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/string_decoder/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/string_decoder/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/string_decoder/README.md') +module_label(' strip-ansi') +module_menu(' index.js','modules/hardware/network/node_modules/strip-ansi/index.js') +module_menu(' license','modules/hardware/network/node_modules/strip-ansi/license') +module_menu(' package.json','modules/hardware/network/node_modules/strip-ansi/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/strip-ansi/readme.md') +module_label(' strip-color') +module_menu(' index.js','modules/hardware/network/node_modules/strip-color/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/strip-color/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/strip-color/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/strip-color/README.md') +module_label(' strip-json-comments') +module_menu(' index.js','modules/hardware/network/node_modules/strip-json-comments/index.js') +module_menu(' license','modules/hardware/network/node_modules/strip-json-comments/license') +module_menu(' package.json','modules/hardware/network/node_modules/strip-json-comments/package.json') +module_menu(' readme.md','modules/hardware/network/node_modules/strip-json-comments/readme.md') +module_label(' success-symbol') +module_menu(' index.js','modules/hardware/network/node_modules/success-symbol/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/success-symbol/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/success-symbol/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/success-symbol/README.md') +module_label(' tar-fs') +module_menu(' .travis.yml','modules/hardware/network/node_modules/tar-fs/.travis.yml') +module_menu(' index.js','modules/hardware/network/node_modules/tar-fs/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/tar-fs/LICENSE') +module_label(' node_modules') +module_label(' pump') +module_menu(' .travis.yml','modules/hardware/network/node_modules/tar-fs/node_modules/pump/.travis.yml') +module_menu(' index.js','modules/hardware/network/node_modules/tar-fs/node_modules/pump/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/tar-fs/node_modules/pump/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/tar-fs/node_modules/pump/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/tar-fs/node_modules/pump/README.md') +module_menu(' test-browser.js','modules/hardware/network/node_modules/tar-fs/node_modules/pump/test-browser.js') +module_menu(' test.js','modules/hardware/network/node_modules/tar-fs/node_modules/pump/test.js') +module_menu(' package.json','modules/hardware/network/node_modules/tar-fs/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/tar-fs/README.md') +module_label(' test') +module_label(' fixtures') +module_label(' a') +module_menu(' hello.txt','modules/hardware/network/node_modules/tar-fs/test/fixtures/a/hello.txt') +module_label(' b') +module_label(' a') +module_menu(' test.txt','modules/hardware/network/node_modules/tar-fs/test/fixtures/b/a/test.txt') +module_label(' d') +module_menu(' file1','modules/hardware/network/node_modules/tar-fs/test/fixtures/d/file1') +module_menu(' file2','modules/hardware/network/node_modules/tar-fs/test/fixtures/d/file2') +module_label(' sub-dir') +module_menu(' file5','modules/hardware/network/node_modules/tar-fs/test/fixtures/d/sub-dir/file5') +module_label(' sub-files') +module_menu(' file3','modules/hardware/network/node_modules/tar-fs/test/fixtures/d/sub-files/file3') +module_menu(' file4','modules/hardware/network/node_modules/tar-fs/test/fixtures/d/sub-files/file4') +module_label(' e') +module_label(' directory') +module_menu(' .ignore','modules/hardware/network/node_modules/tar-fs/test/fixtures/e/directory/.ignore') +module_menu(' file','modules/hardware/network/node_modules/tar-fs/test/fixtures/e/file') +module_menu(' invalid.tar','modules/hardware/network/node_modules/tar-fs/test/fixtures/invalid.tar') +module_menu(' index.js','modules/hardware/network/node_modules/tar-fs/test/index.js') +module_label(' tar-stream') +module_menu(' extract.js','modules/hardware/network/node_modules/tar-stream/extract.js') +module_menu(' headers.js','modules/hardware/network/node_modules/tar-stream/headers.js') +module_menu(' index.js','modules/hardware/network/node_modules/tar-stream/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/tar-stream/LICENSE') +module_menu(' pack.js','modules/hardware/network/node_modules/tar-stream/pack.js') +module_menu(' package.json','modules/hardware/network/node_modules/tar-stream/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/tar-stream/README.md') +module_label(' terminal-paginator') +module_menu(' index.js','modules/hardware/network/node_modules/terminal-paginator/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/terminal-paginator/LICENSE') +module_label(' node_modules') +module_label(' debug') +module_menu(' .coveralls.yml','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/.coveralls.yml') +module_menu(' .eslintrc','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/.eslintrc') +module_menu(' .npmignore','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/.npmignore') +module_menu(' .travis.yml','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/.travis.yml') +module_menu(' CHANGELOG.md','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/CHANGELOG.md') +module_menu(' component.json','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/component.json') +module_menu(' karma.conf.js','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/karma.conf.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/LICENSE') +module_menu(' Makefile','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/Makefile') +module_menu(' node.js','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/README.md') +module_label(' src') +module_menu(' browser.js','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/src/browser.js') +module_menu(' debug.js','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/src/debug.js') +module_menu(' index.js','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/src/index.js') +module_menu(' inspector-log.js','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/src/inspector-log.js') +module_menu(' node.js','modules/hardware/network/node_modules/terminal-paginator/node_modules/debug/src/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/terminal-paginator/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/terminal-paginator/README.md') +module_label(' time-stamp') +module_menu(' index.js','modules/hardware/network/node_modules/time-stamp/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/time-stamp/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/time-stamp/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/time-stamp/README.md') +module_label(' to-buffer') +module_menu(' .travis.yml','modules/hardware/network/node_modules/to-buffer/.travis.yml') +module_menu(' index.js','modules/hardware/network/node_modules/to-buffer/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/to-buffer/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/to-buffer/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/to-buffer/README.md') +module_menu(' test.js','modules/hardware/network/node_modules/to-buffer/test.js') +module_label(' to-object-path') +module_menu(' index.js','modules/hardware/network/node_modules/to-object-path/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/to-object-path/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/to-object-path/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/to-object-path/README.md') +module_label(' toggle-array') +module_menu(' index.js','modules/hardware/network/node_modules/toggle-array/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/toggle-array/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/toggle-array/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/toggle-array/README.md') +module_label(' tunnel-agent') +module_menu(' index.js','modules/hardware/network/node_modules/tunnel-agent/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/tunnel-agent/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/tunnel-agent/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/tunnel-agent/README.md') +module_label(' util-deprecate') +module_menu(' browser.js','modules/hardware/network/node_modules/util-deprecate/browser.js') +module_menu(' History.md','modules/hardware/network/node_modules/util-deprecate/History.md') +module_menu(' LICENSE','modules/hardware/network/node_modules/util-deprecate/LICENSE') +module_menu(' node.js','modules/hardware/network/node_modules/util-deprecate/node.js') +module_menu(' package.json','modules/hardware/network/node_modules/util-deprecate/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/util-deprecate/README.md') +module_label(' warning-symbol') +module_menu(' index.js','modules/hardware/network/node_modules/warning-symbol/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/warning-symbol/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/warning-symbol/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/warning-symbol/README.md') +module_label(' which-pm-runs') +module_menu(' index.js','modules/hardware/network/node_modules/which-pm-runs/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/which-pm-runs/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/which-pm-runs/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/which-pm-runs/README.md') +module_label(' wide-align') +module_menu(' align.js','modules/hardware/network/node_modules/wide-align/align.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/wide-align/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/wide-align/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/wide-align/README.md') +module_label(' window-size') +module_menu(' cli.js','modules/hardware/network/node_modules/window-size/cli.js') +module_menu(' index.js','modules/hardware/network/node_modules/window-size/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/window-size/LICENSE') +module_label(' node_modules') +module_label(' is-number') +module_menu(' index.js','modules/hardware/network/node_modules/window-size/node_modules/is-number/index.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/window-size/node_modules/is-number/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/window-size/node_modules/is-number/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/window-size/node_modules/is-number/README.md') +module_menu(' package.json','modules/hardware/network/node_modules/window-size/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/window-size/README.md') +module_menu(' utils.js','modules/hardware/network/node_modules/window-size/utils.js') +module_label(' wrappy') +module_menu(' LICENSE','modules/hardware/network/node_modules/wrappy/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/wrappy/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/wrappy/README.md') +module_menu(' wrappy.js','modules/hardware/network/node_modules/wrappy/wrappy.js') +module_label(' ws') +module_menu(' index.js','modules/hardware/network/node_modules/ws/index.js') +module_label(' lib') +module_menu(' .DS_Store','modules/hardware/network/node_modules/ws/lib/.DS_Store') +module_menu(' buffer-util.js','modules/hardware/network/node_modules/ws/lib/buffer-util.js') +module_menu(' constants.js','modules/hardware/network/node_modules/ws/lib/constants.js') +module_menu(' event-target.js','modules/hardware/network/node_modules/ws/lib/event-target.js') +module_menu(' extension.js','modules/hardware/network/node_modules/ws/lib/extension.js') +module_menu(' permessage-deflate.js','modules/hardware/network/node_modules/ws/lib/permessage-deflate.js') +module_menu(' receiver.js','modules/hardware/network/node_modules/ws/lib/receiver.js') +module_menu(' sender.js','modules/hardware/network/node_modules/ws/lib/sender.js') +module_menu(' validation.js','modules/hardware/network/node_modules/ws/lib/validation.js') +module_menu(' websocket-server.js','modules/hardware/network/node_modules/ws/lib/websocket-server.js') +module_menu(' websocket.js','modules/hardware/network/node_modules/ws/lib/websocket.js') +module_menu(' LICENSE','modules/hardware/network/node_modules/ws/LICENSE') +module_menu(' package.json','modules/hardware/network/node_modules/ws/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/ws/README.md') +module_label(' xtend') +module_menu(' .jshintrc','modules/hardware/network/node_modules/xtend/.jshintrc') +module_menu(' .npmignore','modules/hardware/network/node_modules/xtend/.npmignore') +module_menu(' immutable.js','modules/hardware/network/node_modules/xtend/immutable.js') +module_menu(' LICENCE','modules/hardware/network/node_modules/xtend/LICENCE') +module_menu(' Makefile','modules/hardware/network/node_modules/xtend/Makefile') +module_menu(' mutable.js','modules/hardware/network/node_modules/xtend/mutable.js') +module_menu(' package.json','modules/hardware/network/node_modules/xtend/package.json') +module_menu(' README.md','modules/hardware/network/node_modules/xtend/README.md') +module_menu(' test.js','modules/hardware/network/node_modules/xtend/test.js') module_label('image') module_menu(' boundingbox','modules/image/boundingbox') module_menu(' color separation','modules/image/color%20separation') @@ -108,6 +1730,14 @@ module_label('module') module_menu(' create','modules/module/create') module_menu(' delete','modules/module/delete') module_menu(' move','modules/module/move') +module_label('motion') +module_menu(' gcodeParser','modules/motion/gcodeParser') +module_menu(' machineController','modules/motion/machineController') +module_menu(' planner','modules/motion/planner') +module_menu(' planner-ye-olden','modules/motion/planner-ye-olden') +module_menu(' segments','modules/motion/segments') +module_menu(' textBlockIn','modules/motion/textBlockIn') +module_menu(' textLineIn','modules/motion/textLineIn') module_label('network') module_menu(' apa','modules/network/apa') module_label('object') @@ -143,6 +1773,8 @@ module_label(' formats') module_menu(' dxf','modules/toolpath/formats/dxf') module_menu(' g-code','modules/toolpath/formats/g-code') module_label(' machines') +module_label(' laser cutter') +module_menu(' Epilog','modules/toolpath/machines/laser%20cutter/Epilog') module_label(' Roland') module_label(' milling') module_menu(' MDX-20','modules/toolpath/machines/Roland/milling/MDX-20') @@ -150,8 +1782,6 @@ module_menu(' SRM-20','modules/toolpath/machines/Roland/m module_label(' vinyl cutter') module_menu(' GX-24','modules/toolpath/machines/Roland/vinyl%20cutter/GX-24') module_menu(' ShopBot','modules/toolpath/machines/ShopBot') -module_label(' laser cutter') -module_menu(' Epilog','modules/toolpath/machines/laser%20cutter/Epilog') module_menu(' view','modules/toolpath/view') module_label('ui') module_menu(' bar graph','modules/ui/bar%20graph') diff --git a/modules/motion/gcodeParser b/modules/motion/gcodeParser new file mode 100644 index 0000000000000000000000000000000000000000..f14249c6d342634f15552c16a3293b50894aad65 --- /dev/null +++ b/modules/motion/gcodeParser @@ -0,0 +1,209 @@ +// +// gets lines of gcode, turns into instructions for mods-machines +// +// Neil Gershenfeld and Jake Read +// (c) Massachusetts Institute of Technology 2018 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. + +/* +turns lines of text into objects for machine controller +*/ + +// +// closure +// +(function() { + // + // module globals + // + var mod = {} + // + // name + // + var name = 'gcode parser' + // + // initialization + // + var init = function() { + mod.g0SpeedIn.value = '100' + mod.g1SpeedIn.value = '400' + mod.codeMode.value = 'G0' + } + // + // inputs + // + var inputs = { + gcode: { + type: 'string', + label: 'gcode', + event: function(evt) { + parseGCode(evt.detail) + } + } + } + // + // outputs + // + var outputs = { + instruction: { + type: 'object', + label: 'instruction', + event: function(obj) { + mods.output(mod, 'instruction', obj) + } + } + } + // + // interface + // + var interface = function(div) { + mod.div = div + // + // inputs + // + // we're going to convert all of these DPIs to MMs because we live in the real world now + mod.g0SpeedIn = make_text_input(div, 'G0 speed, gcode units', 12) + mod.g1SpeedIn = make_text_input(div, 'G1 speed, gcode units', 12) + mod.codeMode = make_text_input(div, 'Modality', 12) + } + + function parseGCode(str) { + // get letter-value pairs + var keyvals = getKeyValues(str) + // do modality + // check this for no-g moves? + if (keyvals.G == 0 | keyvals.G == 1) { + mod.codeMode.value = 'G' + keyvals.G.toString() + } else if (keyvals.M != null) { + mod.codeMode.value = 'M' + keyvals.M.toString() + } + // do parse and object + if (mod.codeMode.value == 'G0' | mod.codeMode.value == 'G1') { + + var output = { + type: 'move', + position: {}, + speed: 0 + } + // loop to find position vals, check for feed update + for (key in keyvals) { + if (key.match('[A-CX-Z]')) { + output.position[key] = keyvals[key] + } else if (key.match('[F]')){ + if(mod.codeMode.value == 'G0'){ + // assert minimum speed + mod.g0SpeedIn.value = Math.max(10, keyvals.F) + } else { + mod.g1SpeedIn.value = Math.max(10, keyvals.F) + } + } + } + + if(mod.codeMode.value == 'G0'){ + output.speed = parseFloat(mod.g0SpeedIn.value) + } else { + output.speed = parseFloat(mod.g1SpeedIn.value) + } + + outputs.instruction.event(output) + } else if (mod.codeMode.value == 'M3'){ + var output = { + type: 'spindle', + speed: 0 + } + if(keyvals.S != null){ + output.speed = keyvals.S + outputs.instruction.event(output) + } else { + console.log('need S parameter on spindle instruction') + } + } else if (mod.codeMode.value == 'M5'){ + var output = { + type: 'spindle', + speed: 0 + } + output.instruction.event(output) + } else { + console.log('gcode instruction not recognized') + } + } + + function getKeyValues(str) { + var kv = {} + for (var i = 0; i < str.length; i++) { + if (str[i].match('[A-Za-z]')) { // regex to match upper case letters + var lastIndex = str.indexOf(' ', i) + if (lastIndex < 0) { + lastIndex = str.length + } + var key = str[i].toUpperCase() + kv[key] = parseFloat(str.slice(i + 1, lastIndex)) + } + } + return kv + } + + + /* + UI helpers + */ + function make_text_input(div, name, size) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + var input = document.createElement('input') + input.type = 'text' + input.size = size + div.appendChild(input) + + return input + } + + function make_button_input(div, text) { + div.appendChild(document.createElement('br')) + var button = document.createElement('button') + button.style.padding = mods.ui.padding + button.style.margin = 1 + button.appendChild(document.createTextNode(text)) + div.appendChild(button) + + return button + } + + function make_checkbox_input(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var checkbox = document.createElement('input') + checkbox.type = 'checkbox' + div.appendChild(checkbox) + + return checkbox + } + + function make_text_display(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var span = document.createElement('span') + span.innerHTML = '' + div.appendChild(span) + + return span + } + + + // + // return values + // + return ({ + mod: mod, + name: name, + init: init, + inputs: inputs, + outputs: outputs, + interface: interface + }) +}()) \ No newline at end of file diff --git a/modules/motion/machineController b/modules/motion/machineController new file mode 100644 index 0000000000000000000000000000000000000000..a8fbeccd43ace73cda15e18c7123bb7093a01651 --- /dev/null +++ b/modules/motion/machineController @@ -0,0 +1,200 @@ +// +// gets lines of gcode, turns into instructions for mods-machines +// +// Neil Gershenfeld and Jake Read +// (c) Massachusetts Institute of Technology 2018 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. + +/* +start / stop machine on given path, +manually turn spindle on / off etc +dishes gcodes -> planner, spindle codes -> spindle +*/ + +// +// closure +// +(function() { + // + // module globals + // + var mod = {} + // + // name + // + var name = 'machine controller' + // + // initialization + // + var init = function() { + mod.jogStepSizeIn.value = '10' + mod.jogSpeedIn.value = '100' + } + // + // inputs + // + var inputs = { + lineComplete: { + type: 'event', + label: 'line complete', + event: function(evt) { + onLineComplete() + } + } + } + // + // outputs + // + var outputs = { + singleInstruction: { + type: 'object', + label: 'instruction', + event: function(str) { + mods.output(mod, 'singleInstruction', str) + } + }, + lineAdvance: { + type: 'event', + label: 'line advance', + event: function() { + mods.output(mod, 'lineAdvance', true) + } + }, + sequenceControl: { + type: 'integer', + label: 'sequence control', + event: function(int){ + mods.output(mod, 'sequenceControl', int) + } + } + } + // + // interface + // + var interface = function(div) { + mod.div = div + // + // inputs + // + + // control buttons + + mod.jogStepSizeIn = make_text_input(div, 'jog increment size', 24) + mod.jogSpeedIn = make_text_input(div, 'jog speed', 24) + + mod.jogXPButton = make_button_input(div, 'x+') + mod.jogXPButton.addEventListener('click', function(evt) { + jog('X', parseFloat(mod.jogStepSizeIn.value)) + }) + + mod.jogXMButton = make_button_input(div, 'x-') + mod.jogXMButton.addEventListener('click', function(evt) { + jog('X', -parseFloat(mod.jogStepSizeIn.value)) + }) + + mod.jogYPButton = make_button_input(div, 'y+') + mod.jogYPButton.addEventListener('click', function(evt) { + jog('Y', parseFloat(mod.jogStepSizeIn.value)) + }) + + mod.jogYMButton = make_button_input(div, 'y-') + mod.jogYMButton.addEventListener('click', function(evt) { + jog('Y', -parseFloat(mod.jogStepSizeIn.value)) + }) + + // sequence begin, stop + + mod.startSequenceButton = make_button_input(div, 'start sequence') + mod.startSequenceButton.addEventListener('click', function(evt) { + startSequence(32) + }) + + mod.pauseSequenceButton = make_button_input(div, 'pause sequence') + mod.pauseSequenceButton.addEventListener('click', function(evt){ + pauseSequence() + }) + } + + function startSequence(windowsize) { + for(var i = 0; i < windowsize; i ++){ + outputs.lineAdvance.event() + } + outputs.sequenceControl.event(1) + } + + function pauseSequence(){ + // pause ! + } + + function onLineComplete() { + outputs.lineAdvance.event() + } + + function jog(key, val) { + + } + + + /* + UI helpers + */ + function make_text_input(div, name, size) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + var input = document.createElement('input') + input.type = 'text' + input.size = size + div.appendChild(input) + + return input + } + + function make_button_input(div, text) { + div.appendChild(document.createElement('br')) + var button = document.createElement('button') + button.style.padding = mods.ui.padding + button.style.margin = 1 + button.appendChild(document.createTextNode(text)) + div.appendChild(button) + + return button + } + + function make_checkbox_input(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var checkbox = document.createElement('input') + checkbox.type = 'checkbox' + div.appendChild(checkbox) + + return checkbox + } + + function make_text_display(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var span = document.createElement('span') + span.innerHTML = '' + div.appendChild(span) + + return span + } + + + // + // return values + // + return ({ + mod: mod, + name: name, + init: init, + inputs: inputs, + outputs: outputs, + interface: interface + }) +}()) \ No newline at end of file diff --git a/modules/motion/planner b/modules/motion/planner new file mode 100644 index 0000000000000000000000000000000000000000..3a71c207b99618e1a353ab84aa121034994ac9bc --- /dev/null +++ b/modules/motion/planner @@ -0,0 +1,477 @@ +// +// converts toolpath objects into segments for accel planning +// +// Neil Gershenfeld and Jake Read +// (c) Massachusetts Institute of Technology 2018 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. + + +/* +eats objects like +var move = { + position: { + X: float + Y: float + Z: float + A: float + } + rate: float +} + +outputs: +motors +'planner block consumed' event + + +*/ + +// +// closure +// +(function() { + // + // module globals + // + var mod = {} + // + // name + // + var name = 'motion planner' + // + // initialization + // + var init = function() { + mod.accelIn.value = '50' + mod.junctionDeviationIn.value = '1' + mod.minSpeedIn.value = '1' + + mod.axisIdentifiers.value = 'X,Y,Z' + axisIds = mod.axisIdentifiers.value.split(',') + for (var i = 0; i < axisIds.length; i++) { + currentPosition[i] = 0 + } + + mod.netWindowIn.value = '5' + packetWindowSize = parseInt(mod.netWindowIn.value) + } + // + // inputs + // + var inputs = { + newMove: { + type: 'object', + label: 'move instruction', + event: function(evt) { + addToQueue(JSON.parse(JSON.stringify(evt.detail))) + } + }, + acknowledgement: { + type: 'event', + label: 'acknowledgement', + event: function(evt) { + // have to ID moves because some are zero length ? + acknowledgement(evt.detail) + } + }, + sequenceControl: { + type: 'integer', + label: 'sequence control', + event: function(evt) { + if (evt.detail == 1) { + checkNetwork() + } + } + } + } + // + // outputs + // + var outputs = { + plannedMove: { + type: 'object', + label: 'move instruction', + event: function(block) { + var deref = JSON.parse(JSON.stringify(block)) + mods.output(mod, 'plannedMove', deref) + } + }, + moveComplete: { + type: 'event', + label: 'move complete', + event: function(evt) { + mods.output(mod, 'moveComplete', 1) + } + } + } + // + // interface + // + var interface = function(div) { + mod.div = div + // + // inputs + // + // settings + make_text_display(div, 'machine config') + mod.axisIdentifiers = make_text_input(div, 'axis identifiers', 12) + mod.axisIdentifiers.addEventListener('change', function() { + axisIds = mod.axisIdentifiers.value.split(',') + }) + div.appendChild(document.createElement('br')) + + make_text_display(div, 'planner settings') + mod.accelIn = make_text_input(div, 'acceleration, units/s/s', 12) + mod.junctionDeviationIn = make_text_input(div, 'junction deviation, units', 12) + mod.minSpeedIn = make_text_input(div, 'minimum junction speed, units/s/s', 12) + div.appendChild(document.createElement('br')) + + make_text_display(div, 'network settings') + mod.netWindowIn = make_text_input(div, 'network window size', 12) + mod.netWindowIn.addEventListener('change', function() { + packetWindowSize = parseInt(mod.netWindowIn.value) + }) + mod.resetNetButton = make_button_input(div, 'reset network') + mod.resetNetButton.addEventListener('click', function() { + packetsInNetwork = 0 + }) + } + + // ---------------------------------------------------- THE BUSINESS + + // network state + var packetsInNetwork = 0 + var packetWindowSize = 0 + var axiscounter = 0 + + function acknowledgement(obj) { + // todo: add position input? where do we do steps -> float? dynamic would be cool ... or just a real position count + axiscounter++ + if (axiscounter >= 2) { //} axisIds.length){ + packetsInNetwork-- + checkNetwork() + outputs.moveComplete.event() + axiscounter = 0 + } + } + + function checkNetwork() { + // see windowed state and push more data out if need be + while (packetWindowSize > packetsInNetwork && moveQue.length != 0) { + sendMove() + } + } + + function sendMove() { + outputs.plannedMove.event(moveQue.shift()) + packetsInNetwork++ + } + + + // planner state and moves + var axisIds = [] + var moveQue = [] // array of moves + var currentPosition = [] + + /* + var segment = { + p1: p1, + p2: p2, + cruise: cruise, + entry: entry, + exit: exit, + } + */ + + function addToQueue(obj) { + // add to the move queue + var p1 = [] + var p2 = [] + if (moveQue.length == 0) { + p1 = currentPosition + } else { + p1 = moveQue[moveQue.length - 1].p2 + } + + // find all letter-based and match to std array + var keyset = new Array(axisIds.length) + keyset.fill(0) + + for (key in obj.position) { + for (axisId in axisIds) { + if (key == axisIds[axisId]) { + p2[axisId] = obj.position[key] + keyset[axisId] = 1 + } else if (keyset[axisId] != 1) { + p2[axisId] = p1[axisId] + } else { + // nothing + } + } + } + + if (cartesianDistance(p1, p2) == 0) { + console.log('planner throwing zero length vector') + } else { + var cruise = obj.speed + + var newMove = { + p1: p1, + p2: p2, + cruise: cruise, + entry: 0, + exit: 0 + } + + // append the move to the queue + moveQue.push(newMove) + + // and then check to see if we are ready to pass anything to the motors + runQue() + } + } + + // + // local functions + // + function runQue() { + // converting from mm/s or dpi (pixel units) to mm based units + // https://github.com/grbl/grbl/blob/master/grbl/planner.c + // https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/ + /* + first we walk the queue: + going backwards, end at 0 speed exit + - find junction speed (junction deviation) between this and previous block + - this is entry speed, calculate trapezoid to exit speed + next block + - exit speed is recently calculated entry speed + - do junction deviation, this is entry speed + - calculate trapezoid + .. why is this simpler? find entry and exit speed of each block, + find accel limits per axis, do trapezoid with that accel + */ + + var jdsize = parseFloat(mod.junctionDeviationIn.value) + var accel = parseFloat(mod.accelIn.value) + // not actually using this at the moment! + var jdmin = parseFloat(mod.minSpeedIn.value) + + moveQue[moveQue.length - 1].exit = 0 // trailing edge always full stop + + for (var i = moveQue.length - 1; i > 0; i--) { + // reverse pass + // find junction deviation + /* + - really, could only do this once per segment when a new one is added + - unitize entry and exit vectors + - find cos(theta) = Ventry dot Vexit / (|Ventry| * |Vexit|) -> this is (1*1 bc unit) + - find sin(theta/2) = sqrt((1-cos(theta))/2) + - find r = j(sin(theta/2)/(1-sin(theta/2))) + - find Fj = sqrt(Ac*r) + - junction speed is min(Fj, min(entry,exit)) + */ + + var v_entry = unitVector(moveQue[i - 1].p1, moveQue[i - 1].p2) + var v_exit = unitVector(moveQue[i].p1, moveQue[i].p2) + //console.log('unit entry, unit exit', toFixedMatrix(v_entry, 3), toFixedMatrix(v_exit, 3)) + var cos_theta = dotProduct(v_entry, v_exit) // dot product / mag * mag where mags are 1 each bc unit + // catch corner cases (get it? - actually they are very straight cases, or very turnaround cases) + if (cos_theta < -0.9999999999999) { + cos_theta = -0.9999999999999 + } else if (cos_theta > 0.9999999999999) { + cos_theta = 0.9999999999999 + } + //console.log('cos_theta', cos_theta, Math.acos(cos_theta) * (180 / Math.PI)) + var sin_theta_overtwo = Math.sqrt((1 - cos_theta) / 2) + //console.log('sin_theta_overtwo', sin_theta_overtwo) + var radius = jdsize * ((1 - sin_theta_overtwo) / sin_theta_overtwo) + //console.log('radius', radius) + // feed at the junction, according to supposed acceleration through the junction + var fj = Math.sqrt(accel * radius) + //console.log('fj', fj) + + // but don't go through the junction faster than we're cruising + var feed_junction = Math.min(fj, moveQue[i].cruise, moveQue[i - 1].cruise) + //console.log('feed_junction', feed_junction) + + // ok we have the maximum feed at the preceeding junction + // now: find the maximum entry speeds as if we spent the whole block decelerating + + // size of segment + var distance = cartesianDistance(moveQue[i].p1, moveQue[i].p2) + //console.log('distance', distance) + var max_entry_speed = Math.sqrt(moveQue[i].exit * moveQue[i].exit + 2 * distance * accel) + //console.log('max_entry_speed', max_entry_speed) + var entry_speed = Math.min(max_entry_speed, feed_junction) + //console.log('entry_speed', entry_speed) + moveQue[i].entry = entry_speed + moveQue[i - 1].exit = entry_speed + //console.log('segment:', moveQue[i]) + moveQue[i].accel = accel + moveQue[i].distance = distance + } + + // bad bad not very good implementation to start: + //moveQue[0].entry = 0 + moveQue[0].accel = accel + moveQue[0].distance = cartesianDistance(moveQue[0].p1, moveQue[0].p2) + + // forward pass to make sure we can accelerate to set exit speed in length + for (var i = 0; i < moveQue.length - 1; i++) { + var distance = moveQue[i].distance + var max_exit_speed = Math.sqrt(moveQue[i].entry * moveQue[i].entry + 2 * distance * accel) + + if (max_exit_speed < moveQue[i + 1].entry_speed) { + moveQue[i + 1].entry = max_exit_speed + moveQue[i].exit = max_exit_speed + } + } + } + + // ---------------------------------------------------- UTILITIES + + function cartesianDistance(p1, p2) { + // takes p1, p2 to be arrays of same length + // computes cartesian distance + var sum = 0 + for (var i = 0; i < p1.length; i++) { + sum += Math.pow((p1[i] - p2[i]), 2) + } + return Math.sqrt(sum) + } + + function cartesianLength(v) { + // length of vector + var sum = 0 + for (var i = 0; i < v.length; i++) { + sum += Math.pow(v[i], 2) + } + return Math.sqrt(sum) + } + + function addMatrix(a, b, c) { + // c = a + b + a.forEach(function(item, index) { + c[index] = b[index] + a[index] + }) + } + + function subtractMatrix(a, b, c) { + // c = a - b + b.forEach(function(item, index) { + c[index] = a[index] - b[index] + }) + } + + function multiplyMatrix(a, scalar, b) { + // b = a * scalar + a.forEach(function(item, index) { + b[index] = a[index] * scalar + }) + } + + function multiply2dMatrix(a, scalar, b) { + // b = a * scalar + for (var i = 0; i < a.length; i++) { + for (var j = 0; j < a[i].length; j++) { + b[i][j] = a[i][j] * scalar; + } + } + } + + function divideMatrix(a, scalar, b) { + // b = a / scalar + for (var i = 0; i < a.length; i++) { + b[i] = a[i] / scalar + } + } + + function unitVector(p1, p2) { + // returns new array, is unit vector of p2-p1 + var unit = new Array() + subtractMatrix(p2, p1, unit) + var length = cartesianLength(unit) + divideMatrix(unit, length, unit) + + return unit + } + + function dotProduct(a, b) { + // returns a dot b + var sum = 0; + for (var i = 0; i < a.length; i++) { + sum += a[i] * b[i] + } + + return sum + } + + function toFixedMatrix(a, digits) { + var rounded = new Array() + for (var i = 0; i < a.length; i++) { + rounded[i] = a[i].toFixed(digits) + } + + return rounded + } + + // ---------------------------------------------------- UI HELP + + function make_text_input(div, name, size) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + var input = document.createElement('input') + input.type = 'text' + input.size = size + div.appendChild(input) + + return input + } + + function make_button_input(div, text) { + div.appendChild(document.createElement('br')) + var button = document.createElement('button') + button.style.padding = mods.ui.padding + button.style.margin = 1 + button.appendChild(document.createTextNode(text)) + div.appendChild(button) + + return button + } + + function make_checkbox_input(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var checkbox = document.createElement('input') + checkbox.type = 'checkbox' + div.appendChild(checkbox) + + return checkbox + } + + function make_text_display(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var span = document.createElement('span') + span.innerHTML = '' + div.appendChild(span) + + return span + } + + // + // return values + // + return ({ + mod: mod, + name: name, + init: init, + inputs: inputs, + outputs: outputs, + interface: interface + }) +}()) \ No newline at end of file diff --git a/modules/motion/planner-ye-olden b/modules/motion/planner-ye-olden new file mode 100644 index 0000000000000000000000000000000000000000..506b8060ccb41840c97c1c3f4df10432360102a2 --- /dev/null +++ b/modules/motion/planner-ye-olden @@ -0,0 +1,407 @@ +// +// converts toolpath objects into segments for accel planning +// +// Neil Gershenfeld and Jake Read +// (c) Massachusetts Institute of Technology 2018 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. + + +/* +eats objects like +var move = { + position: { + X: float + Y: float + Z: float + A: float + } + rate: float +} + + +*/ + +// +// closure +// +(function() { + // + // module globals + // + var mod = {} + // + // name + // + var name = 'motion planner' + // + // initialization + // + var init = function() { + mod.accel_in.value = '25' + mod.junction_deviation_in.value = '0.5' + mod.current_block_in.value = '0' + mod.current_window_size_in.value = '0' + mod.window = 0 + mod.packets_awaiting_reply = 0 + } + // + // inputs + var twoCount = 0 + // + var inputs = { + segments: { + type: 'objects', + label: 'segments', + event: function(evt) { + mod.segments = JSON.parse(JSON.stringify(evt.detail)) // dereference pls + // console.log('segments to planner: ', mod.segments) + runQueue() + } + }, + next: { + type: 'event', + label: 'call for next block', + event: function(evt) { + twoCount++ + if (twoCount > 1) { + mod.packets_awaiting_reply--; + if (mod.packets_awaiting_reply < mod.window) { + sendBlock() + } + twoCount = 0 + } + } + } + } + // + // outputs + // + var outputs = { + nextblock: { + type: 'object', + label: 'next block', + event: function() { + //mods.output(mod, 'segments', null) + } + } + } + // + // interface + // + var interface = function(div) { + mod.div = div + // + // inputs + // + // settings + mod.accel_in = make_text_input(div, 'acceleration, mm/s/s', 12) + mod.junction_deviation_in = make_text_input(div, 'junction deviation, mm', 12) + // + // request to do the business + // + mod.parse_button = make_button_input(div, 'parse') + mod.parse_button.addEventListener('click', function() { + runQueue() + }) + + // current block + mod.current_block_in = make_text_input(div, 'next block to send', 12) + + mod.current_window_size_in = make_text_input(div, 'current window size', 12) + + // + // send a block + // + mod.send_button = make_button_input(div, 'send next block') + mod.send_button.addEventListener('click', function() { + sendBlock() + }) + mod.open_window_button = make_button_input(div, 'open transmit window') + mod.open_window_button.addEventListener('click', function() { + console.log('opening window') + if (mod.window < 2) { + mod.window = 3 + } else { + mod.window++ + } + mod.current_window_size_in.value = mod.window.toString() + mod.packets_awaiting_reply = 0 + while (mod.packets_awaiting_reply < mod.window) { + sendBlock() + } + }) + mod.close_window_button = make_button_input(div, 'close transmit window') + mod.close_window_button.addEventListener('click', function() { + mod.window = 0; + mod.current_window_size_in.value = mod.window.toString() + }) + } + + function cartesianDistance(p1, p2) { + // takes p1, p2 to be arrays of same length + // computes cartesian distance + var sum = 0 + for (var i = 0; i < p1.length; i++) { + sum += Math.pow((p1[i] - p2[i]), 2) + } + return Math.sqrt(sum) + } + + function cartesianLength(v) { + // length of vector + var sum = 0 + for (var i = 0; i < v.length; i++) { + sum += Math.pow(v[i], 2) + } + return Math.sqrt(sum) + } + + function addMatrix(a, b, c) { + // c = a + b + a.forEach(function(item, index) { + c[index] = b[index] + a[index] + }) + } + + function subtractMatrix(a, b, c) { + // c = a - b + b.forEach(function(item, index) { + c[index] = a[index] - b[index] + }) + } + + function multiplyMatrix(a, scalar, b) { + // b = a * scalar + a.forEach(function(item, index) { + b[index] = a[index] * scalar + }) + } + + function multiply2dMatrix(a, scalar, b) { + // b = a * scalar + for (var i = 0; i < a.length; i++) { + for (var j = 0; j < a[i].length; j++) { + b[i][j] = a[i][j] * scalar; + } + } + } + + function divideMatrix(a, scalar, b) { + // b = a / scalar + for (var i = 0; i < a.length; i++) { + b[i] = a[i] / scalar + } + } + + function unitVector(p1, p2) { + // returns new array, is unit vector of p2-p1 + var unit = new Array() + subtractMatrix(p2, p1, unit) + var length = cartesianLength(unit) + divideMatrix(unit, length, unit) + + return unit + } + + function dotProduct(a, b) { + // returns a dot b + var sum = 0; + for (var i = 0; i < a.length; i++) { + sum += a[i] * b[i] + } + + return sum + } + + function toFixedMatrix(a, digits) { + var rounded = new Array() + for (var i = 0; i < a.length; i++) { + rounded[i] = a[i].toFixed(digits) + } + + return rounded + } + + /* + now: + + start from segment and find a corner + do planner + + */ + + // + // local functions + // + function runQueue() { + // converting from mm/s or dpi (pixel units) to mm based units + // https://github.com/grbl/grbl/blob/master/grbl/planner.c + // https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/ + /* + first we walk the queue: + going backwards, end at 0 speed exit + - find junction speed (junction deviation) between this and previous block + - this is entry speed, calculate trapezoid to exit speed + next block + - exit speed is recently calculated entry speed + - do junction deviation, this is entry speed + - calculate trapezoid + .. why is this simpler? find entry and exit speed of each block, + find accel limits per axis, do trapezoid with that accel + + */ + + var jdsize = parseFloat(mod.junction_deviation_in.value) + var accel = parseFloat(mod.accel_in.value) + + mod.segments[mod.segments.length - 1].exit = 0 // trailing edge always full stop + + for (var i = mod.segments.length - 1; i > 0; i--) { + // reverse pass + // find junction deviation + /* + - really, could only do this once per segment when a new one is added + - unitize entry and exit vectors + - find cos(theta) = Ventry dot Vexit / (|Ventry| * |Vexit|) -> this is (1*1 bc unit) + - find sin(theta/2) = sqrt((1-cos(theta))/2) + - find r = j(sin(theta/2)/(1-sin(theta/2))) + - find Fj = sqrt(Ac*r) + - junction speed is min(Fj, min(entry,exit)) + */ + + var v_entry = unitVector(mod.segments[i - 1].p1, mod.segments[i - 1].p2) + var v_exit = unitVector(mod.segments[i].p1, mod.segments[i].p2) + //console.log('unit entry, unit exit', toFixedMatrix(v_entry, 3), toFixedMatrix(v_exit, 3)) + var cos_theta = dotProduct(v_entry, v_exit) // dot product / mag * mag where mags are 1 each bc unit + // catch corner cases (get it? - actually they are very straight cases, or very turnaround cases) + if (cos_theta < -0.9999999999999) { + cos_theta = -0.9999999999999 + } else if (cos_theta > 0.9999999999999) { + cos_theta = 0.9999999999999 + } + //console.log('cos_theta', cos_theta, Math.acos(cos_theta) * (180 / Math.PI)) + var sin_theta_overtwo = Math.sqrt((1 - cos_theta) / 2) + //console.log('sin_theta_overtwo', sin_theta_overtwo) + var radius = jdsize * ((1 - sin_theta_overtwo) / sin_theta_overtwo) + //console.log('radius', radius) + var fj = Math.sqrt(accel * radius) + //console.log('fj', fj) + + var feed_junction = Math.min(fj, mod.segments[i].cruise, mod.segments[i - 1].cruise) + //console.log('feed_junction', feed_junction) + + // ok we have the maximum feed at the preceeding junction + // now: find the maximum entry speeds as if we spent the whole block decelerating + + // size of segment + var distance = cartesianDistance(mod.segments[i].p1, mod.segments[i].p2) + //console.log('distance', distance) + var max_entry_speed = Math.sqrt(mod.segments[i].exit * mod.segments[i].exit + 2 * distance * accel) + //console.log('max_entry_speed', max_entry_speed) + var entry_speed = Math.min(max_entry_speed, feed_junction) + //console.log('entry_speed', entry_speed) + mod.segments[i].entry = entry_speed + mod.segments[i - 1].exit = entry_speed + //console.log('segment:', mod.segments[i]) + mod.segments[i].accel = accel + mod.segments[i].distance = distance + } + + // bad bad not very good implementation to start: + mod.segments[0].entry = 0 + mod.segments[0].accel = accel + mod.segments[0].distance = cartesianDistance(mod.segments[0].p1, mod.segments[0].p2) + + // forward pass to make sure we can accelerate to set exit speed in length + for (var i = 0; i < mod.segments.length - 1; i++) { + var distance = mod.segments[i].distance + var max_exit_speed = Math.sqrt(mod.segments[i].entry * mod.segments[i].entry + 2 * distance * accel) + + if (max_exit_speed < mod.segments[i + 1].entry_speed) { + mod.segments[i + 1].entry = max_exit_speed + mod.segments[i].exit = max_exit_speed + } + } + + console.log('segments in planner:', mod.segments) + + } + + function sendBlock() { + var index = parseInt(mod.current_block_in.value) + if (index < 0) { + index = 0 + } else if (index > mod.segments.length - 1) { + index = 0 + } + + mods.output(mod, 'nextblock', mod.segments[index]) + mod.packets_awaiting_reply++; + + index++ + mod.current_block_in.value = index + } + + + /* + UI helpers + */ + function make_text_input(div, name, size) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + var input = document.createElement('input') + input.type = 'text' + input.size = size + div.appendChild(input) + + return input + } + + function make_button_input(div, text) { + div.appendChild(document.createElement('br')) + var button = document.createElement('button') + button.style.padding = mods.ui.padding + button.style.margin = 1 + button.appendChild(document.createTextNode(text)) + div.appendChild(button) + + return button + } + + function make_checkbox_input(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var checkbox = document.createElement('input') + checkbox.type = 'checkbox' + div.appendChild(checkbox) + + return checkbox + } + + function make_text_display(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var span = document.createElement('span') + span.innerHTML = '' + div.appendChild(span) + + return span + } + + // + // return values + // + return ({ + mod: mod, + name: name, + init: init, + inputs: inputs, + outputs: outputs, + interface: interface + }) +}()) \ No newline at end of file diff --git a/modules/motion/segments b/modules/motion/segments new file mode 100644 index 0000000000000000000000000000000000000000..3d8b52ae44e087e99eeb363e543a562298837ccc --- /dev/null +++ b/modules/motion/segments @@ -0,0 +1,313 @@ +// +// converts toolpath objects into segments for accel planning +// +// Neil Gershenfeld and Jake Read +// (c) Massachusetts Institute of Technology 2018 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. +// +// closure +// +(function() { + // + // module globals + // + var mod = {} + // + // name + // + var name = 'toolpath segments' + // + // initialization + // + var init = function() { + mod.feed_speed_in.value = '100' + mod.traverse_speed_in.value = '400' + // segment size maximum + // linear machines don't necessarily need segmentation, but 'delta' or 'mixed' output machines (corexy) + // and rotary-actuator type machines do, unless we do fancy SLERP maths elsewhere (I think) + mod.segment_size_in.value = '2' + // extremely that we have to start decel sooner + // this would be true for big, fast machines with lots of inertia + mod.segment_lookaheadlength_in.value = '3' + // place to start from + mod.segment_request_start_in.value = '12' + } + // + // inputs + // + var inputs = { + toolpath: { + type: 'object', + label: 'toolpath', + event: function(evt) { + mod.toolpath = evt.detail // reference to ! upstream edit? + console.log('toolpath to segmenter: ', mod.toolpath) + getSegments() + } + }, + next: { + type: 'number', + label: 'start segment', + event: function(evt) { + mod.segment_request_start_in.value = evt.detail + // not going to implement this, will wait until further downstream + // to determine how to best start from various spots + // because planner will want to 'bump along' in segment steps, not toolpath steps + // we might have to loop over segments until we get to the actual number we want + // especially because we have to loop over a 2D array where we insert traverse moves + // between the 1st dimension + getSegments() + } + } + } + // + // outputs + // + var outputs = { + segments: { + type: 'objects', + label: 'segments', + event: function() { + mods.output(mod, 'segments', mod.segments) + } + } + } + // + // interface + // + var interface = function(div) { + mod.div = div + // + // inputs + // + // we're going to convert all of these DPIs to MMs because we live in the real world now + mod.feed_speed_in = make_text_input(div, 'feed speed, mm/s', 12) + mod.traverse_speed_in = make_text_input(div, 'traverse speed, mm/s', 12) + // segmenting settings + mod.segment_size_in = make_text_input(div, 'segment size, mm', 12) + mod.segment_lookaheadlength_in = make_text_input(div, 'lookahead length, mm', 12) + + // path planner will request sub-sequences in order, starting from this point in the array of paths + mod.segment_request_start_in = make_text_input(div, 'start segment', 12) + // + // output button + // + mod.output_button = make_button_input(div, 'parse') + mod.output_button.addEventListener('click', function() { + getSegments() + }) + } + + function cartesianDistance(p1, p2) { + // takes p1, p2 to be arrays of same length + // computes cartesian distance + var sum = 0 + for (var i = 0; i < p1.length; i++) { + sum += Math.pow((p1[i] - p2[i]), 2) + } + return Math.sqrt(sum) + } + + function addMatrix(a, b, c) { + // c = a + b + a.forEach(function(item, index) { + c[index] = b[index] + a[index] + }) + } + + function subtractMatrix(a, b, c) { + // c = a - b + b.forEach(function(item, index) { + c[index] = a[index] - b[index] + }) + } + + function multiplyMatrix(a, scalar, b) { + // b = a * scalar + a.forEach(function(item, index) { + b[index] = a[index] * scalar + }) + } + + function multiply2dMatrix(a, scalar, b) { + // b = a * scalar + for (var i = 0; i < a.length; i++) { + for (var j = 0; j < a[i].length; j++) { + b[i][j] = a[i][j] * scalar; + } + } + } + + function copy2dArray(a) { + var na = new Array() + for (var i = 0; i < a.length; i++) { + var nb = new Array() + for (var j = 0; j < a[i].length; j++) { + nb[j] = a[i][j] + } + na[i] = nb + } + return na + } + + function subsegment(p1, p2, start, end) { + // start and end are clipping parameters from 0 -> 1 + var p3 = new Array() + subtractMatrix(p2, p1, p3) // 0 referenced segment c = a - b + // in sections + var s1 = new Array() + var s2 = new Array() + multiplyMatrix(p3, start, s1) + multiplyMatrix(p3, end, s2) + // return to start of sections + addMatrix(s1, p1, s1) + addMatrix(s2, p1, s2) + + var subseg = [s1, s2] + return subseg + } + + function writeSegment(p1, p2, cruise, entry, exit) { + var segment = { + p1: p1, + p2: p2, + cruise: cruise, + entry: entry, + exit: exit, + } + + return segment + } + + /* + now: + + start from segment and find a corner + do planner + + */ + + // + // local functions + // + function getSegments() { + mod.segments = new Array() // of segments + + // converting from mm/s or dpi (pixel units) to mm based units + var convert = (25.4 / mod.toolpath.dpi) + var traverse = parseFloat(mod.traverse_speed_in.value) // in mm / s + var feed = parseFloat(mod.feed_speed_in.value) + var segsize = parseFloat(mod.segment_size_in.value) + var reqlength = parseFloat(mod.segment_lookaheadlength_in.value) + + var startplace = parseInt(mod.segment_request_start_in.value) + + // setup + var subsection = copy2dArray(Array.from(mod.toolpath.path[0]).slice(0, 50)) + multiply2dMatrix(subsection, convert, subsection); // our units now in mms + + // starting at 0 position + var numaxis = subsection[0].length + + // now we do the business + var u = startplace; // number of the segment we're slicing + var lastcoords = subsection[u].slice(0) + var nextcoords = subsection[u + 1].slice(0) + + var tl = 0; // length of segments sliced so far + + while (tl < reqlength) { + if (u > subsection.length - 1) { + console.log('done segments') + break + } + nextcoords = subsection[u].slice(0) + var leglength = cartesianDistance(lastcoords, nextcoords) + // if it's longer than desired segment, split it up + if (leglength > segsize) { + var segs = Math.ceil(leglength / segsize) + for (var i = 0; i < segs; i++) { + var param1 = i / segs + var param2 = (i + 1) / segs + var subseg = subsegment(lastcoords, nextcoords, param1, param2) + mod.segments.push(writeSegment(subseg[0], subseg[1], feed, feed, feed)) + // entry exit and accel set later on in planner sweep, + // cruise (target) is important to set here so the planner knows what to aim at + } + } else if (leglength == 0) { + // do *nothing* + } else { + // append it + mod.segments.push(writeSegment(lastcoords, nextcoords, feed, feed, feed)) + } + tl += leglength + lastcoords = nextcoords.slice(0) + u++ + } + outputs.segments.event() + } + + + /* + UI helpers + */ + function make_text_input(div, name, size) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + var input = document.createElement('input') + input.type = 'text' + input.size = size + div.appendChild(input) + + return input + } + + function make_button_input(div, text) { + div.appendChild(document.createElement('br')) + var button = document.createElement('button') + button.style.padding = mods.ui.padding + button.style.margin = 1 + button.appendChild(document.createTextNode(text)) + div.appendChild(button) + + return button + } + + function make_checkbox_input(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var checkbox = document.createElement('input') + checkbox.type = 'checkbox' + div.appendChild(checkbox) + + return checkbox + } + + function make_text_display(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var span = document.createElement('span') + span.innerHTML = '' + div.appendChild(span) + + return span + } + + + // + // return values + // + return ({ + mod: mod, + name: name, + init: init, + inputs: inputs, + outputs: outputs, + interface: interface + }) +}()) \ No newline at end of file diff --git a/modules/motion/textBlockIn b/modules/motion/textBlockIn new file mode 100644 index 0000000000000000000000000000000000000000..0e5dd43f187792509434af4ef6c89e5c9b5d7932 --- /dev/null +++ b/modules/motion/textBlockIn @@ -0,0 +1,319 @@ +// +// generic line input +// +// Neil Gershenfeld and Jake Read +// (c) Massachusetts Institute of Technology 2018 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. +// +// closure +// +(function() { + // + // module globals + // + var mod = {} + // + // name + // + var name = 'text lines input' + // + // initialization + // + var init = function() { + mod.textAreaIn.value = + "G1 Z0. F120.\n\ +X3.744\n\ +X3.94 Y0.519\n\ +X4.127 Y0.576\n\ +X4.3 Y0.669\n\ +X4.452 Y0.793\n\ +X4.576 Y0.944\n\ +X4.668 Y1.117\n\ +X4.725 Y1.305\n\ +X4.744 Y1.5\n\ +Y1.588\n\ +X4.725 Y1.783\n\ +X4.668 Y1.971\n\ +X4.576 Y2.144\n\ +X4.452 Y2.295\n\ +X4.3 Y2.42\n\ +X4.127 Y2.512\n\ +X3.94 Y2.569\n\ +X3.744 Y2.588\n\ +X-8.335\n\ +X-8.963 Y2.605\n\ +X-9.589 Y2.654\n\ +X-10.212 Y2.736\n\ +X-10.83 Y2.85\n\ +X-11.441 Y2.997\n\ +X-13.744 Y3.614\n\ +X-13.915 Y3.677\n\ +X-14.072 Y3.77\n\ +X-14.209 Y3.89\n\ +X-14.322 Y4.033\n\ +X-14.408 Y4.194\n\ +X-14.462 Y4.368\n\ +X-14.485 Y4.548\n\ +X-14.474 Y4.73\n\ +X-14.43 Y4.907\n\ +X-14.16 Y5.627\n\ +X-13.854 Y6.332\n\ +X-13.512 Y7.02\n\ +X-13.134 Y7.69\n\ +X-12.724 Y8.339\n\ +X-12.28 Y8.967\n\ +X-11.805 Y9.571\n\ +X-11.3 Y10.15\n\ +X-10.765 Y10.703\n\ +X-10.203 Y11.227\n\ +X-9.615 Y11.722\n\ +X-9.003 Y12.186\n\ +X-8.367 Y12.618\n\ +X-7.71 Y13.017\n\ +X-7.033 Y13.381\n\ +X-6.339 Y13.711\n\ +X-5.629 Y14.005\n\ +X-4.904 Y14.261\n\ +X-4.168 Y14.481\n\ +X-3.421 Y14.662\n\ +X-2.666 Y14.805\n\ +X-1.904 Y14.909\n\ +X-1.138 Y14.974\n\ +X-0.37 Y15.\n\ +X0.398 Y14.986\n\ +X1.165 Y14.933\n\ +X1.928 Y14.84\n\ +X2.685 Y14.709\n\ +X3.435 Y14.539\n\ +X4.175 Y14.331\n\ +X4.903 Y14.085\n\ +X5.618 Y13.802\n\ +X6.317 Y13.483\n\ +X6.999 Y13.129\n\ +X7.662 Y12.74\n\ +X8.304 Y12.318\n\ +X8.924 Y11.863\n\ +X9.519 Y11.378\n\ +X10.089 Y10.862\n\ +X10.632 Y10.318\n\ +X11.146 Y9.747\n\ +X11.631 Y9.15\n\ +X12.084 Y8.529\n\ +X12.504 Y7.886\n\ +X12.892 Y7.222\n\ +X13.244 Y6.539\n\ +X13.561 Y5.839\n\ +X13.842 Y5.124\n\ +X14.086 Y4.395\n\ +X14.292 Y3.654\n\ +X14.461 Y2.904\n\ +X14.59 Y2.147\n\ +X14.681 Y1.384\n\ +X14.732 Y0.617\n\ +X14.744 Y-0.152\n\ +X14.716 Y-0.92\n\ +X14.649 Y-1.686\n\ +X14.543 Y-2.447\n\ +X14.399 Y-3.202\n\ +X14.215 Y-3.948\n\ +X13.994 Y-4.684\n\ +X13.736 Y-5.408\n\ +X13.44 Y-6.117\n\ +X13.109 Y-6.811\n\ +X12.743 Y-7.487\n\ +X12.342 Y-8.143\n\ +X11.908 Y-8.777\n\ +X11.443 Y-9.389\n\ +X10.947 Y-9.976\n\ +X10.421 Y-10.536\n\ +X9.867 Y-11.069\n\ +X9.287 Y-11.573\n\ +X8.682 Y-12.047\n\ +X8.053 Y-12.489\n\ +X7.402 Y-12.898\n\ +X6.732 Y-13.273\n\ +X6.043 Y-13.614\n\ +X5.337 Y-13.918\n\ +X4.617 Y-14.187\n\ +X3.884 Y-14.418\n\ +X3.14 Y-14.611\n\ +X2.387 Y-14.765\n\ +X1.627 Y-14.881\n\ +X0.862 Y-14.958\n\ +X0.095 Y-14.996\n\ +X-0.674 Y-14.994\n\ +X-1.441 Y-14.953\n\ +X-2.206 Y-14.873\n\ +X-2.965 Y-14.753\n\ +X-3.717 Y-14.595\n\ +X-4.46 Y-14.399\n\ +X-5.192 Y-14.164\n\ +X-5.911 Y-13.893\n\ +X-6.615 Y-13.585\n\ +X-7.303 Y-13.241\n\ +X-7.972 Y-12.863\n\ +X-8.621 Y-12.451\n\ +X-9.247 Y-12.006\n\ +X-9.851 Y-11.53\n\ +X-10.429 Y-11.023\n\ +X-10.98 Y-10.488\n\ +X-11.503 Y-9.925\n\ +X-11.997 Y-9.335\n\ +X-12.459 Y-8.722\n\ +X-12.89 Y-8.085\n\ +X-13.288 Y-7.427\n\ +X-13.651 Y-6.75\n\ +X-13.979 Y-6.055\n\ +X-14.271 Y-5.344\n\ +X-14.527 Y-4.619\n\ +X-14.744 Y-3.882\n\ +X-9.915 Y-2.588\n\ +X4.744\n\ +Y-0.5\n\ +X-2.256\n\ +Y0.5\n\ +Z7.\n\ +G0 Z18." + + linesToArray() + + mod.lineCountDisplay.innerHTML = '0' + + } + // + // inputs + // + var inputs = { + lineRequest: { + type: 'number', + label: 'line request', + event: function(evt) { + sendLine(evt.detail) + } + } + } + // + // outputs + // + var outputs = { + line: { + type: 'string', + label: 'line', + event: function(str) { + mods.output(mod, 'line', str) + } + } + } + // + // interface + // + var interface = function(div) { + mod.div = div + // + // inputs + // + mod.lineCountDisplay = make_text_display(div, 'current line') + mod.resetCurrentLine = make_button_input(div, 'reset lines') + mod.resetCurrentLine.addEventListener('click', function(){ + mod.lineCountDisplay.innerHTML = '0' + currentLine = 0 + }) + mod.textAreaIn = makeTextArea(div, 'lines', 24, 48) + } + + var currentLine = 0 + var linesArray = [] + + function linesToArray() { + linesArray = mod.textAreaIn.value.split('\n') + } + + function sendLine() { + var lineOut = linesArray[currentLine] + currentLine++ + if (currentLine > linesArray.length) { + currentLine = linesArray.length + } else { + outputs.line.event(lineOut) + } + + mod.lineCountDisplay.innerHTML = currentLine.toString() + } + + + /* + UI helpers + */ + function make_text_input(div, name, size) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + var input = document.createElement('input') + input.type = 'text' + input.size = size + div.appendChild(input) + + return input + } + + function makeTextArea(div, name, width, height) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + div.appendChild(document.createElement('br')) + var textArea = document.createElement('textarea') + textArea.setAttribute('cols', width) + textArea.setAttribute('rows', height) + textArea.type = 'textarea' + div.appendChild(textArea) + + return textArea + } + + function make_button_input(div, text) { + div.appendChild(document.createElement('br')) + var button = document.createElement('button') + button.style.padding = mods.ui.padding + button.style.margin = 1 + button.appendChild(document.createTextNode(text)) + div.appendChild(button) + + return button + } + + function make_checkbox_input(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var checkbox = document.createElement('input') + checkbox.type = 'checkbox' + div.appendChild(checkbox) + + return checkbox + } + + function make_text_display(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var span = document.createElement('span') + span.innerHTML = '' + div.appendChild(span) + + return span + } + + + // + // return values + // + return ({ + mod: mod, + name: name, + init: init, + inputs: inputs, + outputs: outputs, + interface: interface + }) +}()) \ No newline at end of file diff --git a/modules/motion/textLineIn b/modules/motion/textLineIn new file mode 100644 index 0000000000000000000000000000000000000000..509f825e804c9823a07f2167cb9eedd9d89a5862 --- /dev/null +++ b/modules/motion/textLineIn @@ -0,0 +1,138 @@ +// +// generic line input +// +// Neil Gershenfeld and Jake Read +// (c) Massachusetts Institute of Technology 2018 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. +// +// closure +// +(function() { + // + // module globals + // + var mod = {} + // + // name + // + var name = 'line input' + // + // initialization + // + var init = function() { + mod.line_in.value = 'G0 X10.1 Y150 z10.2 F175' + } + // + // inputs + // + var inputs = { + line: { + type: 'string', + label: 'line through', + event: function(evt) { + mod.line_in.value = evt.detail + sendLine() + } + } + } + // + // outputs + // + var outputs = { + line: { + type: 'string', + label: 'line', + event: function(str) { + mods.output(mod, 'line', str) + } + } + } + // + // interface + // + var interface = function(div) { + mod.div = div + // + // inputs + // + mod.title_text = make_text_display(div, 'hit enter to send') + mod.line_in = make_text_input(div, 'line', 24) + mod.line_in.addEventListener('keydown', function(evt){ + if(evt.keyCode == 13){ + sendLine() + //mod.line_in.value = '' + } + }) + } + + function sendLine(){ + var str = mod.line_in.value + outputs.line.event(str) + } + + + + + /* + UI helpers + */ + function make_text_input(div, name, size) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(name + ': ')) + var input = document.createElement('input') + input.type = 'text' + input.size = size + div.appendChild(input) + + return input + } + + function make_button_input(div, text) { + div.appendChild(document.createElement('br')) + var button = document.createElement('button') + button.style.padding = mods.ui.padding + button.style.margin = 1 + button.appendChild(document.createTextNode(text)) + div.appendChild(button) + + return button + } + + function make_checkbox_input(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var checkbox = document.createElement('input') + checkbox.type = 'checkbox' + div.appendChild(checkbox) + + return checkbox + } + + function make_text_display(div, prefix) { + div.appendChild(document.createElement('br')) + div.appendChild(document.createTextNode(prefix + ': ')) + var span = document.createElement('span') + span.innerHTML = '' + div.appendChild(span) + + return span + } + + + // + // return values + // + return ({ + mod: mod, + name: name, + init: init, + inputs: inputs, + outputs: outputs, + interface: interface + }) +}()) \ No newline at end of file diff --git a/planner-pre b/planner-pre new file mode 100644 index 0000000000000000000000000000000000000000..9f34ae399b5bc52d33c2b296ceca70c904661413 --- /dev/null +++ b/planner-pre @@ -0,0 +1 @@ +{"modules":{"0.9219808769257131":{"definition":"//\r\n// converts toolpath objects into segments for accel planning\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n//\r\n// This work may be reproduced, modified, distributed, performed, and\r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is\r\n// provided as is; no warranty is provided, and users accept all\r\n// liability.\r\n\r\n\r\n/*\r\neats objects like\r\nvar move = {\r\n position: {\r\n X: float\r\n Y: float\r\n Z: float\r\n A: float\r\n }\r\n rate: float\r\n}\r\n\r\noutputs:\r\nmotors\r\n'planner block consumed' event\r\n\r\n\r\n*/\r\n\r\n//\r\n// closure\r\n//\r\n(function() {\r\n //\r\n // module globals\r\n //\r\n var mod = {}\r\n //\r\n // name\r\n //\r\n var name = 'motion planner'\r\n //\r\n // initialization\r\n //\r\n var init = function() {\r\n mod.accelIn.value = '25'\r\n mod.junctionDeviationIn.value = '0.5'\r\n mod.minSpeedIn.value = '1'\r\n\r\n mod.axisIdentifiers.value = 'X,Y,Z'\r\n axisIds = mod.axisIdentifiers.value.split(',')\r\n for (var i = 0; i < axisIds.length; i++) {\r\n currentPosition[i] = 0\r\n }\r\n\r\n mod.netWindowIn.value = '5'\r\n packetWindowSize = parseInt(mod.netWindowIn.value)\r\n }\r\n //\r\n // inputs\r\n //\r\n var inputs = {\r\n newMove: {\r\n type: 'object',\r\n label: 'move instruction',\r\n event: function(evt) {\r\n addToQueue(JSON.parse(JSON.stringify(evt.detail)))\r\n }\r\n },\r\n acknowledgement: {\r\n type: 'event',\r\n label: 'acknowledgement',\r\n event: function(evt) {\r\n // have to ID moves because some are zero length ?\r\n acknowledgement(evt.detail)\r\n }\r\n },\r\n sequenceControl: {\r\n type: 'integer',\r\n label: 'sequence control',\r\n event: function(evt){\r\n if(evt.detail == 1){\r\n checkNetwork()\r\n }\r\n }\r\n }\r\n }\r\n //\r\n // outputs\r\n //\r\n var outputs = {\r\n plannedMove: {\r\n type: 'object',\r\n label: 'move instruction',\r\n event: function(block) {\r\n var deref = JSON.parse(JSON.stringify(block))\r\n mods.output(mod, 'plannedMove', deref)\r\n }\r\n }\r\n }\r\n //\r\n // interface\r\n //\r\n var interface = function(div) {\r\n mod.div = div\r\n //\r\n // inputs\r\n //\r\n // settings\r\n make_text_display(div, 'machine config')\r\n mod.axisIdentifiers = make_text_input(div, 'axis identifiers', 12)\r\n mod.axisIdentifiers.addEventListener('change', function() {\r\n axisIds = mod.axisIdentifiers.value.split(',')\r\n })\r\n div.appendChild(document.createElement('br'))\r\n\r\n make_text_display(div, 'planner settings')\r\n mod.accelIn = make_text_input(div, 'acceleration, units/s/s', 12)\r\n mod.junctionDeviationIn = make_text_input(div, 'junction deviation, units', 12)\r\n mod.minSpeedIn = make_text_input(div, 'minimum junction speed, units/s/s', 12)\r\n div.appendChild(document.createElement('br'))\r\n\r\n make_text_display(div, 'network settings')\r\n mod.netWindowIn = make_text_input(div, 'network window size', 12)\r\n mod.netWindowIn.addEventListener('change', function(){\r\n packetWindowSize = parseInt(mod.netWindowIn.value)\r\n })\r\n mod.resetNetButton = make_button_input(div, 'reset network')\r\n mod.resetNetButton.addEventListener('click', function(){\r\n packetsInNetwork = 0\r\n })\r\n }\r\n\r\n // planner state and moves\r\n var axisIds = []\r\n var moveQue = [] // array of moves \r\n var currentPosition = []\r\n\r\n /*\r\n var segment = {\r\n p1: p1,\r\n p2: p2,\r\n cruise: cruise,\r\n entry: entry,\r\n exit: exit,\r\n }\r\n */\r\n\r\n function addToQueue(obj) {\r\n // add to the move queue \r\n var p1 = []\r\n var p2 = []\r\n if (moveQue.length == 0) {\r\n p1 = currentPosition\r\n } else {\r\n p1 = moveQue[moveQue.length - 1].p2\r\n }\r\n\r\n // find all letter-based and match to std array \r\n var keyset = new Array(axisIds.length)\r\n keyset.fill(0)\r\n\r\n for (key in obj.position) {\r\n for (axisId in axisIds) {\r\n if (key == axisIds[axisId]) {\r\n p2[axisId] = obj.position[key]\r\n keyset[axisId] = 1\r\n } else if (keyset[axisId] != 1) {\r\n p2[axisId] = p1[axisId]\r\n } else {\r\n // nothing\r\n }\r\n }\r\n }\r\n\r\n var cruise = obj.speed\r\n\r\n var newMove = {\r\n p1: p1,\r\n p2: p2,\r\n cruise: cruise,\r\n entry: 0,\r\n exit: 0\r\n }\r\n\r\n moveQue.push(newMove)\r\n\r\n // and then check to see if we are ready to pass anything to the motors\r\n runQue()\r\n }\r\n\r\n\r\n // network state\r\n var packetsInNetwork = 0\r\n var packetWindowSize = 0\r\n\r\n function acknowledge(obj) {\r\n // check returning IDs? keep a counter of awaited moves?\r\n\r\n // and then see if we need to send out more data\r\n checkNetwork()\r\n }\r\n\r\n function checkNetwork() {\r\n // see windowed state and push more data out if need be\r\n while(packetWindowSize > packetsInNetwork && moveQue.length != 0){\r\n sendMove()\r\n }\r\n }\r\n\r\n function sendMove(){\r\n outputs.plannedMove.event(moveQue.shift())\r\n packetsInNetwork ++\r\n }\r\n\r\n function cartesianDistance(p1, p2) {\r\n // takes p1, p2 to be arrays of same length\r\n // computes cartesian distance\r\n var sum = 0\r\n for (var i = 0; i < p1.length; i++) {\r\n sum += Math.pow((p1[i] - p2[i]), 2)\r\n }\r\n return Math.sqrt(sum)\r\n }\r\n\r\n function cartesianLength(v) {\r\n // length of vector\r\n var sum = 0\r\n for (var i = 0; i < v.length; i++) {\r\n sum += Math.pow(v[i], 2)\r\n }\r\n return Math.sqrt(sum)\r\n }\r\n\r\n function addMatrix(a, b, c) {\r\n // c = a + b\r\n a.forEach(function(item, index) {\r\n c[index] = b[index] + a[index]\r\n })\r\n }\r\n\r\n function subtractMatrix(a, b, c) {\r\n // c = a - b\r\n b.forEach(function(item, index) {\r\n c[index] = a[index] - b[index]\r\n })\r\n }\r\n\r\n function multiplyMatrix(a, scalar, b) {\r\n // b = a * scalar\r\n a.forEach(function(item, index) {\r\n b[index] = a[index] * scalar\r\n })\r\n }\r\n\r\n function multiply2dMatrix(a, scalar, b) {\r\n // b = a * scalar\r\n for (var i = 0; i < a.length; i++) {\r\n for (var j = 0; j < a[i].length; j++) {\r\n b[i][j] = a[i][j] * scalar;\r\n }\r\n }\r\n }\r\n\r\n function divideMatrix(a, scalar, b) {\r\n // b = a / scalar\r\n for (var i = 0; i < a.length; i++) {\r\n b[i] = a[i] / scalar\r\n }\r\n }\r\n\r\n function unitVector(p1, p2) {\r\n // returns new array, is unit vector of p2-p1\r\n var unit = new Array()\r\n subtractMatrix(p2, p1, unit)\r\n var length = cartesianLength(unit)\r\n divideMatrix(unit, length, unit)\r\n\r\n return unit\r\n }\r\n\r\n function dotProduct(a, b) {\r\n // returns a dot b\r\n var sum = 0;\r\n for (var i = 0; i < a.length; i++) {\r\n sum += a[i] * b[i]\r\n }\r\n\r\n return sum\r\n }\r\n\r\n function toFixedMatrix(a, digits) {\r\n var rounded = new Array()\r\n for (var i = 0; i < a.length; i++) {\r\n rounded[i] = a[i].toFixed(digits)\r\n }\r\n\r\n return rounded\r\n }\r\n\r\n //\r\n // local functions\r\n //\r\n function runQue() {\r\n // converting from mm/s or dpi (pixel units) to mm based units\r\n // https://github.com/grbl/grbl/blob/master/grbl/planner.c\r\n // https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/\r\n /*\r\n first we walk the queue:\r\n going backwards, end at 0 speed exit\r\n - find junction speed (junction deviation) between this and previous block\r\n - this is entry speed, calculate trapezoid to exit speed\r\n next block\r\n - exit speed is recently calculated entry speed\r\n - do junction deviation, this is entry speed\r\n - calculate trapezoid\r\n .. why is this simpler? find entry and exit speed of each block,\r\n find accel limits per axis, do trapezoid with that accel\r\n\r\n */\r\n\r\n var jdsize = parseFloat(mod.junctionDeviationIn.value)\r\n var accel = parseFloat(mod.accelIn.value)\r\n // not actually using this at the moment!\r\n var jdmin = parseFloat(mod.minSpeedIn.value)\r\n\r\n moveQue[moveQue.length - 1].exit = 0 // trailing edge always full stop\r\n\r\n for (var i = moveQue.length - 1; i > 0; i--) {\r\n // reverse pass\r\n // find junction deviation\r\n /*\r\n - really, could only do this once per segment when a new one is added\r\n - unitize entry and exit vectors\r\n - find cos(theta) = Ventry dot Vexit / (|Ventry| * |Vexit|) -> this is (1*1 bc unit)\r\n - find sin(theta/2) = sqrt((1-cos(theta))/2)\r\n - find r = j(sin(theta/2)/(1-sin(theta/2)))\r\n - find Fj = sqrt(Ac*r)\r\n - junction speed is min(Fj, min(entry,exit))\r\n */\r\n\r\n var v_entry = unitVector(moveQue[i - 1].p1, moveQue[i - 1].p2)\r\n var v_exit = unitVector(moveQue[i].p1, moveQue[i].p2)\r\n //console.log('unit entry, unit exit', toFixedMatrix(v_entry, 3), toFixedMatrix(v_exit, 3))\r\n var cos_theta = dotProduct(v_entry, v_exit) // dot product / mag * mag where mags are 1 each bc unit\r\n // catch corner cases (get it? - actually they are very straight cases, or very turnaround cases)\r\n if (cos_theta < -0.9999999999999) {\r\n cos_theta = -0.9999999999999\r\n } else if (cos_theta > 0.9999999999999) {\r\n cos_theta = 0.9999999999999\r\n }\r\n //console.log('cos_theta', cos_theta, Math.acos(cos_theta) * (180 / Math.PI))\r\n var sin_theta_overtwo = Math.sqrt((1 - cos_theta) / 2)\r\n //console.log('sin_theta_overtwo', sin_theta_overtwo)\r\n var radius = jdsize * ((1 - sin_theta_overtwo) / sin_theta_overtwo)\r\n //console.log('radius', radius)\r\n // feed at the junction, according to supposed acceleration through the junction\r\n var fj = Math.sqrt(accel * radius)\r\n //console.log('fj', fj)\r\n\r\n // but don't go through the junction faster than we're cruising\r\n var feed_junction = Math.min(fj, moveQue[i].cruise, moveQue[i - 1].cruise)\r\n //console.log('feed_junction', feed_junction)\r\n\r\n // ok we have the maximum feed at the preceeding junction\r\n // now: find the maximum entry speeds as if we spent the whole block decelerating\r\n\r\n // size of segment\r\n var distance = cartesianDistance(moveQue[i].p1, moveQue[i].p2)\r\n //console.log('distance', distance)\r\n var max_entry_speed = Math.sqrt(moveQue[i].exit * moveQue[i].exit + 2 * distance * accel)\r\n //console.log('max_entry_speed', max_entry_speed)\r\n var entry_speed = Math.min(max_entry_speed, feed_junction)\r\n //console.log('entry_speed', entry_speed)\r\n moveQue[i].entry = entry_speed\r\n moveQue[i - 1].exit = entry_speed\r\n //console.log('segment:', moveQue[i])\r\n moveQue[i].accel = accel\r\n moveQue[i].distance = distance\r\n }\r\n\r\n // bad bad not very good implementation to start:\r\n moveQue[0].entry = 0\r\n moveQue[0].accel = accel\r\n moveQue[0].distance = cartesianDistance(moveQue[0].p1, moveQue[0].p2)\r\n\r\n // forward pass to make sure we can accelerate to set exit speed in length\r\n for (var i = 0; i < moveQue.length - 1; i++) {\r\n var distance = moveQue[i].distance\r\n var max_exit_speed = Math.sqrt(moveQue[i].entry * moveQue[i].entry + 2 * distance * accel)\r\n\r\n if (max_exit_speed < moveQue[i + 1].entry_speed) {\r\n moveQue[i + 1].entry = max_exit_speed\r\n moveQue[i].exit = max_exit_speed\r\n }\r\n }\r\n\r\n console.log('segments in planner:', moveQue)\r\n\r\n }\r\n\r\n /*\r\n UI helpers\r\n */\r\n function make_text_input(div, name, size) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(name + ': '))\r\n var input = document.createElement('input')\r\n input.type = 'text'\r\n input.size = size\r\n div.appendChild(input)\r\n\r\n return input\r\n }\r\n\r\n function make_button_input(div, text) {\r\n div.appendChild(document.createElement('br'))\r\n var button = document.createElement('button')\r\n button.style.padding = mods.ui.padding\r\n button.style.margin = 1\r\n button.appendChild(document.createTextNode(text))\r\n div.appendChild(button)\r\n\r\n return button\r\n }\r\n\r\n function make_checkbox_input(div, prefix) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(prefix + ': '))\r\n var checkbox = document.createElement('input')\r\n checkbox.type = 'checkbox'\r\n div.appendChild(checkbox)\r\n\r\n return checkbox\r\n }\r\n\r\n function make_text_display(div, prefix) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(prefix + ': '))\r\n var span = document.createElement('span')\r\n span.innerHTML = ''\r\n div.appendChild(span)\r\n\r\n return span\r\n }\r\n\r\n //\r\n // return values\r\n //\r\n return ({\r\n mod: mod,\r\n name: name,\r\n init: init,\r\n inputs: inputs,\r\n outputs: outputs,\r\n interface: interface\r\n })\r\n}())","top":"355.9508040845012","left":"2085.245979577494","inputs":{},"outputs":{}},"0.4995077091472159":{"definition":"//\r\n// gets lines of gcode, turns into instructions for mods-machines\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n\r\n/*\r\nturns lines of text into objects for machine controller \r\n*/\r\n\r\n//\r\n// closure\r\n//\r\n(function() {\r\n //\r\n // module globals\r\n //\r\n var mod = {}\r\n //\r\n // name\r\n //\r\n var name = 'gcode parser'\r\n //\r\n // initialization\r\n //\r\n var init = function() {\r\n mod.g0SpeedIn.value = '100'\r\n mod.g1SpeedIn.value = '400'\r\n mod.codeMode.value = 'G0'\r\n }\r\n //\r\n // inputs\r\n //\r\n var inputs = {\r\n gcode: {\r\n type: 'string',\r\n label: 'gcode',\r\n event: function(evt) {\r\n parseGCode(evt.detail)\r\n }\r\n }\r\n }\r\n //\r\n // outputs\r\n //\r\n var outputs = {\r\n instruction: {\r\n type: 'object',\r\n label: 'instruction',\r\n event: function(obj) {\r\n mods.output(mod, 'instruction', obj)\r\n }\r\n }\r\n }\r\n //\r\n // interface\r\n //\r\n var interface = function(div) {\r\n mod.div = div\r\n //\r\n // inputs\r\n //\r\n // we're going to convert all of these DPIs to MMs because we live in the real world now\r\n mod.g0SpeedIn = make_text_input(div, 'G0 speed, gcode units', 12)\r\n mod.g1SpeedIn = make_text_input(div, 'G1 speed, gcode units', 12)\r\n mod.codeMode = make_text_input(div, 'Modality', 12)\r\n }\r\n\r\n function parseGCode(str) {\r\n // get letter-value pairs\r\n var keyvals = getKeyValues(str)\r\n // do modality\r\n // check this for no-g moves?\r\n if (keyvals.G == 0 | keyvals.G == 1) {\r\n mod.codeMode.value = 'G' + keyvals.G.toString()\r\n } else if (keyvals.M != null) {\r\n mod.codeMode.value = 'M' + keyvals.M.toString()\r\n }\r\n // do parse and object \r\n if (mod.codeMode.value == 'G0' | mod.codeMode.value == 'G1') {\r\n\r\n var output = {\r\n type: 'move',\r\n position: {},\r\n speed: 0\r\n }\r\n // loop to find position vals, check for feed update\r\n for (key in keyvals) {\r\n if (key.match('[A-CX-Z]')) {\r\n output.position[key] = keyvals[key]\r\n } else if (key.match('[F]')){\r\n if(mod.codeMode.value == 'G0'){\r\n // assert minimum speed \r\n mod.g0SpeedIn.value = Math.max(10, keyvals.F)\r\n } else {\r\n mod.g1SpeedIn.value = Math.max(10, keyvals.F)\r\n }\r\n }\r\n }\r\n\r\n if(mod.codeMode.value == 'G0'){\r\n output.speed = parseFloat(mod.g0SpeedIn.value)\r\n } else {\r\n output.speed = parseFloat(mod.g1SpeedIn.value)\r\n }\r\n\r\n outputs.instruction.event(output)\r\n } else if (mod.codeMode.value == 'M3'){\r\n var output = {\r\n type: 'spindle',\r\n speed: 0\r\n }\r\n if(keyvals.S != null){\r\n output.speed = keyvals.S\r\n outputs.instruction.event(output)\r\n } else {\r\n console.log('need S parameter on spindle instruction')\r\n }\r\n } else if (mod.codeMode.value == 'M5'){\r\n var output = {\r\n type: 'spindle',\r\n speed: 0\r\n }\r\n output.instruction.event(output)\r\n } else {\r\n console.log('gcode instruction not recognized')\r\n }\r\n }\r\n\r\n function getKeyValues(str) {\r\n var kv = {}\r\n for (var i = 0; i < str.length; i++) {\r\n if (str[i].match('[A-Za-z]')) { // regex to match upper case letters\r\n var lastIndex = str.indexOf(' ', i)\r\n if (lastIndex < 0) {\r\n lastIndex = str.length\r\n }\r\n var key = str[i].toUpperCase()\r\n kv[key] = parseFloat(str.slice(i + 1, lastIndex))\r\n }\r\n }\r\n return kv\r\n }\r\n\r\n\r\n /*\r\n UI helpers\r\n */\r\n function make_text_input(div, name, size) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(name + ': '))\r\n var input = document.createElement('input')\r\n input.type = 'text'\r\n input.size = size\r\n div.appendChild(input)\r\n\r\n return input\r\n }\r\n\r\n function make_button_input(div, text) {\r\n div.appendChild(document.createElement('br'))\r\n var button = document.createElement('button')\r\n button.style.padding = mods.ui.padding\r\n button.style.margin = 1\r\n button.appendChild(document.createTextNode(text))\r\n div.appendChild(button)\r\n\r\n return button\r\n }\r\n\r\n function make_checkbox_input(div, prefix) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(prefix + ': '))\r\n var checkbox = document.createElement('input')\r\n checkbox.type = 'checkbox'\r\n div.appendChild(checkbox)\r\n\r\n return checkbox\r\n }\r\n\r\n function make_text_display(div, prefix) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(prefix + ': '))\r\n var span = document.createElement('span')\r\n span.innerHTML = ''\r\n div.appendChild(span)\r\n\r\n return span\r\n }\r\n\r\n\r\n //\r\n // return values\r\n //\r\n return ({\r\n mod: mod,\r\n name: name,\r\n init: init,\r\n inputs: inputs,\r\n outputs: outputs,\r\n interface: interface\r\n })\r\n}())","top":"357.5346231758237","left":"1264.8556782008352","inputs":{},"outputs":{}},"0.4761625810991079":{"definition":"//\r\n// generic line input\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n //\r\n // module globals\r\n //\r\n var mod = {}\r\n //\r\n // name\r\n //\r\n var name = 'text lines input'\r\n //\r\n // initialization\r\n //\r\n var init = function() {\r\n mod.textAreaIn.value =\r\n \"G1 Z0. F120.\\n\\\r\nX3.744\\n\\\r\nX3.94 Y0.519\\n\\\r\nX4.127 Y0.576\\n\\\r\nX4.3 Y0.669\\n\\\r\nX4.452 Y0.793\\n\\\r\nX4.576 Y0.944\\n\\\r\nX4.668 Y1.117\\n\\\r\nX4.725 Y1.305\\n\\\r\nX4.744 Y1.5\\n\\\r\nY1.588\\n\\\r\nX4.725 Y1.783\\n\\\r\nX4.668 Y1.971\\n\\\r\nX4.576 Y2.144\\n\\\r\nX4.452 Y2.295\\n\\\r\nX4.3 Y2.42\\n\\\r\nX4.127 Y2.512\\n\\\r\nX3.94 Y2.569\\n\\\r\nX3.744 Y2.588\\n\\\r\nX-8.335\\n\\\r\nX-8.963 Y2.605\\n\\\r\nX-9.589 Y2.654\\n\\\r\nX-10.212 Y2.736\\n\\\r\nX-10.83 Y2.85\\n\\\r\nX-11.441 Y2.997\\n\\\r\nX-13.744 Y3.614\\n\\\r\nX-13.915 Y3.677\\n\\\r\nX-14.072 Y3.77\\n\\\r\nX-14.209 Y3.89\\n\\\r\nX-14.322 Y4.033\\n\\\r\nX-14.408 Y4.194\\n\\\r\nX-14.462 Y4.368\\n\\\r\nX-14.485 Y4.548\\n\\\r\nX-14.474 Y4.73\\n\\\r\nX-14.43 Y4.907\\n\\\r\nX-14.16 Y5.627\\n\\\r\nX-13.854 Y6.332\\n\\\r\nX-13.512 Y7.02\\n\\\r\nX-13.134 Y7.69\\n\\\r\nX-12.724 Y8.339\\n\\\r\nX-12.28 Y8.967\\n\\\r\nX-11.805 Y9.571\\n\\\r\nX-11.3 Y10.15\\n\\\r\nX-10.765 Y10.703\\n\\\r\nX-10.203 Y11.227\\n\\\r\nX-9.615 Y11.722\\n\\\r\nX-9.003 Y12.186\\n\\\r\nX-8.367 Y12.618\\n\\\r\nX-7.71 Y13.017\\n\\\r\nX-7.033 Y13.381\\n\\\r\nX-6.339 Y13.711\\n\\\r\nX-5.629 Y14.005\\n\\\r\nX-4.904 Y14.261\\n\\\r\nX-4.168 Y14.481\\n\\\r\nX-3.421 Y14.662\\n\\\r\nX-2.666 Y14.805\\n\\\r\nX-1.904 Y14.909\\n\\\r\nX-1.138 Y14.974\\n\\\r\nX-0.37 Y15.\\n\\\r\nX0.398 Y14.986\\n\\\r\nX1.165 Y14.933\\n\\\r\nX1.928 Y14.84\\n\\\r\nX2.685 Y14.709\\n\\\r\nX3.435 Y14.539\\n\\\r\nX4.175 Y14.331\\n\\\r\nX4.903 Y14.085\\n\\\r\nX5.618 Y13.802\\n\\\r\nX6.317 Y13.483\\n\\\r\nX6.999 Y13.129\\n\\\r\nX7.662 Y12.74\\n\\\r\nX8.304 Y12.318\\n\\\r\nX8.924 Y11.863\\n\\\r\nX9.519 Y11.378\\n\\\r\nX10.089 Y10.862\\n\\\r\nX10.632 Y10.318\\n\\\r\nX11.146 Y9.747\\n\\\r\nX11.631 Y9.15\\n\\\r\nX12.084 Y8.529\\n\\\r\nX12.504 Y7.886\\n\\\r\nX12.892 Y7.222\\n\\\r\nX13.244 Y6.539\\n\\\r\nX13.561 Y5.839\\n\\\r\nX13.842 Y5.124\\n\\\r\nX14.086 Y4.395\\n\\\r\nX14.292 Y3.654\\n\\\r\nX14.461 Y2.904\\n\\\r\nX14.59 Y2.147\\n\\\r\nX14.681 Y1.384\\n\\\r\nX14.732 Y0.617\\n\\\r\nX14.744 Y-0.152\\n\\\r\nX14.716 Y-0.92\\n\\\r\nX14.649 Y-1.686\\n\\\r\nX14.543 Y-2.447\\n\\\r\nX14.399 Y-3.202\\n\\\r\nX14.215 Y-3.948\\n\\\r\nX13.994 Y-4.684\\n\\\r\nX13.736 Y-5.408\\n\\\r\nX13.44 Y-6.117\\n\\\r\nX13.109 Y-6.811\\n\\\r\nX12.743 Y-7.487\\n\\\r\nX12.342 Y-8.143\\n\\\r\nX11.908 Y-8.777\\n\\\r\nX11.443 Y-9.389\\n\\\r\nX10.947 Y-9.976\\n\\\r\nX10.421 Y-10.536\\n\\\r\nX9.867 Y-11.069\\n\\\r\nX9.287 Y-11.573\\n\\\r\nX8.682 Y-12.047\\n\\\r\nX8.053 Y-12.489\\n\\\r\nX7.402 Y-12.898\\n\\\r\nX6.732 Y-13.273\\n\\\r\nX6.043 Y-13.614\\n\\\r\nX5.337 Y-13.918\\n\\\r\nX4.617 Y-14.187\\n\\\r\nX3.884 Y-14.418\\n\\\r\nX3.14 Y-14.611\\n\\\r\nX2.387 Y-14.765\\n\\\r\nX1.627 Y-14.881\\n\\\r\nX0.862 Y-14.958\\n\\\r\nX0.095 Y-14.996\\n\\\r\nX-0.674 Y-14.994\\n\\\r\nX-1.441 Y-14.953\\n\\\r\nX-2.206 Y-14.873\\n\\\r\nX-2.965 Y-14.753\\n\\\r\nX-3.717 Y-14.595\\n\\\r\nX-4.46 Y-14.399\\n\\\r\nX-5.192 Y-14.164\\n\\\r\nX-5.911 Y-13.893\\n\\\r\nX-6.615 Y-13.585\\n\\\r\nX-7.303 Y-13.241\\n\\\r\nX-7.972 Y-12.863\\n\\\r\nX-8.621 Y-12.451\\n\\\r\nX-9.247 Y-12.006\\n\\\r\nX-9.851 Y-11.53\\n\\\r\nX-10.429 Y-11.023\\n\\\r\nX-10.98 Y-10.488\\n\\\r\nX-11.503 Y-9.925\\n\\\r\nX-11.997 Y-9.335\\n\\\r\nX-12.459 Y-8.722\\n\\\r\nX-12.89 Y-8.085\\n\\\r\nX-13.288 Y-7.427\\n\\\r\nX-13.651 Y-6.75\\n\\\r\nX-13.979 Y-6.055\\n\\\r\nX-14.271 Y-5.344\\n\\\r\nX-14.527 Y-4.619\\n\\\r\nX-14.744 Y-3.882\\n\\\r\nX-9.915 Y-2.588\\n\\\r\nX4.744\\n\\\r\nY-0.5\\n\\\r\nX-2.256\\n\\\r\nY0.5\\n\\\r\nZ7.\\n\\\r\nG0 Z18.\"\r\n\r\n linesToArray()\r\n\r\n mod.lineCountDisplay.innerHTML = '0'\r\n\r\n }\r\n //\r\n // inputs\r\n //\r\n var inputs = {\r\n lineRequest: {\r\n type: 'number',\r\n label: 'line request',\r\n event: function(evt) {\r\n sendLine(evt.detail)\r\n }\r\n }\r\n }\r\n //\r\n // outputs\r\n //\r\n var outputs = {\r\n line: {\r\n type: 'string',\r\n label: 'line',\r\n event: function(str) {\r\n mods.output(mod, 'line', str)\r\n }\r\n }\r\n }\r\n //\r\n // interface\r\n //\r\n var interface = function(div) {\r\n mod.div = div\r\n //\r\n // inputs\r\n //\r\n mod.lineCountDisplay = make_text_display(div, 'current line')\r\n mod.resetCurrentLine = make_button_input(div, 'reset lines')\r\n mod.resetCurrentLine.addEventListener('click', function(){\r\n mod.lineCountDisplay.innerHTML = '0'\r\n currentLine = 0\r\n })\r\n mod.textAreaIn = makeTextArea(div, 'lines', 24, 48)\r\n }\r\n\r\n var currentLine = 0\r\n var linesArray = []\r\n\r\n function linesToArray() {\r\n linesArray = mod.textAreaIn.value.split('\\n')\r\n }\r\n\r\n function sendLine() {\r\n var lineOut = linesArray[currentLine]\r\n currentLine++\r\n if (currentLine > linesArray.length) {\r\n currentLine = linesArray.length\r\n } else {\r\n outputs.line.event(lineOut)\r\n }\r\n\r\n mod.lineCountDisplay.innerHTML = currentLine.toString()\r\n }\r\n\r\n\r\n /*\r\n UI helpers\r\n */\r\n function make_text_input(div, name, size) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(name + ': '))\r\n var input = document.createElement('input')\r\n input.type = 'text'\r\n input.size = size\r\n div.appendChild(input)\r\n\r\n return input\r\n }\r\n\r\n function makeTextArea(div, name, width, height) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(name + ': '))\r\n div.appendChild(document.createElement('br'))\r\n var textArea = document.createElement('textarea')\r\n textArea.setAttribute('cols', width)\r\n textArea.setAttribute('rows', height)\r\n textArea.type = 'textarea'\r\n div.appendChild(textArea)\r\n\r\n return textArea\r\n }\r\n\r\n function make_button_input(div, text) {\r\n div.appendChild(document.createElement('br'))\r\n var button = document.createElement('button')\r\n button.style.padding = mods.ui.padding\r\n button.style.margin = 1\r\n button.appendChild(document.createTextNode(text))\r\n div.appendChild(button)\r\n\r\n return button\r\n }\r\n\r\n function make_checkbox_input(div, prefix) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(prefix + ': '))\r\n var checkbox = document.createElement('input')\r\n checkbox.type = 'checkbox'\r\n div.appendChild(checkbox)\r\n\r\n return checkbox\r\n }\r\n\r\n function make_text_display(div, prefix) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(prefix + ': '))\r\n var span = document.createElement('span')\r\n span.innerHTML = ''\r\n div.appendChild(span)\r\n\r\n return span\r\n }\r\n\r\n\r\n //\r\n // return values\r\n //\r\n return ({\r\n mod: mod,\r\n name: name,\r\n init: init,\r\n inputs: inputs,\r\n outputs: outputs,\r\n interface: interface\r\n })\r\n}())","top":"470.53462317582375","left":"680.508743643805","inputs":{},"outputs":{}},"0.7866365696859523":{"definition":"//\r\n// generic line input\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function() {\r\n //\r\n // module globals\r\n //\r\n var mod = {}\r\n //\r\n // name\r\n //\r\n var name = 'line input'\r\n //\r\n // initialization\r\n //\r\n var init = function() {\r\n mod.line_in.value = 'G0 X10.1 Y150 z10.2 F175'\r\n }\r\n //\r\n // inputs\r\n //\r\n var inputs = {\r\n line: {\r\n type: 'string',\r\n label: 'line through',\r\n event: function(evt) {\r\n mod.line_in.value = evt.detail\r\n sendLine()\r\n }\r\n }\r\n }\r\n //\r\n // outputs\r\n //\r\n var outputs = {\r\n line: {\r\n type: 'string',\r\n label: 'line',\r\n event: function(str) {\r\n mods.output(mod, 'line', str)\r\n }\r\n }\r\n }\r\n //\r\n // interface\r\n //\r\n var interface = function(div) {\r\n mod.div = div\r\n //\r\n // inputs\r\n //\r\n mod.title_text = make_text_display(div, 'hit enter to send')\r\n mod.line_in = make_text_input(div, 'line', 24)\r\n mod.line_in.addEventListener('keydown', function(evt){\r\n if(evt.keyCode == 13){\r\n sendLine()\r\n //mod.line_in.value = ''\r\n }\r\n })\r\n }\r\n\r\n function sendLine(){\r\n var str = mod.line_in.value\r\n outputs.line.event(str)\r\n }\r\n\r\n\r\n\r\n\r\n /*\r\n UI helpers\r\n */\r\n function make_text_input(div, name, size) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(name + ': '))\r\n var input = document.createElement('input')\r\n input.type = 'text'\r\n input.size = size\r\n div.appendChild(input)\r\n\r\n return input\r\n }\r\n\r\n function make_button_input(div, text) {\r\n div.appendChild(document.createElement('br'))\r\n var button = document.createElement('button')\r\n button.style.padding = mods.ui.padding\r\n button.style.margin = 1\r\n button.appendChild(document.createTextNode(text))\r\n div.appendChild(button)\r\n\r\n return button\r\n }\r\n\r\n function make_checkbox_input(div, prefix) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(prefix + ': '))\r\n var checkbox = document.createElement('input')\r\n checkbox.type = 'checkbox'\r\n div.appendChild(checkbox)\r\n\r\n return checkbox\r\n }\r\n\r\n function make_text_display(div, prefix) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(prefix + ': '))\r\n var span = document.createElement('span')\r\n span.innerHTML = ''\r\n div.appendChild(span)\r\n\r\n return span\r\n }\r\n\r\n\r\n //\r\n // return values\r\n //\r\n return ({\r\n mod: mod,\r\n name: name,\r\n init: init,\r\n inputs: inputs,\r\n outputs: outputs,\r\n interface: interface\r\n })\r\n}())","top":"210.72640036793587","left":"676.3097502997231","inputs":{},"outputs":{}},"0.4859336275925409":{"definition":"//\r\n// gets lines of gcode, turns into instructions for mods-machines\r\n//\r\n// Neil Gershenfeld and Jake Read\r\n// (c) Massachusetts Institute of Technology 2018\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n\r\n/*\r\nstart / stop machine on given path, \r\nmanually turn spindle on / off etc\r\ndishes gcodes -> planner, spindle codes -> spindle \r\n*/\r\n\r\n//\r\n// closure\r\n//\r\n(function() {\r\n //\r\n // module globals\r\n //\r\n var mod = {}\r\n //\r\n // name\r\n //\r\n var name = 'machine controller'\r\n //\r\n // initialization\r\n //\r\n var init = function() {\r\n mod.jogStepSizeIn.value = '10'\r\n mod.jogSpeedIn.value = '100'\r\n }\r\n //\r\n // inputs\r\n //\r\n var inputs = {\r\n lineComplete: {\r\n type: 'event',\r\n label: 'line complete',\r\n event: function(evt) {\r\n onLineComplete()\r\n }\r\n }\r\n }\r\n //\r\n // outputs\r\n //\r\n var outputs = {\r\n singleInstruction: {\r\n type: 'object',\r\n label: 'instruction',\r\n event: function(str) {\r\n mods.output(mod, 'singleInstruction', str)\r\n }\r\n },\r\n lineAdvance: {\r\n type: 'event',\r\n label: 'line advance',\r\n event: function() {\r\n mods.output(mod, 'lineAdvance', true)\r\n }\r\n },\r\n sequenceControl: {\r\n type: 'integer',\r\n label: 'sequence control',\r\n event: function(int){\r\n mods.output(mod, 'sequenceControl', int)\r\n }\r\n }\r\n }\r\n //\r\n // interface\r\n //\r\n var interface = function(div) {\r\n mod.div = div\r\n //\r\n // inputs\r\n //\r\n\r\n // control buttons\r\n\r\n mod.jogStepSizeIn = make_text_input(div, 'jog increment size', 24)\r\n mod.jogSpeedIn = make_text_input(div, 'jog speed', 24)\r\n\r\n mod.jogXPButton = make_button_input(div, 'x+')\r\n mod.jogXPButton.addEventListener('click', function(evt) {\r\n jog('X', parseFloat(mod.jogStepSizeIn.value))\r\n })\r\n\r\n mod.jogXMButton = make_button_input(div, 'x-')\r\n mod.jogXMButton.addEventListener('click', function(evt) {\r\n jog('X', -parseFloat(mod.jogStepSizeIn.value))\r\n })\r\n\r\n mod.jogYPButton = make_button_input(div, 'y+')\r\n mod.jogYPButton.addEventListener('click', function(evt) {\r\n jog('Y', parseFloat(mod.jogStepSizeIn.value))\r\n })\r\n\r\n mod.jogYMButton = make_button_input(div, 'y-')\r\n mod.jogYMButton.addEventListener('click', function(evt) {\r\n jog('Y', -parseFloat(mod.jogStepSizeIn.value))\r\n })\r\n\r\n // sequence begin, stop \r\n\r\n mod.startSequenceButton = make_button_input(div, 'start sequence')\r\n mod.startSequenceButton.addEventListener('click', function(evt) {\r\n startSequence(12)\r\n })\r\n\r\n mod.pauseSequenceButton = make_button_input(div, 'pause sequence')\r\n mod.pauseSequenceButton.addEventListener('click', function(evt){\r\n pauseSequence()\r\n })\r\n }\r\n\r\n function startSequence(windowsize) {\r\n for(var i = 0; i < windowsize; i ++){\r\n outputs.lineAdvance.event()\r\n }\r\n outputs.sequenceControl.event(1)\r\n }\r\n\r\n function pauseSequence(){\r\n // pause !\r\n }\r\n\r\n function onLineComplete() {\r\n // track window size\r\n }\r\n\r\n function jog(key, val) {\r\n\r\n }\r\n\r\n\r\n /*\r\n UI helpers\r\n */\r\n function make_text_input(div, name, size) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(name + ': '))\r\n var input = document.createElement('input')\r\n input.type = 'text'\r\n input.size = size\r\n div.appendChild(input)\r\n\r\n return input\r\n }\r\n\r\n function make_button_input(div, text) {\r\n div.appendChild(document.createElement('br'))\r\n var button = document.createElement('button')\r\n button.style.padding = mods.ui.padding\r\n button.style.margin = 1\r\n button.appendChild(document.createTextNode(text))\r\n div.appendChild(button)\r\n\r\n return button\r\n }\r\n\r\n function make_checkbox_input(div, prefix) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(prefix + ': '))\r\n var checkbox = document.createElement('input')\r\n checkbox.type = 'checkbox'\r\n div.appendChild(checkbox)\r\n\r\n return checkbox\r\n }\r\n\r\n function make_text_display(div, prefix) {\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode(prefix + ': '))\r\n var span = document.createElement('span')\r\n span.innerHTML = ''\r\n div.appendChild(span)\r\n\r\n return span\r\n }\r\n\r\n\r\n //\r\n // return values\r\n //\r\n return ({\r\n mod: mod,\r\n name: name,\r\n init: init,\r\n inputs: inputs,\r\n outputs: outputs,\r\n interface: interface\r\n })\r\n}())","top":"303.74388765554596","left":"84.61481656951486","inputs":{},"outputs":{}}},"links":["{\"source\":\"{\\\"id\\\":\\\"0.4761625810991079\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"line\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4995077091472159\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"gcode\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.7866365696859523\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"line\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4995077091472159\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"gcode\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.4995077091472159\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"instruction\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.9219808769257131\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"newMove\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.4859336275925409\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"singleInstruction\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.9219808769257131\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"newMove\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.4859336275925409\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"sequenceControl\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.9219808769257131\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"sequenceControl\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.4859336275925409\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"lineAdvance\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.4761625810991079\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"lineRequest\\\"}\"}"]} \ No newline at end of file