[
  {
    "path": "README.md",
    "content": "# Smart Stepper (also known as the nano zero stepper)\nFirmware to turn a stepper motor into servo motor: see http://misfittech.net for hardware! \n\nIf you have a MKS Servo42, this firmware is not fully tested. MKS has taken this firmware but has not provided source back and hardware designs back to the community. Test submissions are appreciated. __Test at you own RISK!__\n\nIf you want to support the work on the firmware and hardware consider buying hardware from www.misfittech.net or buying me a beer using the donation button. \n\n[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=4JAEK4G24W2U4)\n\n# How to Install \n[Hardware install and manual](https://github.com/Misfittech/nano_stepper/raw/master/documentation/Smart%20Stepper%20Manual.pdf)\n\n[Arduino install](http://misfittech.net/blog/arduino-package-install/) for building firmware\n\n[Further Details and to purchase Hardware](http://misfittech.net/smart-steppers/)\n\n# Google groups forum\n[Google groups forum](https://groups.google.com/forum/#!forum/smart-stepper)\n\n\n# Command List\n\n## Smart Stepper Command Line Interface\nThe smart stepper uses a command line interface where the prompt is “:>” \n\n### help \nThe help command will return a list of commands that the smart stepper supports. \n\n### getcal\nThis command will print out the 200 point calibration table.  This is useful if you are doing firmware development and do not want to calibrate each time you update firmware.  You can take this table and copy it into the nonvolatile.cpp file as shown below\n\n### calibrate\nThis will run a 200 point calibration of the encoder. \n\n### testcal \nThis will test the calibration and report the maximum error in degrees. \n\n### microsteps \nThis command gets/sets the number of microsteps the smart stepper will use for the step command and the step pin.  The number of microsteps does not affect the resolution of the controller but rather how fine you can set the position. \n\n### step\nThis will move the motor one step clockwise, the step size is based on the current microstep setting.  To move the motor counterclockwise use “step 1”. To move the motor clockwise 16 steps used “step 0 16” to move motor counterclockwise 16 steps use “step 1 16”\n\n### feedback \nThis commands disable/enables feedback control loop. \nThe plan is to discountinue this command in the future and use the “controlmode” command to put controller in open or one of the many closed loop operational modes. \n\n### readpos\nReads the current motor position and reports it as degrees.\n\n### encoderdiag\nThis command will read and report the AS5047D internal registers for diagnostic purposes. \n\n### spid\nThis command sets the Kp, Ki, and Kd terms for the simple positional PID controller. \n\n### ppid\nThis command sets the Kp, Ki, and Kd terms for the positional PID controller. \n\n### vpid\nThis command sets the Kp, Ki, and Kd terms for the velocity PID controller. \n\n### velocity \nThis sets the velocity to rotate motor when unit is configured for velocity PID mode of operation. \n\n### boot\nThis command will put the microprocessor in the boot loader mode.  Alternatively this can be done by double pressing the reset button. \n\n### factoryreset \nThis erases the calibration and other system and motor parameters such that unit is reset to the factory ship state.  After this command the unit will need to be calibrated to the motor again. \n\n### dirpin\nThis command sets which direction the motor will rotate when direction pin is pulled high. The direction pin is only sampled when the step pin has a rising edge. \n‘dirpin 0’ will set the motor to rotate clockwise when dir pin is high\n‘dirpin 1’ will set the motor to rotate counter-clockwise when dir pin is high\n\n### errorlimit\nGets set the maximum number of degrees of error that is acceptable, any posistioning error about the error limit will assert the error pin, when error pin is set as error output. \nFor example:\n~~~~\n:>errorlimit 1.8 \n~~~~\nWill set the error limit to 1.8 degrees. \n\n### ctrlmode\nGets/Sets the feedback controller mode of operation. The command takes an integer from 0 through 4 to set the control mode per table below:\n* Controller off - \t0  -- this is not currently used\n* Open-Loop - \t1  -- this is open loop with no feedback\n* Simple PID -   2  -- simple positional PID, which is factory default \n* Positional PID - 3 -- current based PID mode, requires tuning for your machine\n* Velocity PID - 4 -- velocity based PID, requires tuning for your machine and speed range\n\nIf you are unsure what you are doing leave unit in the Simple PID mode of operation. \n\n### maxcurrent\nThis sets the maximum current that will be pushed into the motor. To set the current for maximum of 2.0A you would use command “maxcurrent 2000” as the argument is in milliAmps. \n\n### holdcurrent\nFor the Simple Positional PID mode the minimal current (ie current with no positional error) is the hold current. You set this current based on the required holding torque you need for your application. The higher the hold current, the hotter and noisier the motor will be but also the larger the holding torque. \nFor the Positional PID mode the PID tuning params have to be set correctly such that the control loop will dynamically determine the holding torque. This tuning of the PID can be difficult, hence the simple PID mode will work most of the time out of the box by setting maximum current and holding current. \n\n### motorwiring\nThe firmware always uses a positive angle as a clockwise rotation. A stepper motor however could have wiring done with one coil reversed wired, which will cause motor to normally operate in opposite direction. The Smart Stepper firmware will detect the motor wiring direction, using the encoder, and the firmware will compensate for a reverse wired motor.  The reverse or forward wiring of a motor is detected on first power up after factory reset. If the wiring changes after that you can compensate using this command. \nHOWEVER  it is better to do a factory reset and recalibrate motor if wiring changes. \n\n### stepsperrotation\nThe Smart Stepper firmware will with first power on after factory reset detect the number of full steps per rotation for the stepper motor and store in flash memory. This command will read this parameter from flash and allow user to change this parameter if motor is changed.\nHOWEVER  it is better to do a factory reset and recalibrate motor if motorchanges. \n\n### move\nThe move command will request the motor to move to an absolute angle position.  Optionally the user can specify the rotational speed (RPMs) by which the move should happen. For example if the current motor position is at angle 0 and you issue ‘move 3600” the motor will turn 10 rotations clockwise to angle of 3600 degrees. If issue the ‘move 3600’ again nothing will happen as motor is already at angle 3600. \nIf motor is at angle 0 and user issues the command ‘move 3600 20’ then motor will move to 10 rotations clockwise to angle of 3600 at a rate of 20 RPMs. \n\n### stop\nIf user issues a move command that takes a long time and wants to stop the move before completion then user can issue the stop command command which will stop a move operation. \n\n### setzero\nThis command will take the current motor position and set it to absolute angle of  zero. Note that if you are in the middle move it will take the position at the time of the command and use it, thus it is recommend a move be stopped or wait for completion before issuing the setzero. \n\n### data\nThis command will toggle output of binary data.\n\n### looptime\nThis command will display the time it takes for a single processing loop to execute.\n\n### eepromerror\nThis command displays the motor error in degrees difference from the stored eeprom value at motor power up.\n\n### eepromloc\nDisplays the location of the shaft angle in degrees at motor power on.\n\n### eepromwrite\nForces the eeprom to store all current values in ram to eeprom.\n\n### eepromsetloc\nForces the eeprom to write the current shaft angle overwriting the stored location from powerup.\n\n### setpos\nOverwrites the current shaft angle in the motion planner.\n\n### reboot\nForces the smart stepper to reboot\n\n### homecurrent\nIf using built in homing routine (command \"home\") this will specify the amount of current applied when motor is moving during homing operation when homepin is logic active.__EXPERIMENTAL USE WITH CAUTION__\n\n### homepin\nAllows setting of pin for current limited enable for homing. This triggers a current drop during homing movements. Current set using command \"homecurrent\". This pin is pulled low to activate. __EXPERIMENTAL USE WITH CAUTION__\n\n### homeangledelay\nCurrently unused.\n\n### home\nTells the motion controller to move motor until the home switch (enable pin) is pulled low. (Only on boards 3/21/2017 or newer) (Must be enabled in firmware).\nFor example:\n~~~~\n:>home 360 0.5\n~~~~\nWill move up to 360 degrees at 0.5 RPM. __EXPERIMENTAL USE WITH CAUTION__\n\n### pinread\nDisplays the binary states of all pins (Step, Dir, Enable, Error, A3, TX, RX)\n\n### errorpinmode\nSets or displays the error pin mode. Allows someone to swap usage of the error pin as an enable pin on older boards. (Not compiled for use on boards 3/21/2017 or newer since they have separate enable and error pins) (Must be enabled in firmware)\nModes are: \n* \"0\" - Enable mode, active high (digital input).\n* \"1\" - Enable mode, active low (digital input).\n* \"2\" - Error mode, active low (digital output). Active level is reached when there is an angle error.\n* \"3\" - Error mode, bi-directional, (digital input/output open collector). (Not currently used).\n\n### errorpin\nSets or displays the binary state of the enable pin. Acceptable values are 0 or 1\nFor example:\n~~~~\n:>errorpin 1\n~~~~\nWill set the error pin on the terminal block to output a logic high when the error level is reached\n\n### enablepinmode\nSets or displays the enable pin mode. Allows someone to swap usage of the enable pin as an error pin on older boards. (Only on boards 3/21/2017 or newer since they have separate enable and error pins) (Must be enabled in firmware)\nModes are: \n* \"0\" - Enable mode, active high (digital input).\n* \"1\" - Enable mode, active low (digital input).\n* \"2\" - Error mode, active low (digital output). Active level is reached when there is an angle error.\n* \"3\" - Error mode, bi-directional, (digital input/output open collector). (Not currently used).\n\n### geterror\nDisplays the current motor shaft error in degrees.\n\n### getsteps\nDisplays the number of steps that have been seen from the DIR pin.\n\n### debug\nSets if syslog debugging will be output on USB serial. Allowed values are 0 for disable, 1 for enable.\n\n\n\n## License:\nThe smart stepper related hardware is released under the Creative Commons Attribution Share-Alike 4.0 License as much of the work is based on Mechaduino project by J. Church.\n\n https://github.com/jcchurch13/Mechaduino-Firmware\n \nThe firmware is licensed as GPL V3 for non-commercial use. If you want to release a closed source version of this product, please contact MisfitTech.net for licensing details.\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/.cproject",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<?fileVersion 4.0.0?><cproject storage_type_id=\"org.eclipse.cdt.core.XmlProjectDescriptionStorage\">\n\t<storageModule moduleId=\"org.eclipse.cdt.core.settings\">\n\t\t<cconfiguration id=\"cdt.managedbuild.toolchain.gnu.cross.base.1504376676\">\n\t\t\t<storageModule buildSystemId=\"org.eclipse.cdt.managedbuilder.core.configurationDataProvider\" id=\"cdt.managedbuild.toolchain.gnu.cross.base.1504376676\" moduleId=\"org.eclipse.cdt.core.settings\" name=\"Default\">\n\t\t\t\t<externalSettings>\n\t\t\t\t\t<externalSetting>\n\t\t\t\t\t\t<entry flags=\"RESOLVED\" kind=\"includePath\" name=\"C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\misfittech\\hardware\\samd\\1.0.0\\variants\\nano_zero\"/>\n\t\t\t\t\t\t<entry flags=\"RESOLVED\" kind=\"includePath\" name=\"C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\misfittech\\hardware\\samd\\1.0.0\\cores\\arduino\"/>\n\t\t\t\t\t</externalSetting>\n\t\t\t\t</externalSettings>\n\t\t\t\t<extensions>\n\t\t\t\t\t<extension id=\"org.eclipse.cdt.core.ELF\" point=\"org.eclipse.cdt.core.BinaryParser\"/>\n\t\t\t\t\t<extension id=\"org.eclipse.cdt.core.GASErrorParser\" point=\"org.eclipse.cdt.core.ErrorParser\"/>\n\t\t\t\t\t<extension id=\"org.eclipse.cdt.core.GmakeErrorParser\" point=\"org.eclipse.cdt.core.ErrorParser\"/>\n\t\t\t\t\t<extension id=\"org.eclipse.cdt.core.GLDErrorParser\" point=\"org.eclipse.cdt.core.ErrorParser\"/>\n\t\t\t\t\t<extension id=\"org.eclipse.cdt.core.CWDLocator\" point=\"org.eclipse.cdt.core.ErrorParser\"/>\n\t\t\t\t\t<extension id=\"org.eclipse.cdt.core.GCCErrorParser\" point=\"org.eclipse.cdt.core.ErrorParser\"/>\n\t\t\t\t</extensions>\n\t\t\t</storageModule>\n\t\t\t<storageModule moduleId=\"cdtBuildSystem\" version=\"4.0.0\">\n\t\t\t\t<configuration artifactName=\"${ProjName}\" buildProperties=\"\" description=\"\" id=\"cdt.managedbuild.toolchain.gnu.cross.base.1504376676\" name=\"Default\" parent=\"org.eclipse.cdt.build.core.emptycfg\">\n\t\t\t\t\t<folderInfo id=\"cdt.managedbuild.toolchain.gnu.cross.base.1504376676.350447049\" name=\"/\" resourcePath=\"\">\n\t\t\t\t\t\t<toolChain id=\"cdt.managedbuild.toolchain.gnu.cross.base.515513271\" name=\"Cross GCC\" superClass=\"cdt.managedbuild.toolchain.gnu.cross.base\">\n\t\t\t\t\t\t\t<option id=\"cdt.managedbuild.option.gnu.cross.prefix.582370251\" name=\"Prefix\" superClass=\"cdt.managedbuild.option.gnu.cross.prefix\"/>\n\t\t\t\t\t\t\t<option id=\"cdt.managedbuild.option.gnu.cross.path.231717393\" name=\"Path\" superClass=\"cdt.managedbuild.option.gnu.cross.path\"/>\n\t\t\t\t\t\t\t<targetPlatform archList=\"all\" binaryParser=\"org.eclipse.cdt.core.ELF\" id=\"cdt.managedbuild.targetPlatform.gnu.cross.1339435354\" isAbstract=\"false\" osList=\"all\" superClass=\"cdt.managedbuild.targetPlatform.gnu.cross\"/>\n\t\t\t\t\t\t\t<builder id=\"cdt.managedbuild.builder.gnu.cross.241627781\" keepEnvironmentInBuildfile=\"false\" managedBuildOn=\"false\" name=\"Gnu Make Builder\" superClass=\"cdt.managedbuild.builder.gnu.cross\">\n\t\t\t\t\t\t\t\t<outputEntries/>\n\t\t\t\t\t\t\t</builder>\n\t\t\t\t\t\t\t<tool id=\"cdt.managedbuild.tool.gnu.cross.c.compiler.1805317535\" name=\"Cross GCC Compiler\" superClass=\"cdt.managedbuild.tool.gnu.cross.c.compiler\">\n\t\t\t\t\t\t\t\t<option id=\"gnu.c.compiler.option.include.paths.1641555759\" name=\"Include paths (-I)\" superClass=\"gnu.c.compiler.option.include.paths\" useByScannerDiscovery=\"false\" valueType=\"includePath\">\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\misfittech\\hardware\\samd\\1.0.0\\variants\\nano_zero&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\Documents\\Arduino\\libraries\\Adafruit_SSD1306-master&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\Documents\\Arduino\\libraries\\Adafruit-GFX-Library-master&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include\\pio&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include\\instance&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include\\component&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\misfittech\\hardware\\samd\\1.0.0\\cores\\arduino&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\TSTERN\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.6.6\\libraries\\SPI&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\CMSIS\\include&quot;\"/>\n\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t<option id=\"gnu.c.compiler.option.preprocessor.def.symbols.77778103\" name=\"Defined symbols (-D)\" superClass=\"gnu.c.compiler.option.preprocessor.def.symbols\" useByScannerDiscovery=\"false\" valueType=\"definedSymbols\">\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"ARDUINO_SAMD_ZERO\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"__SAMD21G18A__\"/>\n\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t<inputType id=\"cdt.managedbuild.tool.gnu.c.compiler.input.1328245026\" superClass=\"cdt.managedbuild.tool.gnu.c.compiler.input\"/>\n\t\t\t\t\t\t\t</tool>\n\t\t\t\t\t\t\t<tool id=\"cdt.managedbuild.tool.gnu.cross.cpp.compiler.1543385682\" name=\"Cross G++ Compiler\" superClass=\"cdt.managedbuild.tool.gnu.cross.cpp.compiler\">\n\t\t\t\t\t\t\t\t<option id=\"gnu.cpp.compiler.option.include.paths.784350866\" name=\"Include paths (-I)\" superClass=\"gnu.cpp.compiler.option.include.paths\" useByScannerDiscovery=\"false\" valueType=\"includePath\">\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\misfittech\\hardware\\samd\\1.0.0\\cores\\arduino&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\misfittech\\hardware\\samd\\1.0.0\\variants\\nano_zero&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\Documents\\Arduino\\libraries\\Adafruit_SSD1306-master&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\Documents\\Arduino\\libraries\\Adafruit-GFX-Library-master&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include\\pio&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include\\instance&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include\\component&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\TSTERN\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.6.6\\libraries\\SPI&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\CMSIS\\include&quot;\"/>\n\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t<option id=\"gnu.cpp.compiler.option.preprocessor.def.215333140\" name=\"Defined symbols (-D)\" superClass=\"gnu.cpp.compiler.option.preprocessor.def\" useByScannerDiscovery=\"false\" valueType=\"definedSymbols\">\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"__SAMD21G18A__\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"ARDUINO_SAMD_ZERO\"/>\n\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t<inputType id=\"cdt.managedbuild.tool.gnu.cpp.compiler.input.1198492994\" superClass=\"cdt.managedbuild.tool.gnu.cpp.compiler.input\"/>\n\t\t\t\t\t\t\t</tool>\n\t\t\t\t\t\t\t<tool id=\"cdt.managedbuild.tool.gnu.cross.c.linker.1644022969\" name=\"Cross GCC Linker\" superClass=\"cdt.managedbuild.tool.gnu.cross.c.linker\"/>\n\t\t\t\t\t\t\t<tool id=\"cdt.managedbuild.tool.gnu.cross.cpp.linker.1373326859\" name=\"Cross G++ Linker\" superClass=\"cdt.managedbuild.tool.gnu.cross.cpp.linker\">\n\t\t\t\t\t\t\t\t<option id=\"gnu.cpp.link.option.paths.1624146493\" name=\"Library search path (-L)\" superClass=\"gnu.cpp.link.option.paths\"/>\n\t\t\t\t\t\t\t\t<inputType id=\"cdt.managedbuild.tool.gnu.cpp.linker.input.1257879712\" superClass=\"cdt.managedbuild.tool.gnu.cpp.linker.input\">\n\t\t\t\t\t\t\t\t\t<additionalInput kind=\"additionalinputdependency\" paths=\"$(USER_OBJS)\"/>\n\t\t\t\t\t\t\t\t\t<additionalInput kind=\"additionalinput\" paths=\"$(LIBS)\"/>\n\t\t\t\t\t\t\t\t</inputType>\n\t\t\t\t\t\t\t</tool>\n\t\t\t\t\t\t\t<tool id=\"cdt.managedbuild.tool.gnu.cross.archiver.722380566\" name=\"Cross GCC Archiver\" superClass=\"cdt.managedbuild.tool.gnu.cross.archiver\"/>\n\t\t\t\t\t\t\t<tool id=\"cdt.managedbuild.tool.gnu.cross.assembler.7579640\" name=\"Cross GCC Assembler\" superClass=\"cdt.managedbuild.tool.gnu.cross.assembler\">\n\t\t\t\t\t\t\t\t<option id=\"gnu.both.asm.option.include.paths.2128933212\" name=\"Include paths (-I)\" superClass=\"gnu.both.asm.option.include.paths\" valueType=\"includePath\">\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\misfittech\\hardware\\samd\\1.0.0\\variants\\nano_zero&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\Documents\\Arduino\\libraries\\Adafruit_SSD1306-master&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\Documents\\Arduino\\libraries\\Adafruit-GFX-Library-master&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include\\pio&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include\\instance&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL\\samd21\\include\\component&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\misfittech\\hardware\\samd\\1.0.0\\cores\\arduino&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\Device\\ATMEL&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\TSTERN\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.6.6\\libraries\\SPI&quot;\"/>\n\t\t\t\t\t\t\t\t\t<listOptionValue builtIn=\"false\" value=\"&quot;C:\\Users\\tstern\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.0.0-atmel\\CMSIS\\Include&quot;\"/>\n\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t<inputType id=\"cdt.managedbuild.tool.gnu.assembler.input.474088881\" superClass=\"cdt.managedbuild.tool.gnu.assembler.input\"/>\n\t\t\t\t\t\t\t</tool>\n\t\t\t\t\t\t</toolChain>\n\t\t\t\t\t</folderInfo>\n\t\t\t\t\t<sourceEntries>\n\t\t\t\t\t\t<entry excluding=\"Adafruit-GFX-Library-master|Adafruit_SSD1306-master\" flags=\"VALUE_WORKSPACE_PATH|RESOLVED\" kind=\"sourcePath\" name=\"\"/>\n\t\t\t\t\t</sourceEntries>\n\t\t\t\t</configuration>\n\t\t\t</storageModule>\n\t\t\t<storageModule moduleId=\"org.eclipse.cdt.core.externalSettings\"/>\n\t\t\t<storageModule moduleId=\"ilg.gnuarmeclipse.managedbuild.packs\"/>\n\t\t</cconfiguration>\n\t</storageModule>\n\t<storageModule moduleId=\"cdtBuildSystem\" version=\"4.0.0\">\n\t\t<project id=\"NZS.null.440051529\" name=\"NZS\"/>\n\t</storageModule>\n\t<storageModule moduleId=\"org.eclipse.cdt.core.LanguageSettingsProviders\"/>\n\t<storageModule moduleId=\"scannerConfiguration\">\n\t\t<autodiscovery enabled=\"true\" problemReportingEnabled=\"true\" selectedProfileId=\"\"/>\n\t\t<scannerConfigBuildInfo instanceId=\"cdt.managedbuild.toolchain.gnu.cross.base.1504376676;cdt.managedbuild.toolchain.gnu.cross.base.1504376676.350447049;cdt.managedbuild.tool.gnu.cross.c.compiler.1805317535;cdt.managedbuild.tool.gnu.c.compiler.input.1328245026\">\n\t\t\t<autodiscovery enabled=\"true\" problemReportingEnabled=\"true\" selectedProfileId=\"\"/>\n\t\t</scannerConfigBuildInfo>\n\t\t<scannerConfigBuildInfo instanceId=\"cdt.managedbuild.toolchain.gnu.cross.base.1504376676;cdt.managedbuild.toolchain.gnu.cross.base.1504376676.350447049;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1543385682;cdt.managedbuild.tool.gnu.cpp.compiler.input.1198492994\">\n\t\t\t<autodiscovery enabled=\"true\" problemReportingEnabled=\"true\" selectedProfileId=\"\"/>\n\t\t</scannerConfigBuildInfo>\n\t</storageModule>\n\t<storageModule moduleId=\"refreshScope\"/>\n\t<storageModule moduleId=\"org.eclipse.cdt.make.core.buildtargets\"/>\n</cproject>\n"
  },
  {
    "path": "firmware/stepper_nano_zero/.project",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>NZS</name>\n\t<comment></comment>\n\t<projects>\n\t</projects>\n\t<buildSpec>\n\t\t<buildCommand>\n\t\t\t<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>\n\t\t\t<triggers>clean,full,incremental,</triggers>\n\t\t\t<arguments>\n\t\t\t</arguments>\n\t\t</buildCommand>\n\t\t<buildCommand>\n\t\t\t<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>\n\t\t\t<triggers>full,incremental,</triggers>\n\t\t\t<arguments>\n\t\t\t</arguments>\n\t\t</buildCommand>\n\t</buildSpec>\n\t<natures>\n\t\t<nature>org.eclipse.cdt.core.cnature</nature>\n\t\t<nature>org.eclipse.cdt.core.ccnature</nature>\n\t\t<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>\n\t\t<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>\n\t</natures>\n\t<linkedResources>\n\t\t<link>\n\t\t\t<name>arduino</name>\n\t\t\t<type>2</type>\n\t\t\t<location>C:/Users/tramp_000/AppData/Local/Arduino15/packages/arduino/hardware/samd/1.6.8/cores/arduino</location>\n\t\t</link>\n\t</linkedResources>\n</projectDescription>\n"
  },
  {
    "path": "firmware/stepper_nano_zero/A1333.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2019  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include <Arduino.h>\n#include \"syslog.h\"\n#include \"A1333.h\"\n#include \"SPI.h\"\n#include <stdio.h>\n#include \"board.h\"\n\n\n#define A1333_CMD_NOP   (0x0000)\n#define A1333_ANG15\t\t(0x3200)\n\nSPISettings settingsA(500000, MSBFIRST, SPI_MODE3);             ///400000, MSBFIRST, SPI_MODE1);\n\nboolean A1333::begin(int csPin)\n{\n\n\tdigitalWrite(PIN_AS5047D_CS,LOW); //pull CS LOW by default (chip powered off)\n\tdigitalWrite(PIN_MOSI,LOW);\n\tdigitalWrite(PIN_SCK,LOW);\n\tdigitalWrite(PIN_MISO,LOW);\n\tpinMode(PIN_MISO,OUTPUT);\n\tdelay(1000);\n\n\n\tdigitalWrite(PIN_AS5047D_CS,HIGH); //pull CS high\n\n\tpinMode(PIN_MISO,INPUT);\n\n\n\tchipSelectPin=csPin;\n\n\tLOG(\"csPin is %d\",csPin);\n\tpinMode(chipSelectPin,OUTPUT);\n\tdigitalWrite(chipSelectPin,HIGH); //pull CS high by default\n\tdelay(1);\n\n\tSPI.begin();    //AS5047D SPI uses mode=1 (CPOL=0, CPHA=1)\n\n\tLOG(\"Begin A1333...\");\n\n\tLOG(\"Address is 0x%04X\",readAddress(A1333_ANG15));\n}\n\n\n//read the encoders\nint16_t A1333::readAddress(uint16_t addr)\n{\n\tuint16_t data;\n\t//make sure it is a write by setting bit 14\n\t//addr=addr | 0x4000;\n\n\tSPI.beginTransaction(settingsA);\n\tdigitalWrite(chipSelectPin, LOW);\n\tdelayMicroseconds(1);\n\t//clock out the address to read\n\t//LOG(\"address 0x%04X\",addr);\n\tSPI.transfer16(addr);\n\tdigitalWrite(chipSelectPin, HIGH);\n\tdelayMicroseconds(1);\n\tdigitalWrite(chipSelectPin, LOW);\n\t//clock out zeros to read in the data from address\n\tdata=SPI.transfer16(0x00);\n\n\tdigitalWrite(chipSelectPin, HIGH);\n\tSPI.endTransaction();\n\n\treturn data;\n}\n\n//read the encoders\nint16_t A1333::readEncoderAngle(void)\n{\n\n\treturn readAddress(A1333_ANG15)>>1;\n}\n\nint16_t A1333::readEncoderAnglePipeLineRead(void)\n{\n\tstatic bool first=true;\n\tuint16_t addr = A1333_ANG15;\n\tuint16_t addr2;\n\tuint16_t data;\n\n\tif (first)\n\t{\n\t\t//make sure it is a write by setting bit 14\n\t\t//addr2=addr | 0x4000;\n\t\tSPI.beginTransaction(settingsA);\n\t\tdigitalWrite(chipSelectPin, LOW);\n\t\tdelayMicroseconds(1);\n\t\t//clock out the address to read\n\t\tSPI.transfer16(addr);\n\t\tdigitalWrite(chipSelectPin, HIGH);\n\t\tdelayMicroseconds(1);\n\t\tdigitalWrite(chipSelectPin, LOW);\n\t\tdelayMicroseconds(1);\n\t\t//clock out zeros to read in the data from address\n\t\tdata=SPI.transfer16(addr);\n\n\t\tdigitalWrite(chipSelectPin, HIGH);\n\t\tSPI.endTransaction();\n\t\tfirst=false;\n\t\treturn data>>1;\n\t}\n\n\tSPI.beginTransaction(settingsA);\n\tdigitalWrite(chipSelectPin, LOW);\n\tdelayMicroseconds(1);\n\t//clock out zeros to read in the data from address\n\tdata=SPI.transfer16(addr);\n\n\tdigitalWrite(chipSelectPin, HIGH);\n\tSPI.endTransaction();\n\treturn data>>1;\n}\n"
  },
  {
    "path": "firmware/stepper_nano_zero/A1333.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2019  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#ifndef A1333_H_\n#define A1333_H_\n\n#include <Arduino.h>\n\n#define A1333_DEGREES_PER_BIT  (360.0/(float)(0x7FFF))\n\nclass A1333 {\n  private:\n    int chipSelectPin;\n  public:\n    boolean begin(int csPin);\n    int16_t readEncoderAngle(void);\n    int16_t readAddress(uint16_t addr);\n    int16_t readEncoderAnglePipeLineRead(void);\n    void diagnostics(char *ptrStr) {return;};\n    bool getError(void) {return false;};\n};\n\n\n\n#endif /* A1333_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/A4954.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include \"A4954.h\"\n#include \"wiring_private.h\"\n#include \"syslog.h\"\n#include \"angle.h\"\n#include \"Arduino.h\"\n#include \"sine.h\"\n\nstatic uint8_t pinState=0;\n\n#pragma GCC push_options\n#pragma GCC optimize (\"-Ofast\")\n\n\n\n\n#define DAC_MAX (0x01FFL)\n// Wait for synchronization of registers between the clock domains\nstatic __inline__ void syncTCC(Tcc* TCCx) __attribute__((always_inline, unused));\nstatic void syncTCC(Tcc* TCCx) {\n\t//int32_t t0=1000;\n\twhile (TCCx->SYNCBUSY.reg & TCC_SYNCBUSY_MASK)\n\t{\n\t\t//\t\tt0--;\n\t\t//\t\tif (t0==0)\n\t\t//\t\t{\n\t\t//\t\t\tbreak;\n\t\t//\t\t}\n\t\t//\t\tdelay(1);\n\t}\n}\n\n\nstatic inline void bridge1(int state)\n{\n\tif (state==0)\n\t{\n\t\tPORT->Group[g_APinDescription[PIN_A4954_IN1].ulPort].PINCFG[g_APinDescription[PIN_A4954_IN1].ulPin].bit.PMUXEN = 0;\n\t\tGPIO_OUTPUT(PIN_A4954_IN1);//pinMode(PIN_A4954_IN1,OUTPUT);\n\t\tGPIO_OUTPUT(PIN_A4954_IN2);//pinMode(PIN_A4954_IN2,OUTPUT);\n\t\tGPIO_HIGH(PIN_A4954_IN1);// digitalWrite(PIN_A4954_IN1, HIGH);\n\t\tGPIO_LOW(PIN_A4954_IN2);//digitalWrite(PIN_A4954_IN2, LOW);\n\t\t//pinPeripheral(PIN_A4954_IN2, PIO_TIMER_ALT);\n\t\tpinState=(pinState & 0x0C) | 0x1;\n\t}\n\tif (state==1)\n\t{\n\t\tPORT->Group[g_APinDescription[PIN_A4954_IN2].ulPort].PINCFG[g_APinDescription[PIN_A4954_IN2].ulPin].bit.PMUXEN = 0;\n\t\tGPIO_OUTPUT(PIN_A4954_IN2);//pinMode(PIN_A4954_IN2,OUTPUT);\n\t\tGPIO_OUTPUT(PIN_A4954_IN1);pinMode(PIN_A4954_IN1,OUTPUT);\n\t\tGPIO_LOW(PIN_A4954_IN1);//digitalWrite(PIN_A4954_IN1, LOW);\n\t\tGPIO_HIGH(PIN_A4954_IN2);//digitalWrite(PIN_A4954_IN2, HIGH);\n\t\t//pinPeripheral(PIN_A4954_IN1, PIO_TIMER);\n\t\tpinState=(pinState & 0x0C) | 0x2;\n\t}\n\tif (state==3)\n\t{\n\t\tGPIO_LOW(PIN_A4954_IN1);\n\t\tGPIO_LOW(PIN_A4954_IN2);\n\t\t//digitalWrite(PIN_A4954_IN1, LOW);\n\t\t//digitalWrite(PIN_A4954_IN2, LOW);\n\t}\n}\n\nstatic inline void bridge2(int state)\n{\n\tif (state==0)\n\t{\n\t\tPORT->Group[g_APinDescription[PIN_A4954_IN3].ulPort].PINCFG[g_APinDescription[PIN_A4954_IN3].ulPin].bit.PMUXEN = 0;\n\t\tGPIO_OUTPUT(PIN_A4954_IN3); //pinMode(PIN_A4954_IN3,OUTPUT);\n\t\tGPIO_OUTPUT(PIN_A4954_IN4);//pinMode(PIN_A4954_IN4,OUTPUT);\n\t\tGPIO_HIGH(PIN_A4954_IN3);//digitalWrite(PIN_A4954_IN3, HIGH);\n\t\tGPIO_LOW(PIN_A4954_IN4);//digitalWrite(PIN_A4954_IN4, LOW);\n\t\t//pinPeripheral(PIN_A4954_IN4, PIO_TIMER_ALT);\n\t\tpinState=(pinState & 0x03) | 0x4;\n\t}\n\tif (state==1)\n\t{\n\t\tPORT->Group[g_APinDescription[PIN_A4954_IN4].ulPort].PINCFG[g_APinDescription[PIN_A4954_IN4].ulPin].bit.PMUXEN = 0;\n\t\tGPIO_OUTPUT(PIN_A4954_IN4);//pinMode(PIN_A4954_IN4,OUTPUT);\n\t\tGPIO_OUTPUT(PIN_A4954_IN3);//pinMode(PIN_A4954_IN3,OUTPUT);\n\t\tGPIO_LOW(PIN_A4954_IN3);//digitalWrite(PIN_A4954_IN3, LOW);\n\t\tGPIO_HIGH(PIN_A4954_IN4);//digitalWrite(PIN_A4954_IN4, HIGH);\n\t\t//pinPeripheral(PIN_A4954_IN3, PIO_TIMER_ALT);\n\t\tpinState=(pinState & 0x03) | 0x8;\n\t}\n\tif (state==3)\n\t{\n\t\tGPIO_LOW(PIN_A4954_IN3);\n\t\tGPIO_LOW(PIN_A4954_IN4);\n\t\t//digitalWrite(PIN_A4954_IN3, LOW);\n\t\t//digitalWrite(PIN_A4954_IN4, LOW);\n\t}\n}\n\nstatic void enableTCC0(uint8_t percent)\n{\n#ifdef MECHADUINO_HARDWARE\n\treturn;\n#else\n\tTcc* TCCx = TCC0 ;\n\n\n\tuint32_t ulValue=((uint32_t)(100-percent)*480)/100;\n\t//ERROR(\"Enable TCC0\");\n\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_TCC0_TCC1 )) ;\n\n\twhile ( GCLK->STATUS.bit.SYNCBUSY == 1 ) ;\n\n\t//ERROR(\"Setting TCC %d %d\",ulValue,ulPin);\n\tTCCx->CTRLA.reg &= ~TCC_CTRLA_ENABLE;\n\tsyncTCC(TCCx);\n\n\t// Set TCx as normal PWM\n\tTCCx->WAVE.reg |= TCC_WAVE_WAVEGEN_NPWM;\n\tsyncTCC(TCCx);\n\n\t// Set TCx in waveform mode Normal PWM\n\tTCCx->CC[1].reg = (uint32_t)ulValue; //ch5 //IN3\n\tsyncTCC(TCCx);\n\n\tTCCx->CC[2].reg = (uint32_t)ulValue; //ch6 //IN4\n\tsyncTCC(TCCx);\n\n\tTCCx->CC[3].reg = (uint32_t)ulValue; //ch7  //IN2\n\tsyncTCC(TCCx);\n\n\tTCCx->CC[1].reg = (uint32_t)ulValue; //ch1 == ch5 //IN1\n\n\tsyncTCC(TCCx);\n\n\t// Set PER to maximum counter value (resolution : 0xFF)\n\tTCCx->PER.reg = DAC_MAX;\n\tsyncTCC(TCCx);\n\n\t// Enable TCCx\n\tTCCx->CTRLA.reg |= TCC_CTRLA_ENABLE ;\n\tsyncTCC(TCCx);\n\t//ERROR(\"Enable TCC0 DONE\");\n#endif\n}\n\nstatic void setDAC(uint32_t DAC1, uint32_t DAC2)\n{\n\tTCC1->CC[1].reg = (uint32_t)DAC1; //D9 PA07 - VREF12\n\tsyncTCC(TCC1);\n\tTCC1->CC[0].reg = (uint32_t)DAC2; //D4 - VREF34\n\tsyncTCC(TCC1);\n\n\n}\n\nstatic void setupDAC(void)\n{\n\tTcc* TCCx = TCC1 ;\n\n\n\tpinPeripheral(PIN_A4954_VREF34, PIO_TIMER_ALT);\n\tpinPeripheral(PIN_A4954_VREF12, PIO_TIMER);\n\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_TCC0_TCC1 )) ;\n\n\twhile ( GCLK->STATUS.bit.SYNCBUSY == 1 ) ;\n\n\t//ERROR(\"Setting TCC %d %d\",ulValue,ulPin);\n\tTCCx->CTRLA.reg &= ~TCC_CTRLA_ENABLE;\n\tsyncTCC(TCCx);\n\n\t// Set TCx as normal PWM\n\tTCCx->WAVE.reg |= TCC_WAVE_WAVEGEN_NPWM;\n\tsyncTCC(TCCx);\n\n\t// Set TCx in waveform mode Normal PWM\n\tTCCx->CC[1].reg = (uint32_t)0;\n\tsyncTCC(TCCx);\n\n\tTCCx->CC[0].reg = (uint32_t)0;\n\tsyncTCC(TCCx);\n\n\t// Set PER to maximum counter value (resolution : 0xFFF = 12 bits)\n\t// =48e6/2^12=11kHz frequency\n\tTCCx->PER.reg = DAC_MAX;\n\tsyncTCC(TCCx);\n\n\t// Enable TCCx\n\tTCCx->CTRLA.reg |= TCC_CTRLA_ENABLE ;\n\tsyncTCC(TCCx);\n\n}\n\n\nvoid A4954::begin()\n{\n\t//setup the A4954 pins\n\tdigitalWrite(PIN_A4954_IN3,LOW);\n\tpinMode(PIN_A4954_IN3,OUTPUT);\n\tdigitalWrite(PIN_A4954_IN4,LOW);\n\tpinMode(PIN_A4954_IN4,OUTPUT);\n\tdigitalWrite(PIN_A4954_IN2,LOW);\n\tpinMode(PIN_A4954_IN2,OUTPUT);\n\tdigitalWrite(PIN_A4954_IN1,LOW);\n\tpinMode(PIN_A4954_IN1,OUTPUT);\n\n\t//setup the PWM for current on the A4954, set for low current\n\tdigitalWrite(PIN_A4954_VREF12,LOW);\n\tdigitalWrite(PIN_A4954_VREF34,LOW);\n\tpinMode(PIN_A4954_VREF34, OUTPUT);\n\tpinMode(PIN_A4954_VREF12, OUTPUT);\n\n\tenabled=true;\n\tlastStepMicros=0;\n\tforwardRotation=true;\n\n\tenableTCC0(90);\n\tsetupDAC();\n//\n//\tint i=0;\n//\tbridge1(0);\n//\tbridge2(0);\n//while (1)\n//\t{\n//\t\tint32_t x;\n//\t\tWARNING(\"MA %d\",i);\n//\t\tx=(int32_t)((int64_t)i*(DAC_MAX))/3300;\n//\t\tsetDAC(x,x);\n//\t\tdelay(1000);\n//\t\ti=i+10;\n//\t\tif (i>1000)\n//\t\t{\n//\t\t\ti=0;\n//\t\t}\n//\n//\t}\n\n//\n//\tWARNING(\"Setting DAC for 500mA output\");\n//\tsetDAC((int32_t)((int64_t)1000*(DAC_MAX))/3300,(int32_t)((int64_t)1000*(DAC_MAX))/3300);\n//\tbridge1(0);\n//\tbridge2(0);\n//\twhile(1)\n//\t{\n//\n//\t}\n\treturn;\n}\n\nvoid A4954::limitCurrent(uint8_t percent)\n{\n#ifdef MECHADUINO_HARDWARE\n\treturn;\n#else\n\t//WARNING(\"current limit %d\",percent);\n\tenableTCC0(percent);\n\tif (pinState & 0x01)\n\t{\n\t\tpinPeripheral(PIN_A4954_IN2, PIO_TIMER_ALT); //TCC0 WO[7]\n\t}\n\tif (pinState & 0x02)\n\t{\n\t\tpinPeripheral(PIN_A4954_IN1, PIO_TIMER); //TCC0 WO[1]\n\t}\n\tif (pinState & 0x04)\n\t{\n\t\tpinPeripheral(PIN_A4954_IN4, PIO_TIMER_ALT);\n\t}\n\tif (pinState & 0x08)\n\t{\n\t\tpinPeripheral(PIN_A4954_IN3, PIO_TIMER_ALT);\n\t}\n#endif\n}\n\n\nvoid A4954::enable(bool enable)\n{\n\tenabled=enable;\n\tif (enabled == false)\n\t{\n\t\tWARNING(\"A4954 disabled\");\n\t\tsetDAC(0,0); //turn current off\n\t\tbridge1(3); //tri state bridge outputs\n\t\tbridge2(3); //tri state bridge outputs\n\t}\n}\n\n\n\n//this is precise move and modulo of A4954_NUM_MICROSTEPS is a full step.\n// stepAngle is in A4954_NUM_MICROSTEPS units..\n// The A4954 has no idea where the motor is, so the calling function has to\n// to tell the A4954 what phase to drive motor coils.\n// A4954_NUM_MICROSTEPS is 256 by default so stepAngle of 1024 is 360 degrees\n// Note you can only move up to +/-A4954_NUM_MICROSTEPS from where you\n// currently are.\nint32_t A4954::move(int32_t stepAngle, uint32_t mA)\n{\n\tuint16_t angle;\n\tint32_t cos,sin;\n\tint32_t dacSin,dacCos;\n\t//static int i=0;\n\n\tif (enabled == false)\n\t{\n\t\t//WARNING(\"A4954 disabled\");\n\t\tsetDAC(0,0); //turn current off\n\t\tbridge1(3); //tri state bridge outputs\n\t\tbridge2(3); //tri state bridge outputs\n\t\treturn stepAngle;\n\t}\n\n\t//WARNING(\"move %d %d\",stepAngle,mA);\n\t//handle roll overs, could do with modulo operator\n\tstepAngle=stepAngle%SINE_STEPS;\n\n\t//figure out our sine Angle\n\t// note our SINE_STEPS is 4x of microsteps for a reason\n\t//angle=(stepAngle+(SINE_STEPS/8)) % SINE_STEPS;\n\tangle=(stepAngle);\n\n\t//calculate the sine and cosine of our angle\n\tsin=sine(angle);\n\tcos=cosine(angle);\n\n\t//if we are reverse swap the sign of one of the angels\n\tif (false == forwardRotation)\n\t{\n\t\tcos=-cos;\n\t}\n\n\t//scale sine result by current(mA)\n\tdacSin=((int32_t)mA*(int64_t)abs(sin))/SINE_MAX;\n\n\t//scale cosine result by current(mA)\n\tdacCos=((int32_t)mA*(int64_t)abs(cos))/SINE_MAX;\n\n//\tif (i==0)\n//\t{\n//\t\tWARNING(\"dacs are %d %d\",dacSin,dacCos);\n//\t}\n\n\t//convert value into DAC scaled to 3300mA max\n\tdacCos=(int32_t)((int64_t)dacCos*(DAC_MAX))/3300;\n\t\t//convert value into DAC scaled to 3300mA max\n\tdacSin=(int32_t)((int64_t)dacSin*(DAC_MAX))/3300;\n\n\t//WARNING(\"dacs are %d %d \",dacSin,dacCos);\n\n\tsetDAC(dacSin,dacCos);\n\n\tif (sin>0)\n\t{\n\t\tbridge1(1);\n\t}else\n\t{\n\t\tbridge1(0);\n\t}\n\tif (cos>0)\n\t{\n\t\tbridge2(1);\n\t}else\n\t{\n\t\tbridge2(0);\n\t}\n\n//\tif (i++>3000)\n//\t{\n//\t\ti=0;\n//\t}\n\t//\tYELLOW_LED(led);\n\t//\tled=(led+1) & 0x01;\n\tlastStepMicros=micros();\n\treturn stepAngle;\n}\n#pragma GCC pop_options\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/A4954.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2019  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#ifndef __A4954__H__\n#define __A4954__H__\n#include <Arduino.h>\n#include \"board.h\"\n#include \"angle.h\"\n#include \"sine.h\"\n\n#define A4954_NUM_MICROSTEPS (256)\n#define A4954_MIN_TIME_BETWEEN_STEPS_MICROS  (1000)\n\n//prevent someone for making a mistake with the code\n#if ((A4954_NUM_MICROSTEPS*4) != SINE_STEPS)\n#error \"SINE_STEPS must be 4x of Micro steps for the move function\"\n#endif\n\n\n\n/*\n *  When it comes to the stepper driver if we use angles\n *  we will always have a rounding error. For example\n *  a 0-65536(360) angle for 1.8 degree step is 327.68 so\n *  if you increment 200 of these as 327 you have a 13.6 error\n *  after one rotation.\n *  If you use floating point the effect is the same but takes longer.\n *\n *  The only error-less accumulation system is to use native units, ie full\n *  steps and microsteps.\n *\n */\n\nclass A4954\n{\nprivate:\n\tuint32_t lastStepMicros; // time in microseconds that last step happened\n\tbool forwardRotation=true;\n\tvolatile bool enabled=true;\n\npublic:\n\tvoid begin(void);\n\n\t//moves motor where the modulo of A4954_NUM_MICROSTEPS is a full step.\n\tint32_t move(int32_t stepAngle, uint32_t mA);\n\n\tuint32_t microsSinceStep(void) {return micros()-lastStepMicros;};\n\tvoid setRotationDirection(bool forward) {forwardRotation=forward;};\n\n\tvoid enable(bool enable);\n\tvoid limitCurrent(uint8_t percent); //higher more current\n};\n\n\n\n#endif //__A4954__H__\n"
  },
  {
    "path": "firmware/stepper_nano_zero/A5995.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n\n#include \"A5995.h\"\n#include \"wiring_private.h\"\n#include \"syslog.h\"\n#include \"angle.h\"\n#include \"Arduino.h\"\n#include \"sine.h\"\n\nstatic uint8_t pinState=0;\n\n#pragma GCC push_options\n#pragma GCC optimize (\"-Ofast\")\n\n\n\n\n#define DAC_MAX (0x01FFL)\n// Wait for synchronization of registers between the clock domains\nstatic __inline__ void syncTCC(Tcc* TCCx) __attribute__((always_inline, unused));\nstatic void syncTCC(Tcc* TCCx) {\n\t//int32_t t0=1000;\n\twhile (TCCx->SYNCBUSY.reg & TCC_SYNCBUSY_MASK)\n\t{\n\t\t//\t\tt0--;\n\t\t//\t\tif (t0==0)\n\t\t//\t\t{\n\t\t//\t\t\tbreak;\n\t\t//\t\t}\n\t\t//\t\tdelay(1);\n\t}\n}\n\n\n\nstatic void setDAC(uint32_t DAC1, uint32_t DAC2)\n{\n\tTCC1->CC[1].reg = (uint32_t)DAC1; //D9 PA07 - VREF2\n\tsyncTCC(TCC1);\n\tTCC1->CC[0].reg = (uint32_t)DAC2; //D4 - VREF1\n\tsyncTCC(TCC1);\n\n}\n\nstatic void setupDAC(void)\n{\n\tTcc* TCCx = TCC1 ;\n\n\n\tpinPeripheral(PIN_A5995_VREF1, PIO_TIMER_ALT);\n\tpinPeripheral(PIN_A5995_VREF2, PIO_TIMER);\n\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_TCC0_TCC1 )) ;\n\n\twhile ( GCLK->STATUS.bit.SYNCBUSY == 1 ) ;\n\n\t//ERROR(\"Setting TCC %d %d\",ulValue,ulPin);\n\tTCCx->CTRLA.reg &= ~TCC_CTRLA_ENABLE;\n\tsyncTCC(TCCx);\n\n\t// Set TCx as normal PWM\n\tTCCx->WAVE.reg |= TCC_WAVE_WAVEGEN_NPWM;\n\tsyncTCC(TCCx);\n\n\t// Set TCx in waveform mode Normal PWM\n\tTCCx->CC[1].reg = (uint32_t)0;\n\tsyncTCC(TCCx);\n\n\tTCCx->CC[0].reg = (uint32_t)0;\n\tsyncTCC(TCCx);\n\n\t// Set PER to maximum counter value (resolution : 0xFFF = 12 bits)\n\t// =48e6/2^12=11kHz frequency\n\tTCCx->PER.reg = DAC_MAX;\n\tsyncTCC(TCCx);\n\n\t// Enable TCCx\n\tTCCx->CTRLA.reg |= TCC_CTRLA_ENABLE ;\n\tsyncTCC(TCCx);\n\n}\n\n\nvoid A5995::begin()\n{\n\t//setup the A5995 pins\n\tdigitalWrite(PIN_A5995_ENABLE1,LOW);\n\tpinMode(PIN_A5995_ENABLE1,OUTPUT);\n\tdigitalWrite(PIN_A5995_ENABLE2,LOW);\n\tpinMode(PIN_A5995_ENABLE2,OUTPUT);\n\tdigitalWrite(PIN_A5995_MODE1,LOW);\n\tpinMode(PIN_A5995_MODE1,OUTPUT);\n\tdigitalWrite(PIN_A5995_MODE2,LOW);\n\tpinMode(PIN_A5995_MODE2,OUTPUT);\n\tdigitalWrite(PIN_A5995_PHASE1,LOW);\n\tpinMode(PIN_A5995_PHASE1,OUTPUT);\n\tdigitalWrite(PIN_A5995_PHASE2,LOW);\n\tpinMode(PIN_A5995_PHASE2,OUTPUT);\n\n\tdigitalWrite(PIN_A5995_SLEEPn,HIGH);\n\tpinMode(PIN_A5995_SLEEPn,OUTPUT);\n\n\n\n\t//setup the PWM for current on the A4954, set for low current\n\tdigitalWrite(PIN_A5995_VREF1,LOW);\n\tdigitalWrite(PIN_A5995_VREF2,LOW);\n\tpinMode(PIN_A5995_VREF1, OUTPUT);\n\tpinMode(PIN_A5995_VREF2, OUTPUT);\n\n\tenabled=true;\n\tlastStepMicros=0;\n\tforwardRotation=true;\n\n\tsetupDAC();\n\n\n//\n//\tGPIO_HIGH(PIN_A5995_ENABLE1);\n//\t\tGPIO_HIGH(PIN_A5995_ENABLE2);\n//\t\tGPIO_LOW(PIN_A5995_MODE1);\n//\t\tGPIO_LOW(PIN_A5995_MODE2);\n//\t\tGPIO_HIGH(PIN_A5995_PHASE1);\n//\t\tGPIO_HIGH(PIN_A5995_PHASE2);\n//\tint i=0;;\n//\twhile (1)\n//\t{\n//\t\tint32_t x;\n//\t\tWARNING(\"MA %d\",i);\n//\t\tx=(int32_t)((int64_t)i*(DAC_MAX))/3300;\n//\t\tsetDAC(x,x);\n//\t\tdelay(1000);\n//\t\ti=i+10;\n//\t\tif (i>1000)\n//\t\t{\n//\t\t\ti=0;\n//\t\t}\n//\n//\t}\n\n\n\treturn;\n}\n\n\n\nvoid A5995::enable(bool enable)\n{\n\tenabled=enable;\n\tif (enabled == false)\n\t{\n\t\tWARNING(\"A4954 disabled\");\n\t\tsetDAC(0,0); //turn current off\n\t\tGPIO_LOW(PIN_A5995_ENABLE1);\n\t\tGPIO_LOW(PIN_A5995_ENABLE2);\n\t\tGPIO_LOW(PIN_A5995_MODE1);\n\t\tGPIO_LOW(PIN_A5995_MODE2);\n\t\tGPIO_LOW(PIN_A5995_PHASE1);\n\t\tGPIO_LOW(PIN_A5995_PHASE2);\n\t}\n}\n\n\n\n//this is precise move and modulo of A4954_NUM_MICROSTEPS is a full step.\n// stepAngle is in A4954_NUM_MICROSTEPS units..\n// The A4954 has no idea where the motor is, so the calling function has to\n// to tell the A4954 what phase to drive motor coils.\n// A4954_NUM_MICROSTEPS is 256 by default so stepAngle of 1024 is 360 degrees\n// Note you can only move up to +/-A4954_NUM_MICROSTEPS from where you\n// currently are.\nint32_t A5995::move(int32_t stepAngle, uint32_t mA)\n{\n\tuint16_t angle;\n\tint32_t cos,sin;\n\tint32_t dacSin,dacCos;\n\tstatic int32_t lastSin=0,lastCos=0;\n\tstatic int i=1;\n\n\tif (enabled == false)\n\t{\n\t\tWARNING(\"A4954 disabled\");\n\t\tsetDAC(0,0); //turn current off\n\t\tGPIO_LOW(PIN_A5995_ENABLE1);\n\t\tGPIO_LOW(PIN_A5995_ENABLE2);\n\t\tGPIO_LOW(PIN_A5995_MODE1);\n\t\tGPIO_LOW(PIN_A5995_MODE2);\n\t\tGPIO_LOW(PIN_A5995_PHASE1);\n\t\tGPIO_LOW(PIN_A5995_PHASE2);\n\t\treturn stepAngle;\n\t}\n\n\t//WARNING(\"move %d %d\",stepAngle,mA);\n\n\tstepAngle=(stepAngle) % SINE_STEPS;\n\t//figure out our sine Angle\n\t// note our SINE_STEPS is 4x of microsteps for a reason\n\t//angle=(stepAngle+(SINE_STEPS/8)) % SINE_STEPS;\n\tangle=stepAngle;\n\n\tif (i==0)\n\t{\n\t\tWARNING(\"angle  %d \",angle);\n\t}\n\t//calculate the sine and cosine of our angle\n\tsin=sine(angle);\n\tcos=cosine(angle);\n\n\t//if we are reverse swap the sign of one of the angels\n\tif (false == forwardRotation)\n\t{\n\t\tcos=-cos;\n\t}\n\n\t//scale sine result by current(mA)\n\tdacSin=((int32_t)mA*(int64_t)(sin))/SINE_MAX;\n\n\tif (i==0)\n\t{\n\t   WARNING(\"dacsine  %d \",dacSin);\n\t}\n//\tif ((lastSin-dacSin)>100) //decreasing current\n//\t{\n//\t\tGPIO_LOW(PIN_A5995_MODE2); //fast decay\n//\t} else\n//\t{\n//\t\tGPIO_HIGH(PIN_A5995_MODE2); //slow decay\n//\t}\n\tlastSin=dacSin;\n\n\t//convert value into DAC scaled to 3300mA max\n\tdacSin=(int32_t)((int64_t)abs(dacSin)*(DAC_MAX))/3300;\n\n\n\t//scale cosine result by current(mA)\n\tdacCos=((int32_t)mA*(int64_t)(cos))/SINE_MAX;\n\n   if (i==0)\n\t{\n   WARNING(\"daccos  %d \",dacCos);\n\t}\n//\tif ((lastCos-dacCos)>100) //decreasing current\n//\t{\n//\t\tGPIO_LOW(PIN_A5995_MODE1); //fast decay\n//\t} else\n//\t{\n//\t\tGPIO_HIGH(PIN_A5995_MODE1); //slow decay\n//\t}\n\tlastCos=dacCos;\n\n\t//convert value into DAC scaled to 3300mA max\n\tdacCos=(int32_t)((int64_t)abs(dacCos)*(DAC_MAX))/3300;\n\n\nif (i==0)\n{\n\tWARNING(\"dacs are %d %d\",dacSin,dacCos);\n}\n\tsetDAC(dacSin,dacCos);\n\n\tGPIO_HIGH(PIN_A5995_ENABLE1);\n\tGPIO_HIGH(PIN_A5995_ENABLE2);\n\tGPIO_LOW(PIN_A5995_MODE1);\n\tGPIO_LOW(PIN_A5995_MODE2);\n\n\nif (i==0)\n{\n\tWARNING(\"sins are %d %d\",sin,cos);\n}\n\n\tif (sin>0)\n\t{\n\t\tGPIO_HIGH(PIN_A5995_PHASE2);\n\t}else\n\t{\n\t\tGPIO_LOW(PIN_A5995_PHASE2);\n\n\t}\n\tif (cos>0)\n\t{\n\t\tGPIO_HIGH(PIN_A5995_PHASE1);\n\n\t}else\n\t{\n\t\tGPIO_LOW(PIN_A5995_PHASE1);\n\n\t}\n\n//\ti++;\n//\tif (i>3000) i=0;\n\t//\tYELLOW_LED(led);\n\t//\tled=(led+1) & 0x01;\n\tlastStepMicros=micros();\n\treturn stepAngle;\n}\n#pragma GCC pop_options\n\n\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/A5995.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#ifndef A5995_H_\n#define A5995_H_\n\n#include <Arduino.h>\n#include \"board.h\"\n#include \"angle.h\"\n#include \"sine.h\"\n\n#define A5995_NUM_MICROSTEPS (256)\n\n\n//prevent someone for making a mistake with the code\n#if ((A5995_NUM_MICROSTEPS*4) != SINE_STEPS)\n#error \"SINE_STEPS must be 4x of Micro steps for the move function\"\n#endif\n\n\n\n/*\n *  When it comes to the stepper driver if we use angles\n *  we will always have a rounding error. For example\n *  a 0-65536(360) angle for 1.8 degree step is 327.68 so\n *  if you increment 200 of these as 327 you have a 13.6 error\n *  after one rotation.\n *  If you use floating point the effect is the same but takes longer.\n *\n *  The only error-less accumulation system is to use native units, ie full\n *  steps and microsteps.\n *\n */\n\nclass A5995\n{\nprivate:\n\tuint32_t lastStepMicros; // time in microseconds that last step happened\n\tbool forwardRotation=true;\n\tvolatile bool enabled=true;\n\npublic:\n\tvoid begin(void);\n\n\t//moves motor where the modulo of A4954_NUM_MICROSTEPS is a full step.\n\tint32_t move(int32_t stepAngle, uint32_t mA);\n\n\tuint32_t microsSinceStep(void) {return micros()-lastStepMicros;};\n\tvoid setRotationDirection(bool forward) {forwardRotation=forward;};\n\n\tvoid enable(bool enable);\n\tvoid limitCurrent(uint8_t percent) {return;};  //Not used\n};\n\n\n\n#endif /* A5995_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/Adafruit_GFX.cpp",
    "content": "/*\nThis is the core graphics library for all our displays, providing a common\nset of graphics primitives (points, lines, circles, etc.).  It needs to be\npaired with a hardware-specific library for each display device we carry\n(to handle the lower-level functions).\n\nAdafruit invests time and resources providing this open source code, please\nsupport Adafruit & open-source hardware by purchasing products from Adafruit!\n\nCopyright (c) 2013 Adafruit Industries.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n- Redistributions of source code must retain the above copyright notice,\n  this list of conditions and the following disclaimer.\n- Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n*/\n\n#ifdef __AVR__\n #include <avr/pgmspace.h>\n#elif defined(ESP8266)\n #include <pgmspace.h>\n#endif\n#include \"Adafruit_GFX.h\"\n#include \"glcdfont.c\"\n\n// Many (but maybe not all) non-AVR board installs define macros\n// for compatibility with existing PROGMEM-reading AVR code.\n// Do our own checks and defines here for good measure...\n\n#ifndef pgm_read_byte\n #define pgm_read_byte(addr) (*(const unsigned char *)(addr))\n#endif\n#ifndef pgm_read_word\n #define pgm_read_word(addr) (*(const unsigned short *)(addr))\n#endif\n#ifndef pgm_read_dword\n #define pgm_read_dword(addr) (*(const unsigned long *)(addr))\n#endif\n\n// Pointers are a peculiar case...typically 16-bit on AVR boards,\n// 32 bits elsewhere.  Try to accommodate both...\n\n#if !defined(__INT_MAX__) || (__INT_MAX__ > 0xFFFF)\n #define pgm_read_pointer(addr) ((void *)pgm_read_dword(addr))\n#else\n #define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))\n#endif\n\n#ifndef min\n#define min(a,b) (((a) < (b)) ? (a) : (b))\n#endif\n\n#ifndef _swap_int16_t\n#define _swap_int16_t(a, b) { int16_t t = a; a = b; b = t; }\n#endif\n\nAdafruit_GFX::Adafruit_GFX(int16_t w, int16_t h):\n  WIDTH(w), HEIGHT(h)\n{\n  _width    = WIDTH;\n  _height   = HEIGHT;\n  rotation  = 0;\n  cursor_y  = cursor_x    = 0;\n  textsize  = 1;\n  textcolor = textbgcolor = 0xFFFF;\n  wrap      = true;\n  _cp437    = false;\n  gfxFont   = NULL;\n}\n\n// Draw a circle outline\nvoid Adafruit_GFX::drawCircle(int16_t x0, int16_t y0, int16_t r,\n uint16_t color) {\n  int16_t f = 1 - r;\n  int16_t ddF_x = 1;\n  int16_t ddF_y = -2 * r;\n  int16_t x = 0;\n  int16_t y = r;\n\n  drawPixel(x0  , y0+r, color);\n  drawPixel(x0  , y0-r, color);\n  drawPixel(x0+r, y0  , color);\n  drawPixel(x0-r, y0  , color);\n\n  while (x<y) {\n    if (f >= 0) {\n      y--;\n      ddF_y += 2;\n      f += ddF_y;\n    }\n    x++;\n    ddF_x += 2;\n    f += ddF_x;\n\n    drawPixel(x0 + x, y0 + y, color);\n    drawPixel(x0 - x, y0 + y, color);\n    drawPixel(x0 + x, y0 - y, color);\n    drawPixel(x0 - x, y0 - y, color);\n    drawPixel(x0 + y, y0 + x, color);\n    drawPixel(x0 - y, y0 + x, color);\n    drawPixel(x0 + y, y0 - x, color);\n    drawPixel(x0 - y, y0 - x, color);\n  }\n}\n\nvoid Adafruit_GFX::drawCircleHelper( int16_t x0, int16_t y0,\n int16_t r, uint8_t cornername, uint16_t color) {\n  int16_t f     = 1 - r;\n  int16_t ddF_x = 1;\n  int16_t ddF_y = -2 * r;\n  int16_t x     = 0;\n  int16_t y     = r;\n\n  while (x<y) {\n    if (f >= 0) {\n      y--;\n      ddF_y += 2;\n      f     += ddF_y;\n    }\n    x++;\n    ddF_x += 2;\n    f     += ddF_x;\n    if (cornername & 0x4) {\n      drawPixel(x0 + x, y0 + y, color);\n      drawPixel(x0 + y, y0 + x, color);\n    }\n    if (cornername & 0x2) {\n      drawPixel(x0 + x, y0 - y, color);\n      drawPixel(x0 + y, y0 - x, color);\n    }\n    if (cornername & 0x8) {\n      drawPixel(x0 - y, y0 + x, color);\n      drawPixel(x0 - x, y0 + y, color);\n    }\n    if (cornername & 0x1) {\n      drawPixel(x0 - y, y0 - x, color);\n      drawPixel(x0 - x, y0 - y, color);\n    }\n  }\n}\n\nvoid Adafruit_GFX::fillCircle(int16_t x0, int16_t y0, int16_t r,\n uint16_t color) {\n  drawFastVLine(x0, y0-r, 2*r+1, color);\n  fillCircleHelper(x0, y0, r, 3, 0, color);\n}\n\n// Used to do circles and roundrects\nvoid Adafruit_GFX::fillCircleHelper(int16_t x0, int16_t y0, int16_t r,\n uint8_t cornername, int16_t delta, uint16_t color) {\n\n  int16_t f     = 1 - r;\n  int16_t ddF_x = 1;\n  int16_t ddF_y = -2 * r;\n  int16_t x     = 0;\n  int16_t y     = r;\n\n  while (x<y) {\n    if (f >= 0) {\n      y--;\n      ddF_y += 2;\n      f     += ddF_y;\n    }\n    x++;\n    ddF_x += 2;\n    f     += ddF_x;\n\n    if (cornername & 0x1) {\n      drawFastVLine(x0+x, y0-y, 2*y+1+delta, color);\n      drawFastVLine(x0+y, y0-x, 2*x+1+delta, color);\n    }\n    if (cornername & 0x2) {\n      drawFastVLine(x0-x, y0-y, 2*y+1+delta, color);\n      drawFastVLine(x0-y, y0-x, 2*x+1+delta, color);\n    }\n  }\n}\n\n// Bresenham's algorithm - thx wikpedia\nvoid Adafruit_GFX::drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1,\n uint16_t color) {\n  int16_t steep = abs(y1 - y0) > abs(x1 - x0);\n  if (steep) {\n    _swap_int16_t(x0, y0);\n    _swap_int16_t(x1, y1);\n  }\n\n  if (x0 > x1) {\n    _swap_int16_t(x0, x1);\n    _swap_int16_t(y0, y1);\n  }\n\n  int16_t dx, dy;\n  dx = x1 - x0;\n  dy = abs(y1 - y0);\n\n  int16_t err = dx / 2;\n  int16_t ystep;\n\n  if (y0 < y1) {\n    ystep = 1;\n  } else {\n    ystep = -1;\n  }\n\n  for (; x0<=x1; x0++) {\n    if (steep) {\n      drawPixel(y0, x0, color);\n    } else {\n      drawPixel(x0, y0, color);\n    }\n    err -= dy;\n    if (err < 0) {\n      y0 += ystep;\n      err += dx;\n    }\n  }\n}\n\n// Draw a rectangle\nvoid Adafruit_GFX::drawRect(int16_t x, int16_t y, int16_t w, int16_t h,\n uint16_t color) {\n  drawFastHLine(x, y, w, color);\n  drawFastHLine(x, y+h-1, w, color);\n  drawFastVLine(x, y, h, color);\n  drawFastVLine(x+w-1, y, h, color);\n}\n\nvoid Adafruit_GFX::drawFastVLine(int16_t x, int16_t y,\n int16_t h, uint16_t color) {\n  // Update in subclasses if desired!\n  drawLine(x, y, x, y+h-1, color);\n}\n\nvoid Adafruit_GFX::drawFastHLine(int16_t x, int16_t y,\n int16_t w, uint16_t color) {\n  // Update in subclasses if desired!\n  drawLine(x, y, x+w-1, y, color);\n}\n\nvoid Adafruit_GFX::fillRect(int16_t x, int16_t y, int16_t w, int16_t h,\n uint16_t color) {\n  // Update in subclasses if desired!\n  for (int16_t i=x; i<x+w; i++) {\n    drawFastVLine(i, y, h, color);\n  }\n}\n\nvoid Adafruit_GFX::fillScreen(uint16_t color) {\n  fillRect(0, 0, _width, _height, color);\n}\n\n// Draw a rounded rectangle\nvoid Adafruit_GFX::drawRoundRect(int16_t x, int16_t y, int16_t w,\n int16_t h, int16_t r, uint16_t color) {\n  // smarter version\n  drawFastHLine(x+r  , y    , w-2*r, color); // Top\n  drawFastHLine(x+r  , y+h-1, w-2*r, color); // Bottom\n  drawFastVLine(x    , y+r  , h-2*r, color); // Left\n  drawFastVLine(x+w-1, y+r  , h-2*r, color); // Right\n  // draw four corners\n  drawCircleHelper(x+r    , y+r    , r, 1, color);\n  drawCircleHelper(x+w-r-1, y+r    , r, 2, color);\n  drawCircleHelper(x+w-r-1, y+h-r-1, r, 4, color);\n  drawCircleHelper(x+r    , y+h-r-1, r, 8, color);\n}\n\n// Fill a rounded rectangle\nvoid Adafruit_GFX::fillRoundRect(int16_t x, int16_t y, int16_t w,\n int16_t h, int16_t r, uint16_t color) {\n  // smarter version\n  fillRect(x+r, y, w-2*r, h, color);\n\n  // draw four corners\n  fillCircleHelper(x+w-r-1, y+r, r, 1, h-2*r-1, color);\n  fillCircleHelper(x+r    , y+r, r, 2, h-2*r-1, color);\n}\n\n// Draw a triangle\nvoid Adafruit_GFX::drawTriangle(int16_t x0, int16_t y0,\n int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color) {\n  drawLine(x0, y0, x1, y1, color);\n  drawLine(x1, y1, x2, y2, color);\n  drawLine(x2, y2, x0, y0, color);\n}\n\n// Fill a triangle\nvoid Adafruit_GFX::fillTriangle(int16_t x0, int16_t y0,\n int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color) {\n\n  int16_t a, b, y, last;\n\n  // Sort coordinates by Y order (y2 >= y1 >= y0)\n  if (y0 > y1) {\n    _swap_int16_t(y0, y1); _swap_int16_t(x0, x1);\n  }\n  if (y1 > y2) {\n    _swap_int16_t(y2, y1); _swap_int16_t(x2, x1);\n  }\n  if (y0 > y1) {\n    _swap_int16_t(y0, y1); _swap_int16_t(x0, x1);\n  }\n\n  if(y0 == y2) { // Handle awkward all-on-same-line case as its own thing\n    a = b = x0;\n    if(x1 < a)      a = x1;\n    else if(x1 > b) b = x1;\n    if(x2 < a)      a = x2;\n    else if(x2 > b) b = x2;\n    drawFastHLine(a, y0, b-a+1, color);\n    return;\n  }\n\n  int16_t\n    dx01 = x1 - x0,\n    dy01 = y1 - y0,\n    dx02 = x2 - x0,\n    dy02 = y2 - y0,\n    dx12 = x2 - x1,\n    dy12 = y2 - y1;\n  int32_t\n    sa   = 0,\n    sb   = 0;\n\n  // For upper part of triangle, find scanline crossings for segments\n  // 0-1 and 0-2.  If y1=y2 (flat-bottomed triangle), the scanline y1\n  // is included here (and second loop will be skipped, avoiding a /0\n  // error there), otherwise scanline y1 is skipped here and handled\n  // in the second loop...which also avoids a /0 error here if y0=y1\n  // (flat-topped triangle).\n  if(y1 == y2) last = y1;   // Include y1 scanline\n  else         last = y1-1; // Skip it\n\n  for(y=y0; y<=last; y++) {\n    a   = x0 + sa / dy01;\n    b   = x0 + sb / dy02;\n    sa += dx01;\n    sb += dx02;\n    /* longhand:\n    a = x0 + (x1 - x0) * (y - y0) / (y1 - y0);\n    b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);\n    */\n    if(a > b) _swap_int16_t(a,b);\n    drawFastHLine(a, y, b-a+1, color);\n  }\n\n  // For lower part of triangle, find scanline crossings for segments\n  // 0-2 and 1-2.  This loop is skipped if y1=y2.\n  sa = dx12 * (y - y1);\n  sb = dx02 * (y - y0);\n  for(; y<=y2; y++) {\n    a   = x1 + sa / dy12;\n    b   = x0 + sb / dy02;\n    sa += dx12;\n    sb += dx02;\n    /* longhand:\n    a = x1 + (x2 - x1) * (y - y1) / (y2 - y1);\n    b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);\n    */\n    if(a > b) _swap_int16_t(a,b);\n    drawFastHLine(a, y, b-a+1, color);\n  }\n}\n\n// Draw a 1-bit image (bitmap) at the specified (x,y) position from the\n// provided bitmap buffer (must be PROGMEM memory) using the specified\n// foreground color (unset bits are transparent).\nvoid Adafruit_GFX::drawBitmap(int16_t x, int16_t y,\n const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) {\n\n  int16_t i, j, byteWidth = (w + 7) / 8;\n  uint8_t byte;\n\n  for(j=0; j<h; j++) {\n    for(i=0; i<w; i++) {\n      if(i & 7) byte <<= 1;\n      else      byte   = pgm_read_byte(bitmap + j * byteWidth + i / 8);\n      if(byte & 0x80) drawPixel(x+i, y+j, color);\n    }\n  }\n}\n\n// Draw a 1-bit image (bitmap) at the specified (x,y) position from the\n// provided bitmap buffer (must be PROGMEM memory) using the specified\n// foreground (for set bits) and background (for clear bits) colors.\nvoid Adafruit_GFX::drawBitmap(int16_t x, int16_t y,\n const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) {\n\n  int16_t i, j, byteWidth = (w + 7) / 8;\n  uint8_t byte;\n\n  for(j=0; j<h; j++) {\n    for(i=0; i<w; i++ ) {\n      if(i & 7) byte <<= 1;\n      else      byte   = pgm_read_byte(bitmap + j * byteWidth + i / 8);\n      if(byte & 0x80) drawPixel(x+i, y+j, color);\n      else            drawPixel(x+i, y+j, bg);\n    }\n  }\n}\n\n// drawBitmap() variant for RAM-resident (not PROGMEM) bitmaps.\nvoid Adafruit_GFX::drawBitmap(int16_t x, int16_t y,\n uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) {\n\n  int16_t i, j, byteWidth = (w + 7) / 8;\n  uint8_t byte;\n\n  for(j=0; j<h; j++) {\n    for(i=0; i<w; i++ ) {\n      if(i & 7) byte <<= 1;\n      else      byte   = bitmap[j * byteWidth + i / 8];\n      if(byte & 0x80) drawPixel(x+i, y+j, color);\n    }\n  }\n}\n\n// drawBitmap() variant w/background for RAM-resident (not PROGMEM) bitmaps.\nvoid Adafruit_GFX::drawBitmap(int16_t x, int16_t y,\n uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) {\n\n  int16_t i, j, byteWidth = (w + 7) / 8;\n  uint8_t byte;\n\n  for(j=0; j<h; j++) {\n    for(i=0; i<w; i++ ) {\n      if(i & 7) byte <<= 1;\n      else      byte   = bitmap[j * byteWidth + i / 8];\n      if(byte & 0x80) drawPixel(x+i, y+j, color);\n      else            drawPixel(x+i, y+j, bg);\n    }\n  }\n}\n\n//Draw XBitMap Files (*.xbm), exported from GIMP,\n//Usage: Export from GIMP to *.xbm, rename *.xbm to *.c and open in editor.\n//C Array can be directly used with this function\nvoid Adafruit_GFX::drawXBitmap(int16_t x, int16_t y,\n const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) {\n\n  int16_t i, j, byteWidth = (w + 7) / 8;\n  uint8_t byte;\n\n  for(j=0; j<h; j++) {\n    for(i=0; i<w; i++ ) {\n      if(i & 7) byte >>= 1;\n      else      byte   = pgm_read_byte(bitmap + j * byteWidth + i / 8);\n      if(byte & 0x01) drawPixel(x+i, y+j, color);\n    }\n  }\n}\n\n#if ARDUINO >= 100\nsize_t Adafruit_GFX::write(uint8_t c) {\n#else\nvoid Adafruit_GFX::write(uint8_t c) {\n#endif\n\n  if(!gfxFont) { // 'Classic' built-in font\n\n    if(c == '\\n') {\n      cursor_y += textsize*8;\n      cursor_x  = 0;\n    } else if(c == '\\r') {\n      // skip em\n    } else {\n      if(wrap && ((cursor_x + textsize * 6) >= _width)) { // Heading off edge?\n        cursor_x  = 0;            // Reset x to zero\n        cursor_y += textsize * 8; // Advance y one line\n      }\n      drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize);\n      cursor_x += textsize * 6;\n    }\n\n  } else { // Custom font\n\n    if(c == '\\n') {\n      cursor_x  = 0;\n      cursor_y += (int16_t)textsize *\n                  (uint8_t)pgm_read_byte(&gfxFont->yAdvance);\n    } else if(c != '\\r') {\n      uint8_t first = pgm_read_byte(&gfxFont->first);\n      if((c >= first) && (c <= (uint8_t)pgm_read_byte(&gfxFont->last))) {\n        uint8_t   c2    = c - pgm_read_byte(&gfxFont->first);\n        GFXglyph *glyph = &(((GFXglyph *)pgm_read_pointer(&gfxFont->glyph))[c2]);\n        uint8_t   w     = pgm_read_byte(&glyph->width),\n                  h     = pgm_read_byte(&glyph->height);\n        if((w > 0) && (h > 0)) { // Is there an associated bitmap?\n          int16_t xo = (int8_t)pgm_read_byte(&glyph->xOffset); // sic\n          if(wrap && ((cursor_x + textsize * (xo + w)) >= _width)) {\n            // Drawing character would go off right edge; wrap to new line\n            cursor_x  = 0;\n            cursor_y += (int16_t)textsize *\n                        (uint8_t)pgm_read_byte(&gfxFont->yAdvance);\n          }\n          drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize);\n        }\n        cursor_x += pgm_read_byte(&glyph->xAdvance) * (int16_t)textsize;\n      }\n    }\n\n  }\n#if ARDUINO >= 100\n  return 1;\n#endif\n}\n\n// Draw a character\nvoid Adafruit_GFX::drawChar(int16_t x, int16_t y, unsigned char c,\n uint16_t color, uint16_t bg, uint8_t size) {\n\n  if(!gfxFont) { // 'Classic' built-in font\n\n    if((x >= _width)            || // Clip right\n       (y >= _height)           || // Clip bottom\n       ((x + 6 * size - 1) < 0) || // Clip left\n       ((y + 8 * size - 1) < 0))   // Clip top\n      return;\n\n    if(!_cp437 && (c >= 176)) c++; // Handle 'classic' charset behavior\n\n    for(int8_t i=0; i<6; i++ ) {\n      uint8_t line;\n      if(i < 5) line = pgm_read_byte(font+(c*5)+i);\n      else      line = 0x0;\n      for(int8_t j=0; j<8; j++, line >>= 1) {\n        if(line & 0x1) {\n          if(size == 1) drawPixel(x+i, y+j, color);\n          else          fillRect(x+(i*size), y+(j*size), size, size, color);\n        } else if(bg != color) {\n          if(size == 1) drawPixel(x+i, y+j, bg);\n          else          fillRect(x+i*size, y+j*size, size, size, bg);\n        }\n      }\n    }\n\n  } else { // Custom font\n\n    // Character is assumed previously filtered by write() to eliminate\n    // newlines, returns, non-printable characters, etc.  Calling drawChar()\n    // directly with 'bad' characters of font may cause mayhem!\n\n    c -= pgm_read_byte(&gfxFont->first);\n    GFXglyph *glyph  = &(((GFXglyph *)pgm_read_pointer(&gfxFont->glyph))[c]);\n    uint8_t  *bitmap = (uint8_t *)pgm_read_pointer(&gfxFont->bitmap);\n\n    uint16_t bo = pgm_read_word(&glyph->bitmapOffset);\n    uint8_t  w  = pgm_read_byte(&glyph->width),\n             h  = pgm_read_byte(&glyph->height),\n             xa = pgm_read_byte(&glyph->xAdvance);\n    int8_t   xo = pgm_read_byte(&glyph->xOffset),\n             yo = pgm_read_byte(&glyph->yOffset);\n    uint8_t  xx, yy, bits, bit = 0;\n    int16_t  xo16, yo16;\n\n    if(size > 1) {\n      xo16 = xo;\n      yo16 = yo;\n    }\n\n    // Todo: Add character clipping here\n\n    // NOTE: THERE IS NO 'BACKGROUND' COLOR OPTION ON CUSTOM FONTS.\n    // THIS IS ON PURPOSE AND BY DESIGN.  The background color feature\n    // has typically been used with the 'classic' font to overwrite old\n    // screen contents with new data.  This ONLY works because the\n    // characters are a uniform size; it's not a sensible thing to do with\n    // proportionally-spaced fonts with glyphs of varying sizes (and that\n    // may overlap).  To replace previously-drawn text when using a custom\n    // font, use the getTextBounds() function to determine the smallest\n    // rectangle encompassing a string, erase the area with fillRect(),\n    // then draw new text.  This WILL infortunately 'blink' the text, but\n    // is unavoidable.  Drawing 'background' pixels will NOT fix this,\n    // only creates a new set of problems.  Have an idea to work around\n    // this (a canvas object type for MCUs that can afford the RAM and\n    // displays supporting setAddrWindow() and pushColors()), but haven't\n    // implemented this yet.\n\n    for(yy=0; yy<h; yy++) {\n      for(xx=0; xx<w; xx++) {\n        if(!(bit++ & 7)) {\n          bits = pgm_read_byte(&bitmap[bo++]);\n        }\n        if(bits & 0x80) {\n          if(size == 1) {\n            drawPixel(x+xo+xx, y+yo+yy, color);\n          } else {\n            fillRect(x+(xo16+xx)*size, y+(yo16+yy)*size, size, size, color);\n          }\n        }\n        bits <<= 1;\n      }\n    }\n\n  } // End classic vs custom font\n}\n\nvoid Adafruit_GFX::setCursor(int16_t x, int16_t y) {\n  cursor_x = x;\n  cursor_y = y;\n}\n\nint16_t Adafruit_GFX::getCursorX(void) const {\n  return cursor_x;\n}\n\nint16_t Adafruit_GFX::getCursorY(void) const {\n  return cursor_y;\n}\n\nvoid Adafruit_GFX::setTextSize(uint8_t s) {\n  textsize = (s > 0) ? s : 1;\n}\n\nvoid Adafruit_GFX::setTextColor(uint16_t c) {\n  // For 'transparent' background, we'll set the bg\n  // to the same as fg instead of using a flag\n  textcolor = textbgcolor = c;\n}\n\nvoid Adafruit_GFX::setTextColor(uint16_t c, uint16_t b) {\n  textcolor   = c;\n  textbgcolor = b;\n}\n\nvoid Adafruit_GFX::setTextWrap(boolean w) {\n  wrap = w;\n}\n\nuint8_t Adafruit_GFX::getRotation(void) const {\n  return rotation;\n}\n\nvoid Adafruit_GFX::setRotation(uint8_t x) {\n  rotation = (x & 3);\n  switch(rotation) {\n   case 0:\n   case 2:\n    _width  = WIDTH;\n    _height = HEIGHT;\n    break;\n   case 1:\n   case 3:\n    _width  = HEIGHT;\n    _height = WIDTH;\n    break;\n  }\n}\n\n// Enable (or disable) Code Page 437-compatible charset.\n// There was an error in glcdfont.c for the longest time -- one character\n// (#176, the 'light shade' block) was missing -- this threw off the index\n// of every character that followed it.  But a TON of code has been written\n// with the erroneous character indices.  By default, the library uses the\n// original 'wrong' behavior and old sketches will still work.  Pass 'true'\n// to this function to use correct CP437 character values in your code.\nvoid Adafruit_GFX::cp437(boolean x) {\n  _cp437 = x;\n}\n\nvoid Adafruit_GFX::setFont(const GFXfont *f) {\n  if(f) {          // Font struct pointer passed in?\n    if(!gfxFont) { // And no current font struct?\n      // Switching from classic to new font behavior.\n      // Move cursor pos down 6 pixels so it's on baseline.\n      cursor_y += 6;\n    }\n  } else if(gfxFont) { // NULL passed.  Current font struct defined?\n    // Switching from new to classic font behavior.\n    // Move cursor pos up 6 pixels so it's at top-left of char.\n    cursor_y -= 6;\n  }\n  gfxFont = (GFXfont *)f;\n}\n\n// Pass string and a cursor position, returns UL corner and W,H.\nvoid Adafruit_GFX::getTextBounds(char *str, int16_t x, int16_t y,\n int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h) {\n  uint8_t c; // Current character\n\n  *x1 = x;\n  *y1 = y;\n  *w  = *h = 0;\n\n  if(gfxFont) {\n\n    GFXglyph *glyph;\n    uint8_t   first = pgm_read_byte(&gfxFont->first),\n              last  = pgm_read_byte(&gfxFont->last),\n              gw, gh, xa;\n    int8_t    xo, yo;\n    int16_t   minx = _width, miny = _height, maxx = -1, maxy = -1,\n              gx1, gy1, gx2, gy2, ts = (int16_t)textsize,\n              ya = ts * (uint8_t)pgm_read_byte(&gfxFont->yAdvance);\n\n    while((c = *str++)) {\n      if(c != '\\n') { // Not a newline\n        if(c != '\\r') { // Not a carriage return, is normal char\n          if((c >= first) && (c <= last)) { // Char present in current font\n            c    -= first;\n            glyph = &(((GFXglyph *)pgm_read_pointer(&gfxFont->glyph))[c]);\n            gw    = pgm_read_byte(&glyph->width);\n            gh    = pgm_read_byte(&glyph->height);\n            xa    = pgm_read_byte(&glyph->xAdvance);\n            xo    = pgm_read_byte(&glyph->xOffset);\n            yo    = pgm_read_byte(&glyph->yOffset);\n            if(wrap && ((x + (((int16_t)xo + gw) * ts)) >= _width)) {\n              // Line wrap\n              x  = 0;  // Reset x to 0\n              y += ya; // Advance y by 1 line\n            }\n            gx1 = x   + xo * ts;\n            gy1 = y   + yo * ts;\n            gx2 = gx1 + gw * ts - 1;\n            gy2 = gy1 + gh * ts - 1;\n            if(gx1 < minx) minx = gx1;\n            if(gy1 < miny) miny = gy1;\n            if(gx2 > maxx) maxx = gx2;\n            if(gy2 > maxy) maxy = gy2;\n            x += xa * ts;\n          }\n        } // Carriage return = do nothing\n      } else { // Newline\n        x  = 0;  // Reset x\n        y += ya; // Advance y by 1 line\n      }\n    }\n    // End of string\n    *x1 = minx;\n    *y1 = miny;\n    if(maxx >= minx) *w  = maxx - minx + 1;\n    if(maxy >= miny) *h  = maxy - miny + 1;\n\n  } else { // Default font\n\n    uint16_t lineWidth = 0, maxWidth = 0; // Width of current, all lines\n\n    while((c = *str++)) {\n      if(c != '\\n') { // Not a newline\n        if(c != '\\r') { // Not a carriage return, is normal char\n          if(wrap && ((x + textsize * 6) >= _width)) {\n            x  = 0;            // Reset x to 0\n            y += textsize * 8; // Advance y by 1 line\n            if(lineWidth > maxWidth) maxWidth = lineWidth; // Save widest line\n            lineWidth  = textsize * 6; // First char on new line\n          } else { // No line wrap, just keep incrementing X\n            lineWidth += textsize * 6; // Includes interchar x gap\n          }\n        } // Carriage return = do nothing\n      } else { // Newline\n        x  = 0;            // Reset x to 0\n        y += textsize * 8; // Advance y by 1 line\n        if(lineWidth > maxWidth) maxWidth = lineWidth; // Save widest line\n        lineWidth = 0;     // Reset lineWidth for new line\n      }\n    }\n    // End of string\n    if(lineWidth) y += textsize * 8; // Add height of last (or only) line\n    if(lineWidth > maxWidth) maxWidth = lineWidth; // Is the last or only line the widest?\n    *w = maxWidth - 1;               // Don't include last interchar x gap\n    *h = y - *y1;\n\n  } // End classic vs custom font\n}\n\n// Same as above, but for PROGMEM strings\nvoid Adafruit_GFX::getTextBounds(const __FlashStringHelper *str,\n int16_t x, int16_t y, int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h) {\n  uint8_t *s = (uint8_t *)str, c;\n\n  *x1 = x;\n  *y1 = y;\n  *w  = *h = 0;\n\n  if(gfxFont) {\n\n    GFXglyph *glyph;\n    uint8_t   first = pgm_read_byte(&gfxFont->first),\n              last  = pgm_read_byte(&gfxFont->last),\n              gw, gh, xa;\n    int8_t    xo, yo;\n    int16_t   minx = _width, miny = _height, maxx = -1, maxy = -1,\n              gx1, gy1, gx2, gy2, ts = (int16_t)textsize,\n              ya = ts * (uint8_t)pgm_read_byte(&gfxFont->yAdvance);\n\n    while((c = pgm_read_byte(s++))) {\n      if(c != '\\n') { // Not a newline\n        if(c != '\\r') { // Not a carriage return, is normal char\n          if((c >= first) && (c <= last)) { // Char present in current font\n            c    -= first;\n            glyph = &(((GFXglyph *)pgm_read_pointer(&gfxFont->glyph))[c]);\n            gw    = pgm_read_byte(&glyph->width);\n            gh    = pgm_read_byte(&glyph->height);\n            xa    = pgm_read_byte(&glyph->xAdvance);\n            xo    = pgm_read_byte(&glyph->xOffset);\n            yo    = pgm_read_byte(&glyph->yOffset);\n            if(wrap && ((x + (((int16_t)xo + gw) * ts)) >= _width)) {\n              // Line wrap\n              x  = 0;  // Reset x to 0\n              y += ya; // Advance y by 1 line\n            }\n            gx1 = x   + xo * ts;\n            gy1 = y   + yo * ts;\n            gx2 = gx1 + gw * ts - 1;\n            gy2 = gy1 + gh * ts - 1;\n            if(gx1 < minx) minx = gx1;\n            if(gy1 < miny) miny = gy1;\n            if(gx2 > maxx) maxx = gx2;\n            if(gy2 > maxy) maxy = gy2;\n            x += xa * ts;\n          }\n        } // Carriage return = do nothing\n      } else { // Newline\n        x  = 0;  // Reset x\n        y += ya; // Advance y by 1 line\n      }\n    }\n    // End of string\n    *x1 = minx;\n    *y1 = miny;\n    if(maxx >= minx) *w  = maxx - minx + 1;\n    if(maxy >= miny) *h  = maxy - miny + 1;\n\n  } else { // Default font\n\n    uint16_t lineWidth = 0, maxWidth = 0; // Width of current, all lines\n\n    while((c = pgm_read_byte(s++))) {\n      if(c != '\\n') { // Not a newline\n        if(c != '\\r') { // Not a carriage return, is normal char\n          if(wrap && ((x + textsize * 6) >= _width)) {\n            x  = 0;            // Reset x to 0\n            y += textsize * 8; // Advance y by 1 line\n            if(lineWidth > maxWidth) maxWidth = lineWidth; // Save widest line\n            lineWidth  = textsize * 6; // First char on new line\n          } else { // No line wrap, just keep incrementing X\n            lineWidth += textsize * 6; // Includes interchar x gap\n          }\n        } // Carriage return = do nothing\n      } else { // Newline\n        x  = 0;            // Reset x to 0\n        y += textsize * 8; // Advance y by 1 line\n        if(lineWidth > maxWidth) maxWidth = lineWidth; // Save widest line\n        lineWidth = 0;     // Reset lineWidth for new line\n      }\n    }\n    // End of string\n    if(lineWidth) y += textsize * 8; // Add height of last (or only) line\n    if(lineWidth > maxWidth) maxWidth = lineWidth; // Is the last or only line the widest?\n    *w = maxWidth - 1;               // Don't include last interchar x gap\n    *h = y - *y1;\n\n  } // End classic vs custom font\n}\n\n// Return the size of the display (per current rotation)\nint16_t Adafruit_GFX::width(void) const {\n  return _width;\n}\n\nint16_t Adafruit_GFX::height(void) const {\n  return _height;\n}\n\nvoid Adafruit_GFX::invertDisplay(boolean i) {\n  // Do nothing, must be subclassed if supported by hardware\n}\n\n/***************************************************************************/\n// code for the GFX button UI element\n\nAdafruit_GFX_Button::Adafruit_GFX_Button(void) {\n  _gfx = 0;\n}\n\nvoid Adafruit_GFX_Button::initButton(\n Adafruit_GFX *gfx, int16_t x, int16_t y, uint8_t w, uint8_t h,\n uint16_t outline, uint16_t fill, uint16_t textcolor,\n char *label, uint8_t textsize)\n{\n  _x            = x;\n  _y            = y;\n  _w            = w;\n  _h            = h;\n  _outlinecolor = outline;\n  _fillcolor    = fill;\n  _textcolor    = textcolor;\n  _textsize     = textsize;\n  _gfx          = gfx;\n  strncpy(_label, label, 9);\n  _label[9] = 0;\n}\n\nvoid Adafruit_GFX_Button::drawButton(boolean inverted) {\n  uint16_t fill, outline, text;\n\n  if(!inverted) {\n    fill    = _fillcolor;\n    outline = _outlinecolor;\n    text    = _textcolor;\n  } else {\n    fill    = _textcolor;\n    outline = _outlinecolor;\n    text    = _fillcolor;\n  }\n\n  _gfx->fillRoundRect(_x - (_w/2), _y - (_h/2), _w, _h, min(_w,_h)/4, fill);\n  _gfx->drawRoundRect(_x - (_w/2), _y - (_h/2), _w, _h, min(_w,_h)/4, outline);\n\n  _gfx->setCursor(_x - strlen(_label)*3*_textsize, _y-4*_textsize);\n  _gfx->setTextColor(text);\n  _gfx->setTextSize(_textsize);\n  _gfx->print(_label);\n}\n\nboolean Adafruit_GFX_Button::contains(int16_t x, int16_t y) {\n  if ((x < (_x - _w/2)) || (x > (_x + _w/2))) return false;\n  if ((y < (_y - _h/2)) || (y > (_y + _h/2))) return false;\n  return true;\n}\n\nvoid Adafruit_GFX_Button::press(boolean p) {\n  laststate = currstate;\n  currstate = p;\n}\n\nboolean Adafruit_GFX_Button::isPressed() { return currstate; }\nboolean Adafruit_GFX_Button::justPressed() { return (currstate && !laststate); }\nboolean Adafruit_GFX_Button::justReleased() { return (!currstate && laststate); }\n\n// -------------------------------------------------------------------------\n\n// GFXcanvas1 and GFXcanvas16 (currently a WIP, don't get too comfy with the\n// implementation) provide 1- and 16-bit offscreen canvases, the address of\n// which can be passed to drawBitmap() or pushColors() (the latter appears\n// to only be in Adafruit_TFTLCD at this time).  This is here mostly to\n// help with the recently-added proportionally-spaced fonts; adds a way to\n// refresh a section of the screen without a massive flickering clear-and-\n// redraw...but maybe you'll find other uses too.  VERY RAM-intensive, since\n// the buffer is in MCU memory and not the display driver...GXFcanvas1 might\n// be minimally useful on an Uno-class board, but this and GFXcanvas16 are\n// much more likely to require at least a Mega or various recent ARM-type\n// boards (recomment, as the text+bitmap draw can be pokey).  GFXcanvas1\n// requires 1 bit per pixel (rounded up to nearest byte per scanline),\n// GFXcanvas16 requires 2 bytes per pixel (no scanline pad).\n// NOT EXTENSIVELY TESTED YET.  MAY CONTAIN WORST BUGS KNOWN TO HUMANKIND.\n\nGFXcanvas1::GFXcanvas1(uint16_t w, uint16_t h) : Adafruit_GFX(w, h) {\n  uint16_t bytes = ((w + 7) / 8) * h;\n  if((buffer = (uint8_t *)malloc(bytes))) {\n    memset(buffer, 0, bytes);\n  }\n}\n\nGFXcanvas1::~GFXcanvas1(void) {\n  if(buffer) free(buffer);\n}\n\nuint8_t* GFXcanvas1::getBuffer(void) {\n  return buffer;\n}\n\nvoid GFXcanvas1::drawPixel(int16_t x, int16_t y, uint16_t color) {\n  // Bitmask tables of 0x80>>X and ~(0x80>>X), because X>>Y is slow on AVR\n  static const uint8_t PROGMEM\n    GFXsetBit[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 },\n    GFXclrBit[] = { 0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE };\n\n  if(buffer) {\n    if((x < 0) || (y < 0) || (x >= _width) || (y >= _height)) return;\n\n    int16_t t;\n    switch(rotation) {\n     case 1:\n      t = x;\n      x = WIDTH  - 1 - y;\n      y = t;\n      break;\n     case 2:\n      x = WIDTH  - 1 - x;\n      y = HEIGHT - 1 - y;\n      break;\n     case 3:\n      t = x;\n      x = y;\n      y = HEIGHT - 1 - t;\n      break;\n    }\n\n    uint8_t *ptr = &buffer[(x / 8) + y * ((WIDTH + 7) / 8)];\n    if(color) *ptr |= pgm_read_byte(&GFXsetBit[x & 7]);\n    else      *ptr &= pgm_read_byte(&GFXclrBit[x & 7]);\n  }\n}\n\nvoid GFXcanvas1::fillScreen(uint16_t color) {\n  if(buffer) {\n    uint16_t bytes = ((WIDTH + 7) / 8) * HEIGHT;\n    memset(buffer, color ? 0xFF : 0x00, bytes);\n  }\n}\n\nGFXcanvas16::GFXcanvas16(uint16_t w, uint16_t h) : Adafruit_GFX(w, h) {\n  uint16_t bytes = w * h * 2;\n  if((buffer = (uint16_t *)malloc(bytes))) {\n    memset(buffer, 0, bytes);\n  }\n}\n\nGFXcanvas16::~GFXcanvas16(void) {\n  if(buffer) free(buffer);\n}\n\nuint16_t* GFXcanvas16::getBuffer(void) {\n  return buffer;\n}\n\nvoid GFXcanvas16::drawPixel(int16_t x, int16_t y, uint16_t color) {\n  if(buffer) {\n    if((x < 0) || (y < 0) || (x >= _width) || (y >= _height)) return;\n\n    int16_t t;\n    switch(rotation) {\n     case 1:\n      t = x;\n      x = WIDTH  - 1 - y;\n      y = t;\n      break;\n     case 2:\n      x = WIDTH  - 1 - x;\n      y = HEIGHT - 1 - y;\n      break;\n     case 3:\n      t = x;\n      x = y;\n      y = HEIGHT - 1 - t;\n      break;\n    }\n\n    buffer[x + y * WIDTH] = color;\n  }\n}\n\nvoid GFXcanvas16::fillScreen(uint16_t color) {\n  if(buffer) {\n    uint8_t hi = color >> 8, lo = color & 0xFF;\n    if(hi == lo) {\n      memset(buffer, lo, WIDTH * HEIGHT * 2);\n    } else {\n      uint16_t i, pixels = WIDTH * HEIGHT;\n      for(i=0; i<pixels; i++) buffer[i] = color;\n    }\n  }\n}\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/Adafruit_GFX.h",
    "content": "#ifndef _ADAFRUIT_GFX_H\n#define _ADAFRUIT_GFX_H\n\n#if ARDUINO >= 100\n #include \"Arduino.h\"\n #include \"Print.h\"\n#else\n #include \"WProgram.h\"\n#endif\n\n#include \"gfxfont.h\"\n\nclass Adafruit_GFX : public Print {\n\n public:\n\n  Adafruit_GFX(int16_t w, int16_t h); // Constructor\n\n  // This MUST be defined by the subclass:\n  virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;\n\n  // These MAY be overridden by the subclass to provide device-specific\n  // optimized code.  Otherwise 'generic' versions are used.\n  virtual void\n    drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color),\n    drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color),\n    drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color),\n    drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),\n    fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),\n    fillScreen(uint16_t color),\n    invertDisplay(boolean i);\n\n  // These exist only with Adafruit_GFX (no subclass overrides)\n  void\n    drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),\n    drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername,\n      uint16_t color),\n    fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),\n    fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername,\n      int16_t delta, uint16_t color),\n    drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1,\n      int16_t x2, int16_t y2, uint16_t color),\n    fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1,\n      int16_t x2, int16_t y2, uint16_t color),\n    drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,\n      int16_t radius, uint16_t color),\n    fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,\n      int16_t radius, uint16_t color),\n    drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap,\n      int16_t w, int16_t h, uint16_t color),\n    drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap,\n      int16_t w, int16_t h, uint16_t color, uint16_t bg),\n    drawBitmap(int16_t x, int16_t y, uint8_t *bitmap,\n      int16_t w, int16_t h, uint16_t color),\n    drawBitmap(int16_t x, int16_t y, uint8_t *bitmap,\n      int16_t w, int16_t h, uint16_t color, uint16_t bg),\n    drawXBitmap(int16_t x, int16_t y, const uint8_t *bitmap,\n      int16_t w, int16_t h, uint16_t color),\n    drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color,\n      uint16_t bg, uint8_t size),\n    setCursor(int16_t x, int16_t y),\n    setTextColor(uint16_t c),\n    setTextColor(uint16_t c, uint16_t bg),\n    setTextSize(uint8_t s),\n    setTextWrap(boolean w),\n    setRotation(uint8_t r),\n    cp437(boolean x=true),\n    setFont(const GFXfont *f = NULL),\n    getTextBounds(char *string, int16_t x, int16_t y,\n      int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h),\n    getTextBounds(const __FlashStringHelper *s, int16_t x, int16_t y,\n      int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h);\n\n#if ARDUINO >= 100\n  virtual size_t write(uint8_t);\n#else\n  virtual void   write(uint8_t);\n#endif\n\n  int16_t height(void) const;\n  int16_t width(void) const;\n\n  uint8_t getRotation(void) const;\n\n  // get current cursor position (get rotation safe maximum values, using: width() for x, height() for y)\n  int16_t getCursorX(void) const;\n  int16_t getCursorY(void) const;\n\n protected:\n  const int16_t\n    WIDTH, HEIGHT;   // This is the 'raw' display w/h - never changes\n  int16_t\n    _width, _height, // Display w/h as modified by current rotation\n    cursor_x, cursor_y;\n  uint16_t\n    textcolor, textbgcolor;\n  uint8_t\n    textsize,\n    rotation;\n  boolean\n    wrap,   // If set, 'wrap' text at right edge of display\n    _cp437; // If set, use correct CP437 charset (default is off)\n  GFXfont\n    *gfxFont;\n};\n\nclass Adafruit_GFX_Button {\n\n public:\n  Adafruit_GFX_Button(void);\n  void initButton(Adafruit_GFX *gfx, int16_t x, int16_t y,\n   uint8_t w, uint8_t h, uint16_t outline, uint16_t fill,\n   uint16_t textcolor, char *label, uint8_t textsize);\n  void drawButton(boolean inverted = false);\n  boolean contains(int16_t x, int16_t y);\n\n  void press(boolean p);\n  boolean isPressed();\n  boolean justPressed();\n  boolean justReleased();\n\n private:\n  Adafruit_GFX *_gfx;\n  int16_t _x, _y;\n  uint16_t _w, _h;\n  uint8_t _textsize;\n  uint16_t _outlinecolor, _fillcolor, _textcolor;\n  char _label[10];\n\n  boolean currstate, laststate;\n};\n\nclass GFXcanvas1 : public Adafruit_GFX {\n\n public:\n  GFXcanvas1(uint16_t w, uint16_t h);\n  ~GFXcanvas1(void);\n  void     drawPixel(int16_t x, int16_t y, uint16_t color),\n           fillScreen(uint16_t color);\n  uint8_t *getBuffer(void);\n private:\n  uint8_t *buffer;\n};\n\nclass GFXcanvas16 : public Adafruit_GFX {\n  GFXcanvas16(uint16_t w, uint16_t h);\n  ~GFXcanvas16(void);\n  void      drawPixel(int16_t x, int16_t y, uint16_t color),\n            fillScreen(uint16_t color);\n  uint16_t *getBuffer(void);\n private:\n  uint16_t *buffer;\n};\n\n#endif // _ADAFRUIT_GFX_H\n"
  },
  {
    "path": "firmware/stepper_nano_zero/Adafruit_SSD1306.cpp",
    "content": "/*********************************************************************\nThis is a library for our Monochrome OLEDs based on SSD1306 drivers\n\n  Pick one up today in the adafruit shop!\n  ------> http://www.adafruit.com/category/63_98\n\nThese displays use SPI to communicate, 4 or 5 pins are required to\ninterface\n\nAdafruit invests time and resources providing this open source code,\nplease support Adafruit and open-source hardware by purchasing\nproducts from Adafruit!\n\nWritten by Limor Fried/Ladyada  for Adafruit Industries.\nBSD license, check license.txt for more information\nAll text above, and the splash screen below must be included in any redistribution\n *********************************************************************/\n\n#ifdef __AVR__\n#include <avr/pgmspace.h>\n#elif defined(ESP8266)\n#include <pgmspace.h>\n#else\n#define pgm_read_byte(addr) (*(const unsigned char *)(addr))\n#endif\n\n#if !defined(__ARM_ARCH) && !defined(ENERGIA) && !defined(ESP8266)\n#include <util/delay.h>\n#endif\n\n#include <stdlib.h>\n\n#include <Wire.h>\n#include <SPI.h>\n#include \"Adafruit_GFX.h\"\n#include \"Adafruit_SSD1306.h\"\n#include \"syslog.h\"\n\n// the memory buffer for the LCD\n\nstatic uint8_t buffer[SSD1306_LCDHEIGHT * SSD1306_LCDWIDTH / 8] = {\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,\n\t\t0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x80, 0x80, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,\n\t\t0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xFF,\n#if (SSD1306_LCDHEIGHT * SSD1306_LCDWIDTH > 96*16)\n\t\t0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,\n\t\t0x80, 0xFF, 0xFF, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x8C, 0x8E, 0x84, 0x00, 0x00, 0x80, 0xF8,\n\t\t0xF8, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x80,\n\t\t0x00, 0xE0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xC7, 0x01, 0x01,\n\t\t0x01, 0x01, 0x83, 0xFF, 0xFF, 0x00, 0x00, 0x7C, 0xFE, 0xC7, 0x01, 0x01, 0x01, 0x01, 0x83, 0xFF,\n\t\t0xFF, 0xFF, 0x00, 0x38, 0xFE, 0xC7, 0x83, 0x01, 0x01, 0x01, 0x83, 0xC7, 0xFF, 0xFF, 0x00, 0x00,\n\t\t0x01, 0xFF, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0xFF, 0x07, 0x01, 0x01, 0x01, 0x00, 0x00, 0x7F, 0xFF,\n\t\t0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF,\n\t\t0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x03, 0x0F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC7, 0xC7, 0x8F,\n\t\t0x8F, 0x9F, 0xBF, 0xFF, 0xFF, 0xC3, 0xC0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xFC,\n\t\t0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xC0, 0x00, 0x01, 0x03, 0x03, 0x03,\n\t\t0x03, 0x03, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01,\n\t\t0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00,\n\t\t0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,\n\t\t0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x03,\n\t\t0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n#if (SSD1306_LCDHEIGHT == 64)\n\t\t0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x0F,\n\t\t0x87, 0xC7, 0xF7, 0xFF, 0xFF, 0x1F, 0x1F, 0x3D, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0x7C, 0x7D, 0xFF,\n\t\t0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F, 0x07, 0x00, 0x30, 0x30, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC0, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0xC0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x3F, 0x1F,\n\t\t0x0F, 0x07, 0x1F, 0x7F, 0xFF, 0xFF, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xE0,\n\t\t0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00,\n\t\t0x00, 0xFC, 0xFE, 0xFC, 0x0C, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0xF0, 0xF8, 0x1C, 0x0E,\n\t\t0x06, 0x06, 0x06, 0x0C, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFC,\n\t\t0xFE, 0xFC, 0x00, 0x18, 0x3C, 0x7E, 0x66, 0xE6, 0xCE, 0x84, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0x06,\n\t\t0x06, 0xFC, 0xFE, 0xFC, 0x0C, 0x06, 0x06, 0x06, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0xC0, 0xF8,\n\t\t0xFC, 0x4E, 0x46, 0x46, 0x46, 0x4E, 0x7C, 0x78, 0x40, 0x18, 0x3C, 0x76, 0xE6, 0xCE, 0xCC, 0x80,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x0F, 0x03,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00,\n\t\t0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x03, 0x07, 0x0E, 0x0C,\n\t\t0x18, 0x18, 0x0C, 0x06, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x01, 0x0F, 0x0E, 0x0C, 0x18, 0x0C, 0x0F,\n\t\t0x07, 0x01, 0x00, 0x04, 0x0E, 0x0C, 0x18, 0x0C, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00,\n\t\t0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x07,\n\t\t0x07, 0x0C, 0x0C, 0x18, 0x1C, 0x0C, 0x06, 0x06, 0x00, 0x04, 0x0E, 0x0C, 0x18, 0x0C, 0x0F, 0x07,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n#endif\n#endif\n};\n\n#define ssd1306_swap(a, b) { int16_t t = a; a = b; b = t; }\n\n// the most basic function, set a single pixel\nvoid Adafruit_SSD1306::drawPixel(int16_t x, int16_t y, uint16_t color) {\n\tif ((x < 0) || (x >= width()) || (y < 0) || (y >= height()))\n\t\treturn;\n\n\t// check rotation, move pixel around if necessary\n\tswitch (getRotation()) {\n\t\tcase 1:\n\t\t\tssd1306_swap(x, y);\n\t\t\tx = WIDTH - x - 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tx = WIDTH - x - 1;\n\t\t\ty = HEIGHT - y - 1;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tssd1306_swap(x, y);\n\t\t\ty = HEIGHT - y - 1;\n\t\t\tbreak;\n\t}\n\n\t// x is which column\n\tswitch (color)\n\t{\n\t\tcase WHITE:   buffer[x+ (y/8)*SSD1306_LCDWIDTH] |=  (1 << (y&7)); break;\n\t\tcase BLACK:   buffer[x+ (y/8)*SSD1306_LCDWIDTH] &= ~(1 << (y&7)); break;\n\t\tcase INVERSE: buffer[x+ (y/8)*SSD1306_LCDWIDTH] ^=  (1 << (y&7)); break;\n\t}\n\n}\n\nAdafruit_SSD1306::Adafruit_SSD1306(int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS) : Adafruit_GFX(SSD1306_LCDWIDTH, SSD1306_LCDHEIGHT) {\n\tcs = CS;\n\trst = RST;\n\tdc = DC;\n\tsclk = SCLK;\n\tsid = SID;\n\thwSPI = false;\n}\n\n// constructor for hardware SPI - we indicate DataCommand, ChipSelect, Reset\nAdafruit_SSD1306::Adafruit_SSD1306(int8_t DC, int8_t RST, int8_t CS) : Adafruit_GFX(SSD1306_LCDWIDTH, SSD1306_LCDHEIGHT) {\n\tdc = DC;\n\trst = RST;\n\tcs = CS;\n\thwSPI = true;\n}\n\n// initializer for I2C - we only indicate the reset pin!\nAdafruit_SSD1306::Adafruit_SSD1306(int8_t reset) :\n\t\tAdafruit_GFX(SSD1306_LCDWIDTH, SSD1306_LCDHEIGHT) {\n\tsclk = dc = cs = sid = -1;\n\trst = reset;\n}\n\n\nbool Adafruit_SSD1306::begin(uint8_t vccstate, uint8_t i2caddr, bool reset) {\n\t_vccstate = vccstate;\n\t_i2caddr = i2caddr;\n\n\t// set pin directions\n\tif (sid != -1){\n\t\tpinMode(dc, OUTPUT);\n\t\tpinMode(cs, OUTPUT);\n#ifdef HAVE_PORTREG\n\t\tcsport      = portOutputRegister(digitalPinToPort(cs));\n\t\tcspinmask   = digitalPinToBitMask(cs);\n\t\tdcport      = portOutputRegister(digitalPinToPort(dc));\n\t\tdcpinmask   = digitalPinToBitMask(dc);\n#endif\n\t\tif (!hwSPI){\n\t\t\t// set pins for software-SPI\n\t\t\tpinMode(sid, OUTPUT);\n\t\t\tpinMode(sclk, OUTPUT);\n#ifdef HAVE_PORTREG\n\t\t\tclkport     = portOutputRegister(digitalPinToPort(sclk));\n\t\t\tclkpinmask  = digitalPinToBitMask(sclk);\n\t\t\tmosiport    = portOutputRegister(digitalPinToPort(sid));\n\t\t\tmosipinmask = digitalPinToBitMask(sid);\n#endif\n\t\t}\n\t\tif (hwSPI){\n\t\t\tSPI.begin();\n#ifdef SPI_HAS_TRANSACTION\n\t\t\tSPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));\n#else\n\t\t\tSPI.setClockDivider (4);\n#endif\n\t\t}\n\t}\n\telse\n\t{\n\t\t// I2C Init\n\t\tWire.begin();\n#ifdef __SAM3X8E__\n\t\t// Force 400 KHz I2C, rawr! (Uses pins 20, 21 for SDA, SCL)\n\t\tTWI1->TWI_CWGR = 0;\n\t\tTWI1->TWI_CWGR = ((VARIANT_MCK / (2 * 400000)) - 4) * 0x101;\n#endif\n\t}\n\tif ((reset) && (rst >= 0)) {\n\t\t// Setup reset pin direction (used by both SPI and I2C)\n\t\tpinMode(rst, OUTPUT);\n\t\tdigitalWrite(rst, HIGH);\n\t\t// VDD (3.3V) goes high at start, lets just chill for a ms\n\t\tdelay(1);\n\t\t// bring reset low\n\t\tdigitalWrite(rst, LOW);\n\t\t// wait 10ms\n\t\tdelay(10);\n\t\t// bring out of reset\n\t\tdigitalWrite(rst, HIGH);\n\t\t// turn on VCC (9V?)\n\t}\n\n\tuint8_t ret;\n\t// Init sequence\n\tLOG(\"Sending LCD display off\");\n\tret=ssd1306_command(SSD1306_DISPLAYOFF);                    // 0xAE\n\tLOG(\"Display off returned %d\",ret);\n\tif (ret != 0)\n\t{\n\n\t\treturn false;\n\t}\n\tssd1306_command(SSD1306_SETDISPLAYCLOCKDIV);            // 0xD5\n\tssd1306_command(0x80);                                  // the suggested ratio 0x80\n\n\tssd1306_command(SSD1306_SETMULTIPLEX);                  // 0xA8\n\tssd1306_command(SSD1306_LCDHEIGHT - 1);\n\n\tssd1306_command(SSD1306_SETDISPLAYOFFSET);              // 0xD3\n\tssd1306_command(0x0);                                   // no offset\n\tssd1306_command(SSD1306_SETSTARTLINE | 0x0);            // line #0\n\tssd1306_command(SSD1306_CHARGEPUMP);                    // 0x8D\n\tif (vccstate == SSD1306_EXTERNALVCC)\n\t{ ssd1306_command(0x10); }\n\telse\n\t{ ssd1306_command(0x14); }\n\tssd1306_command(SSD1306_MEMORYMODE);                    // 0x20\n\tssd1306_command(0x00);                                  // 0x0 act like ks0108\n\tssd1306_command(SSD1306_SEGREMAP | 0x1);\n\tssd1306_command(SSD1306_COMSCANDEC);\n\n#if defined SSD1306_128_32\n\tssd1306_command(SSD1306_SETCOMPINS);                    // 0xDA\n\tssd1306_command(0x02);\n\tssd1306_command(SSD1306_SETCONTRAST);                   // 0x81\n\tssd1306_command(0x8F);\n\n#elif defined SSD1306_128_64\n\tssd1306_command(SSD1306_SETCOMPINS);                    // 0xDA\n\tssd1306_command(0x12);\n\tssd1306_command(SSD1306_SETCONTRAST);                   // 0x81\n\tif (vccstate == SSD1306_EXTERNALVCC)\n\t{ ssd1306_command(0x9F); }\n\telse\n\t{ ssd1306_command(0xCF); }\n\n#elif defined SSD1306_96_16\n\tssd1306_command(SSD1306_SETCOMPINS);                    // 0xDA\n\tssd1306_command(0x2);   //ada x12\n\tssd1306_command(SSD1306_SETCONTRAST);                   // 0x81\n\tif (vccstate == SSD1306_EXTERNALVCC)\n\t{ ssd1306_command(0x10); }\n\telse\n\t{ ssd1306_command(0xAF); }\n\n#endif\n\n\tssd1306_command(SSD1306_SETPRECHARGE);                  // 0xd9\n\tif (vccstate == SSD1306_EXTERNALVCC)\n\t{ ssd1306_command(0x22); }\n\telse\n\t{ ssd1306_command(0xF1); }\n\tssd1306_command(SSD1306_SETVCOMDETECT);                 // 0xDB\n\tssd1306_command(0x40);\n\tssd1306_command(SSD1306_DISPLAYALLON_RESUME);           // 0xA4\n\tssd1306_command(SSD1306_NORMALDISPLAY);                 // 0xA6\n\n\tssd1306_command(SSD1306_DEACTIVATE_SCROLL);\n\n\tssd1306_command(SSD1306_DISPLAYON);//--turn on oled panel\n\treturn true;\n}\n\n\nvoid Adafruit_SSD1306::invertDisplay(uint8_t i) {\n\tif (i) {\n\t\tssd1306_command(SSD1306_INVERTDISPLAY);\n\t} else {\n\t\tssd1306_command(SSD1306_NORMALDISPLAY);\n\t}\n}\n\n// Errors:\n//  0 : Success\n//  1 : Data too long\n//  2 : NACK on transmit of address\n//  3 : NACK on transmit of data\n//  4 : Other error\nuint8_t Adafruit_SSD1306::ssd1306_command(uint8_t c) {\n\tif (sid != -1)\n\t{\n\t\t// SPI\n#ifdef HAVE_PORTREG\n\t\t*csport |= cspinmask;\n\t\t*dcport &= ~dcpinmask;\n\t\t*csport &= ~cspinmask;\n#else\n\t\tdigitalWrite(cs, HIGH);\n\t\tdigitalWrite(dc, LOW);\n\t\tdigitalWrite(cs, LOW);\n#endif\n\t\tfastSPIwrite(c);\n#ifdef HAVE_PORTREG\n\t\t*csport |= cspinmask;\n#else\n\t\tdigitalWrite(cs, HIGH);\n#endif\n\t}\n\telse\n\t{\n\t\t// I2C\n\t\tuint8_t control = 0x00;   // Co = 0, D/C = 0\n\t\t//LOG(\"wire begin\");\n\t\tWire.beginTransmission(_i2caddr);\n\t\t//LOG(\"wire write\");\n\t\tWire.write(control);\n\t\t//LOG(\"wire write c\");\n\t\tWire.write(c);\n\t\t//LOG(\"wire end\");\n\t\tWire.endTransmission();\n\t\t//LOG(\"wire done\");\n\t}\n}\n\n// startscrollright\n// Activate a right handed scroll for rows start through stop\n// Hint, the display is 16 rows tall. To scroll the whole display, run:\n// display.scrollright(0x00, 0x0F)\nvoid Adafruit_SSD1306::startscrollright(uint8_t start, uint8_t stop){\n\tssd1306_command(SSD1306_RIGHT_HORIZONTAL_SCROLL);\n\tssd1306_command(0X00);\n\tssd1306_command(start);\n\tssd1306_command(0X00);\n\tssd1306_command(stop);\n\tssd1306_command(0X00);\n\tssd1306_command(0XFF);\n\tssd1306_command(SSD1306_ACTIVATE_SCROLL);\n}\n\n// startscrollleft\n// Activate a right handed scroll for rows start through stop\n// Hint, the display is 16 rows tall. To scroll the whole display, run:\n// display.scrollright(0x00, 0x0F)\nvoid Adafruit_SSD1306::startscrollleft(uint8_t start, uint8_t stop){\n\tssd1306_command(SSD1306_LEFT_HORIZONTAL_SCROLL);\n\tssd1306_command(0X00);\n\tssd1306_command(start);\n\tssd1306_command(0X00);\n\tssd1306_command(stop);\n\tssd1306_command(0X00);\n\tssd1306_command(0XFF);\n\tssd1306_command(SSD1306_ACTIVATE_SCROLL);\n}\n\n// startscrolldiagright\n// Activate a diagonal scroll for rows start through stop\n// Hint, the display is 16 rows tall. To scroll the whole display, run:\n// display.scrollright(0x00, 0x0F)\nvoid Adafruit_SSD1306::startscrolldiagright(uint8_t start, uint8_t stop){\n\tssd1306_command(SSD1306_SET_VERTICAL_SCROLL_AREA);\n\tssd1306_command(0X00);\n\tssd1306_command(SSD1306_LCDHEIGHT);\n\tssd1306_command(SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL);\n\tssd1306_command(0X00);\n\tssd1306_command(start);\n\tssd1306_command(0X00);\n\tssd1306_command(stop);\n\tssd1306_command(0X01);\n\tssd1306_command(SSD1306_ACTIVATE_SCROLL);\n}\n\n// startscrolldiagleft\n// Activate a diagonal scroll for rows start through stop\n// Hint, the display is 16 rows tall. To scroll the whole display, run:\n// display.scrollright(0x00, 0x0F)\nvoid Adafruit_SSD1306::startscrolldiagleft(uint8_t start, uint8_t stop){\n\tssd1306_command(SSD1306_SET_VERTICAL_SCROLL_AREA);\n\tssd1306_command(0X00);\n\tssd1306_command(SSD1306_LCDHEIGHT);\n\tssd1306_command(SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL);\n\tssd1306_command(0X00);\n\tssd1306_command(start);\n\tssd1306_command(0X00);\n\tssd1306_command(stop);\n\tssd1306_command(0X01);\n\tssd1306_command(SSD1306_ACTIVATE_SCROLL);\n}\n\nvoid Adafruit_SSD1306::stopscroll(void){\n\tssd1306_command(SSD1306_DEACTIVATE_SCROLL);\n}\n\n// Dim the display\n// dim = true: display is dimmed\n// dim = false: display is normal\nvoid Adafruit_SSD1306::dim(boolean dim) {\n\tuint8_t contrast;\n\n\tif (dim) {\n\t\tcontrast = 0; // Dimmed display\n\t} else {\n\t\tif (_vccstate == SSD1306_EXTERNALVCC) {\n\t\t\tcontrast = 0x9F;\n\t\t} else {\n\t\t\tcontrast = 0xCF;\n\t\t}\n\t}\n\t// the range of contrast to too small to be really useful\n\t// it is useful to dim the display\n\tssd1306_command(SSD1306_SETCONTRAST);\n\tssd1306_command(contrast);\n}\n\nvoid Adafruit_SSD1306::display(void) {\n\tssd1306_command(SSD1306_COLUMNADDR);\n\tssd1306_command(0);   // Column start address (0 = reset)\n\tssd1306_command(SSD1306_LCDWIDTH-1); // Column end address (127 = reset)\n\n\tssd1306_command(SSD1306_PAGEADDR);\n\tssd1306_command(0); // Page start address (0 = reset)\n#if SSD1306_LCDHEIGHT == 64\n\tssd1306_command(7); // Page end address\n#endif\n#if SSD1306_LCDHEIGHT == 32\n\tssd1306_command(3); // Page end address\n#endif\n#if SSD1306_LCDHEIGHT == 16\n\tssd1306_command(1); // Page end address\n#endif\n\n\tif (sid != -1)\n\t{\n\t\t// SPI\n#ifdef HAVE_PORTREG\n\t\t*csport |= cspinmask;\n\t\t*dcport |= dcpinmask;\n\t\t*csport &= ~cspinmask;\n#else\n\t\tdigitalWrite(cs, HIGH);\n\t\tdigitalWrite(dc, HIGH);\n\t\tdigitalWrite(cs, LOW);\n#endif\n\n\t\tfor (uint16_t i=0; i<(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8); i++) {\n\t\t\tfastSPIwrite(buffer[i]);\n\t\t}\n#ifdef HAVE_PORTREG\n\t\t*csport |= cspinmask;\n#else\n\t\tdigitalWrite(cs, HIGH);\n#endif\n\t}\n\telse\n\t{\n\t\t// save I2C bitrate\n#ifdef TWBR\n\t\tuint8_t twbrbackup = TWBR;\n\t\tTWBR = 12; // upgrade to 400KHz!\n#endif\n\n\t\t//Serial.println(TWBR, DEC);\n\t\t//Serial.println(TWSR & 0x3, DEC);\n\n\t\t// I2C\n\t\tfor (uint16_t i=0; i<(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8); i++) {\n\t\t\t// send a bunch of data in one xmission\n\t\t\tWire.beginTransmission(_i2caddr);\n\t\t\tWIRE_WRITE(0x40);\n\t\t\tfor (uint8_t x=0; x<16; x++) {\n\t\t\t\tWIRE_WRITE(buffer[i]);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\ti--;\n\t\t\tWire.endTransmission();\n\t\t}\n#ifdef TWBR\n\t\tTWBR = twbrbackup;\n#endif\n\t}\n}\n\n// clear everything\nvoid Adafruit_SSD1306::clearDisplay(void) {\n\tmemset(buffer, 0, (SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8));\n}\n\n\ninline void Adafruit_SSD1306::fastSPIwrite(uint8_t d) {\n\n\tif(hwSPI) {\n\t\t(void)SPI.transfer(d);\n\t} else {\n\t\tfor(uint8_t bit = 0x80; bit; bit >>= 1) {\n#ifdef HAVE_PORTREG\n\t\t\t*clkport &= ~clkpinmask;\n\t\t\tif(d & bit) *mosiport |=  mosipinmask;\n\t\t\telse        *mosiport &= ~mosipinmask;\n\t\t\t*clkport |=  clkpinmask;\n#else\n\t\t\tdigitalWrite(sclk, LOW);\n\t\t\tif(d & bit) digitalWrite(sid, HIGH);\n\t\t\telse        digitalWrite(sid, LOW);\n\t\t\tdigitalWrite(sclk, HIGH);\n#endif\n\t\t}\n\t}\n}\n\nvoid Adafruit_SSD1306::drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) {\n\tboolean bSwap = false;\n\tswitch(rotation) {\n\t\tcase 0:\n\t\t\t// 0 degree rotation, do nothing\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\t// 90 degree rotation, swap x & y for rotation, then invert x\n\t\t\tbSwap = true;\n\t\t\tssd1306_swap(x, y);\n\t\t\tx = WIDTH - x - 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t// 180 degree rotation, invert x and y - then shift y around for height.\n\t\t\tx = WIDTH - x - 1;\n\t\t\ty = HEIGHT - y - 1;\n\t\t\tx -= (w-1);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\t// 270 degree rotation, swap x & y for rotation, then invert y  and adjust y for w (not to become h)\n\t\t\tbSwap = true;\n\t\t\tssd1306_swap(x, y);\n\t\t\ty = HEIGHT - y - 1;\n\t\t\ty -= (w-1);\n\t\t\tbreak;\n\t}\n\n\tif(bSwap) {\n\t\tdrawFastVLineInternal(x, y, w, color);\n\t} else {\n\t\tdrawFastHLineInternal(x, y, w, color);\n\t}\n}\n\nvoid Adafruit_SSD1306::drawFastHLineInternal(int16_t x, int16_t y, int16_t w, uint16_t color) {\n\t// Do bounds/limit checks\n\tif(y < 0 || y >= HEIGHT) { return; }\n\n\t// make sure we don't try to draw below 0\n\tif(x < 0) {\n\t\tw += x;\n\t\tx = 0;\n\t}\n\n\t// make sure we don't go off the edge of the display\n\tif( (x + w) > WIDTH) {\n\t\tw = (WIDTH - x);\n\t}\n\n\t// if our width is now negative, punt\n\tif(w <= 0) { return; }\n\n\t// set up the pointer for  movement through the buffer\n\tregister uint8_t *pBuf = buffer;\n\t// adjust the buffer pointer for the current row\n\tpBuf += ((y/8) * SSD1306_LCDWIDTH);\n\t// and offset x columns in\n\tpBuf += x;\n\n\tregister uint8_t mask = 1 << (y&7);\n\n\tswitch (color)\n\t{\n\t\tcase WHITE:         while(w--) { *pBuf++ |= mask; }; break;\n\t\tcase BLACK: mask = ~mask;   while(w--) { *pBuf++ &= mask; }; break;\n\t\tcase INVERSE:         while(w--) { *pBuf++ ^= mask; }; break;\n\t}\n}\n\nvoid Adafruit_SSD1306::drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color) {\n\tbool bSwap = false;\n\tswitch(rotation) {\n\t\tcase 0:\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\t// 90 degree rotation, swap x & y for rotation, then invert x and adjust x for h (now to become w)\n\t\t\tbSwap = true;\n\t\t\tssd1306_swap(x, y);\n\t\t\tx = WIDTH - x - 1;\n\t\t\tx -= (h-1);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t// 180 degree rotation, invert x and y - then shift y around for height.\n\t\t\tx = WIDTH - x - 1;\n\t\t\ty = HEIGHT - y - 1;\n\t\t\ty -= (h-1);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\t// 270 degree rotation, swap x & y for rotation, then invert y\n\t\t\tbSwap = true;\n\t\t\tssd1306_swap(x, y);\n\t\t\ty = HEIGHT - y - 1;\n\t\t\tbreak;\n\t}\n\n\tif(bSwap) {\n\t\tdrawFastHLineInternal(x, y, h, color);\n\t} else {\n\t\tdrawFastVLineInternal(x, y, h, color);\n\t}\n}\n\n\nvoid Adafruit_SSD1306::drawFastVLineInternal(int16_t x, int16_t __y, int16_t __h, uint16_t color) {\n\n\t// do nothing if we're off the left or right side of the screen\n\tif(x < 0 || x >= WIDTH) { return; }\n\n\t// make sure we don't try to draw below 0\n\tif(__y < 0) {\n\t\t// __y is negative, this will subtract enough from __h to account for __y being 0\n\t\t__h += __y;\n\t\t__y = 0;\n\n\t}\n\n\t// make sure we don't go past the height of the display\n\tif( (__y + __h) > HEIGHT) {\n\t\t__h = (HEIGHT - __y);\n\t}\n\n\t// if our height is now negative, punt\n\tif(__h <= 0) {\n\t\treturn;\n\t}\n\n\t// this display doesn't need ints for coordinates, use local byte registers for faster juggling\n\tregister uint8_t y = __y;\n\tregister uint8_t h = __h;\n\n\n\t// set up the pointer for fast movement through the buffer\n\tregister uint8_t *pBuf = buffer;\n\t// adjust the buffer pointer for the current row\n\tpBuf += ((y/8) * SSD1306_LCDWIDTH);\n\t// and offset x columns in\n\tpBuf += x;\n\n\t// do the first partial byte, if necessary - this requires some masking\n\tregister uint8_t mod = (y&7);\n\tif(mod) {\n\t\t// mask off the high n bits we want to set\n\t\tmod = 8-mod;\n\n\t\t// note - lookup table results in a nearly 10% performance improvement in fill* functions\n\t\t// register uint8_t mask = ~(0xFF >> (mod));\n\t\tstatic uint8_t premask[8] = {0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE };\n\t\tregister uint8_t mask = premask[mod];\n\n\t\t// adjust the mask if we're not going to reach the end of this byte\n\t\tif( h < mod) {\n\t\t\tmask &= (0XFF >> (mod-h));\n\t\t}\n\n\t\tswitch (color)\n\t\t{\n\t\t\tcase WHITE:   *pBuf |=  mask;  break;\n\t\t\tcase BLACK:   *pBuf &= ~mask;  break;\n\t\t\tcase INVERSE: *pBuf ^=  mask;  break;\n\t\t}\n\n\t\t// fast exit if we're done here!\n\t\tif(h<mod) { return; }\n\n\t\th -= mod;\n\n\t\tpBuf += SSD1306_LCDWIDTH;\n\t}\n\n\n\t// write solid bytes while we can - effectively doing 8 rows at a time\n\tif(h >= 8) {\n\t\tif (color == INVERSE)  {          // separate copy of the code so we don't impact performance of the black/white write version with an extra comparison per loop\n\t\t\tdo  {\n\t\t\t\t*pBuf=~(*pBuf);\n\n\t\t\t\t// adjust the buffer forward 8 rows worth of data\n\t\t\t\tpBuf += SSD1306_LCDWIDTH;\n\n\t\t\t\t// adjust h & y (there's got to be a faster way for me to do this, but this should still help a fair bit for now)\n\t\t\t\th -= 8;\n\t\t\t} while(h >= 8);\n\t\t}\n\t\telse {\n\t\t\t// store a local value to work with\n\t\t\tregister uint8_t val = (color == WHITE) ? 255 : 0;\n\n\t\t\tdo  {\n\t\t\t\t// write our value in\n\t\t\t\t*pBuf = val;\n\n\t\t\t\t// adjust the buffer forward 8 rows worth of data\n\t\t\t\tpBuf += SSD1306_LCDWIDTH;\n\n\t\t\t\t// adjust h & y (there's got to be a faster way for me to do this, but this should still help a fair bit for now)\n\t\t\t\th -= 8;\n\t\t\t} while(h >= 8);\n\t\t}\n\t}\n\n\t// now do the final partial byte, if necessary\n\tif(h) {\n\t\tmod = h & 7;\n\t\t// this time we want to mask the low bits of the byte, vs the high bits we did above\n\t\t// register uint8_t mask = (1 << mod) - 1;\n\t\t// note - lookup table results in a nearly 10% performance improvement in fill* functions\n\t\tstatic uint8_t postmask[8] = {0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F };\n\t\tregister uint8_t mask = postmask[mod];\n\t\tswitch (color)\n\t\t{\n\t\t\tcase WHITE:   *pBuf |=  mask;  break;\n\t\t\tcase BLACK:   *pBuf &= ~mask;  break;\n\t\t\tcase INVERSE: *pBuf ^=  mask;  break;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "firmware/stepper_nano_zero/Adafruit_SSD1306.h",
    "content": "/*********************************************************************\nThis is a library for our Monochrome OLEDs based on SSD1306 drivers\n\n  Pick one up today in the adafruit shop!\n  ------> http://www.adafruit.com/category/63_98\n\nThese displays use SPI to communicate, 4 or 5 pins are required to\ninterface\n\nAdafruit invests time and resources providing this open source code,\nplease support Adafruit and open-source hardware by purchasing\nproducts from Adafruit!\n\nWritten by Limor Fried/Ladyada  for Adafruit Industries.\nBSD license, check license.txt for more information\nAll text above, and the splash screen must be included in any redistribution\n*********************************************************************/\n#ifndef _Adafruit_SSD1306_H_\n#define _Adafruit_SSD1306_H_\n\n#if ARDUINO >= 100\n #include \"Arduino.h\"\n #define WIRE_WRITE Wire.write\n#else\n #include \"WProgram.h\"\n  #define WIRE_WRITE Wire.send\n#endif\n\n#if defined(__SAM3X8E__)\n typedef volatile RwReg PortReg;\n typedef uint32_t PortMask;\n #define HAVE_PORTREG\n#elif defined(ARDUINO_ARCH_SAMD)\n// not supported\n#elif defined(ESP8266) || defined(ARDUINO_STM32_FEATHER)\n  typedef volatile uint32_t PortReg;\n  typedef uint32_t PortMask;\n#else\n  typedef volatile uint8_t PortReg;\n  typedef uint8_t PortMask;\n #define HAVE_PORTREG\n#endif\n\n#include <SPI.h>\n#include \"Adafruit_GFX.h\"\n\n#define BLACK 0\n#define WHITE 1\n#define INVERSE 2\n\n#define SSD1306_I2C_ADDRESS   0x3C  // 011110+SA0+RW - 0x3C or 0x3D\n// Address for 128x32 is 0x3C\n// Address for 128x64 is 0x3D (default) or 0x3C (if SA0 is grounded)\n\n/*=========================================================================\n    SSD1306 Displays\n    -----------------------------------------------------------------------\n    The driver is used in multiple displays (128x64, 128x32, etc.).\n    Select the appropriate display below to create an appropriately\n    sized framebuffer, etc.\n\n    SSD1306_128_64  128x64 pixel display\n\n    SSD1306_128_32  128x32 pixel display\n\n    SSD1306_96_16\n\n    -----------------------------------------------------------------------*/\n   #define SSD1306_128_64\n//   #define SSD1306_128_32\n//   #define SSD1306_96_16\n/*=========================================================================*/\n\n#if defined SSD1306_128_64 && defined SSD1306_128_32\n  #error \"Only one SSD1306 display can be specified at once in SSD1306.h\"\n#endif\n#if !defined SSD1306_128_64 && !defined SSD1306_128_32 && !defined SSD1306_96_16\n  #error \"At least one SSD1306 display must be specified in SSD1306.h\"\n#endif\n\n#if defined SSD1306_128_64\n  #define SSD1306_LCDWIDTH                  128\n  #define SSD1306_LCDHEIGHT                 64\n#endif\n#if defined SSD1306_128_32\n  #define SSD1306_LCDWIDTH                  128\n  #define SSD1306_LCDHEIGHT                 32\n#endif\n#if defined SSD1306_96_16\n  #define SSD1306_LCDWIDTH                  96\n  #define SSD1306_LCDHEIGHT                 16\n#endif\n\n#define SSD1306_SETCONTRAST 0x81\n#define SSD1306_DISPLAYALLON_RESUME 0xA4\n#define SSD1306_DISPLAYALLON 0xA5\n#define SSD1306_NORMALDISPLAY 0xA6\n#define SSD1306_INVERTDISPLAY 0xA7\n#define SSD1306_DISPLAYOFF 0xAE\n#define SSD1306_DISPLAYON 0xAF\n\n#define SSD1306_SETDISPLAYOFFSET 0xD3\n#define SSD1306_SETCOMPINS 0xDA\n\n#define SSD1306_SETVCOMDETECT 0xDB\n\n#define SSD1306_SETDISPLAYCLOCKDIV 0xD5\n#define SSD1306_SETPRECHARGE 0xD9\n\n#define SSD1306_SETMULTIPLEX 0xA8\n\n#define SSD1306_SETLOWCOLUMN 0x00\n#define SSD1306_SETHIGHCOLUMN 0x10\n\n#define SSD1306_SETSTARTLINE 0x40\n\n#define SSD1306_MEMORYMODE 0x20\n#define SSD1306_COLUMNADDR 0x21\n#define SSD1306_PAGEADDR   0x22\n\n#define SSD1306_COMSCANINC 0xC0\n#define SSD1306_COMSCANDEC 0xC8\n\n#define SSD1306_SEGREMAP 0xA0\n\n#define SSD1306_CHARGEPUMP 0x8D\n\n#define SSD1306_EXTERNALVCC 0x1\n#define SSD1306_SWITCHCAPVCC 0x2\n\n// Scrolling #defines\n#define SSD1306_ACTIVATE_SCROLL 0x2F\n#define SSD1306_DEACTIVATE_SCROLL 0x2E\n#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3\n#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26\n#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27\n#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29\n#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A\n\nclass Adafruit_SSD1306 : public Adafruit_GFX {\n public:\n  Adafruit_SSD1306(int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS);\n  Adafruit_SSD1306(int8_t DC, int8_t RST, int8_t CS);\n  Adafruit_SSD1306(int8_t RST = -1);\n\n  bool begin(uint8_t switchvcc = SSD1306_SWITCHCAPVCC, uint8_t i2caddr = SSD1306_I2C_ADDRESS, bool reset=true);\n  uint8_t ssd1306_command(uint8_t c);\n\n  void clearDisplay(void);\n  void invertDisplay(uint8_t i);\n  void display();\n\n  void startscrollright(uint8_t start, uint8_t stop);\n  void startscrollleft(uint8_t start, uint8_t stop);\n\n  void startscrolldiagright(uint8_t start, uint8_t stop);\n  void startscrolldiagleft(uint8_t start, uint8_t stop);\n  void stopscroll(void);\n\n  void dim(boolean dim);\n\n  void drawPixel(int16_t x, int16_t y, uint16_t color);\n\n  virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);\n  virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);\n\n private:\n  int8_t _i2caddr, _vccstate, sid, sclk, dc, rst, cs;\n  void fastSPIwrite(uint8_t c);\n\n  boolean hwSPI;\n#ifdef HAVE_PORTREG\n  PortReg *mosiport, *clkport, *csport, *dcport;\n  PortMask mosipinmask, clkpinmask, cspinmask, dcpinmask;\n#endif\n\n  inline void drawFastVLineInternal(int16_t x, int16_t y, int16_t h, uint16_t color) __attribute__((always_inline));\n  inline void drawFastHLineInternal(int16_t x, int16_t y, int16_t w, uint16_t color) __attribute__((always_inline));\n\n};\n\n#endif /* _Adafruit_SSD1306_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/Flash.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include \"Flash.h\"\n#include \"syslog.h\"\n\nbool flashInit(void){\n\tif (NVMCTRL->PARAM.bit.PSZ != 3)\n\t{\n\t\tERROR(\"FLASH PAGE SIZE is not 64 bytes\");\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n\nstatic void erase(const volatile void *flash_ptr)\n{\n\tNVMCTRL->ADDR.reg = ((uint32_t)flash_ptr) / 2;\n\tNVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_ER;\n\twhile (!NVMCTRL->INTFLAG.bit.READY) { }\n}\n\nbool flashErase(const volatile void *flash_ptr, uint32_t size)\n{\n\tconst uint8_t *ptr = (const uint8_t *)flash_ptr;\n\twhile (size > FLASH_ROW_SIZE) {\n\t\terase(ptr);\n\t\tptr += FLASH_ROW_SIZE;\n\t\tsize -= FLASH_ROW_SIZE;\n\t}\n\tif (size>0)\n\t{\n\t\terase(ptr);\n\t}\n\treturn true; //TODO should verify the erase\n}\n\nstatic inline uint32_t read_unaligned_uint32(const void *data)\n{\n\tunion {\n\t\tuint32_t u32;\n\t\tuint8_t u8[4];\n\t} res;\n\tconst uint8_t *d = (const uint8_t *)data;\n\tres.u8[0] = d[0];\n\tres.u8[1] = d[1];\n\tres.u8[2] = d[2];\n\tres.u8[3] = d[3];\n\treturn res.u32;\n}\n\n\nvoid flashWrite(const volatile void *flash_ptr,const void *data, uint32_t size)\n{\n\tuint32_t *ptrPage;\n\tuint8_t *destPtr;\n\tuint8_t *srcPtr;\n\tuint32_t bytesInBlock;\n\t__attribute__((__aligned__(4))) uint8_t buffer[FLASH_ROW_SIZE];\n\tuint32_t offset;\n\n\tdestPtr=(uint8_t *)flash_ptr;\n\tsrcPtr=(uint8_t *)data;\n\n\t//LOG(\"flash write called\");\n\twhile(size>0)\n\t{\n\t\tuint32_t i,j;\n\n\t\t//calculate the maximum number of bytes we can write in page\n\t\toffset=((uint32_t)destPtr)%(FLASH_ROW_SIZE); //offset into page\n\t\tbytesInBlock=FLASH_ROW_SIZE-offset; //this is how many bytes we need to overwrite in this page\n\n\t\t//LOG(\"offset %d, bytesInBlock %d size %d\", offset, bytesInBlock,size);\n\t\t//get pointer to start of page\n\t\tptrPage=(uint32_t *) ((((uint32_t)destPtr)/(FLASH_ROW_SIZE)) * FLASH_ROW_SIZE);\n\n\t\t//LOG(\"pointer to page %d(0x%08x) %d\",(uint32_t)ptrPage,(uint32_t)ptrPage,destPtr);\n\n\t\t//fill page buffer with data from flash\n\t\tmemcpy(buffer,ptrPage,FLASH_ROW_SIZE);\n\n\t\t//now fill buffer with new data that needs changing\n\t\ti=bytesInBlock;\n\t\tif (size<i)\n\t\t{\n\t\t\ti=size;\n\t\t}\n\t\t//LOG(\"changing %d bytes\",i);\n\t\tmemcpy(&buffer[offset],srcPtr,i);\n\n\t\t//erase page\n\t\tflashErase(ptrPage,FLASH_ROW_SIZE);\n\t\t//write new data to flash\n\t\tflashWritePage(ptrPage,buffer,FLASH_ROW_SIZE);\n\n\t\tuint32_t *ptr=(uint32_t *)buffer;\n\t\tfor (j=0; j<FLASH_ROW_SIZE/4; j++)\n\t\t{\n\t\t\tif (*ptrPage != *ptr)\n\t\t\t{\n\t\t\t\tERROR(\"write failed on byte %d %x %x\",j,*ptrPage, *ptr);\n\t\t\t}\n\t\t\tptrPage++;\n\t\t\tptr++;\n\t\t}\n\n\n\t\tsize=size-i; //decrease number of bytes to write\n\t\tsrcPtr+=i; //increase pointer to next bytes to read\n\t\tdestPtr+=i; //increment destination pointer\n\t}\n\n\n}\n\nvoid flashWritePage(const volatile void *flash_ptr, const void *data, uint32_t size)\n{\n\t// Calculate data boundaries\n\tsize = (size + 3) / 4; //convert bytes to words with rounding\n\n\tvolatile uint32_t *dst_addr = (volatile uint32_t *)flash_ptr;\n\tconst uint8_t *src_addr = (uint8_t *)data;\n\n\tif (0 != ((uint32_t)flash_ptr)%(FLASH_PAGE_SIZE))\n\t{\n\t\tERROR(\"Flash page write must be on boundry\");\n\t\treturn;\n\t}\n\n\t// Disable automatic page write\n\tNVMCTRL->CTRLB.bit.MANW = 1;\n\n\t// Do writes in pages\n\twhile (size)\n\t{\n\t\t// Execute \"PBC\" Page Buffer Clear\n\t\tNVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_PBC;\n\t\twhile (NVMCTRL->INTFLAG.bit.READY == 0) { }\n\n\t\t// Fill page buffer\n\t\tuint32_t i;\n\t\tfor (i=0; i<(FLASH_PAGE_SIZE/4) && size; i++) //we write 4 bytes at a time\n\t\t{\n\t\t\t*dst_addr = read_unaligned_uint32(src_addr);\n\t\t\tsrc_addr += 4;\n\t\t\tdst_addr++;\n\t\t\tsize--; //size is set to number of 32bit words in first line above\n\t\t}\n\n\t\t// Execute \"WP\" Write Page\n\t\tNVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_WP;\n\t\twhile (NVMCTRL->INTFLAG.bit.READY == 0) { }\n\t}\n\n\n}\n"
  },
  {
    "path": "firmware/stepper_nano_zero/Flash.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#ifndef __FLASH__H__\n#define __FLASH__H__\n\n#include <Arduino.h>\n#include \"syslog.h\"\n\n\n#define FLASH_PAGE_SIZE_NZS (64) //bytes\n#define FLASH_ROW_SIZE (FLASH_PAGE_SIZE_NZS*4) //defined in the datasheet as 4x page size\n#define FLASH_ERASE_VALUE (0xFF) //value of flash after an erase\n\n#define FLASH_ALLOCATE(name, size) \\\n\t__attribute__((__aligned__(FLASH_ROW_SIZE))) \\\n   const uint8_t name[(size+(FLASH_ROW_SIZE-1))/FLASH_ROW_SIZE*FLASH_ROW_SIZE] = { };\n\nbool flashInit(void); //this checks that our assumptions are true\n\nbool flashErase(const volatile void *flash_ptr, uint32_t size);\nvoid flashWrite(const volatile void *flash_ptr,const void *data,uint32_t size);\nvoid flashWritePage(const volatile void *flash_ptr, const void *data, uint32_t size);\n\n//you can read by dereferencing pointer but we will add a read\nstatic inline int32_t flashRead(const volatile void *flash_ptr, void *data, uint32_t size)\n{\n  memcpy(data, (const void *)flash_ptr, size);\n}\n\n\n\n\n#endif //__FLASH__H__\n"
  },
  {
    "path": "firmware/stepper_nano_zero/angle.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#ifndef ANGLE_H_\n#define ANGLE_H_\n#include <stdlib.h>\n#include <stdint.h>\n#include <math.h>\n\n#define ANGLE_STEPS (0x010000UL)\n#define ANGLE_MAX ((uint16_t)0x0FFFF)\n\n#define ANGLE_FROM_DEGREES(x) ((int32_t) ( ((float)ANGLE_STEPS*(float)(x)+180.0)/360.0 ) )\n#define ANGLE_T0_DEGREES(x) ( (float) ((float(x)*360.0)/((float)ANGLE_STEPS) ))\nclass Angle\n{\nprivate:\n\tuint16_t angle;\npublic:\n\tAngle(void) {angle=0;}\n\tAngle(int32_t x) {angle=(uint16_t)x;}\n\tAngle(const Angle &x) {angle=x.angle;}\n\n\tint16_t operator-( const Angle &a2)\n\t{\n\t\tint32_t x,y,dx;\n\t\tx=(int32_t)angle;\n\t\ty=(int32_t)a2.angle;\n\t\tdx=x-y;\n\t\tif (abs(x-y)>ANGLE_STEPS/2)\n\t\t{\n\t\t\t//we have a wrap condition\n\t\t\tif (x>y)\n\t\t\t{\n\t\t\t\tdx=x-(y+ANGLE_STEPS);\n\t\t\t}else if (x<y)\n\t\t\t{\n\t\t\t\tdx=(ANGLE_STEPS+x)-y;\n\t\t\t}\n\t\t}\n\t\treturn (int16_t)dx;\n\t}\n//\n//\tint16_t operator-( const int32_t y)\n//\t{\n//\t\tint32_t x,y,dx;\n//\t\tx=(int32_t)angle;\n//\t\twhile(y>ANGLE_MAX)\n//\t\t{\n//\t\t\ty=y-ANGLE_STEPS;\n//\t\t}\n//\t\twhile(y<-ANGLE_MAX)\n//\t\t{\n//\t\t\ty=y+ANGLE_STEPS;\n//\t\t}\n//\n//\t\tdx=x-y;\n//\t\tif (abs(x-y)>ANGLE_STEPS/2)\n//\t\t{\n//\t\t\t//we have a wrap condition\n//\t\t\tif (x>y)\n//\t\t\t{\n//\t\t\t\tdx=x-(y+ANGLE_STEPS);\n//\t\t\t}else if (x<y)\n//\t\t\t{\n//\t\t\t\tdx=(ANGLE_STEPS+x)-y;\n//\t\t\t}\n//\t\t}\n//\t\treturn (int16_t)dx;\n//\t}\n\n\tAngle operator+(const Angle &y)\n\t{\n\t\tuint16_t a;\n\t\ta=angle+ (uint16_t)y.angle;\n\t\treturn Angle(a);\n\t}\n\tAngle operator+(const long int x)\n\t{\n\t\tint32_t a;\n\t\ta=(int32_t)angle+ x;\n\t\twhile (a>=ANGLE_STEPS)\n\t\t{\n\t\t\ta=a-ANGLE_STEPS;\n\t\t}\n\t\twhile (a<0)\n\t\t{\n\t\t\ta=a+ANGLE_STEPS;\n\t\t}\n\t\treturn Angle((uint16_t)a);\n\t}\n\tAngle operator+(const unsigned long int x)\n\t{\n\t\tuint32_t a;\n\t\ta=(uint32_t)angle+ x;\n\t\twhile (a>=ANGLE_STEPS)\n\t\t{\n\t\t\ta=a-ANGLE_STEPS;\n\t\t}\n\t\treturn Angle((uint16_t)a);\n\t}\n\n\toperator uint16_t() const {return angle;}\n\toperator uint32_t() const {return (uint32_t)angle;}\n\toperator int32_t() const {return (int32_t)angle;}\n\n\n\n};\n\n\n#endif /* ANGLE_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/as5047d.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include <Arduino.h>\n#include \"syslog.h\"\n#include \"as5047d.h\"\n#include \"SPI.h\"\n#include <stdio.h>\n#include \"board.h\"\n\n#define AS5047D_CMD_NOP   (0x0000)\n#define AS5047D_CMD_ERRFL (0x0001)\n#define AS5047D_CMD_PROG  (0x0003)\n#define AS5047D_CMD_DIAAGC (0x3FFC)\n#define AS5047D_CMD_MAG    (0x3FFD)\n#define AS5047D_CMD_ANGLEUNC (0x3FFE)\n#define AS5047D_CMD_ANGLECOM (0x3FFF)\n\n\n#define AS5048A_CMD_NOP   (0x0000)\n#define AS5048A_CMD_ERRFL (0x0001)\n#define AS5048A_CMD_PROG  (0x0003)\n#define AS5048A_CMD_DIAAGC (0x3FFD)\n#define AS5048A_CMD_MAG    (0x3FFE)\n#define AS5048A_CMD_ANGLE  (0x3FFF)\n\n#pragma GCC push_options\n#pragma GCC optimize (\"-Ofast\")\n\nstatic int getBit(int16_t data, int bit)\n{\n\treturn (data>>bit) & 0x01;\n}\n\nstatic int getParity(uint16_t data)\n{\n\tint i,bits;\n\tdata=data & 0x7FFF; //mask out upper bit\n\n\t//count number of bits, brute force\n\tbits=0;\n\tfor(i=0; i<16; i++)\n\t{\n\t\tif (0 != (data & ((0x0001)<<i)))\n\t\t{\n\t\t\tbits++;\n\t\t}\n\t}\n\treturn (bits & 0x01); //return 1 if odd\n}\n\nboolean AS5047D::begin(int csPin)\n{\n#ifdef PIN_AS5047D_PWR\n\tdigitalWrite(PIN_AS5047D_PWR,HIGH);\n#endif\n\tdigitalWrite(PIN_AS5047D_CS,LOW); //pull CS LOW by default (chip powered off)\n\tdigitalWrite(PIN_MOSI,LOW);\n\tdigitalWrite(PIN_SCK,LOW);\n\tdigitalWrite(PIN_MISO,LOW);\n\tpinMode(PIN_MISO,OUTPUT);\n\tdelay(1000);\n\n\n\tdigitalWrite(PIN_AS5047D_CS,HIGH); //pull CS high\n#ifdef PIN_AS5047D_PWR\n\tdigitalWrite(PIN_AS5047D_PWR,LOW);\n#endif\n\n\tpinMode(PIN_MISO,INPUT);\n\n\terror=false;\n\tSPISettings settingsA(5000000, MSBFIRST, SPI_MODE1);             ///400000, MSBFIRST, SPI_MODE1);\n\tchipSelectPin=csPin;\n\n\tLOG(\"csPin is %d\",csPin);\n\tpinMode(chipSelectPin,OUTPUT);\n\tdigitalWrite(chipSelectPin,HIGH); //pull CS high by default\n\tdelay(1);\n\tSPI.begin();    //AS5047D SPI uses mode=1 (CPOL=0, CPHA=1)\n\tLOG(\"Begin AS5047D...\");\n\n\tSPI.beginTransaction(settingsA);\n\tSPI.transfer16(AS5047D_CMD_NOP);\n\tdelay(10);\n\n\t//wait for the LF bit to be set\n\tuint16_t data=0,t0=100;\n\twhile (getBit(data,8)==0 && t0>0)\n\t{\n\t\tdelay(1);\n\t\tt0--;\n\t\tif (t0==0)\n\t\t{\n\t\t\tERROR(\"LF bit not set\");\n\t\t\terror=true;\n\t\t\tbreak;\n\t\t\t//return false;\n\t\t}\n\t\tLOG(\"AS5047D diag data is 0x%04X\",data);\n\t\tdata=readAddress(AS5047D_CMD_DIAAGC);\n\t}\n\n\tif (error)\n\t{\n\t\terror=false;\n\t\tuint16_t data=0,t0=100;\n\t\twhile (getBit(data,8)==0 && t0>0)\n\t\t{\n\t\t\tdelay(1);\n\t\t\tt0--;\n\t\t\tif (t0==0)\n\t\t\t{\n\t\t\t\tERROR(\"AS5048A OCF bit not set\");\n\t\t\t\terror=true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdata=readAddress(AS5048A_CMD_DIAAGC);\n\t\t\tLOG(\"AS5048A diag data is 0x%04X\",data);\n\t\t}\n\t\tas5047d=false;\n\n\t}\n\n\n#ifdef NZS_AS5047_PIPELINE\n\t//read encoder a few times to flush the pipeline\n\treadEncoderAnglePipeLineRead();\n\treadEncoderAnglePipeLineRead();\n#endif\n\treturn true;\n}\n\n\n//read the encoders \nint16_t AS5047D::readAddress(uint16_t addr)\n{\n\tuint16_t data;\n\terror=false;\n\t//make sure it is a read by setting bit 14\n\taddr=addr | 0x4000;\n\n\t//add the parity to the command\n\tif (1 == getParity(addr))\n\t{\n\t\taddr=(addr & 0x7FFF) | 0x8000; //add parity bit to make command even number of bits\n\t}\n\n\tdigitalWrite(chipSelectPin, LOW);\n\tdelayMicroseconds(1);\n\t//clock out the address to read\n\tSPI.transfer16(addr);\n\tdigitalWrite(chipSelectPin, HIGH);\n\tdelayMicroseconds(1);\n\tdigitalWrite(chipSelectPin, LOW);\n\t//clock out zeros to read in the data from address\n\tdata=SPI.transfer16(0x00);\n\n\tdigitalWrite(chipSelectPin, HIGH);\n\n\tif (data & (1<<14))\n\t{\n\t\t//if bit 14 is set then we have an error\n\t\tERROR(\"read command 0x%04X failed\",addr);\n\t\terror=true;\n\t\treturn -1;\n\t}\n\n\tif (data>>15 != getParity(data))\n\t{\n\t\t//parity did not match\n\t\tERROR(\"read command parity error 0x%04X \",addr);\n\t\terror=true;\n\t\treturn -2;\n\t}\n\n\tdata=data & 0x3FFF; //mask off the error and parity bits\n\n\treturn data;\n}\n\n//read the encoders \nint16_t AS5047D::readEncoderAngle(void)\n{\n\tif (as5047d)\n\t{\n\t\treturn readAddress(AS5047D_CMD_ANGLECOM);\n\t}\n\treturn readAddress(AS5048A_CMD_ANGLE);\n}\n\n//pipelined read of the encoder angle used for high speed reads, but value is always one read behind\nint16_t AS5047D::readEncoderAnglePipeLineRead(void)\n{\n\n\tint16_t data;\n\tint error, t0=10;\n\tGPIO_LOW(chipSelectPin);//(chipSelectPin, LOW);\n\t//delayMicroseconds(1);\n\tdo {\n\n\t\t// doing two 8 bit transfers is faster than one 16 bit\n\t\tdata =(uint16_t)SPI.transfer(0xFF)<<8 | ((uint16_t)SPI.transfer(0xFF) & 0x0FF);\n\t\tt0--;\n\t\tif (t0<=0)\n\t\t{\n\t\t\tERROR(\"AS5047D problem\");\n\t\t\tbreak;\n\t\t}\n\t\t//data=SPI.transfer16(0xFFFF); //to speed things up we know the parity and address for the read\n\t}while(data & (1<<14)); //while error bit is set\n\n\tdata=data & 0x3FFF; //mask off the error and parity bits\n\tGPIO_HIGH(chipSelectPin);\n\t//digitalWrite(chipSelectPin, HIGH);\n\t//TODO we really should check for errors and return a negative result or something\n\treturn data;\n}\n\n\nvoid AS5047D::diagnostics(char *ptrStr)\n{\n\tint16_t data;\n\tint m,d;\n\n\tif (as5047d)\n\t{\n\n\tdata=readAddress(AS5047D_CMD_DIAAGC);\n\n\tif (NULL == ptrStr)\n\t{\n\t\tLOG(\"DIAAGC: 0x%04X\", data);\n\t\tLOG(\"MAGL: %d\", getBit(data,11));\n\t\tLOG(\"MAGH: %d\", getBit(data,10));\n\t\tLOG(\"COF: %d\", getBit(data,9));\n\t\tLOG(\"LFGL: %d\", getBit(data,8));\n\t\tLOG(\"AGC: %d\", data & 0x0FF);\n\n\t\tdata=readAddress(AS5047D_CMD_MAG);\n\t\tLOG(\"CMAG: 0x%04X(%d)\",data,data);\n\n\t\tdata=readAddress(AS5047D_CMD_ANGLEUNC);\n\t\tm=(int)((float)data*AS5047D_DEGREES_PER_BIT);\n\t\td=(int)((float)data*AS5047D_DEGREES_PER_BIT*100 -m*100);\n\t\tLOG(\"CORDICANG: 0x%04X(%d) %d.%02d deg(est)\",data,data,m,d);\n\n\t\tdata=readAddress(AS5047D_CMD_ANGLECOM);\n\t\tm=(int)((float)data*AS5047D_DEGREES_PER_BIT);\n\t\td=(int)((float)data*AS5047D_DEGREES_PER_BIT*100 -m*100);\n\t\tLOG(\"DAECANG: 0x%04X(%d) %d.%02d deg(est)\",data,data,m,d);\n\t}else\n\t{\n\t\tsprintf(ptrStr,\"DIAAGC: 0x%04X\\n\\r\", data);\n\t\tsprintf(ptrStr,\"%sMAGL: %d\\n\\r\", ptrStr,getBit(data,11));\n\t\tsprintf(ptrStr,\"%sMAGH: %d\\n\\r\", ptrStr,getBit(data,10));\n\t\tsprintf(ptrStr,\"%sCOF: %d\\n\\r\", ptrStr, getBit(data,9));\n\t\tsprintf(ptrStr,\"%sLFGL: %d\\n\\r\", ptrStr, getBit(data,8));\n\t\tsprintf(ptrStr,\"%sAGC: %d\\n\\r\", ptrStr,data & 0x0FF);\n\n\t\tdata=readAddress(AS5047D_CMD_MAG);\n\t\tsprintf(ptrStr,\"%sCMAG: 0x%04X(%d)\\n\\r\", ptrStr,data,data);\n\n\t\tdata=readAddress(AS5047D_CMD_ANGLEUNC);\n\t\tm=(int)((float)data*AS5047D_DEGREES_PER_BIT);\n\t\td=(int)((float)data*AS5047D_DEGREES_PER_BIT*100 -m*100);\n\t\tsprintf(ptrStr,\"%sCORDICANG: 0x%04X(%d) %d.%02d deg(est)\\n\\r\", ptrStr,data,data,m,d);\n\n\t\tdata=readAddress(AS5047D_CMD_ANGLECOM);\n\t\tm=(int)((float)data*AS5047D_DEGREES_PER_BIT);\n\t\td=(int)((float)data*AS5047D_DEGREES_PER_BIT*100 -m*100);\n\t\tsprintf(ptrStr,\"%sDAECANG: 0x%04X(%d) %d.%02d deg(est)\\n\\r\", ptrStr,data,data,m,d);\n\n\t}\n\t} else\n\t{\n\t\tdata=readAddress(AS5048A_CMD_DIAAGC);\n\t\tsprintf(ptrStr,\"AS5048A DIAAGC: 0x%04X\\n\\r\", data);\n\t\tdata=readAddress(AS5048A_CMD_MAG);\n\t\tsprintf(ptrStr,\"%sMagnitude: %d\\n\\r\", ptrStr,data);\n\t\tdata=readAddress(AS5048A_CMD_ANGLE);\n\t\tsprintf(ptrStr,\"%sAngle: %d\\n\\r\", ptrStr,data);\n\t}\n\n}\n\n#pragma GCC pop_options\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/as5047d.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2019  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#ifndef __AS5047D_H__\n#define __AS5047D_H__\n\n#include <Arduino.h>\n#define AS5047D_DEGREES_PER_BIT  (360.0/(float)(0x3FFF))\n\nclass AS5047D {\n  private:\n    int chipSelectPin;\n    int16_t readAddress(uint16_t addr);\n    bool error=false;\n    bool as5047d=true;\n  public:\n    boolean begin(int csPin);\n    int16_t readEncoderAngle(void);\n    void diagnostics(char *ptrStr);\n    int16_t readEncoderAnglePipeLineRead(void);\n    bool getError(void) {return error;};\n};\n\n#endif //__AS5047D_H__\n"
  },
  {
    "path": "firmware/stepper_nano_zero/board.h",
    "content": "/**********************************************************************\n/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#ifndef __BOARD_H__\n#define __BOARD_H__\n\n#include <Arduino.h>\n\n\n//uncomment this if you are using the Mechaduino hardware\n//#define MECHADUINO_HARDWARE\n\n\n//uncomment the follow lines if using the NEMA 23 10A hardware\n//#define NEMA_23_10A_HW\n\n//uncomment the following if the board uses the A5995 driver (NEMA 23 3.2A boards)\n//#define A5995_DRIVER\n\n//The March 21 2017 NEMA 17 Smart Stepper has changed some pin outs\n// A1 was changed to read motor voltage, hence SW4 is now using D4\n// comment out this next line if using the older hardware\n#define NEMA17_SMART_STEPPER_3_21_2017\n\n#if defined(MECHADUINO_HARDWARE) && defined(NEMA17_SMART_STEPPER_3_21_2017)\n#error \"Cannot have both MECHADUINO_HARDWARE and NEMA17_SMART_STEPPER_3_21_2017 defined in board.h\"\n#endif\n\n//The MKS Servo42 uses the A1333_Encoder\n// Please uncomment this line and make sure the NEMA17_SMART_STEPPER_3_21_2017 is\n// uncommented for the Servo42\n//#define A1333_ENCODER\n\n#ifdef A5995_DRIVER\n#ifdef NEMA17_SMART_STEPPER_3_21_2017\n#error \"Only NEMA17_SMART_STEPPER_3_21_2017 or A5595_DRIVER may be defined\"\n#endif\n#endif\n\n#define NZS_FAST_CAL // define this to use 32k of flash for fast calibration table\n#define NZS_FAST_SINE //uses 2048 extra bytes to implement faster sine tables\n\n\n#define NZS_AS5047_PIPELINE //does a pipeline read of encoder, which is slightly faster\n\n#define NZS_CONTROL_LOOP_HZ (6000) //update rate of control loop\n\n\n#define NZS_LCD_ABSOULTE_ANGLE  //define this to show angle from zero in positive and negative direction\n// for example 2 rotations from start will be angle of 720 degrees\n\n//#define ENABLE_PHASE_PREDICTION //this enables prediction of phase at high velocity to increase motor speed\n//as of FW0.11 it is considered development only\n\n#define VERSION \"FW: 0.40\" //this is what prints on LCD during splash screen\n\n//Define this to allow command out serial port, else hardware serial is debug log\n//#define CMD_SERIAL_PORT\n\n#define SERIAL_BAUD (115200) //baud rate for the serial ports\n\n//This section is for using the step and dir pins as serial port\n// when the enable pin is inactive.\n#ifndef MECHADUINO_HARDWARE\n#define USE_STEP_DIR_SERIAL\n#define STEP_DIR_BAUD (19200) //this is the baud rate we will use\n#endif\n\n\n// These are used as an attempt to use TC4 to count steps\n//  currently this is not working.\n//#define USE_NEW_STEP //define this to use new step method\n#define USE_TC_STEP //use timer counter for step pin\n\n#ifndef F_CPU\n#define F_CPU (48000000UL)\n#endif\n\n/* TODO are flaged with TODO\n *   TODO - add detection of magnet to make sure PCB is on motor\n */\n\n/* change log\n *   0.02 added fixes for 0.9 degree motor\n *   0.03 added code for using error pin as an enable pin, enable feedback by default\n *   0.04\n *   0.05 added different modes added support for mechaduino\n *   0.06 added time out pipeline read, add some error logging on encoder failure for mechaduino\n *   0.07 many changes including\n *   \t- fixed error on display when doing a move 99999\n *   \t- added velocity and position PID modes\n *   \t- fixed LCD menu and put LCD code in own file\n *   \t- include LCD source files from adafruit as that ssd1306 need lcd resoultion fix\n *   \t- added motor parameters to NVM such step size and rotation are only check on first boot\n *   \t- added test on power up to see if motor power is applied.\n *   \t- added factory reset command\n *   \t- pPID is not stable in my testing.\n *   0.08\n *   \t- moved enable pin processing out of interrupt context\n *   \t- added mode for inverted logic on the enable pin\n *   \t- added pin definitions for NEMA23 10A hardware\n *   \t- Changed enable such that it does not move motor but just sets current posistion\n *\t 0.09\n *\t \t- enabled auto detection of LCD\n *\t \t- cleaned up the commands, made motorparams and systemparams individual commands\n *\t \t- added the option to the move command to move at a constant RPM\n *\t \t- Added the setzero command to zero the relative location of motor\n *\t \t- Added the stop command to stop the planner based moves.\n *\t 0.10\n *\t \t-Fixed bug in switching control mode to 3\n *\t 0.11\n *\t    - Fixed bug where output current was half of what it should have been (sine.h)\n *\t    - Added #define for phase predictive advancement\n *\t    - Changed calibration to be done with one coil/phase on\n *\t    - Added smoothing for calibration\n *\t    - Continue to work on the Fet Driver code.\n *\t0.12\n *\t\t- Continue to work on the FET driver code\n *\t\t- fixed a constant issue with the DAC for the A4954 driver\n *\t\t- added command for setting the operational mode of the enable pin\n *\t\t- added the start of the A5995 driver.\n *\t0.13\n *\t\t- Added delay in for the 0.9 degree motor calibration and testing\n *\t\t- changed calibration to move 1/2 step at time as it was causing problems on A5995 due to current ramp down\n *\t0.14  \t- Added in data logging\n *\t\t- Averaged the encoder when the motor is stationary to reduce noise/vibrations\n *  \t0.15 - Fixed some fet driver code\n *  \t \t- Added support for the NEMA17 smart stepper\n *  \t \t- Fixed RPM display bug on the LCD\n * \t0.16 - Added support for enable and error pins on the 3-21-2017 hardware\n *\n *\t0.17 - Added the ability for the command line to go over the hardwired serial port\n *\t\t - Fixed a bug where step and direction pin were setup as pulled down pins\n *\t\t    which could cause false stepping in nosiey environments\n * \t0.18 - Added support for EEPROM writting of last location during brown out - currently brown out is too fast to write\n * \t     - Added commands to support reading and restoring location from eeprom\n * \t     - Check for pull up on SDA/SCL before doing a I2C read as that SERCOM driver has not time outs and locks.\n * \t     - Added faster detection of USB not being plugged in, reduces power up time with no USB\n * \t0.19 - removed debug information in the ssd1306 driver which caused LCD not always to be found\n *\t0.20 - Fixed bug in calibration, thanks to Oliver E.\n *\t0.21 - Fixed issues compiling for mechaduino, including disabling LCD for MEchaduino\n *\t0.22 - Added home command;\n *\t0.23 -- added motor voltage sense to remove stepping on power up\n *\t0.24 - Disabled the home command which used the enable pin if you do not have enable pin\n *\t0.25 - Added pin read command\n *  0.26 - changed the step/dir pins to be input_pullups\n *  0.27 - added the option to make the step/dir uart when enable is low.\n *  \t - fixed enable to line to disable the A4954 driver\n *  0.28 - Enabled some homing options (still under development)\n *  0.29  - fixed rounding bug in ANGLE_T0_DEGREES\n *  0.30  - Added support for the AS5048A encoder\n *  0.31  - Added reading enable pin on during main loop\n *  0.32  - Fixed issue where steps were not being counted correctly\n *  0.33  - changed sPID parameters back to 0.9 0.0001 0.01\n *  0.34  - Added board type to the splash screen\n *  0.35 - fixed usign TC4 (USE_TC_STEP) for counting steps. We can measure steps\n *       - at over 125khz, however the dir pin has ~8us setup time due to interrupt latency.\n *       - Added debug command to allow debug messages out the USB serial port\n *  0.36 - eeprom set location math was wrong.\n *  0.37 - fixed bug where the motor would pause periodically do the the TC4 counter.\n *  0.38 - fixed bug in the velocity feedback mode.\n *  0.39 - changed step count to TCC2, improved the dir pin setup/hold times\n *  \t - added support for the MKS Servo42 (A1333 encoder)\n *  0.40 - fixed compiling errors for Mechaduino. Added sanity checks for different hardware boards (AK)\n */\n\n\n/*\n *  Typedefs that are used across multiple files/modules\n */\ntypedef enum {\n\tCW_ROTATION=0,\n\tCCW_ROTATION=1,\n} RotationDir_t;\n\ntypedef enum {\n\tERROR_PIN_MODE_ENABLE=0, //error pin works like enable on step sticks\n\tERROR_PIN_MODE_ACTIVE_LOW_ENABLE=1, //error pin works like enable on step sticks\n\tERROR_PIN_MODE_ERROR=2,  //error pin is low when there is angle error\n\tERROR_PIN_MODE_BIDIR=3,   //error pin is bidirection open collector\n\n} ErrorPinMode_t;\n\ntypedef enum {\n\tCTRL_OFF =0, \t //controller is disabled\n\tCTRL_OPEN=1, \t //controller is in open loop mode\n\tCTRL_SIMPLE = 2, //simple error controller\n\tCTRL_POS_PID =3, //PID  Position controller\n\tCTRL_POS_VELOCITY_PID =4, //PID  Velocity controller\n} feedbackCtrl_t;\n\n// ******** EVENT SYS USAGAE ************\n// Channel 0 - Step pin event\n\n// ******** TIMER USAGE A4954 versions ************\n//TCC1 is used for DAC PWM to the A4954\n//TCC0 can be used as PWM for the input pins on the A4954\n//TCC2 is used for the step count\n//D0 step input could use TCC1 or TCC0 if not used\n//TC3 is used for planner tick\n//TC5 is use for timing the control loop\n\n// ******** TIMER USAGE NEMA23 10A versions ************\n//TCC0 PWM for the FET IN pins\n//D10 step input could use TC3 or TCC0 if not used\n//TC3 is used for planner tick\n//TC4 is used for step count\n//TC5 is use for timing the control loop\n\n\n//mechaduio and Arduino Zero has defined serial ports differently than NZS\n#ifdef MECHADUINO_HARDWARE\n#warning \"Compiling source for Mechaduino NOT NZS\"\n#define DISABLE_LCD\n#undef  Serial5\n#define Serial5 Serial \n#else\n#define SerialUSB Serial\n#endif \n\n#define PIN_TXD\t\t(30)\n#define PIN_RXD\t\t(31)\n\n#define PIN_STEP_INPUT  (0)\n#define PIN_DIR_INPUT   (1)\n\n#define PIN_MOSI        (23)\n#define PIN_SCK         (24)\n#define PIN_MISO        (22)\n\n#ifdef MECHADUINO_HARDWARE\n#ifdef USE_STEP_DIR_SERIAL\n#error \"Step/Dir UART not supported on Mechaduino yet\"\n#endif\n\n#define PIN_ERROR \t\t(19)  //analogInputToDigitalPin(PIN_A5))\n#else //not Mechaduino hardware\n#ifdef NEMA17_SMART_STEPPER_3_21_2017\n#define PIN_SW1\t\t(19)//analogInputToDigitalPin(PIN_A5))\n#define PIN_SW3\t\t(14)//analogInputToDigitalPin(PIN_A0))\n\n#ifdef A1333_ENCODER //the MKS Servo42 uses A1 for this switch\n#define PIN_SW4\t\t(15)//analogInputToDigitalPin(PIN_A1))\n#else\n#define PIN_SW4\t\t(2)//D2\n#endif\n\n#define PIN_ENABLE\t(10)\n#define PIN_ERROR\t(3)\n\n#define PIN_VMOTOR (A1) //analog pin for the motor\n\n#else\n#define PIN_SW1\t\t(19)//analogInputToDigitalPin(PIN_A5))\n#define PIN_SW3\t\t(14)//analogInputToDigitalPin(PIN_A0))\n#define PIN_SW4\t\t(15)//analogInputToDigitalPin(PIN_A1))\n#define PIN_ERROR\t\t(10)\n#endif\n\n#endif\n\n#ifdef A5995_DRIVER\n#define PIN_ENABLE\t(3)\n#endif\n\n#define PIN_SCL (21)\n#define PIN_SDA (20)\n#define PIN_USB_PWR (38) // this pin is high when usb is connected\n\n#define PIN_AS5047D_CS  (16)//analogInputToDigitalPin(PIN_A2))\n#ifndef MECHADUINO_HARDWARE\n#define PIN_AS5047D_PWR\t(11) //pull low to power on AS5047D\n#endif\n\n//these pins use the TIMER in the A4954 driver\n// changing the pin definitions here may require changes in the A4954.cpp file\n\n#define PIN_FET_IN1\t\t(5) //PA15 TC3/WO[1] TCC0/WO[5]1\n#define PIN_FET_IN2\t\t(6) //PA20 TC7/W0[0] TCC0/WO[6]2\n#define PIN_FET_IN3\t\t(7) //PA21 TC7/WO[1] TCC0/WO[7]3\n#define PIN_FET_IN4\t\t(2) //PA14 TC3/W0[0] TCC0/WO[4] 0\n#define PIN_FET_VREF1\t(4)\n#define PIN_FET_VREF2\t(3)\n#define PIN_FET_ENABLE\t\t(12)\n//current sense pin from each H-bridge\n#define ISENSE_FET_A\t (17) //analogInputToDigitalPin(PIN_A3)\n#define ISENSE_FET_B\t (8)\n//Comparators analog inputs\n//#define COMP_FET_A\t\t (18)//analogInputToDigitalPin(PIN_A4))\n//#define COMP_FET_B\t\t (9)\n\n\n//these are the pins used on the A5995 driver\n#define PIN_A5995_ENABLE1 \t(2) //PA14\n#define PIN_A5995_ENABLE2 \t(18) //PA05  analogInputToDigitalPin(PIN_A4))\n#define PIN_A5995_MODE1 \t(8) //PA06 TCC1 WO[0]\n#define PIN_A5995_MODE2 \t(7)\t//PA21 TCC0 WO[4] //3\n#define PIN_A5995_PHASE1 \t(6)\t//PA20 TCC0 WO[6] //2\n#define PIN_A5995_PHASE2 \t(5) //PA15 TCC0 W0[5] //1\n#define PIN_A5995_VREF1\t\t(4) //PA08\n#define PIN_A5995_VREF2\t\t(9) //PA07\n#define PIN_A5995_SLEEPn\t(25) //RXLED\n\n\n#ifndef MECHADUINO_HARDWARE\n#define PIN_YELLOW_LED  (8)\n#endif\n\n\n\n\n#ifdef NEMA_23_10A_HW\n#undef PIN_YELLOW_LED\n#define PIN_YELLOW_LED  \t(26) //TXLED (PA27)\n#endif //NEMA_23_10A_HW\n\n\n#define PIN_RED_LED     (13)\n#define PIN_A4954_IN3\t\t(5)\n#define PIN_A4954_IN4\t\t(6)\n#define PIN_A4954_IN2\t\t(7)\n#ifdef MECHADUINO_HARDWARE\n#define PIN_A4954_IN1\t\t(8)\n#else\n#define PIN_A4954_IN1\t\t(18) //analogInputToDigitalPin(PIN_A4))\n#endif\n#define PIN_A4954_VREF34\t(4)\n#define PIN_A4954_VREF12\t(9)\n\n\n\n//Here are some useful macros\n#define DIVIDE_WITH_ROUND(x,y)  (((x)+(y)/2)/(y))\n\n\n#define GPIO_LOW(pin) {PORT->Group[g_APinDescription[(pin)].ulPort].OUTCLR.reg = (1ul << g_APinDescription[(pin)].ulPin);}\n#define GPIO_HIGH(pin) {PORT->Group[g_APinDescription[(pin)].ulPort].OUTSET.reg = (1ul << g_APinDescription[(pin)].ulPin);}\n#define GPIO_OUTPUT(pin) {PORT->Group[g_APinDescription[(pin)].ulPort].PINCFG[g_APinDescription[(pin)].ulPin].reg &=~(uint8_t)(PORT_PINCFG_INEN) ;  PORT->Group[g_APinDescription[(pin)].ulPort].DIRSET.reg = (uint32_t)(1<<g_APinDescription[(pin)].ulPin) ;}\n\n#define PIN_GPIO_OUTPUT(pin) {PORT->Group[g_APinDescription[(pin)].ulPort].PINCFG[g_APinDescription[(pin)].ulPin].reg &=~(uint8_t)(PORT_PINCFG_INEN | PORT_PINCFG_PMUXEN) ;  PORT->Group[g_APinDescription[(pin)].ulPort].DIRSET.reg = (uint32_t)(1<<g_APinDescription[(pin)].ulPin) ;}\n\n#define PIN_GPIO(pin) {PORT->Group[g_APinDescription[(pin)].ulPort].PINCFG[g_APinDescription[(pin)].ulPin].reg &=~(uint8_t)(PORT_PINCFG_INEN | PORT_PINCFG_PMUXEN);}\n#define GPIO_READ(ulPin) {(PORT->Group[g_APinDescription[ulPin].ulPort].IN.reg & (1ul << g_APinDescription[ulPin].ulPin)) != 0}\n#define PIN_PERIPH(pin) {PORT->Group[g_APinDescription[(pin)].ulPort].PINCFG[g_APinDescription[(pin)].ulPin].reg |= PORT_PINCFG_PMUXEN;}\n//sets up the pins for the board\nstatic void boardSetupPins(void)\n{\n\t//setup switch pins\n#ifdef PIN_SW1\n\tpinMode(PIN_SW1, INPUT_PULLUP);\n\tpinMode(PIN_SW3, INPUT_PULLUP);\n\tpinMode(PIN_SW4, INPUT_PULLUP);\n#endif\n\n\tpinMode(PIN_STEP_INPUT, INPUT_PULLUP);\n\tpinMode(PIN_DIR_INPUT, INPUT_PULLUP);\n\n#ifdef PIN_ENABLE\n\tpinMode(PIN_ENABLE, INPUT_PULLUP); //default error pin as enable pin with pull up\n#endif\n\tpinMode(PIN_ERROR, INPUT_PULLUP); //default error pin as enable pin with pull up\n\n\tpinMode(PIN_AS5047D_CS,OUTPUT);\n\tdigitalWrite(PIN_AS5047D_CS,LOW); //pull CS LOW by default (chip powered off)\n\n\t//turn the AS5047D off by default\n#ifdef PIN_AS5047D_PWR\n\tpinMode(PIN_AS5047D_PWR,OUTPUT);\n\tdigitalWrite(PIN_AS5047D_PWR,HIGH);\n#endif\n\n\n\n\tpinMode(PIN_MOSI,OUTPUT);\n\tdigitalWrite(PIN_MOSI,LOW);\n\tpinMode(PIN_SCK,OUTPUT);\n\tdigitalWrite(PIN_SCK,LOW);\n\tpinMode(PIN_MISO,INPUT);\n\n\t//setup the A4954 pins\n\tdigitalWrite(PIN_A4954_IN3,LOW);\n\tpinMode(PIN_A4954_IN3,OUTPUT);\n\tdigitalWrite(PIN_A4954_IN4,LOW);\n\tpinMode(PIN_A4954_IN4,OUTPUT);\n\tdigitalWrite(PIN_A4954_IN2,LOW);\n\tpinMode(PIN_A4954_IN2,OUTPUT);\n\tdigitalWrite(PIN_A4954_IN1,LOW);\n\tpinMode(PIN_A4954_IN1,OUTPUT);\n\n\t//setup the PWM for current on the A4954, set for low current\n\tdigitalWrite(PIN_A4954_VREF12,LOW);\n\tdigitalWrite(PIN_A4954_VREF34,LOW);\n\tpinMode(PIN_A4954_VREF34, OUTPUT);\n\tpinMode(PIN_A4954_VREF12, OUTPUT);\n\n\n\n\tpinMode(PIN_RED_LED,OUTPUT);\n#ifdef PIN_YELLOW_LED\n\tpinMode(PIN_YELLOW_LED,OUTPUT);\n\tdigitalWrite(PIN_YELLOW_LED,HIGH);\n#endif\n}\n\n#ifdef NEMA17_SMART_STEPPER_3_21_2017\nstatic float GetMotorVoltage(void)\n{\n\tuint32_t x;\n\tfloat f;\n\t//the motor voltage is 1/101 of the adc\n\tx=analogRead(PIN_VMOTOR);  //this should be a 10bit value mapped to 3.3V\n\tf=(float)x*3.3/1024.0*101.0;\n\treturn f;\n}\n#endif\n\nstatic void inline YELLOW_LED(bool state)\n{\n#ifdef PIN_YELLOW_LED\n\tdigitalWrite(PIN_YELLOW_LED,!state);\n#endif\n}\n\nstatic void inline RED_LED(bool state)\n{\n\tdigitalWrite(PIN_RED_LED,state);\n}\n\n#define MIN(a,b) (((a)<(b))?(a):(b))\n#define MAX(a,b) (((a)>(b))?(a):(b))\n#define ABS(a) (((a)>(0))?(a):(-(a)))\n#define DIV(x,y) (((y)>(0))?((x)/(y)):(4294967295))\n#define SIGN(x)  (((x) > 0) - ((x) < 0))\n\n#define NVIC_IS_IRQ_ENABLED(x) (NVIC->ISER[0] & (1 << ((uint32_t)(x) & 0x1F)))!=0\n\nstatic inline uint8_t  getPinMux(uint16_t ulPin)\n{\n\tuint8_t temp;\n\tif ((ulPin & 0x01)==0)\n\t{\n\t\ttemp = (PORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg) & PORT_PMUX_PMUXE( 0xF ) ;\n\t}else\n\t{\n\t\ttemp = (PORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg)>>4 & 0xF;\n\t}\n\treturn temp;\n}\n\n\nstatic inline uint8_t  getPinCfg(uint16_t ulPin)\n{\n\tuint8_t temp;\n\n\ttemp = PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg;\n\treturn temp;\n}\n\nstatic inline void  setPinCfg(uint16_t ulPin, uint8_t val)\n{\n\tPORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg=val;\n}\n\n\n\nstatic inline void  setPinMux(uint16_t ulPin, uint8_t val)\n{\n\tuint8_t temp;\n\ttemp = (PORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg);\n\tif ((ulPin & 0x01)==0)\n\t{\n\t\t//if an even pin\n\t\ttemp =  (temp & 0xF0) | (val & 0x0F);\n\t}else\n\t{\n\t\ttemp =  (temp & 0x0F) | ((val<<4) & 0x0F);\n\t}\n\tPORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg=temp;\n\tPORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg |= PORT_PINCFG_PMUXEN ; // Enable port mux\n}\n\nstatic inline void SET_PIN_PERHERIAL(uint16_t ulPin,EPioType ulPeripheral)\n{\n\tif ( g_APinDescription[ulPin].ulPin & 1 ) // is pin odd?\n\t{\n\t\tuint32_t temp ;\n\n\t\t// Get whole current setup for both odd and even pins and remove odd one\n\t\ttemp = (PORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg) & PORT_PMUX_PMUXE( 0xF ) ;\n\t\t// Set new muxing\n\t\tPORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg = temp|PORT_PMUX_PMUXO( ulPeripheral ) ;\n\t\t// Enable port mux\n\t\tPORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg |= PORT_PINCFG_PMUXEN ;\n\t}\n\telse // even pin\n\t{\n\t\tuint32_t temp ;\n\n\t\ttemp = (PORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg) & PORT_PMUX_PMUXO( 0xF ) ;\n\t\tPORT->Group[g_APinDescription[ulPin].ulPort].PMUX[g_APinDescription[ulPin].ulPin >> 1].reg = temp|PORT_PMUX_PMUXE( ulPeripheral ) ;\n\t\tPORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg |= PORT_PINCFG_PMUXEN ; // Enable port mux\n\t}\n}\n\n\n//the Arduino delay function requires interrupts to work.\n// if interrupts are disabled use the delayMicroseconds which is a spin loop\nstatic inline void DelayMs(uint32_t ms)\n{\n\tuint32_t prim;\n\t/* Read PRIMASK register, check interrupt status before you disable them */\n\t/* Returns 0 if they are enabled, or non-zero if disabled */\n\tprim = __get_PRIMASK();\n\n\tif (prim==0)\n\t{\n\t\tdelay(ms);\n\t}else\n\t{\n\t\twhile(ms)\n\t\t{\n\t\t\tdelayMicroseconds(1000);\n\t\t\tms--;\n\t\t}\n\t}\n}\n\n#endif//__BOARD_H__\n"
  },
  {
    "path": "firmware/stepper_nano_zero/calibration.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include \"calibration.h\"\n#include \"Flash.h\"\n#include \"nonvolatile.h\"\n#include \"board.h\" //for divide with rounding macro\n#include \"utils.h\"\n\n\nstatic uint16_t getTableIndex(uint16_t value)\n{\n\tint32_t x;\n\n\tx=((int32_t)value*CALIBRATION_TABLE_SIZE)/CALIBRATION_STEPS; //the divide is a floor not a round which is what we want\n\treturn (uint16_t)x;\n\n}\nstatic uint16_t interp(Angle x1, Angle y1, Angle x2, Angle y2, Angle x)\n{\n\tint32_t dx,dy,dx2,y;\n\tdx=x2-x1;\n\tdy=y2-y1;\n\tdx2=x-x1;\n\ty=(int32_t)y1+DIVIDE_WITH_ROUND((dx2*dy),dx);\n\tif (y<0)\n\t{\n\t\ty=y+CALIBRATION_STEPS;\n\t}\n\treturn (uint16_t)y;\n}\n\nstatic void printData(int32_t *data, int32_t n)\n{\n\tint32_t i;\n\tSerial.print(\"\\n\\r\");\n\tfor (i=0; i<n; i++)\n\t{\n\t\tSerial.print(data[i]);\n\t\tif (i!=(n-1))\n\t\t{\n\t\t\tSerial.print(\",\");\n\t\t}\n\t}\n\tSerial.print(\"\\n\\r\");\n}\nbool CalibrationTable::updateTableValue(int32_t index, int32_t value)\n{\n\n\ttable[index].value=value;\n\ttable[index].error=CALIBRATION_STEPS/CALIBRATION_TABLE_SIZE; //or error is roughly like variance, so set it to span to next calibration value.\n\treturn true;\n\n}\nvoid CalibrationTable::printCalTable(void)\n{\n\tint i;\n\tSerial.print(\"\\n\\r\");\n\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++)\n\t{\n\t\tSerial.print((uint16_t)table[i].value);\n\t\tSerial.print(\",\");\n\t}\n\tSerial.print(\"\\n\\r\");\n}\n\nAngle CalibrationTable::fastReverseLookup(Angle encoderAngle)\n{\n#ifdef NZS_FAST_CAL\n\t//assume calibration is good\n\tif (fastCalVaild)\n\t{\n\t\tuint16_t x;\n\t\tx=((uint16_t)encoderAngle)/4;  //we only have 16384 values in table\n\n\t\treturn (Angle)NVM->FastCal.angle[x];\n\t}else\n\t{\n\t\treturn reverseLookup(encoderAngle);\n\t}\n#else\n\treturn reverseLookup(encoderAngle)\n#endif\n}\n\nAngle CalibrationTable::reverseLookup(Angle encoderAngle)\n{\n\n\tint32_t i=0;\n\tint32_t a1,a2;\n\tint32_t x;\n\tint16_t y;\n\tint32_t min,max;\n\tmin=(uint16_t)table[0].value;\n\tmax=min;\n\n\n\n\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++)\n\t{\n\t\tx=(uint16_t)table[i].value;\n\t\tif (x<min)\n\t\t{\n\t\t\tmin=x;\n\t\t}\n\t\tif (x>max)\n\t\t{\n\t\t\tmax=x;\n\t\t}\n\t}\n\n\n\tx=(uint16_t)encoderAngle;\n\tif (x<min)\n\t{\n\t\tx=x+CALIBRATION_STEPS;\n\t}\n\n\ti=0;\n\n\twhile (i<CALIBRATION_TABLE_SIZE)\n\t{\n\t\ta1=(uint16_t)table[i].value;\n\n\t\t//handle index wrap around\n\t\tif (i==(CALIBRATION_TABLE_SIZE-1))\n\t\t{\n\t\t\ta2=(uint16_t)table[0].value;\n\t\t}else\n\t\t{\n\t\t\ta2=(uint16_t)table[i+1].value;\n\t\t}\n\n\t\t//wrap\n\t\tif (abs(a1-a2)>CALIBRATION_STEPS/2)\n\t\t{\n\t\t\tif (a1<a2)\n\t\t\t{\n\t\t\t\ta1=a1+CALIBRATION_STEPS;\n\t\t\t}else\n\t\t\t{\n\t\t\t\ta2=a2+CALIBRATION_STEPS;\n\t\t\t}\n\n\t\t\t//LOG(\"xxxx %d %d %d\",a1,a2,x);\n\t\t}\n\n\t\t//finding matching location\n\t\tif ( (x>=a1 && x<=a2) ||\n\t\t\t\t(x>=a2 && x<=a1) )\n\t\t{\n\t\t\t//LOG(\"%d\", i);\n\t\t\t// inerpolate results and return\n\t\t\t//LOG(\"%d %d %d\",a1,a2,x);\n\t\t\t//LOG(\"%d,%d\",(i*CALIBRATION_MAX)/CALIBRATION_TABLE_SIZE,((i+2)*CALIBRATION_MAX)/CALIBRATION_TABLE_SIZE);\n\n\t\t\ty=interp(a1, DIVIDE_WITH_ROUND((i*CALIBRATION_STEPS),CALIBRATION_TABLE_SIZE), a2, DIVIDE_WITH_ROUND( ((i+1)*CALIBRATION_STEPS),CALIBRATION_TABLE_SIZE), x);\n\n\t\t\treturn y;\n\t\t}\n\t\ti++;\n\t}\n\tERROR(\"WE did some thing wrong\");\n\n\n\n\n}\n\n\nvoid CalibrationTable::smoothTable(void)\n{\n\tuint16_t b[]={1,2,4,5,4,2,1};\n\tuint16_t sum_b=19;  //sum of b filter\n\n\tint32_t data[CALIBRATION_TABLE_SIZE];\n\tint32_t table2[CALIBRATION_TABLE_SIZE];\n\n\tint32_t i;\n\tint32_t offset=0;\n\tint32_t startNum;\n\n\t//first lets handle the wrap around in the table\n\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++)\n\t{\n\t\tif (i>0 && offset==0)\n\t\t{\n\t\t\tif(((uint16_t)table[i-1].value-(uint16_t)table[i].value) <-32768)\n\t\t\t{\n\t\t\t\toffset=-65536;\n\t\t\t}\n\n\t\t\tif (((uint16_t)table[i-1].value-(uint16_t)table[i].value) > 32768)\n\t\t\t{\n\t\t\t\toffset=65536;\n\t\t\t}\n\t\t}\n\t\ttable2[i]=(int32_t)((uint16_t)table[i].value)+offset;\n\t}\n\n\t//Serial.print(\"after wrap\\n\\r\");\n\t//printData(table2,CALIBRATION_TABLE_SIZE);\n\n\t//remove the starting offset and compensate table for index\n\tstartNum=table2[0];\n\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++)\n\t{\n\t\ttable2[i]=table2[i]-startNum - (i*65536)/CALIBRATION_TABLE_SIZE;\n\t}\n\n\t//Serial.print(\"after phase comp\\n\\r\");\n\t//printData(table2,CALIBRATION_TABLE_SIZE);\n\n\t//filter the data\n\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++)\n\t{\n\t\tint j,ix,ib;;\n\t\tint32_t sum=0;\n\n\t\tib=0;\n\t\tfor (j=i-3; j<i+4; j++)\n\t\t{\n\t\t\tix=j;\n\t\t\tif (ix<0)\n\t\t\t{\n\t\t\t\tix=ix+CALIBRATION_TABLE_SIZE;\n\t\t\t}\n\t\t\tif (ix>=CALIBRATION_TABLE_SIZE)\n\t\t\t{\n\t\t\t\tix=ix-CALIBRATION_TABLE_SIZE;\n\t\t\t}\n\t\t\tif (i==0)\n\t\t\t{\n\t\t\t\tLOG(\"index %d\",ix);\n\t\t\t}\n\t\t\tsum=sum+table2[ix]*b[ib];\n\t\t\tib++;\n\t\t}\n\t\tsum=DIVIDE_WITH_ROUND(sum,sum_b);\n\t\tdata[i]=sum;\n\t}\n\n\t//Serial.print(\"after filter\\n\\r\");\n\t//printData(data,CALIBRATION_TABLE_SIZE);\n\n\t//add in offset and the phase compenstation\n\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++)\n\t{\n\t\tdata[i]=data[i]+startNum + (i*65536)/CALIBRATION_TABLE_SIZE;\n\t}\n\n\t//Serial.print(\"after phase comp added\\n\\r\");\n\t//printData(data,CALIBRATION_TABLE_SIZE);\n\n\t//remove the uint16_t wrap\n\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++)\n\t{\n\t\tif (data[i]>=65536)\n\t\t{\n\t\t\tdata[i]=data[i]-65536;\n\t\t}\n\t}\n\n\t//Serial.print(\"after wrap added\\n\\r\");\n\t//printData(data,CALIBRATION_TABLE_SIZE);\n\n\t//save new table\n\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++)\n\t{\n\t\ttable[i].value=data[i];\n\t}\n}\n\nvoid CalibrationTable::saveToFlash(void)\n{\n\tFlashCalData_t data;\n\tint i;\n\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++ )\n\t{\n\t\tdata.table[i]=(uint16_t)table[i].value;\n\t}\n\tdata.status=true;\n\n\tLOG(\"Writting Calbiration to Flash\");\n\tnvmWriteCalTable(&data,sizeof(data));\n\n\tmemset(&data,0,sizeof(data));\n\tmemcpy(&data, &NVM->CalibrationTable,sizeof(data));\n\tcreateFastCal();\n\n\tLOG(\"after writting status is %d\",data.status);\n\tloadFromFlash();\n\n}\n\nvoid CalibrationTable::loadFromFlash(void)\n{\n\tFlashCalData_t data;\n\tint i;\n\tLOG(\"Reading Calbiration to Flash\");\n\tmemcpy(&data, &NVM->CalibrationTable,sizeof(data));\n\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++ )\n\t{\n\t\ttable[i].value=Angle(data.table[i]);\n\t\ttable[i].error=CALIBRATION_MIN_ERROR;\n\t}\n\tdata.status=true;\n}\n\nbool CalibrationTable::flashGood(void)\n{\n\tLOG(\"calibration table status is: %d\",NVM->CalibrationTable.status);\n\treturn NVM->CalibrationTable.status;\n}\n\n\nvoid CalibrationTable::createFastCal(void)\n{\n#ifdef NZS_FAST_CAL\n\tint32_t i;\n\tuint16_t cs=0;\n\tuint16_t data[256];\n\tint32_t j;\n\tj=0;\n\tcs=0;\n\tLOG(\"setting fast calibration\");\n\tfor (i=0; i<16384; i++)\n\t{\n\n\t\tuint16_t x;\n\t\tx=reverseLookup(i*4);\n\t\tdata[j]=x;\n\t\tj++;\n\t\tif (j>=256)\n\t\t{\n\t\t\tflashWrite(&NVM->FastCal.angle[i-255],data,256*sizeof(uint16_t));\n\t\t\t//LOG(\"Wrote fastcal at index %d-%d\", i-255, i);\n\t\t\tj=0;\n\t\t}\n\t\tcs+=x;\n\t}\n\t//update the checksum\n\tflashWrite(&NVM->FastCal.checkSum,&cs,sizeof(uint16_t));\n\tfastCalVaild=true;\n\n\t//this is a quick test\n\t/*\n\t\t\tfor (i=0; i<16384; i++)\n\t\t\t{\n\t\t\t\tLOG(\"fast Cal %d,%d,%d\",i,NVM->FastCal.angle[i],(uint32_t)reverseLookup(i*4));\n\t\t\t}\n\t */\n#endif\n}\nvoid CalibrationTable::updateFastCal(void)\n{\n#ifdef NZS_FAST_CAL\n\tint32_t i;\n\tuint16_t cs=0;\n\tuint16_t data[256];\n\tint32_t j;\n\tbool NonZero=false;\n\tfor (i=0; i<16384; i++)\n\t{\n\t\tcs+=NVM->FastCal.angle[i];\n\t\tif (cs != 0)\n\t\t{\n\t\t\tNonZero=true;\n\t\t}\n\t}\n\tif (cs!=NVM->FastCal.checkSum || NonZero==false)\n\t{\n\t\tcreateFastCal();\n\t}\n\telse\n\t{\n\t\tLOG(\"fast cal is valid\");\n\t\tfastCalVaild=true;\n\t}\n#endif\n}\n\nvoid CalibrationTable::init(void)\n{\n\tint i;\n\n\tif (true == flashGood())\n\t{\n\t\tloadFromFlash();\n\t\tupdateFastCal();\n\t}else\n\t{\n\t\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++)\n\t\t{\n\t\t\ttable[i].value=0;\n\t\t\ttable[i].error=CALIBRATION_ERROR_NOT_SET;\n\t\t}\n\t}\n\treturn;\n}\n\n#if 0 \n//This code was removed because with micro stepping we can not assume\n// our actualAngle is correct. \nvoid CalibrationTable::updateTable(Angle actualAngle, Angle encoderValue);\n{\n\tstatic int32_t lastAngle=-1;\n\tstatic uint16_t lastEncoderValue=0;\n\n\tif (last != -1)\n\t{\n\t\tint32_t dist;\n\n\t\t//hopefull we can use the current point and last point to interpolate and set a value or two in table.\n\t\tdist=abs((int32_t)actualAngle-(int32_t)lastAngle); //distance between the two angles\n\n\t\t//since our angles wrap the shortest distance will be one less than 32768\n\t\tif (dist>CALIBRATION_STEPS/2)\n\t\t{\n\t\t\tdist=dist-CALIBRATION_STEPS;\n\t\t}\n\n\t\t//if our distance is larger than size between calibration points in table we will ignore this sample\n\t\tif (dist>CALIBRATION_STEPS/CALIBRATION_TABLE_SIZE)\n\t\t{\n\t\t\t//spans two or more table calibration points for this implementation we will not use\n\t\t\tlastIndex=(int32_t)index;\n\t\t\tlastValue=value;\n\t\t\treturn;\n\t\t}\n\n\t\t//now lets see if the values are above and below a table calibration point\n\t\tdist= abs(getTableIndex(lastAngle)-getTableIndex(actualAngle));\n\t\tif (dist != 0) //if the two indexs into table are not the same it spans a calibration point in table.\n\t\t{\n\t\t\t//the two span a set calibation table point.\n\t\t\tuint16_t newValue;\n\t\t\tnewValue=interp(lastAngle, lastEncoderValue, actualAngle, encoderValue, getTableIndex(actualAngle)*(CALIBRATION_STEPS/CALIBRATION_TABLE_SIZE))\n    \t\t\t\t\t\t  //this new value is our best guess as to the correct calibration value.\n    \t\t\t\t\t\t  updateTableValue(getTableIndex(actualAngle),newValue);\n\t\t} else\n\t\t{\n\t\t\t//we should calibate the table value for the point the closest\n\t\t}\n\n\n\n\n\n\t}\n\tlastAngle=(int32_t)actualAngle;\n\tlastEncoderValue=encoderValue;\n\n}\n#endif\n\n//when we are microstepping and are in between steps the probability the stepper motor did not move\n// is high. That is the actualAngle will be correct but the encoderValue will be behind due to not having enough torque to move motor. \n// Therefore we only want to update the calibration on whole steps where we have highest probability of things being correct. \nvoid CalibrationTable::updateTable(Angle actualAngle, Angle encoderValue)\n{\n\tint32_t dist, index;\n\tAngle tableAngle;\n\n\tindex = getTableIndex((uint32_t)actualAngle+CALIBRATION_STEPS/CALIBRATION_TABLE_SIZE/2);  //add half of distance to next entry to round to closest table index\n\n\ttableAngle=(index*CALIBRATION_STEPS)/CALIBRATION_TABLE_SIZE; //calculate the angle for this index\n\n\tdist=tableAngle-actualAngle;  //distance to calibration table angle\n\n\t//LOG(\"Dist is %d\",dist);\n\tif (abs(dist)<CALIBRATION_MIN_ERROR) //if we are with in our minimal error we can calibrate\n\t{\n\t\tupdateTableValue(index,(int32_t)encoderValue);\n\t}\n}\n\nbool CalibrationTable::calValid(void)\n{\n\tuint32_t i;\n\tfor (i=0; i<CALIBRATION_TABLE_SIZE; i++)\n\t{\n\t\tif (table[i].error == CALIBRATION_ERROR_NOT_SET)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\tif (false == flashGood())\n\t{\n\t\tsaveToFlash();\n\t}\n\treturn true;\n}\n//We want to linearly interpolate between calibration table angle\nint CalibrationTable::getValue(Angle actualAngle, CalData_t *ptrData)\n{\n\tint32_t indexLow,indexHigh;\n\tint32_t angleLow,angleHigh;\n\tuint16_t value;\n\tint32_t y1,y2;\n\tint16_t err;\n\n\tindexLow=getTableIndex((uint16_t)actualAngle);\n\t// LOG(\"index %d, actual %u\",indexLow, (uint16_t)actualAngle);\n\tindexHigh=indexLow+1;\n\n\tangleLow=(indexLow*CALIBRATION_STEPS)/CALIBRATION_TABLE_SIZE;\n\tangleHigh=(indexHigh*CALIBRATION_STEPS)/CALIBRATION_TABLE_SIZE;\n\n\tif (indexHigh>=CALIBRATION_TABLE_SIZE)\n\t{\n\t\tindexHigh -= CALIBRATION_TABLE_SIZE;\n\t}\n\n\t//LOG(\"AngleLow %d, AngleHigh %d\",angleLow,angleHigh);\n\t//LOG(\"TableLow %u, TableHigh %d\",(uint16_t)table[indexLow].value,(uint16_t)table[indexHigh].value);\n\ty1=table[indexLow].value;\n\ty2=table[indexHigh].value;\n\n\t//handle the wrap condition\n\tif (abs(y2-y1)>CALIBRATION_STEPS/2)\n\t{\n\t\tif (y2<y1)\n\t\t{\n\t\t\ty2=y2+CALIBRATION_STEPS;\n\t\t}else\n\t\t{\n\t\t\ty1=y1+CALIBRATION_STEPS;\n\t\t}\n\t}\n\n\tvalue=interp(angleLow, y1, angleHigh, y2,actualAngle);\n\n\t//handle the wrap condition\n\tif (value>=CALIBRATION_STEPS)\n\t{\n\t\tvalue=value-CALIBRATION_STEPS;\n\t}\n\n\terr=table[indexLow].error;\n\tif (table[indexHigh].error > err)\n\t{\n\t\terr=table[indexHigh].error;\n\t}\n\n\tif (table[indexLow].error == CALIBRATION_ERROR_NOT_SET ||\n\t\t\ttable[indexHigh].error == CALIBRATION_ERROR_NOT_SET)\n\t{\n\t\terr=CALIBRATION_ERROR_NOT_SET;\n\t}\n\tptrData->value=value;\n\tptrData->error=err;\n\n\treturn 0;\n\n}\n\nAngle CalibrationTable::getCal(Angle actualAngle)\n{\n\tCalData_t data;\n\tgetValue(actualAngle, &data);\n\treturn data.value;\n}\n\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/calibration.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#ifndef __CALIBRAITON_H__\n#define __CALIBRAITON_H__\n\n#include <Arduino.h>\n#include \"syslog.h\"\n#include \"angle.h\"\n\n\n//this file implements a table that is linearly interpolated circular calibration table\n// it is assumed the data wraps around, ie you interpolated 65536==0\n//we want this to be \"whole\" steps, for 1.8 degree motors this should be 200.\n// 200 will work for 0.9 degree too, but could be 400. However 400 is not good for 1.8 degree motors\n#define CALIBRATION_TABLE_SIZE (200)  \n\n#define CALIBRATION_STEPS ((uint32_t)ANGLE_STEPS) // this is one rotation ie 0-65535 aka 65536 steps is 0-360 degrees\n\n#define CALIBRATION_ERROR_NOT_SET (-1) //indicated that the calibration value is not set. \n\n#define CALIBRATION_UPDATE_RATE (32) //number of samples to keep 1 pole running average\n#define CALIBRATION_MIN_ERROR (4)  //the minimal expected error on our calibration 4 ~=+/0.2 degrees \n\n\ntypedef struct {\n\tuint16_t table[CALIBRATION_TABLE_SIZE];\n\tbool status;\n} FlashCalData_t;\n\n\n\n\n\ntypedef struct {\n  Angle value;  //cal value \n  int16_t error; //error assuming it is constantly updated\n} CalData_t;\n\nclass CalibrationTable\n{\n  private:\n    CalData_t table[CALIBRATION_TABLE_SIZE];\n\n    bool fastCalVaild=false;\n    void loadFromFlash(void);\n    bool flashGood(void); //returns true if the flash copy of calibration is valid\n\n    void updateFastCal(void);\n    void createFastCal(void);\n\n  public:\n    void init(void);\n    void saveToFlash(void); //saves the calibration to flash\n    bool updateTableValue(int32_t index, int32_t value);\n    void updateTable(Angle actualAngle, Angle encoderValue);\n    int getValue(Angle actualAngle, CalData_t *ptrData); \n    Angle getCal(Angle actualAngle);\n    bool calValid(void);\n    Angle reverseLookup(Angle encoderAngle); //this turns encoder angle into real angle\n    void printCalTable(void);\n     void smoothTable(void);\n\n    Angle fastReverseLookup(Angle encoderAngle);\n};\n\n\n\n\n#endif //__CALIBRAITON_H__\n"
  },
  {
    "path": "firmware/stepper_nano_zero/command.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#include \"command.h\"\n#include <string.h>\n\n\n#define ASCII_BACKSPACE 0x08\n#define ASCII_ESC 0x1B\n#define ASCII_UP_ARROW 0x9b\n//const char CMD_ANSI_UP[]= {ASCII_ESC,'[','A',0};\n\nint strcicmp(char const *a, char const *b)\n{\n    for (;; a++, b++) {\n        int d = tolower(*a) - tolower(*b);\n        if (d != 0 || !*a)\n            return d;\n    }\n}\n\nint CommandInit(sCmdUart *ptrUart, uint8_t (*kbhit)(void), uint8_t (*getch)(void),uint8_t (*putch)(char data),uint8_t (*puts)(uint8_t *buffer, uint8_t size) )\n{\n\tptrUart->kbhit=kbhit;\n\tptrUart->getch=getch;\n\tptrUart->putch=putch;\n\tptrUart->puts=puts;\n\tptrUart->histIndex=0;\n\tptrUart->buffIndex=0;\n\treturn 0;\n}\n\n#ifdef PGM_P //check and see if the PGM_P is defined for the AVR\n\nint CommandPrintf(sCmdUart *ptrUart, const char *fmt, ...)\n{\n    int ret=0;\n\tchar vastr[MAX_STRING]={0};\n\t//char str[MAX_STRING]={0};\n\tchar *ptr;\n    va_list ap;\n\n    //LOG(\"Command printf\");\n    memset(vastr,0,MAX_STRING);\n    va_start(ap,fmt);\n    ret=vsprintf(vastr,(const char *)fmt,ap);\n    //ret=sprintf(vastr,\"%s\\r\\n\",str);\n    //LOG(\"%s\",vastr);\n    if (ptrUart->puts!=NULL)\n    {\n    \treturn ptrUart->puts((uint8_t *)vastr, (uint8_t)ret);\n    }\n\n    if (ptrUart->putch!=NULL)\n    {\n\t\tptr=vastr;\n\t\twhile(*ptr)\n\t\t{\n\t\t\tptrUart->putch(*ptr++);\n\t\t}\n\n\t\treturn ret;\n    }\n    return 0;\n}\n\n\n#else\nint CommandPrintf(sCmdUart *ptrUart, char *fmt, ...)\n{\n    int ret=0;\n\tchar vastr[MAX_STRING]={0};\n\tchar *ptr;\n    va_list ap;\n\n\n    memset(vastr,0,MAX_STRING);\n    va_start(ap,fmt);\n    ret=vsprintf(vastr,(char *)fmt,ap);\n    if (ptrUart->puts!=NULL)\n    {\n    \treturn ptrUart->puts((uint8_t *)vastr, (uint8_t)ret);\n    }\n\n    if (ptrUart->putch!=NULL)\n    {\n\t\tptr=vastr;\n\t\twhile(*ptr)\n\t\t{\n\t\t\tptrUart->putch(*ptr++);\n\t\t}\n\n\t\treturn ret;\n    }\n    return 0;\n}\n#endif\n\n\n// the delimiter is command/parameter delimiter\n// by default a ' '0x20 is used but for the TDR with GUI a ':' was preferred, not sure why\n// set to ' '/0x20 if you want normal command parsing, like DOS\nunsigned int CommandParse(sCmdUart *ptrUart,sCommand *ptrCmds, char *str, char delimitor )\n{\n\tchar *ptr;\n\tchar *ptr2;\n\tunsigned int i;\n\t//char cmd[MAX_STRING];\n\tchar buff[MAX_CMD_LENGTH];\n\tchar argv[MAX_ARGS][MAX_ARG_LENGTH];\n\tchar *ptrArgv[MAX_ARGS];\n\tunsigned int numArgs;\n\tint emptyArg=0;\n\n\tsCommand cmd_list;\n\n\n\twhile (*str==0x20 || *str=='\\n' || *str=='\\r' || *str=='\\t') str++;\n\t//first we need find command and arguments\n\tptr=strchr(str,delimitor); //find first char\n\n\t//LOG(\"2parsing %s\",str);\n\n\n\tif (ptr==0)\n\t{\n\t\t//we have two options, frist whole thing is command\n\t\t//second bad command\n\t\tif(strlen(str)>0)\n\t\t\tptr=str+strlen(str);\n\t\telse\n\t\t\treturn 0; //bad command\n\t}\n\n\t//copy string to command buffer.\n\ti=0;\n\tptr2=str;\n\twhile(ptr!=0 && ptr!=ptr2 && i<(MAX_CMD_LENGTH-1))\n\t{\n\t\t//if (*ptr2!='\\n' && *ptr2!='\\r') //do not include newlines\n\t\t{\n\t\t\tbuff[i++]=*ptr2;\n\t\t}\n\t\tptr2++;\n\t}\n\tbuff[i]=0;\n\n\t//now buff contains the command let's get the args\n\tnumArgs=0;\n\twhile(*ptr!=0 && (*ptr==' ' || *ptr==delimitor))\n\t\tptr++; //increment pointer past ' '\n\tif (*ptr!=0)\n\t{\n\t\tif (*ptr==34) // \" char\n\t\t{\n\t\t\tptr++;\n\t\t\tptr2=strchr(ptr,34); //find match\n\t\t} else if (*ptr==39) // 'char\n\t\t{\n\t\t\tptr++;\n\t\t\tptr2=strchr(ptr,39); //find match\n\t\t} else\n\t\t{\n\t\t\tptr2=strchr(ptr,delimitor);\n\t\t}\n\t\tif (ptr2==0)\n\t\t{\n\t\t\t//we have two options, frist whole thing is command\n\t\t\t//second bad command\n\t\t\t//LOG(\"strlen ptr is %d\",strlen(ptr));\n\t\t\tif(strlen(ptr)>0)\n\t\t\t\tptr2=ptr+strlen(ptr);\n\t\t}\n\t\temptyArg=0;\n\t\twhile((ptr2!=0 && numArgs<MAX_ARGS) || emptyArg==1)\n\t\t{\n\t\t\tint j;\n\t\t\temptyArg=0;\n\t\t\tj=0;\n\t\t\t//LOG(\"arg %s\",ptr);\n\t\t\twhile (ptr2!=ptr && j<(MAX_ARG_LENGTH-1) && ptr2!=0)\n\t\t\t{\n\t\t\t\targv[numArgs][j++]=*ptr++;\n\t\t\t}\n\t\t\targv[numArgs][j++]=0;\n\t\t\tnumArgs++;\n\t\t\tptr2=0;\n\t\t\tif (*ptr!=0)\n\t\t\t{\n\t\t\t\tif (*ptr==34 || *ptr==39) ptr++;\n\t\t\t\tif (*ptr==delimitor && strlen(ptr)==1)\n\t\t\t\t{\n\t\t\t\t\t//LOG(\"Empty arg\");\n\t\t\t\t\temptyArg=1;\n\t\t\t\t}\n\t\t\t\twhile(*ptr!=0 && (*ptr==' ' || *ptr==delimitor))//p || *ptr==34 || *ptr==39))\n\t\t\t\t\tptr++; //increment pointer past ' '\n\t\t\t\tif (*ptr==34) // \" char\n\t\t\t\t{\n\t\t\t\t\tptr++;\n\t\t\t\t\tptr2=strchr(ptr,34); //find match\n\t\t\t\t} else if (*ptr==39) // 'char\n\t\t\t\t{\n\t\t\t\t\tptr++;\n\t\t\t\t\tptr2=strchr(ptr,39); //find match\n\t\t\t\t} else\n\t\t\t\t{\n\t\t\t\t\tptr2=strchr(ptr,delimitor);\n\t\t\t\t}\n\t\t\t\tif (ptr2==0)\n\t\t\t\t{\n\t\t\t\t\t//we have two options, frist whole thing is command\n\t\t\t\t\t//second bad command\n\t\t\t\t\tif(strlen(ptr)>0)\n\t\t\t\t\t\tptr2=ptr+strlen(ptr);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor(i=0; i<MAX_ARGS; i++)\n\t{\n\t\tptrArgv[i]=argv[i];\n\t}\n\n\t//now let's parse the command\n\ti=0;\n\tmemcpy(&cmd_list, &ptrCmds[i], sizeof(sCommand));\n\n\n\t//LOG(\"command is %s %d\",buff,numArgs);\n\n\twhile(cmd_list.function!=0)\n\t{\n\t\t/*char str[20];\n\t\tstrcpy_P(str,cmd_list.name);\n\t\tLOG(\"checkign '%s' to '%s'\",buff,str);\n\t\tLOG(\"comapre is %d\",strcmp_P(buff,cmd_list.name));\n*/\n\n\t\t//memcpy_P(&p, cmd_list.name, sizeof(PGM_P));\n#ifdef PGM_P //check and see if the PGM_P is defined for the AVR\n\t\tif (strlen(buff)==strlen_P(cmd_list.name))\n\t\t{\n\t\t\tif (strcicmp(buff,cmd_list.name)==0) //ignore device ID\n#else\n\t\tif (strlen(buff)==strlen(cmd_list.name))\n\t\t{\n\t\t\tif (strcicmp(buff,cmd_list.name)==0) //ignore device ID\n#endif\n\t\t\t{\n\t\t\t\t//LOG(\"calling function\");\n\t\t\t\t//return 1;\n\t\t\t\treturn (*cmd_list.function)(ptrUart,numArgs,ptrArgv);\n\t\t\t}\n\t\t}\n\t\ti=i+1;\n\t\tmemcpy(&cmd_list, &ptrCmds[i], sizeof(sCommand));\n\t}\n\tCommandPrintf(ptrUart,PSTR(\"Unknown command (try 'help')\\n\\r\"));\n\treturn -1;\n}\n\n//This function will process commands from the UART\nint CommandProcess(sCmdUart *ptrUart,sCommand *ptrCmds, char delimitor, char *cmdPrompt)\n{\n\tif(ptrUart->kbhit())\n\t{\n\t\tptrUart->data=ptrUart->getch();\n\n\t\t//echo the data\n\t\tptrUart->putch(ptrUart->data);\n\n\t\t//if the data is the CR we need to process buffer\n\t\tif (ptrUart->data==0x0D)\n\t\t{\n\t\t\tptrUart->putch(0x0A);\n\t\t\tif (strlen(ptrUart->buffer)>0)\n\t\t\t{\n\t\t\t\tif (ptrUart->lastChar!=ASCII_UP_ARROW)\n\t\t\t\t{\n\t\t\t\t\tstrcpy(ptrUart->bufferHist[ptrUart->histIndex],ptrUart->buffer);\n\t\t\t\t\tptrUart->histIndex=(ptrUart->histIndex+1) % CMD_HISTORY;\n\t\t\t\t}\n\t\t\t\tCommandParse(ptrUart,ptrCmds,ptrUart->buffer,delimitor);\n\t\t\t}\n\n\t\t\tCommandPrintf(ptrUart,PSTR(\"\\n\\r%s\"),cmdPrompt);\n\t\t\tptrUart->buffIndex=0;\n\t\t\tptrUart->buffer[ptrUart->buffIndex]=0;\n\t\t}\n\n\t\tif (ptrUart->data==ASCII_BACKSPACE) //backspace\n\t\t{\n\t\t\tif (ptrUart->buffIndex>0)\n\t\t\t{\n\t\t\t\tptrUart->buffIndex--;\n\t\t\t\tptrUart->buffer[ptrUart->buffIndex]='\\0';\n\t\t\t\t//Echo the backspace\n\t\t\t\tptrUart->putch(' ');\n\t\t\t\tptrUart->putch(ASCII_BACKSPACE);\n\t\t\t}\n\t\t}else if (ptrUart->data != 0x0A && ptrUart->data !=0x0D && ptrUart->data<127)\n\t\t{\n\t\t\tptrUart->buffer[ptrUart->buffIndex++]=ptrUart->data;\n\t\t\tptrUart->buffer[ptrUart->buffIndex]=0;\n\t\t}\n\t\tif (ptrUart->buffIndex>=(MAX_CMD_LENGTH-1))\n\t\t{\n\t\t\tCommandPrintf(ptrUart,PSTR(\"\\n\\rERROR: Command buffer overflow\\n\\r\"));\\\n\t\t\tERROR(\"Command buffer overflow\");\n\t\t\tptrUart->buffIndex=0;\n\t\t\tptrUart->buffer[0]=0;\n\t\t\tCommandPrintf(ptrUart,PSTR(\"\\n\\r%s\"),cmdPrompt);\n\t\t}\n\t}\n\n\n\tif (strstr(ptrUart->buffer,ANSI_UP)) //up arrow\n\t{\n\t\tuint8_t i;\n\n\t\tCommandPrintf(ptrUart,PSTR(\"\\n\\r%s\"),cmdPrompt);\n\t\ti=CMD_HISTORY-1;\n\t\tif (ptrUart->histIndex>0)\n\t\t{\n\t\t\ti=ptrUart->histIndex-1;\n\t\t}\n\t\tif (strlen(ptrUart->bufferHist[i])>0)\n\t\t{\n\t\t\tstrcpy(ptrUart->buffer,ptrUart->bufferHist[i]);\n\t\t\tptrUart->buffIndex=strlen(ptrUart->buffer);\n\t\t\tCommandPrintf(ptrUart,PSTR(\"%s\"),ptrUart->buffer);\n\t\t}else\n\t\t{\n\t\t\tptrUart->buffIndex=0;\n\t\t\tptrUart->buffer[0]=0;\n\t\t}\n\t\tptrUart->data=ASCII_UP_ARROW;\n\t}\n\n\n\tptrUart->lastChar=ptrUart->data;\n\treturn 0;\n}\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/command.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#ifndef __COMMAND_H\n#define __COMMAND_H\n\n#include <Arduino.h>\n#include <stdarg.h>\n#include \"syslog.h\"\n/*\n * Usage:\n *\n\t#include <command.h>\n\t#include \"uart_e0.h\"\n\n\tsCmdUart KeyfobCmdUart; // UART used for the keyfob command line interface\n\n\tCMD_STR(help,\"Displays this message\");\n\n\t//List of supported commands\n\tsCommand KeyfobCmds[] =\n\t{\n\t\tCOMMAND(help),\n\t\t{\"\",0,\"\"}, //End of list signal\n\t};\n\n\t// print out the help strings for the commands\n\tstatic int help_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n\t{\n\t\tsCommand cmd_list;\n\t\tint i;\n\n\t\t//now let's parse the command\n\t\ti=0;\n\t\tmemcpy(&cmd_list, &KeyfobCmds[i], sizeof(sCommand));\n\t\twhile(cmd_list.function!=0)\n\t\t{\n\n\t\t\tCommandPrintf(ptrUart,(cmd_list.name));\n\t\t\tCommandPrintf(ptrUart,PSTR(\" - \"));\n\t\t\tCommandPrintf(ptrUart,(cmd_list.help));\n\t\t\tCommandPrintf(ptrUart,PSTR(\"\\n\\r\"));\n\t\t\ti=i+1;\n\t\t\tmemcpy(&cmd_list, &KeyfobCmds[i], sizeof(sCommand));\n\t\t}\n\t\treturn 0;\n\t}\n\n\tuint8_t KeyfobCmdGetChar(void)\n\t{\n\t\tuint8_t c;\n\t\tif (UARTE0_getc(&c)!=0)\n\t\t{\n\t\t\tERROR(\"Uart getchar failed\");\n\t\t\treturn 0;\n\t\t}\n\t\treturn c;\n\t}\n\tint KeyfobCmdInit(PIN tx_pin, PIN rx_pin, uint32_t baud)\n\t{\n\t\tLOG(\"UARTE0 init\");\n\t\tUARTE0_Init(tx_pin, rx_pin, baud);\n\t\tCommandInit(&KeyfobCmdUart, UARTE0_kbhit, KeyfobCmdGetChar, UARTE0_putc,NULL); //set up the UART structure\n\t\treturn 0;\n\t}\n\n\tint KeyfobCmdProcess(void)\n\t{\n\t\treturn CommandProcess(&KeyfobCmdUart,KeyfobCmds,' ',KEYFOB_CMD_PROMPT);\n\t}\n\n\tAdvantages:\n\t1. You can actually have more than one UART/device connected to same command line interface.\n\t2. works with harvard machines to save SRAM space using the PSTR functionality\n\t3. You can swap out commands \"on the fly\"\n\n\n */\n#define MAX_CMD_LENGTH 60\n#define MAX_ARGS 10\n#define MAX_ARG_LENGTH 40\n#define CMD_HISTORY 3 //number of commands in history buffer\n#define ASCII_BACKSPACE 0x08\n#define ASCII_ESC 0x1B\n#define ASCII_UP_ARROW 0x9b\n#define ANSI_UP \"\\x1B[A\\0\"\n\n#define MAX_STRING 255\n//const char ANSI_UP[]= {ASCII_ESC,'[','A',0};\n\ntypedef struct {\n\tuint8_t (*kbhit)(void);\n\tuint8_t (*getch)(void);\n\tuint8_t (*putch)(char data);\n\tuint8_t (*puts)(uint8_t *buffer, uint8_t size);\n\tuint8_t data;\n\tchar buffer[MAX_CMD_LENGTH];\n\n\tchar bufferHist[CMD_HISTORY][MAX_CMD_LENGTH];\n\tuint8_t histIndex;\n\tuint8_t buffIndex;\n\tuint8_t lastChar;\n}sCmdUart;\n\n\n#define COMMAND(NAME)  { NAME ## _str, NAME ## _cmd, NAME ## _help}\n\n\n#ifdef PGM_P //check and see if the PGM_P is defined for the AVR\n\n//If so then we use the strings in flash not SRAM\n#define CMD_STR(NAME,STR) static const char NAME ## _help[] PROGMEM = STR;  static const char NAME ## _str[] PROGMEM = #NAME;  static int NAME ##_cmd(sCmdUart *ptrUart,int, char **);\n//Command structure\ntypedef struct\n{\n\tPGM_P name;\n\tint (*function) (sCmdUart *ptrUart,int, char **);\n\tPGM_P help;\n} sCommand;\nint CommandPrintf(sCmdUart *ptrUart, const char *fmt, ...);\n\n#else\n\n#define CMD_STR(NAME,STR)  static char NAME ## _help[] = STR;   static char NAME ## _str[] = #NAME;  static int NAME ##_cmd(sCmdUart *ptrUart,int, char **);\n\n//Command structure\ntypedef struct\n{\n\tchar *name;\n\tint (*function) (sCmdUart *ptrUart,int, char **);\n\tchar *help;\n} sCommand;\n\nint CommandPrintf(sCmdUart *ptrUart, char *fmt, ...);\n#endif\n\n\nint CommandInit(sCmdUart *ptrUart, uint8_t (*kbhit)(void), uint8_t (*getch)(void),uint8_t (*putch)(char data),uint8_t (*puts)(uint8_t *buffer, uint8_t size));\nunsigned int CommandParse(sCmdUart *ptrUart,sCommand *ptrCmds, char *str, char delimitor);\nint CommandProcess(sCmdUart *ptrUart,sCommand *ptrCmds, char delimitor, char *cmdPrompt);\n\n\n\n#endif\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/commands.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include \"commands.h\"\n#include \"command.h\"\n#include \"calibration.h\"\n#include \"stepper_controller.h\"\n#include <stdlib.h>\n#include \"nonvolatile.h\"\n#include \"Reset.h\"\n#include \"nzs.h\"\n#include \"ftoa.h\"\n#include \"board.h\"\n#include \"eeprom.h\"\n#include \"steppin.h\"\n\nextern int32_t dataEnabled;\n\n#define COMMANDS_PROMPT (\":>\")\nsCmdUart UsbUart;\nsCmdUart SerialUart;\nsCmdUart HostUart; //uart on the step/dir pins\n\nstatic int isPowerOfTwo (unsigned int x)\n{\n\twhile (((x % 2) == 0) && x > 1) /* While x is even and > 1 */\n\t\tx /= 2;\n\treturn (x == 1);\n}\n\n\nCMD_STR(help,\"Displays this message\");\nCMD_STR(getcal,\"Prints the calibration table\");\nCMD_STR(calibrate,\"Calbirates the encoder, should be done with motor disconnected from machine\");\nCMD_STR(testcal,\"tests the calibaration of the encoder\");\nCMD_STR(microsteps,\"gets/sets the microstep size, example 'microsteps 16'\");\nCMD_STR(step, \"Steps motor one step, optionally direction can be set is 'step 1' for reverse\");\nCMD_STR(feedback, \"enable or disable feedback controller, 'feedback 0' - disables, 'feedback 1' - enables\");\nCMD_STR(readpos, \"reads the current angle as 16bit number, applies calibration if valid\");\nCMD_STR(encoderdiag, \"Prints encoder diagnostic\")\nCMD_STR(spid, \"with no arguments prints SIMPLE PID parameters, with arguments sets PID 'sPID Kp Ki Kd' \"\n\t\t\"Where Kp,Ki,Kd are floating point numbers\");\nCMD_STR(vpid, \"with no arguments prints VELOCITY PID parameters, with arguments sets PID 'sPID Kp Ki Kd' \"\n\t\t\"Where Kp,Ki,Kd are floating point numbers\");\nCMD_STR(ppid, \"with no arguments prints POSITIONAL PID parameters, with arguments sets PID 'sPID Kp Ki Kd' \"\n\t\t\"Where Kp,Ki,Kd are floating point numbers\");\n//CMD_STR(testringing ,\"Steps motor at various currents and measures encoder\");\n//CMD_STR(microsteperror ,\"test error on microstepping\")\nCMD_STR(dirpin, \"with no arguments read dirpin setting, with argument sets direction pin rotation\");\n#ifndef PIN_ENABLE\nCMD_STR(errorpinmode,\"gets/sets the functionality of the error/enable pin\");\n#else\nCMD_STR(enablepinmode,\"gets/sets the functionality of the enable pin\");\n#endif\n\nCMD_STR(errorlimit, \"gets/set the error limit which will assert error pin (when error pin is set for error output)\");\nCMD_STR(ctrlmode, \"gets/set the feedback controller mode of operation\");\nCMD_STR(maxcurrent, \"gets/set the maximum motor current allowed in milliAmps\");\nCMD_STR(holdcurrent, \"gets/set the motor holding current in milliAmps, only used in the simple positional PID mode\");\nCMD_STR(homecurrent, \"gets/set the motor moving and holding currents that will be used when pin A3 is low\");\nCMD_STR(motorwiring, \"gets/set the motor wiring direction, should only be used by experts\");\nCMD_STR(stepsperrotation, \"gets/set the motor steps per rotation, should only be used by experts\");\n\n//CMD_STR(sysparams, \"with no arguments read parameters, will set with arguments\");\n//CMD_STR(motorparams, \"with no arguments read parameters, will set with arguments\");\nCMD_STR(boot, \"Enters the bootloader\");\nCMD_STR(move, \"moves encoder to absolute angle in degrees 'move 400.1'\");\n//CMD_STR(printdata, \"prints last n error terms\");\nCMD_STR(velocity, \"gets/set velocity in RPMs\");\nCMD_STR(factoryreset, \"resets board to factory defaults\");\nCMD_STR(stop, \"stops the motion planner\");\nCMD_STR(setzero, \"set the reference angle to zero\");\nCMD_STR(data, \"enables/disables binary data output\");\nCMD_STR(looptime, \"returns the control loop processing time\");\nCMD_STR(eepromerror, \"returns error in degreees from eeprom at power up realtive to current encoder\");\nCMD_STR(eepromloc, \"returns location in degreees eeprom on power up\");\nCMD_STR(eepromwrite, \"forces write of location to eeprom\");\nCMD_STR(eepromsetloc, \"sets the device angle based on EEPROM last reading, compenstates for error\")\nCMD_STR(setpos, \"sets the current angle in degrees\");\nCMD_STR(reboot, \"reboots the unit\");\nCMD_STR(homepin, \"sets the pin used to drop to homing current\");\nCMD_STR(homeangledelay, \"sets the angle delay in dropping to homing current\");\n#ifdef PIN_ENABLE\nCMD_STR(home, \"moves the motor until home switch (enable pin) is pulled low. example 'home 360 0.5' move up to 360 degrees at 0.5 RPM \")\n#endif\nCMD_STR(pinread, \"reads pins as binary (bit 0-step, bit 1 - Dir, bit 2 - Enable, bit 3 - Error, bit 4 - A3, bit 5- TX, bit 6 - RX\")\nCMD_STR(errorpin, \"Sets the logic level of error pin\")\nCMD_STR(geterror, \"gets current error\")\nCMD_STR(getsteps, \"returns number of steps seen\")\nCMD_STR(debug, \"enables debug commands out USB\")\n//List of supported commands\nsCommand Cmds[] =\n{\n\t\tCOMMAND(help),\n\t\tCOMMAND(calibrate),\n\t\tCOMMAND(getcal),\n\t\tCOMMAND(testcal),\n\t\tCOMMAND(microsteps),\n\t\tCOMMAND(step),\n\t\tCOMMAND(feedback),\n\t\tCOMMAND(readpos),\n\t\tCOMMAND(encoderdiag),\n\t\tCOMMAND(spid),\n\t\tCOMMAND(vpid),\n\t\tCOMMAND(ppid),\n\t\t//COMMAND(testringing),\n\t\t//COMMAND(microsteperror),\n\t\tCOMMAND(dirpin),\n#ifndef PIN_ENABLE\n\t\tCOMMAND(errorpinmode),\n#else\n\t\tCOMMAND(enablepinmode),\n#endif\n\t\tCOMMAND(errorlimit),\n\t\tCOMMAND(ctrlmode),\n\t\tCOMMAND(maxcurrent),\n\t\tCOMMAND(holdcurrent),\n\t\tCOMMAND(homecurrent),\n\t\tCOMMAND(motorwiring),\n\t\tCOMMAND(stepsperrotation),\n\n\t\t//COMMAND(sysparams),\n\t\t//COMMAND(motorparams),\n\t\tCOMMAND(boot),\n\t\tCOMMAND(move),\n\t\t//COMMAND(printdata),\n\t\tCOMMAND(velocity),\n\t\tCOMMAND(factoryreset),\n\t\tCOMMAND(stop),\n\t\tCOMMAND(setzero),\n\t\tCOMMAND(data),\n\t\tCOMMAND(looptime),\n\t\tCOMMAND(eepromerror),\n\t\tCOMMAND(eepromloc),\n\t\tCOMMAND(eepromwrite),\n\t\tCOMMAND(setpos),\n\t\tCOMMAND(reboot),\n\t\tCOMMAND(eepromsetloc),\n\t\tCOMMAND(homepin),\n\t\tCOMMAND(homeangledelay),\n#ifdef PIN_ENABLE\n\t\tCOMMAND(home),\n#endif\n\t\tCOMMAND(pinread),\n\t\tCOMMAND(errorpin),\n\t\tCOMMAND(geterror),\n\t\tCOMMAND(getsteps),\n\t\tCOMMAND(debug),\n\t\t{\"\",0,\"\"}, //End of list signal\n};\n\nstatic int debug_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tuint32_t i;\n\tif (argc>=1)\n\t{\n\t\ti=atol(argv[0]);\n\t\tSysLogDebug(i);\n\t}\n}\n\nstatic int getsteps_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tint32_t s;\n\ts=(int32_t)getSteps();\n//\ts=(int32_t)stepperCtrl.getSteps();\n\tCommandPrintf(ptrUart,\"steps %\" PRIi32 \"\\n\\r\",s);\n\treturn 0;\n}\nstatic int geterror_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tfloat f;\n\tchar str[30];\n\tf=ANGLE_T0_DEGREES(stepperCtrl.getLoopError());\n\tftoa(f,str,2,'f');\n\tCommandPrintf(ptrUart,\"error %s deg\",str);\n\treturn 0;\n}\n\n\nstatic int errorpin_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tif (argc==1)\n\t{\n\n\t\tSystemParams_t params;\n\n\t\tmemcpy(&params,&NVM->SystemParams, sizeof(SystemParams_t) );\n\t\tparams.errorLogic=atol(argv[0]);\n\n\t\tnvmWriteSystemParms(params);\n\t\tstepperCtrl.updateParamsFromNVM();\n\n\t}\n\tCommandPrintf(ptrUart,\"error pin assert level is %d\\n\\r\",NVM->SystemParams.errorLogic);\n\treturn 0;\n\n}\n\nstatic int pinread_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tuint8_t ret=0;\n\n\tif (digitalRead(PIN_STEP_INPUT))\n\t{\n\t\tret |= 0x01;\n\t}\n\tif (digitalRead(PIN_DIR_INPUT))\n\t{\n\t\tret |= 0x02;\n\t}\n#ifdef PIN_ENABLE\n\tif (digitalRead(PIN_ENABLE))\n\t{\n\t\tret |= 0x04;\n\t}\n#endif\n\tif (digitalRead(PIN_ERROR))\n\t{\n\t\tret |= 0x08;\n\t}\n\tif (digitalRead(PIN_A3))\n\t{\n\t\tret |= 0x10;\n\t}\n\tif (digitalRead(30))\n\t{\n\t\tret |= 0x20;\n\t}\n\tif (digitalRead(31))\n\t{\n\t\tret |= 0x40;\n\t}\n\tCommandPrintf(ptrUart,\"0x%02X\\n\\r\",ret);\n\treturn 0;\n}\n\n#ifdef PIN_ENABLE\nstatic void errorPinISR(void)\n{\n\tSmartPlanner.stop(); //stop the planner\n}\n\n\n\n\nstatic int home_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tfloat rpm=1;\n\tfloat startDegrees=ANGLE_T0_DEGREES(stepperCtrl.getCurrentAngle());\n\tfloat finalDegrees=startDegrees+360.0;\n\tchar str[20];\n\tfloat deg;\n\n\tif (argc>=1)\n\t{\n\t\tfinalDegrees=startDegrees+atof(argv[0]);\n\t}\n\n\tif (argc>=2)\n\t{\n\t\trpm=atof(argv[1]);\n\t}\n\n\t//setup a interrupt for the enable  pin\n\tattachInterrupt(digitalPinToInterrupt(PIN_ENABLE), errorPinISR, FALLING);\n\n\tSmartPlanner.moveConstantVelocity(finalDegrees,rpm);\n\n\twhile(!SmartPlanner.done())\n\t{\n\t\t//do nothing\n\t}\n\tdetachInterrupt(digitalPinToInterrupt(PIN_ENABLE));\n\tdeg=ANGLE_T0_DEGREES(stepperCtrl.getCurrentAngle());\n\tftoa(deg,str,2,'f');\n\tCommandPrintf(ptrUart,\"home is %s deg\\n\\r\",str);\n\tstepperCtrl.setZero();\n\n\treturn 0;\n}\n#endif\n\nstatic int reboot_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tNVIC_SystemReset();\n\treturn 0;\n}\n\nstatic int setpos_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tif (argc>=1)\n\t{\n\t\tint64_t a;\n\t\tfloat x;\n\t\tx=fabs(atof(argv[0]));\n\t\ta=ANGLE_FROM_DEGREES(x);\n\t\tstepperCtrl.setAngle(a);\n\t\treturn 0;\n\t}\n\treturn 1;\n}\n\nstatic int eepromwrite_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\teepromFlush();\n\treturn 0;\n}\nstatic int eepromerror_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tAngle a;\n\tuint16_t error;\n\tfloat deg;\n\tchar str[20];\n\ta=(Angle)PowerupEEPROM.encoderAngle;\n\n\tLOG(\"EEPROM encoder %d\",(uint16_t)a);\n\tLOG(\"start encoder %d\",(uint16_t)stepperCtrl.getStartupEncoder());\n\tLOG(\"current encoder %d\",(uint16_t)stepperCtrl.getEncoderAngle());\n\ta=(a-(Angle)stepperCtrl.getStartupEncoder());\n\n\n\tdeg=ANGLE_T0_DEGREES((uint16_t)a) ;\n\tif (deg>360.0)\n\t{\n\t\tdeg=deg-360.0;\n\t}\n\n\tftoa(deg,str,2,'f');\n\tCommandPrintf(ptrUart,\"startup error(+/-) %s deg\\n\\r\",str);\n\n\ta=(Angle)PowerupEEPROM.encoderAngle;\n\ta=(a-(Angle)stepperCtrl.getEncoderAngle());\n\tdeg=ANGLE_T0_DEGREES((uint16_t)a);\n\tif (deg>360.0)\n\t{\n\t\tdeg=deg-360.0;\n\t}\n\tftoa(deg,str,2,'f');\n\tCommandPrintf(ptrUart,\"current error(+/-) %s deg\\n\\r\",str);\n\n\treturn 0;\n}\n\nstatic int eepromsetloc_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tAngle a;\n\tint64_t deg;\n\tint32_t x;\n\n\tx=(uint32_t)PowerupEEPROM.encoderAngle-(uint32_t)stepperCtrl.getEncoderAngle();\n\n\tdeg=PowerupEEPROM.angle-x;\n\n\tstepperCtrl.setAngle(deg);\n\treturn 0;\n}\n\nstatic int eepromloc_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tAngle a;\n\tint64_t deg;\n\tint32_t x,y;\n\n\tdeg=PowerupEEPROM.angle;\n\n\tdeg=(deg*360*100)/(int32_t)ANGLE_STEPS;\n\tx=(deg)/100;\n\ty=abs(deg-(x*100));\n\tCommandPrintf(ptrUart,\"%d.%0.2d deg\\n\\r\",x,y);\n\treturn 0;\n}\nstatic int looptime_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\n\tCommandPrintf(ptrUart,\"%dus\",stepperCtrl.getLoopTime());\n\treturn 0;\n}\n\nstatic int setzero_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tstepperCtrl.setZero();\n\treturn 0;\n}\n\n\nstatic int stop_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tSmartPlanner.stop();\n\treturn 0;\n}\n\nstatic int data_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tif (argc == 1)\n\t{\n\t\tuint32_t x;\n\n\t\tx=atol(argv[0]);\n\t\tdataEnabled=x;\n\t\treturn 0;\n\t}\n\treturn 1;\n}\n\n\n\nstatic int stepsperrotation_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\n\tif (argc == 0)\n\t{\n\t\tuint32_t x;\n\t\tx=NVM->motorParams.fullStepsPerRotation;\n\t\tCommandPrintf(ptrUart,\"full steps per rotation %u\\n\\r\",x);\n\t\treturn 0;\n\t}\n\n\tif (argc == 1)\n\t{\n\t\tuint32_t x;\n\n\t\tx=atol(argv[0]);\n\n\t\tif (x==200 || x==400)\n\t\t{\n\t\t\tMotorParams_t motorParams;\n\n\t\t\tmemcpy(&motorParams,&NVM->motorParams, sizeof(motorParams) );\n\t\t\tmotorParams.fullStepsPerRotation=x;\n\n\t\t\tnvmWriteMotorParms(motorParams);\n\t\t\tstepperCtrl.updateParamsFromNVM();\n\n\n\t\t\tx=NVM->motorParams.fullStepsPerRotation;\n\t\t\tCommandPrintf(ptrUart,\"full steps per rotation %u\\n\\r\",x);\n\t\t\tCommandPrintf(ptrUart,\"please power cycle board\\n\\r\");\n\t\t\treturn 0;\n\t\t}\n\n\t}\n\tCommandPrintf(ptrUart,\"usage 'stepsperrotation 200' or 'stepsperrotation 400'\\n\\r\");\n\n\treturn 1;\n}\n\nstatic int motorwiring_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\n\tif (argc == 0)\n\t{\n\t\tuint32_t x;\n\t\tx=NVM->motorParams.motorWiring;\n\t\tCommandPrintf(ptrUart,\"motor wiring %u\\n\\r\",x);\n\t\treturn 0;\n\t}\n\n\tif (argc == 1)\n\t{\n\t\tuint32_t x;\n\n\t\tx=atol(argv[0]);\n\n\t\tif (x<=1)\n\t\t{\n\t\t\tMotorParams_t motorParams;\n\n\t\t\tmemcpy(&motorParams,&NVM->motorParams, sizeof(motorParams) );\n\t\t\tmotorParams.motorWiring=x;\n\n\t\t\tnvmWriteMotorParms(motorParams);\n\t\t\tstepperCtrl.updateParamsFromNVM();\n\n\n\t\t\tx=NVM->motorParams.motorWiring;\n\t\t\tCommandPrintf(ptrUart,\"motor wiring %u\\n\\r\",x);\n\t\t\tCommandPrintf(ptrUart,\"please power cycle board\\n\\r\");\n\t\t\treturn 0;\n\t\t}\n\n\t}\n\tCommandPrintf(ptrUart,\"usage 'motorwiring 0' or 'motorwiring 1'\\n\\r\");\n\n\treturn 1;\n}\n\n\nstatic int homeangledelay_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\t\tfloat f;\n\t\tchar str[30];\n\n\t\tif (argc == 1)\n\t\t{\n\t\t\tf=atof(argv[0]);\n\n\t\t\tSystemParams_t params;\n\n\t\t\tmemcpy(&params,&NVM->SystemParams, sizeof(SystemParams_t) );\n\t\t\tparams.homeAngleDelay=ANGLE_FROM_DEGREES(f);\n\n\t\t\tnvmWriteSystemParms(params);\n\t\t\tstepperCtrl.updateParamsFromNVM();\n\n\t\t}\n\n\t\tf=ANGLE_T0_DEGREES(NVM->SystemParams.homeAngleDelay);\n\t\tftoa(f,str,2,'f');\n\t\tCommandPrintf(ptrUart,\"home angle delay %s\\n\\r\",str);\n\t\treturn 0;\n}\n\nstatic int homepin_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\t\tint32_t x;\n\t\tif (argc == 0)\n\t\t{\n\t\t\tx=NVM->SystemParams.homePin;\n\t\t\tCommandPrintf(ptrUart,\"home pin %d\\n\\r\",x);\n\t\t\treturn 0;\n\t\t}\n\n\t\tif (argc == 1)\n\t\t{\n\t\t\tx=atol(argv[0]);\n\n\t\t\tSystemParams_t params;\n\n\t\t\tmemcpy(&params,&NVM->SystemParams, sizeof(SystemParams_t) );\n\t\t\tparams.homePin=x;\n\n\t\t\tnvmWriteSystemParms(params);\n\t\t\tstepperCtrl.updateParamsFromNVM();\n\n\n\t\t\tx=NVM->SystemParams.homePin;\n\t\t\tCommandPrintf(ptrUart,\"home pin %d\\n\\r\",x);\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tCommandPrintf(ptrUart, \"use 'sethomepin 17' to set maximum home pin to A3\");\n\n\t\treturn 1;\n}\n\n\nstatic int homecurrent_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tuint32_t x,y;\n\tif (argc == 0)\n\t{\n\t\tx=NVM->motorParams.homeMa;\n\t\ty=NVM->motorParams.homeHoldMa;\n\t\tCommandPrintf(ptrUart,\"current %umA, %umA\\n\\r\",x,y);\n\t\treturn 0;\n\t}\n\n\tif (argc == 1)\n\t{\n\t\tx=atol(argv[0]);\n\n\t\tMotorParams_t motorParams;\n\n\t\tmemcpy(&motorParams,&NVM->motorParams, sizeof(motorParams) );\n\t\tmotorParams.homeMa=x;\n\n\t\tnvmWriteMotorParms(motorParams);\n\t\tstepperCtrl.updateParamsFromNVM();\n\n\n\t\tx=NVM->motorParams.homeMa;\n\t\ty=NVM->motorParams.homeHoldMa;\n\t\tCommandPrintf(ptrUart,\"current %umA, %umA\\n\\r\",x,y);\n\t\treturn 0;\n\n\t}\n\tif (argc == 2)\n\t{\n\t\tx=atol(argv[0]);\n\t\ty=atol(argv[1]);\n\n\t\tMotorParams_t motorParams;\n\n\t\tmemcpy(&motorParams,&NVM->motorParams, sizeof(motorParams) );\n\t\tmotorParams.homeMa=x;\n\t\tmotorParams.homeHoldMa=y;\n\n\t\tnvmWriteMotorParms(motorParams);\n\t\tstepperCtrl.updateParamsFromNVM();\n\n\n\t\tx=NVM->motorParams.homeMa;\n\t\ty=NVM->motorParams.homeHoldMa;\n\t\tCommandPrintf(ptrUart,\"current %umA, %umA\\n\\r\",x,y);\n\t\treturn 0;\n\n\t}\n\tCommandPrintf(ptrUart, \"use 'homecurrent 1000 500' to set maximum home current to 1.0A and hold to 500ma\");\n\n\treturn 1;\n}\n\nstatic int holdcurrent_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\n\tif (argc == 0)\n\t{\n\t\tuint32_t x;\n\t\tx=NVM->motorParams.currentHoldMa;\n\t\tCommandPrintf(ptrUart,\"hold current %u mA\\n\\r\",x);\n\t\treturn 0;\n\t}\n\n\tif (argc == 1)\n\t{\n\t\tuint32_t x;\n\n\t\tx=atol(argv[0]);\n\n\t\tMotorParams_t motorParams;\n\n\t\tmemcpy(&motorParams,&NVM->motorParams, sizeof(motorParams) );\n\t\tmotorParams.currentHoldMa=x;\n\n\t\tnvmWriteMotorParms(motorParams);\n\t\tstepperCtrl.updateParamsFromNVM();\n\n\n\t\tx=NVM->motorParams.currentHoldMa;\n\t\tCommandPrintf(ptrUart,\"hold current %u mA\\n\\r\",x);\n\t\treturn 0;\n\n\n\t}\n\tCommandPrintf(ptrUart, \"use 'holdcurrent 1000' to set maximum current to 1.0A\");\n\n\treturn 1;\n}\n\n\nstatic int maxcurrent_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\n\tif (argc == 0)\n\t{\n\t\tuint32_t x;\n\t\tx=NVM->motorParams.currentMa;\n\t\tCommandPrintf(ptrUart,\"max current %u mA\\n\\r\",x);\n\t\treturn 0;\n\t}\n\n\tif (argc == 1)\n\t{\n\t\tuint32_t x;\n\n\t\tx=atol(argv[0]);\n\n\t\tMotorParams_t motorParams;\n\n\t\tmemcpy(&motorParams,&NVM->motorParams, sizeof(motorParams) );\n\n\t\tmotorParams.currentMa=x;\n\t\tnvmWriteMotorParms(motorParams);\n\t\tstepperCtrl.updateParamsFromNVM();\n\n\n\t\tx=NVM->motorParams.currentMa;\n\t\tCommandPrintf(ptrUart,\"max current %u mA\\n\\r\",x);\n\t\treturn 0;\n\n\n\t}\n\tCommandPrintf(ptrUart, \"use 'maxcurrent 2000' to set maximum current to 2.0A\");\n\n\treturn 1;\n}\n\n\n\nstatic int ctrlmode_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tbool ret;\n\tif (argc == 0)\n\t{\n\t\tswitch(NVM->SystemParams.controllerMode)\n\t\t{\n\t\tcase CTRL_OFF:\n\t\t\tCommandPrintf(ptrUart,\"controller Off(0)\");\n\t\t\treturn 0;\n\t\tcase CTRL_OPEN:\n\t\t\tCommandPrintf(ptrUart,\"controller Open-loop(1)\");\n\t\t\treturn 0;\n\t\tcase CTRL_SIMPLE:\n\t\t\tCommandPrintf(ptrUart,\"controller Simple-Position-PID(2)\");\n\t\t\treturn 0;\n\t\tcase CTRL_POS_PID:\n\t\t\tCommandPrintf(ptrUart,\"controller Current-Position-PID(3)\");\n\t\t\treturn 0;\n\t\tcase CTRL_POS_VELOCITY_PID:\n\t\t\tCommandPrintf(ptrUart,\"controller Velocity-PID(4)\");\n\t\t\treturn 0;\n\n\t\t}\n\t\treturn 1;\n\t}\n\n\tif (argc == 1)\n\t{\n\t\tuint32_t x;\n\n\t\tx=atol(argv[0]);\n\n\t\tif (x<=4)\n\t\t{\n\t\t\tSystemParams_t systemParams;\n\n\t\t\tmemcpy(&systemParams,&NVM->SystemParams, sizeof(systemParams) );\n\n\t\t\tsystemParams.controllerMode=(feedbackCtrl_t)(x);\n\n\t\t\tnvmWriteSystemParms(systemParams);\n\t\t\tstepperCtrl.updateParamsFromNVM();\n\n\t\t\tswitch(NVM->SystemParams.controllerMode)\n\t\t\t{\n\t\t\tcase CTRL_OFF:\n\t\t\t\tCommandPrintf(ptrUart,\"controller Off(0)\");\n\t\t\t\treturn 0;\n\t\t\tcase CTRL_OPEN:\n\t\t\t\tCommandPrintf(ptrUart,\"controller Open-loop(1)\");\n\t\t\t\treturn 0;\n\t\t\tcase CTRL_SIMPLE:\n\t\t\t\tCommandPrintf(ptrUart,\"controller Simple-Position-PID(2)\");\n\t\t\t\treturn 0;\n\t\t\tcase CTRL_POS_PID:\n\t\t\t\tCommandPrintf(ptrUart,\"controller Current-Position-PID(3)\");\n\t\t\t\treturn 0;\n\t\t\tcase CTRL_POS_VELOCITY_PID:\n\t\t\t\tCommandPrintf(ptrUart,\"controller Velocity-PID(4)\");\n\t\t\t\treturn 0;\n\n\t\t\t}\n\t\t\treturn 1;\n\t\t}\n\n\t}\n\tCommandPrintf(ptrUart, \"use 'ctrlmode [0 .. 4]' to set control mode\");\n\n\treturn 1;\n}\nstatic int errorlimit_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tbool ret;\n\tchar str[20];\n\tif (argc == 0)\n\t{\n\t\tfloat x;\n\t\tx=ANGLE_T0_DEGREES(NVM->SystemParams.errorLimit);\n\t\tftoa(x,str,2,'f');\n\t\tCommandPrintf(ptrUart,\"errorLimit %s deg\\n\\r\",str);\n\t\treturn 0;\n\t}\n\n\tif (argc == 1)\n\t{\n\t\tfloat x;\n\n\t\tx=fabs(atof(argv[0]));\n\n\t\tSystemParams_t systemParams;\n\n\t\tmemcpy(&systemParams,&NVM->SystemParams, sizeof(systemParams) );\n\n\t\tsystemParams.errorLimit=ANGLE_FROM_DEGREES(x);\n\n\t\tnvmWriteSystemParms(systemParams);\n\t\tstepperCtrl.updateParamsFromNVM();\n\n\t\tx=ANGLE_T0_DEGREES(NVM->SystemParams.errorLimit);\n\t\tftoa(x,str,2,'f');\n\t\tCommandPrintf(ptrUart,\"errorLimit %s deg\\n\\r\",str);\n\t\treturn 0;\n\n\n\t}\n\tCommandPrintf(ptrUart, \"use 'errorlimit 1.8' to set error limit to 1.8 degrees\");\n\n\treturn 1;\n}\n\n\nstatic int dirpin_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tbool ret;\n\n\tif (argc == 0)\n\t{\n\t\tif (CW_ROTATION == NVM->SystemParams.dirPinRotation)\n\t\t{\n\t\t\tCommandPrintf(ptrUart,\"dirpin CW(%d)\\n\\r\",(uint32_t)NVM->SystemParams.dirPinRotation);\n\t\t}else\n\t\t{\n\t\t\tCommandPrintf(ptrUart,\"dirpin CCW(%d)\\n\\r\",(uint32_t)NVM->SystemParams.dirPinRotation);\n\t\t}\n\t\treturn 0;\n\t}\n\n\tif (argc == 1)\n\t{\n\t\tuint32_t x;\n\n\t\tx=abs(atol(argv[0]));\n\t\tif (x<=1)\n\t\t{\n\n\t\t\tSystemParams_t systemParams;\n\n\t\t\tmemcpy(&systemParams,&NVM->SystemParams, sizeof(systemParams) );\n\n\t\t\tsystemParams.dirPinRotation=(RotationDir_t)x;\n\n\t\t\tnvmWriteSystemParms(systemParams);\n\t\t\tstepperCtrl.updateParamsFromNVM();\n\n\t\t\tif (CW_ROTATION == NVM->SystemParams.dirPinRotation)\n\t\t\t{\n\t\t\t\tCommandPrintf(ptrUart,\"dirpin CW(%d)\\n\\r\",(uint32_t)NVM->SystemParams.dirPinRotation);\n\t\t\t}else\n\t\t\t{\n\t\t\t\tCommandPrintf(ptrUart,\"dirpin CCW(%d)\\n\\r\",(uint32_t)NVM->SystemParams.dirPinRotation);\n\t\t\t}\n\t\t\treturn 0;\n\n\t\t}\n\t}\n\tCommandPrintf(ptrUart, \"used 'dirpin 0' for CW rotation and 'dirpin 1' for CCW\");\n\n\n\treturn 1;\n}\n\n#ifndef PIN_ENABLE\nstatic int errorpinmode_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tbool ret;\n\n\tif (argc == 0)\n\t{\n\t\tif (ERROR_PIN_MODE_ENABLE == NVM->SystemParams.errorPinMode)\n\t\t{\n\t\t\tCommandPrintf(ptrUart,\"Error pin -  Enable Active High(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t}else if (ERROR_PIN_MODE_ACTIVE_LOW_ENABLE == NVM->SystemParams.errorPinMode)\n\t\t{\n\t\t\tCommandPrintf(ptrUart,\"Error pin -  Enable active low(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t}else if (ERROR_PIN_MODE_ERROR == NVM->SystemParams.errorPinMode)\n\t\t{\n\t\t\tCommandPrintf(ptrUart,\"Error pin -  Error pin(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t} else if (ERROR_PIN_MODE_BIDIR == NVM->SystemParams.errorPinMode)\n\t\t{\n\t\t\tCommandPrintf(ptrUart,\"Error pin -  Bidi error(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\tif (argc == 1)\n\t{\n\t\tuint32_t x;\n\n\t\tx=abs(atol(argv[0]));\n\t\tif (x<=3)\n\t\t{\n\n\t\t\tSystemParams_t systemParams;\n\n\t\t\tmemcpy(&systemParams,&NVM->SystemParams, sizeof(systemParams) );\n\n\t\t\tsystemParams.errorPinMode=(ErrorPinMode_t)x;\n\n\t\t\tnvmWriteSystemParms(systemParams);\n\t\t\tstepperCtrl.updateParamsFromNVM();\n\n\t\t\tif (ERROR_PIN_MODE_ENABLE == NVM->SystemParams.errorPinMode)\n\t\t\t{\n\t\t\t\tCommandPrintf(ptrUart,\"Error pin -  Enable Active High(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t\t}else if (ERROR_PIN_MODE_ACTIVE_LOW_ENABLE == NVM->SystemParams.errorPinMode)\n\t\t\t{\n\t\t\t\tCommandPrintf(ptrUart,\"Error pin -  Enable active low(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t\t}else if (ERROR_PIN_MODE_ERROR == NVM->SystemParams.errorPinMode)\n\t\t\t{\n\t\t\t\tCommandPrintf(ptrUart,\"Error pin -  Error pin(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t\t} else if (ERROR_PIN_MODE_BIDIR == NVM->SystemParams.errorPinMode)\n\t\t\t{\n\t\t\t\tCommandPrintf(ptrUart,\"Error pin -  Bidi error(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t\t}\n\t\t\treturn 0;\n\n\t\t}\n\t}\n\tCommandPrintf(ptrUart, \"use 'errorpinmode 0' for enable active high, 'errorpinmode 1' for enable active low  and 'errorpinmode 2' for error output\"  );\n\n\n\treturn 1;\n}\n#else\nstatic int enablepinmode_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tbool ret;\n\n\tif (argc == 0)\n\t{\n\t\tif (ERROR_PIN_MODE_ENABLE == NVM->SystemParams.errorPinMode)\n\t\t{\n\t\t\tCommandPrintf(ptrUart,\"Enable pin -  Enable Active High(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t}else if (ERROR_PIN_MODE_ACTIVE_LOW_ENABLE == NVM->SystemParams.errorPinMode)\n\t\t{\n\t\t\tCommandPrintf(ptrUart,\"Enable pin -  Enable active low(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t} else if (ERROR_PIN_MODE_BIDIR == NVM->SystemParams.errorPinMode)\n\t\t{\n\t\t\tCommandPrintf(ptrUart,\"Enable pin -  Bidi error(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t} else\n\t\t{\n\t\t\tCommandPrintf(ptrUart,\"UNDEFINED  Pin Mode error(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\tif (argc == 1)\n\t{\n\t\tuint32_t x;\n\n\t\tx=abs(atol(argv[0]));\n\n\t\tif (x<=1)\n\t\t{\n\n\t\t\tSystemParams_t systemParams;\n\n\t\t\tmemcpy(&systemParams,&NVM->SystemParams, sizeof(systemParams) );\n\n\t\t\tsystemParams.errorPinMode=(ErrorPinMode_t)x;\n\n\t\t\tnvmWriteSystemParms(systemParams);\n\t\t\tstepperCtrl.updateParamsFromNVM();\n\n\t\t\tif (ERROR_PIN_MODE_ENABLE == NVM->SystemParams.errorPinMode)\n\t\t\t{\n\t\t\t\tCommandPrintf(ptrUart,\"Enable pin -  Enable Active High(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t\t}else if (ERROR_PIN_MODE_ACTIVE_LOW_ENABLE == NVM->SystemParams.errorPinMode)\n\t\t\t{\n\t\t\t\tCommandPrintf(ptrUart,\"Enable pin -  Enable active low(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t\t}else if (ERROR_PIN_MODE_BIDIR == NVM->SystemParams.errorPinMode)\n\t\t\t{\n\t\t\t\tCommandPrintf(ptrUart,\"Enable pin -  Bidi error(%d)\\n\\r\",(uint32_t)NVM->SystemParams.errorPinMode);\n\t\t\t}\n\t\t\treturn 0;\n\n\t\t}\n\t}\n\tCommandPrintf(ptrUart, \"use 'enablepinmode 0' for enable active high, 'enablepinmode 1' for enable active low \"  );\n\n\n\treturn 1;\n}\n#endif\n\nstatic int factoryreset_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tnvmErase(); //erase all of the flash\n\tNVIC_SystemReset();\n}\nstatic int velocity_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tint64_t x;\n\n\tif (1 == argc)\n\t{\n\t\tfloat rpm;\n\t\trpm=atof(argv[0]);\n\t\tx=(int64_t)(DIVIDE_WITH_ROUND(rpm*ANGLE_STEPS,60)); //divide with r\n\n\n\t\tstepperCtrl.setVelocity(x);\n\t}\n\tint64_t y;\n\tx=(stepperCtrl.getVelocity()*100 *60)/(ANGLE_STEPS);\n\ty=abs(x-((x/100)*100));\n\tCommandPrintf(ptrUart,\"Velocity is %d.%02d - %d\\n\\r\",(int32_t)(x/100),(int32_t)y,(int32_t)stepperCtrl.getVelocity());\n\n\treturn 0;\n}\n\n//\n//static int printdata_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n//{\n//\tint32_t x;\n//\n//\tstepperCtrl.printData();\n//\n//\treturn 0;\n//}\n\n\nstatic int move_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tint32_t x,ma;\n\t//CommandPrintf(ptrUart, \"Move %d\",argc);\n\n\tif (1 == argc)\n\t{\n\t\tfloat f;\n\n\t\tf=atof(argv[0]);\n\t\t//\t\tif (f>1.8)\n\t\t//\t\t\tf=1.8;\n\t\t//\t\tif (f<-1.8)\n\t\t//\t\t\tf=-1.8;\n\t\tx=ANGLE_FROM_DEGREES(f);\n\t\tLOG(\"moving %d\", x);\n\n\t\tstepperCtrl.moveToAbsAngle(x);\n\t}\n\tif (2 == argc)\n\t{\n\t\tfloat f,rpm,a,y;\n\t\tfloat pos,dx;\n\n\t\tf=atof(argv[0]);\n\t\trpm=atof(argv[1]);\n\t\t//\t\tif (f>1.8)\n\t\t//\t\t\tf=1.8;\n\t\t//\t\tif (f<-1.8)\n\t\t//\t\t\tf=-1.8;\n\n\t\tSmartPlanner.moveConstantVelocity(f,rpm);\n\t\treturn 0;\n\t\ta=360*rpm/60/1000; //rotations/100ms\n\n\t\tpos=ANGLE_T0_DEGREES(stepperCtrl.getCurrentAngle());\n\t\ty=pos;\n\t\tif (y>f) a=-a;\n\n#ifndef MECHADUINO_HARDWARE\n\t\tSerialUSB.println(f);\n\t\tSerialUSB.println(y);\n\t\tSerialUSB.println(a);\n#endif\n\n\t\twhile (abs(y-f)>(2*abs(a)))\n\t\t{\n\t\t\t//\t\t\tSerialUSB.println();\n\t\t\t//\t\t\tSerialUSB.println(f);\n\t\t\t//\t\tSerialUSB.println(y);\n\t\t\t//\t\tSerialUSB.println(a);\n\t\t\ty=y+a;\n\n\t\t\tx=ANGLE_FROM_DEGREES(y);\n\t\t\t//LOG(\"moving %d\", x);\n\t\t\tstepperCtrl.moveToAbsAngle(x);\n\t\t\tdelay(1);\n\t\t\t//y=stepperCtrl.getCurrentAngle();\n\t\t}\n\t\tx=ANGLE_FROM_DEGREES(f);\n\t\tLOG(\"moving %d\", x);\n\t\tstepperCtrl.moveToAbsAngle(x);\n\t}\n\n\treturn 0;\n}\n\nstatic int boot_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tinitiateReset(250);\n}\n\n/*\nstatic int microsteperror_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tint i,n,j;\n\tbool feedback=stepperCtrl.getFeedback();\n\tn=200*stepperCtrl.getMicroSteps();\n\n\tCommandPrintf(ptrUart, \"Function needs fixed\");\n\treturn 0;\n\tstepperCtrl.feedback(false);\n\tfor (j=0; j<2; j++)\n\t{\n\t\tfor (i=0; i<n; i++)\n\t\t{\n\t\t\tint32_t e;\n\t\t\tstepperCtrl.requestStep(1,1);\n\t\t\t//stepperCtrl.step(1, 2000);\n\t\t\tstepperCtrl.pidFeedback();\n\n\t\t\t//average 1readings\n\t\t\tint32_t sum=0,ii;\n\t\t\tfor (ii=0; ii<1; ii++)\n\t\t\t{\n\t\t\t\tsum+=stepperCtrl.measureError();\n\t\t\t\tstepperCtrl.pidFeedback();\n\t\t\t}\n\t\t\te=sum/ii;\n\t\t\tCommandPrintf(ptrUart,\"%d %d\\n\\r\",i,e);\n\t\t}\n\t}\n\tstepperCtrl.feedback(feedback); //restore feedback\n\treturn 0;\n} */\n\n/*\nstatic int testringing_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tstepperCtrl.testRinging();\n\treturn 0;\n}\n */\n\n//static int sysparams_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n//{\n//\tif (0 == argc)\n//\t{\n//\t\tCommandPrintf(ptrUart,\"microsteps %d\\n\\r\",NVM->SystemParams.microsteps);\n//\t\tCommandPrintf(ptrUart,\"dirPinRotation %d\\n\\r\",NVM->SystemParams.dirPinRotation);\n//\t\tCommandPrintf(ptrUart,\"errorLimit %d\\n\\r\",NVM->SystemParams.errorLimit);\n//\t\tCommandPrintf(ptrUart,\"errorPinMode %d\\n\\r\",NVM->SystemParams.errorPinMode);\n//\t\tCommandPrintf(ptrUart,\"controllerMode %d\\n\\r\",NVM->SystemParams.controllerMode);\n//\n//\t} else\tif (5 == argc)\n//\t{\n//\t\tint32_t x;\n//\t\tSystemParams_t systemParams;\n//\n//\t\tsystemParams.microsteps=atol(argv[0]);\n//\t\tx=atol(argv[1]);\n//\t\tsystemParams.dirPinRotation=CCW_ROTATION;\n//\t\tif (x==0)\n//\t\t{\n//\t\t\tsystemParams.dirPinRotation=CW_ROTATION;\n//\t\t}\n//\t\tsystemParams.errorLimit=atol(argv[2]);\n//\t\tsystemParams.errorPinMode=(ErrorPinMode_t)atol(argv[3]);\n//\t\tsystemParams.controllerMode=(feedbackCtrl_t)atol(argv[4]);\n//\n//\t\tnvmWriteSystemParms(systemParams);\n//\t\tstepperCtrl.updateParamsFromNVM();\n//\n//\t\tCommandPrintf(ptrUart,\"microsteps %d\\n\\r\",NVM->SystemParams.microsteps);\n//\t\tCommandPrintf(ptrUart,\"dirPinRotation %d\\n\\r\",NVM->SystemParams.dirPinRotation);\n//\t\tCommandPrintf(ptrUart,\"errorLimit %d\\n\\r\",NVM->SystemParams.errorLimit);\n//\t\tCommandPrintf(ptrUart,\"errorPinMode %d\\n\\r\",NVM->SystemParams.errorPinMode);\n//\t\tCommandPrintf(ptrUart,\"controllerMode %d\\n\\r\",NVM->SystemParams.controllerMode);\n//\t} else\n//\t{\n//\t\tCommandPrintf(ptrUart, \"try 'sysparams microsteps dirPinRotation errorLimit errorPinMode controllerMode'\\n\\r\\tlike 'sysparams 16 0 327 0 2'\\n\\e\");\n//\t}\n//\treturn 0;\n//}\n\n/*\nstatic int motorparams_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tif (0 == argc)\n\t{\n\t\tCommandPrintf(ptrUart,\"currentMa %d\\n\\r\",NVM->motorParams.currentMa);\n\t\tCommandPrintf(ptrUart,\"currentHoldMa %d\\n\\r\",NVM->motorParams.currentHoldMa);\n\t\tCommandPrintf(ptrUart,\"motorWiring %d\\n\\r\",NVM->motorParams.motorWiring);\n\t\tCommandPrintf(ptrUart,\"fullStepsPerRotation %d\\n\\r\",NVM->motorParams.fullStepsPerRotation);\n\n\t} else\tif (4 == argc)\n\t{\n\t\tint32_t x;\n\t\tMotorParams_t motorParams;\n\n\t\tmotorParams.currentMa=atol(argv[0]);\n\t\tmotorParams.currentHoldMa=atol(argv[1]);\n\t\tmotorParams.motorWiring=atol(argv[2]);\n\t\tmotorParams.fullStepsPerRotation=atol(argv[3]);\n\n\t\tnvmWriteMotorParms(motorParams);\n\t\tstepperCtrl.updateParamsFromNVM();\n\n\t\tCommandPrintf(ptrUart,\"currentMa %d\\n\\r\",NVM->motorParams.currentMa);\n\t\tCommandPrintf(ptrUart,\"currentHoldMa %d\\n\\r\",NVM->motorParams.currentHoldMa);\n\t\tCommandPrintf(ptrUart,\"motorWiring %d\\n\\r\",NVM->motorParams.motorWiring);\n\t\tCommandPrintf(ptrUart,\"fullStepsPerRotation %d\\n\\r\",NVM->motorParams.fullStepsPerRotation);\n\t} else\n\t{\n\t\tCommandPrintf(ptrUart, \"try 'motorparams currentMa currentHoldMa motorWiring fullStepsPerRotation'\\n\\r\\tlike 'motroparams 2200 1500 0 200'\\n\\e\");\n\t}\n\treturn 0;\n}\n */\nstatic int vpid_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tCommandPrintf(ptrUart, \"args %d\\n\\r\",argc);\n\tif (0 == argc)\n\t{\n\t\tint32_t x,y;\n\t\tx=(int32_t)NVM->vPID.Kp;\n\t\ty=abs(1000*NVM->vPID.Kp-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kp %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->vPID.Ki;\n\t\ty=abs(1000*NVM->vPID.Ki-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Ki %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->vPID.Kd;\n\t\ty=abs(1000*NVM->vPID.Kd-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kd %d.%03d\\n\\r\",x,y);\n\t}\n\tif (3 == argc)\n\t{\n\t\tfloat Kp,Ki,Kd;\n\t\tint32_t x,y;\n\n\t\tKp=atof(argv[0]);\n\t\tKi=atof(argv[1]);\n\t\tKd=atof(argv[2]);\n\n\t\tnvmWrite_vPID(Kp,Ki,Kd);\n\t\tstepperCtrl.updateParamsFromNVM(); //force the controller to use the new parameters\n\n\t\tx=(int32_t)NVM->vPID.Kp;\n\t\ty=abs(1000*NVM->vPID.Kp-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kp %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->vPID.Ki;\n\t\ty=abs(1000*NVM->vPID.Ki-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Ki %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->vPID.Kd;\n\t\ty=abs(1000*NVM->vPID.Kd-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kd %d.%03d\\n\\r\",x,y);\n\t}\n\treturn 0;\n}\n\nstatic int ppid_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tif (0 == argc)\n\t{\n\t\tint32_t x,y;\n\t\tx=(int32_t)NVM->pPID.Kp;\n\t\ty=abs(1000*NVM->pPID.Kp-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kp %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->pPID.Ki;\n\t\ty=abs(1000*NVM->pPID.Ki-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Ki %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->pPID.Kd;\n\t\ty=abs(1000*NVM->pPID.Kd-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kd %d.%03d\\n\\r\",x,y);\n\t}\n\tif (3 == argc)\n\t{\n\t\tfloat Kp,Ki,Kd;\n\t\tint32_t x,y;\n\n\t\tKp=atof(argv[0]);\n\t\tKi=atof(argv[1]);\n\t\tKd=atof(argv[2]);\n\n\t\tnvmWrite_pPID(Kp,Ki,Kd);\n\t\tstepperCtrl.updateParamsFromNVM(); //force the controller to use the new parameters\n\n\t\tx=(int32_t)NVM->pPID.Kp;\n\t\ty=abs(1000*NVM->pPID.Kp-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kp %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->pPID.Ki;\n\t\ty=abs(1000*NVM->pPID.Ki-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Ki %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->pPID.Kd;\n\t\ty=abs(1000*NVM->pPID.Kd-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kd %d.%03d\\n\\r\",x,y);\n\t}\n\treturn 0;\n}\n\nstatic int spid_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tif (0 == argc)\n\t{\n\t\tint32_t x,y;\n\t\tx=(int32_t)NVM->sPID.Kp;\n\t\ty=abs(1000*NVM->sPID.Kp-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kp %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->sPID.Ki;\n\t\ty=abs(1000*NVM->sPID.Ki-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Ki %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->sPID.Kd;\n\t\ty=abs(1000*NVM->sPID.Kd-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kd %d.%03d\\n\\r\",x,y);\n\t}\n\tif (3 == argc)\n\t{\n\t\tfloat Kp,Ki,Kd;\n\t\tint32_t x,y;\n\n\t\tKp=atof(argv[0]);\n\t\tKi=atof(argv[1]);\n\t\tKd=atof(argv[2]);\n\n\t\tnvmWrite_sPID(Kp,Ki,Kd);\n\t\tstepperCtrl.updateParamsFromNVM(); //force the controller to use the new parameters\n\n\t\tx=(int32_t)NVM->sPID.Kp;\n\t\ty=abs(1000*NVM->sPID.Kp-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kp %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->sPID.Ki;\n\t\ty=abs(1000*NVM->sPID.Ki-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Ki %d.%03d\\n\\r\",x,y);\n\n\t\tx=(int32_t)NVM->sPID.Kd;\n\t\ty=abs(1000*NVM->sPID.Kd-(x*1000));\n\t\tCommandPrintf(ptrUart,\"Kd %d.%03d\\n\\r\",x,y);\n\t}\n\treturn 0;\n}\nstatic int encoderdiag_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tchar str[512];\n\tstepperCtrl.encoderDiagnostics(str);\n\tCommandPrintf(ptrUart,\"%s\",str);\n\treturn 0;\n}\n\nstatic int readpos_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tfloat pos;\n\tint32_t x,y;\n\n\tpos=ANGLE_T0_DEGREES(stepperCtrl.getCurrentAngle());\n\tx=int(pos);\n\ty=abs((pos-x)*100);\n\tCommandPrintf(ptrUart,\"encoder %d.%02d\",x,y);\n\treturn 0;\n}\nstatic int feedback_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tif (0 == argc)\n\t{\n\t\tCommandPrintf(ptrUart,\"must pass argument, 'feedback 0' - disables, 'feedback 1' - enables\");\n\t\treturn 1;\n\t}\n\tstepperCtrl.feedback(atoi(argv[0]));\n\treturn 0;\n}\n\nstatic int step_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tif (argc == 0 )\n\t{\n\t\tstepperCtrl.move(0, 1);\n\t\t//stepperCtrl.step(STEPPER_FORWARD);\n\t}else\n\t{\n\t\tint d, steps=1;\n\t\td=atoi(argv[0]);\n\t\tif (argc >1)\n\t\t{\n\t\t\tsteps=atoi(argv[1]);\n\t\t}\n\t\tif (1 == d)\n\t\t{\n\t\t\tstepperCtrl.move(1, steps);\n\t\t} else\n\t\t{\n\t\t\tstepperCtrl.move(0, steps);\n\t\t}\n\t}\n\treturn 0;\n}\n\n\nstatic int microsteps_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tbool ret;\n\n\tif (argc != 1)\n\t{\n\t\tCommandPrintf(ptrUart,\"microsteps %d\\n\\r\",NVM->SystemParams.microsteps);\n\t\treturn 0;\n\t}\n\n\tint32_t x;\n\n\tx=atol(argv[0]);\n\tif (isPowerOfTwo(x) && x>0 && x<=256)\n\t{\n\t\tSystemParams_t systemParams;\n\n\t\tmemcpy(&systemParams,&NVM->SystemParams, sizeof(systemParams) );\n\n\t\tsystemParams.microsteps=atol(argv[0]);\n\n\t\tnvmWriteSystemParms(systemParams);\n\t\tstepperCtrl.updateParamsFromNVM();\n\n\t\tCommandPrintf(ptrUart,\"microsteps %d\\n\\r\",NVM->SystemParams.microsteps);\n\n\t}else\n\t{\n\t\tCommandPrintf(ptrUart,\"number of microsteps must be a power of 2 between 1 and 256\");\n\t\treturn 1; //return error\n\t}\n\n\treturn 0;\n}\n\n\n// print out the help strings for the commands\nstatic int help_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tsCommand cmd_list;\n\tint i;\n\n\t//now let's parse the command\n\ti=0;\n\tmemcpy(&cmd_list, &Cmds[i], sizeof(sCommand));\n\twhile(cmd_list.function!=0)\n\t{\n\n\t\tCommandPrintf(ptrUart,(cmd_list.name));\n\t\tCommandPrintf(ptrUart,(\" - \"));\n\t\tCommandPrintf(ptrUart,(cmd_list.help));\n\t\tCommandPrintf(ptrUart,(\"\\n\\r\"));\n\t\ti=i+1;\n\t\tmemcpy(&cmd_list, &Cmds[i], sizeof(sCommand));\n\t}\n\treturn 0;\n}\n\n\n\nstatic int getcal_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tstepperCtrl.calTable.printCalTable();\n\treturn 0;\n}\n\nstatic int calibrate_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tstepperCtrl.calibrateEncoder();\n\tCommandPrintf(ptrUart,\"Calibration DONE!\\n\\r\");\n\treturn 0;\n}\n\nstatic int testcal_cmd(sCmdUart *ptrUart,int argc, char * argv[])\n{\n\tAngle a;\n\tint32_t x;\n\n\ta=stepperCtrl.maxCalibrationError();\n\tx=(uint16_t)a*(int32_t)360000L/(int32_t)ANGLE_MAX;\n\n\tCommandPrintf(ptrUart,\"Max error is %d.%03d degrees\\n\\r\", x/1000,abs(x)%1000);\n\treturn 0;\n}\n\n\n#ifndef MECHADUINO_HARDWARE\n\nuint8_t kbhit(void)\n{\n\treturn SerialUSB.available();\n\t//return SerialUSB.peek() != -1;\n}\nuint8_t getChar(void)\n{\n\treturn SerialUSB.read();\n}\nuint8_t putch(char data)\n{\n\treturn SerialUSB.write((uint8_t)data);\n}\n\n#endif\nuint8_t kbhit_hw(void)\n{\n\treturn Serial5.available();\n\t//return SerialUSB.peek() != -1;\n}\nuint8_t getChar_hw(void)\n{\n\treturn Serial5.read();\n}\nuint8_t putch_hw(char data)\n{\n\treturn Serial5.write((uint8_t)data);\n}\n\n\nuint8_t kbhit_step_dir(void)\n{\n\treturn Serial1.available();\n\t//return SerialUSB.peek() != -1;\n}\nuint8_t getChar_step_dir(void)\n{\n\treturn Serial1.read();\n}\nuint8_t putch_step_dir(char data)\n{\n\treturn Serial1.write((uint8_t)data);\n}\n\n\n\nvoid commandsInit(void)\n{\n\t\n#ifndef MECHADUINO_HARDWARE\n  CommandInit(&UsbUart, kbhit, getChar, putch ,NULL); //set up the UART structure\n  SerialUSB.print(\"\\n\\rPower Up\\n\\r\");\n  SerialUSB.print(COMMANDS_PROMPT);\n#endif\n\t\n\tCommandInit(&HostUart, kbhit_step_dir, getChar_step_dir, putch_step_dir ,NULL); //set up the UART structure for step and dir pins\n\n#ifdef CMD_SERIAL_PORT\n\tCommandInit(&SerialUart, kbhit_hw, getChar_hw, putch_hw ,NULL); //set up the UART structure\n\tSerial5.print(\"\\n\\rPower Up\\n\\r\");\n\tSerial5.print(COMMANDS_PROMPT);\n#endif\n\n}\n\nint commandsProcess(void)\n{\n#ifdef USE_STEP_DIR_SERIAL\n\t//if the step pin is configured to the SerialCom 0 then we need to process commands\n\t//if PA11 (D0) is configured to perpherial C then the step pin is UART\n\tif (getPinMux(PIN_STEP_INPUT) ==  PORT_PMUX_PMUXE_C_Val)\n\t{\n\t\t//SerialUSB.println(\"host\");\n\t\tCommandProcess(&HostUart,Cmds,' ',COMMANDS_PROMPT);\n\t}\n#endif //USE_STEP_DIR_SERIAL\n\n\n#ifdef CMD_SERIAL_PORT\n\tCommandProcess(&SerialUart,Cmds,' ',COMMANDS_PROMPT);\n#endif\n\n#ifndef MECHADUINO_HARDWARE\nif (SerialUSB.dtr())\n  {\n    return CommandProcess(&UsbUart,Cmds,' ',COMMANDS_PROMPT);\n  }\n#endif\n}\n"
  },
  {
    "path": "firmware/stepper_nano_zero/commands.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#ifndef __COMMANDS_H__\n#define __COMMANDS_H__\n#include <Arduino.h>\n#include \"stepper_controller.h\"\n#include \"nzs.h\"\n\nextern StepperCtrl stepperCtrl;\nextern eepromData_t PowerupEEPROM;\n\nvoid commandsInit(void);\nint commandsProcess(void);\n\n#endif //__COMMANDS_H__\n"
  },
  {
    "path": "firmware/stepper_nano_zero/eeprom.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include \"eeprom.h\"\n#include \"calibration.h\"\n#include \"Flash.h\"\n#include \"board.h\" //for divide with rounding macro\n#include <Arduino.h>\n#include \"syslog.h\"\n\n//since we will write the following structure into each page, we need to find our latest page\n// to do this we will use the header to contain a checksum and write counter.\n#define EEPROM_SIZE (FLASH_ROW_SIZE*2)\n\ntypedef struct {\n      uint16_t checksum;\n      uint16_t count;\n}eepromHeader_t;\n\n#define EEPROM_DATA_SIZE (FLASH_PAGE_SIZE_NZS-sizeof(eepromHeader_t))\ntypedef struct {\n      eepromHeader_t header;\n      uint8_t data[EEPROM_DATA_SIZE];\n} eepromData_t;\n\n\n\nstatic eepromData_t EEPROMCache;\n\nstatic int32_t NextPageWrite=-1;\n\n//we need to reserve two pages for EEPROM\n__attribute__((__aligned__(FLASH_ROW_SIZE))) const uint8_t NVM_eeprom[EEPROM_SIZE]={0xFF};\n\n\nstatic uint16_t checksum(uint8_t *ptrData, uint32_t nBytes)\n{\n   uint16_t sum=0;\n   uint32_t i;\n   i=0;\n   //LOG(\"running checksum %d\",nBytes);\n   while(i<nBytes)\n   {\n      sum += ptrData[i];\n      i++;\n   }\n\n   return sum;\n}\n\nstatic bool isPageGood(uint32_t page)\n{\n   eepromData_t *ptrData;\n   uint16_t cs;\n   ptrData=(eepromData_t *)&NVM_eeprom[page];\n\n   cs=checksum(ptrData->data, EEPROM_DATA_SIZE);\n   //LOG(\"checksum is %d %d\",cs,ptrData->header.checksum);\n\n   if (cs==ptrData->header.checksum)\n   {\n      //LOG(\"Page good %d\",page);\n      return true;\n   }\n   //LOG(\"page bad %d\",page);\n   return false;\n}\n\nstatic void printEEPROM(uint32_t page)\n{\n   eepromData_t *ptrData;\n   int i;\n   ptrData=(eepromData_t *)&NVM_eeprom[page];\n   LOG(\"count %d\", ptrData->header.count);\n   LOG(\"checksum %d\", ptrData->header.checksum);\n   for (i=0; i<10; i++)\n   {\n      LOG(\"Data[%d]=%02X\",i,ptrData->data[i]);\n   }\n}\n\nstatic uint32_t findLastGoodPage(void)\n{\n   uint32_t lastGoodPage=0;\n   uint32_t page;\n   uint16_t lastCnt=0;\n   eepromData_t *ptrData;\n\n   page=0;\n   while(page < (EEPROM_SIZE))\n   {\n      //LOG(\"checking page %d\",page);\n      if (isPageGood(page))\n      {\n\t ptrData=(eepromData_t *)&NVM_eeprom[page];\n\n\t //check for roll over which is OK\n\t if (lastCnt==16534 && ptrData->header.count==1)\n\t {\n\t    lastCnt=ptrData->header.count;\n\t    lastGoodPage=page;\n\t }\n\t if (ptrData->header.count>lastCnt)\n\t {\n\t    //make sure we have not rolled over.\n\t    if ((ptrData->header.count-lastCnt)<(16534/2))\n\t    {\n\t       lastCnt=ptrData->header.count;\n\t       lastGoodPage=page;\n\t    }\n\t }\n      }\n      page=page + FLASH_PAGE_SIZE_NZS;\n   }\n   //LOG(\"last good page %d\",lastGoodPage);\n   return lastGoodPage;\n}\n\n//find the next page to write\nstatic uint32_t eepromGetNextWritPage(void)\n{\n   eepromHeader_t *ptrHeader;\n   uint32_t page;\n   uint32_t row;\n   int blockCount;\n   int done=0;\n\n   //start at first address:\n   page=0;\n\n   while(page < (EEPROM_SIZE))\n   {\n      //LOG(\"checking page %d\",page);\n      ptrHeader=(eepromHeader_t *) &NVM_eeprom[page];\n      if (ptrHeader->count == 0xFFFF)\n      {\n\t uint32_t i;\n\t uint8_t *ptrData;\n\t //uint8_t erasedByte=(uint8_t)ptrHeader->count;\n\t bool erased=true;\n\n\t //verify page is erased\n\t ptrData= (uint8_t *)&NVM_eeprom[page];\n\n\t for (i=0; i<FLASH_PAGE_SIZE_NZS; i++)\n\t {\n\t    if (ptrData[i] != FLASH_ERASE_VALUE)\n\t    {\n\t       erased=false;\n\t       break;\n\t    }\n\t }\n\n\t if (erased)\n\t {\n\t    //LOG(\"Found Page %d erased\",page);\n\t    return page;\n\t }\n      }\n      page=page+FLASH_PAGE_SIZE_NZS;\n   }\n   //if we get get here all the pages are full...\n   // we need to find the page with last good data.\n   page=findLastGoodPage();\n\n   //find which row the page is in\n   row=page/FLASH_ROW_SIZE;\n\n   //increment to next row for erase\n   row++;\n   if ((row*FLASH_ROW_SIZE)>=EEPROM_SIZE)\n   {\n      row=0;\n      //TODO we should make sure this not where good data is\n      // however if it is what should we do?\n   }\n\n   //now we need to erase that row\n   //WARNING(\"Erasing page %d\",row*FLASH_ROW_SIZE);\n   flashErase(&NVM_eeprom[row*FLASH_ROW_SIZE],FLASH_ROW_SIZE);\n   page=row*FLASH_ROW_SIZE;\n   //LOG(\"Next free page is %d\",page);\n   return page;\n}\n\n\neepromError_t eepromInit(void)\n{\n   uint32_t page;\n\n\n   //find the last good page offset in flash\n   page=findLastGoodPage();\n   LOG(\"EEPROM Init found page %d\",page);\n   if (isPageGood(page))\n   {\n      LOG(\"EEPROM page good %d\",page);\n      memcpy(&EEPROMCache, &NVM_eeprom[page], sizeof(EEPROMCache));\n\n      NextPageWrite=eepromGetNextWritPage();\n      return EEPROM_OK;\n   }\n   //ERROR(\"page is bad\");\n   memset(&EEPROMCache, 0, sizeof(EEPROMCache));\n   NextPageWrite=eepromGetNextWritPage();\n   return EEPROM_CORRUPT;\n}\n\n\nint eepromWriteCache(uint8_t *ptrData, uint32_t size)\n{\n   //LOG(\"Cache write %d\",size);\n   if (NextPageWrite==-1) //some one did not init the module\n   {\n      //lets handle gracefully and do it ourselves\n      eepromInit();\n   }\n   if (size>EEPROM_DATA_SIZE)\n   {\n      size =EEPROM_DATA_SIZE;\n   }\n   memcpy(EEPROMCache.data, ptrData, size);\n   EEPROMCache.header.checksum=checksum(EEPROMCache.data,EEPROM_DATA_SIZE);\n\n\n   return size;\n}\n\nint eepromRead(uint8_t *ptrData, uint32_t size) //returns number of bytes actually read, whcih could be less than size requested\n{\n   if (NextPageWrite==-1) //some one did not init the module\n   {\n      //lets handle gracefully and do it ourselves\n      eepromInit();\n   }\n   if (size>EEPROM_DATA_SIZE)\n   {\n      size =EEPROM_DATA_SIZE;\n   }\n   if (EEPROMCache.header.count == 0)\n   {\n      return 0; //cache is new/corrupt\n   }\n   memcpy(ptrData, EEPROMCache.data, size);\n   return size;\n}\n\neepromError_t eepromFlush(void) //flush the cache to flash memory\n{\n   if (NextPageWrite==-1)\n   {\n      ERROR(\"EEPROM WRITE FAILED\");\n      return EEPROM_FAILED; //most likely no one has written to cache\n   }\n   EEPROMCache.header.count++;\n   if (EEPROMCache.header.count>=16535)\n   {\n      EEPROMCache.header.count=1;\n   }\n   //WARNING(\"Writting to Page %d\",NextPageWrite);\n   flashWrite(&NVM_eeprom[NextPageWrite], &EEPROMCache, sizeof(EEPROMCache));\n\n  // printEEPROM(NextPageWrite);\n\n   if (!SYSCTRL->PCLKSR.bit.BOD33DET) //if not in brown out condition find next write location\n   {\n       //LOG(\"getting next page to write\");\n      NextPageWrite=eepromGetNextWritPage(); //find next write location and erase if needed\n   } else\n   {\n      //LOG(\"BOD active\");\n      NextPageWrite=-1; //else we will just clear NextPageWrite location just in case we recover from brown out\n   }\n   return EEPROM_OK;\n}\n"
  },
  {
    "path": "firmware/stepper_nano_zero/eeprom.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#ifndef EEPROM_H_\n#define EEPROM_H_\n#include \"Flash.h\"\n#include \"calibration.h\"\n#include \"board.h\"\n\n/*\n *  This EEPROM implementation provides 60bytes of \"eeprom space\"  (we reserve 4 bytes for overhead)\n * \tThe EEPROM uses two rows of flash (256 bytes per row), which\n * \tfor the SAMD21G18A this allows a minimual 200k writes, but typically 1200k\n */\n\ntypedef enum {\n\tEEPROM_OK =0,\n\tEEPROM_FAILED=1,\n\tEEPROM_CORRUPT=2,\n} eepromError_t;\n\n\neepromError_t eepromInit(void);\nint eepromWriteCache(uint8_t *ptrData, uint32_t size); //returns number bytes written to cache\neepromError_t eepromFlush(void); //flush the cache to flash memory\nint eepromRead(uint8_t *ptrData, uint32_t size); //returns number of bytes actually read, whcih could be less than size requested\n\n#endif /* EEPROM_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/fet_driver.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include \"fet_driver.h\"\n#include \"wiring_private.h\"\n#include \"syslog.h\"\n#include \"angle.h\"\n#include \"Arduino.h\"\n#include \"sine.h\"\n#include \"nonvolatile.h\"\n\n#pragma GCC push_options\n#pragma GCC optimize (\"-Ofast\")\n\n#ifdef NEMA_23_10A_HW\n\n#define FET_DRIVER_FREQ  (46875UL) //FET PWM pin driver frequency\n\nFetDriver *FetDriver::ptrInstance=0;\n\n// Wait for synchronization of registers between the clock domains\nstatic __inline__ void syncDAC() __attribute__((always_inline, unused));\nstatic void syncDAC() {\n\twhile (DAC->STATUS.bit.SYNCBUSY == 1)\n\t\t;\n}\n\n\nvolatile uint32_t coilA_Value=0;\n/*\n *  The discrete FETs on the NEMA 23 10A board are configured such that each H-bridge has:\n *    IN1 - Input 1\n *    IN2 - Input 2\n *    Enable - Enable driver\n *    Isense - current sense\n *\n *    The truth table for the H-Bridge is:\n *    Enable\tIN1\t\tIN2\t\tBridge State\n *    0\t\t\tx\t\tx\t\tfloating (FETs off)\n *    1\t\t\t0\t\t0\t\tcoil shorted to Gnd\n *    1\t\t\t0\t\t1\t\tforward\n *    1\t\t\t1\t\t0\t\treverse\n *    1\t\t\t1\t\t1\t\tcoil shorted to VCC\n *\n *    For peak current control there is two state (fast decay, and slow decay)\n *\n *    Fast Decay\n *    When driving coil in forward direction and current peak is reached the fast decay turns\n *    The bridge in the reverse direction. This cause the reverse EMF from coil to charge\n *    capacitors back up and the current on the coil to drop very quickly\n *\n *    Slow Decay\n *    During this mode the current decay is slower by shorting the coil leads to ground.\n *    This in effect shorts the coil leads and reverse EMF is converted to heat.\n *\n *    In the Fast Decay mode we reverse the motor, this in effect is trying to drive coil\n *    current in the reverse direction. This in effect reduces current faster than just\n *    shorting the coil out.\n *\n *    see www.misfittech.net's blog for more information on this subject\n *\n */\n\n/* driver code's logic\n *\n * \tThis driver code needs not only to control the FETs but also handle the current limits.\n *\n * \tThe way the code handles limiting current is by using two comparators internal to\n * \tthe microprocessor.\n *\n * \tWe first use two PWM signals to generate reference voltage for each comparator.\n * \tThen when the current sense voltage exceeds this reference voltage an interrupt is\n * \tgenerated. In the interrupt handler we will then set the decay mode as needed.\n *\n * \tIt will have to be determined if we will use a fixed time decay mode like the A4954,\n * \tor use current as the threshold. There is a lot to do here to maintain quite operation,\n * \tthat is we need this current control to be running at more than 20khz to be quite.\n *\n * \tAdditionally we can use ADC on the current sense for detecting the flyback and\n * \tget some idea of the inductance. This can be used for stall dection as well as\n * \tauto tuning of some of the driver parameters.\n */\n\n\n\n#pragma GCC push_options\n#pragma GCC optimize (\"-Ofast\")\n\n#define WAIT_TC16_REGS_SYNC(x) while(x->COUNT16.STATUS.bit.SYNCBUSY);\n\ntypedef enum {\n\tCURRENT_ON = 0,\n\tCURRENT_FAST_DECAY = 1,\n\tCURRENT_SLOW_DECAY = 2,\n} CurrentMode_t;\n\ntypedef enum {\n\tCOIL_FORWARD =0,\n\tCOIL_REVERSE =1,\n\tCOIL_BRAKE =2\n} CoilState_t;\n\ntypedef struct {\n\tbool currentIncreasing; //true when we are increasing current\n\tCurrentMode_t currentState; //how is bridge driven\n} BridgeState_t;\n\nvolatile BridgeState_t BridgeA, BridgeB;\n\n\n#define DAC_MAX (0x01FFL)\n// Wait for synchronization of registers between the clock domains\nstatic __inline__ void syncTCC(Tcc* TCCx) __attribute__((always_inline, unused));\nstatic void syncTCC(Tcc* TCCx) {\n\t//int32_t t0=1000;\n\twhile (TCCx->SYNCBUSY.reg & TCC_SYNCBUSY_MASK)\n\t{\n\t\t//\t\tt0--;\n\t\t//\t\tif (t0==0)\n\t\t//\t\t{\n\t\t//\t\t\tbreak;\n\t\t//\t\t}\n\n\t}\n}\n\n\n\n\n\nstatic inline void coilA(CoilState_t state)\n{\n\tPIN_GPIO_OUTPUT(PIN_FET_IN1);\n\tPIN_GPIO_OUTPUT(PIN_FET_IN2);\n\tswitch(state){\n\n\t\tcase COIL_FORWARD:\n\t\t\tGPIO_HIGH(PIN_FET_IN1);\n\t\t\tGPIO_LOW(PIN_FET_IN2);\n\t\t\tbreak;\n\n\t\tcase COIL_REVERSE:\n\t\t\tGPIO_HIGH(PIN_FET_IN2);\n\t\t\tGPIO_LOW(PIN_FET_IN1);\n\t\t\tbreak;\n\n\t\tcase COIL_BRAKE:\n\t\t\tGPIO_LOW(PIN_FET_IN2);\n\t\t\tGPIO_LOW(PIN_FET_IN1);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tERROR(\"Not a known state\");\n\t\t\tbreak;\n\t}\n\n}\n\nstatic inline void coilB(CoilState_t state)\n{\n\tPIN_GPIO_OUTPUT(PIN_FET_IN3);\n\tPIN_GPIO_OUTPUT(PIN_FET_IN4);\n\tswitch(state){\n\t\tcase COIL_FORWARD:\n\t\t\tGPIO_HIGH(PIN_FET_IN3);\n\t\t\tGPIO_LOW(PIN_FET_IN4);\n\t\t\tbreak;\n\n\t\tcase COIL_REVERSE:\n\t\t\tGPIO_HIGH(PIN_FET_IN4);\n\t\t\tGPIO_LOW(PIN_FET_IN3);\n\t\t\tbreak;\n\n\t\tcase COIL_BRAKE:\n\t\t\tGPIO_LOW(PIN_FET_IN3);\n\t\t\tGPIO_LOW(PIN_FET_IN4);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tERROR(\"Not a known state\");\n\t\t\tbreak;\n\t}\n}\n\n\nint FetDriver::coilA_PWM(int32_t value)\n{\n\tint32_t x;\n\t// PIN_FET_IN1\t (PA15)\t\t(5)  (TCC0 WO[5], aka ch1)\n\t//PIN_FET_IN2    (PA20)\t\t(6)  (TCC0 WO[6], aka ch2)\n\tTcc* TCCx = TCC0 ;\n\n//\n//\tif (value==0)\n//\t{\n//\t\tGPIO_LOW(PIN_FET_IN1);\n//\t\tGPIO_LOW(PIN_FET_IN2);\n//\t\tPIN_GPIO(PIN_FET_IN1);\n//\t\tPIN_GPIO(PIN_FET_IN2);\n//\t\treturn;\n//\t}\n\n\tif (value<0)\n\t{\n\t\tGPIO_LOW(PIN_FET_IN1);\n\t\tPIN_GPIO(PIN_FET_IN1);\n\t\tPIN_PERIPH(PIN_FET_IN2);\n\t\t//pinPeripheral(PIN_FET_IN2, PIO_TIMER_ALT); //TCC0 WO[7]\n\t\tvalue=-value;\n\t}else\n\t{\n\t\tGPIO_LOW(PIN_FET_IN2);\n\t\tPIN_GPIO(PIN_FET_IN2);\n\t\tPIN_PERIPH(PIN_FET_IN1);\n\t\t//pinPeripheral(PIN_FET_IN1, PIO_TIMER_ALT);\n\t}\n\n\n#if (F_CPU/FET_DRIVER_FREQ)==1024\n\tx=value & 0x3FF;\n#else\n\tx=MIN(value, (int32_t)(F_CPU/FET_DRIVER_FREQ));\n#endif\n\n\tsyncTCC(TCCx);\n\tTCCx->CC[1].reg = (uint32_t)x; //ch1 == ch5 //IN3\n\t//syncTCC(TCCx);\n\tTCCx->CC[2].reg = (uint32_t)x; //ch2 == ch6 //IN4\n\tif (x!=value)\n\t{\n\t\treturn 1;\n\t}\n\treturn 0;\n\n}\n\nvoid FetDriver::coilB_PWM(int32_t value)\n{\n\n\t//PIN_FET_IN3\t (PA21)\t\t(7)\t (TCC0 WO[7], aka ch3)\n\t//PIN_FET_IN4    (PA14)\t\t(2)  (TCC0 WO[4], aka ch0)\n\tTcc* TCCx = TCC0 ;\n\n\n//\n//\tif (value==0)\n//\t{\n//\t\tGPIO_LOW(PIN_FET_IN3);\n//\t\tGPIO_LOW(PIN_FET_IN4);\n//\t\tPIN_GPIO(PIN_FET_IN3);\n//\t\tPIN_GPIO(PIN_FET_IN4);\n//\t\treturn;\n//\t}\n\n\n\tif (value<=0)\n\t{\n\t\tGPIO_LOW(PIN_FET_IN3);\n\t\tPIN_GPIO(PIN_FET_IN3);\n\t\tPIN_PERIPH(PIN_FET_IN4);\n\t\t//SET_PIN_PERHERIAL(PIN_FET_IN4, PIO_TIMER_ALT); //TCC0 WO[7]\n\t\tvalue=-value;\n\t}else\n\t{\n\t\tGPIO_LOW(PIN_FET_IN4);\n\t\tPIN_GPIO(PIN_FET_IN4);\n\t\tPIN_PERIPH(PIN_FET_IN3);\n\t\t//SET_PIN_PERHERIAL(PIN_FET_IN3, PIO_TIMER_ALT);\n\t}\n\n\n#if (F_CPU/FET_DRIVER_FREQ)==1024\n\tvalue=value & 0x3FF;\n#else\n\tvalue=MIN(value, (int32_t)(F_CPU/FET_DRIVER_FREQ));\n#endif\n\n\t//LOG(\"value is %d\",value);\n\t//\tif (value> 300) //(F_CPU/FET_DRIVER_FREQ))\n\t//\t{\n\t//\t\tvalue= 300; //F_CPU/FET_DRIVER_FREQ;\n\t//\t}\n\tsyncTCC(TCCx);\n\tTCCx->CC[0].reg = (uint32_t)value; //ch0 == ch4 //IN4\n\t//syncTCC(TCCx);\n\tTCCx->CC[3].reg = (uint32_t)value; //ch3 == ch7  //IN3\n\n\n}\n\nstatic void enableTCC0(void)\n{\n\tTcc* TCCx = TCC0 ;\n\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_TCC0_TCC1 )) ;\n\n\twhile ( GCLK->STATUS.bit.SYNCBUSY == 1 ) ;\n\n\t//ERROR(\"Setting TCC %d %d\",ulValue,ulPin);\n\tTCCx->CTRLA.reg &= ~TCC_CTRLA_ENABLE;\n\tsyncTCC(TCCx);\n\n\t// Set TCx as normal PWM\n\tTCCx->WAVE.reg |= TCC_WAVE_WAVEGEN_NPWM;\n\tsyncTCC(TCCx);\n\n\t// Set PER to maximum counter value (resolution : 0xFF)\n\tTCCx->PER.reg = F_CPU/FET_DRIVER_FREQ; //set frequency to 100Khz\n\tsyncTCC(TCCx);\n\n\t// Enable TCCx\n\tTCCx->CTRLA.reg |= TCC_CTRLA_ENABLE ;\n\tsyncTCC(TCCx);\n\t//ERROR(\"Enable TCC0 DONE\");\n\n}\n\nstatic void setDAC(uint32_t DAC1, uint32_t DAC2)\n{\n\tTCC1->CC[1].reg = (uint32_t)DAC1; //D9 PA07 - VREF12\n\tsyncTCC(TCC1);\n\tTCC1->CC[0].reg = (uint32_t)DAC2; //D4 - VREF34\n\tsyncTCC(TCC1);\n}\n\n\n\nstatic void setupDAC(void)\n{\n\tTcc* TCCx = TCC1 ;\n\n\n\tpinPeripheral(PIN_FET_VREF1, PIO_TIMER_ALT);\n\tpinPeripheral(PIN_FET_VREF2, PIO_TIMER_ALT);\n\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_TCC0_TCC1 )) ;\n\n\twhile ( GCLK->STATUS.bit.SYNCBUSY == 1 ) ;\n\n\t//ERROR(\"Setting TCC %d %d\",ulValue,ulPin);\n\tTCCx->CTRLA.reg &= ~TCC_CTRLA_ENABLE;\n\tsyncTCC(TCCx);\n\n\t// Set TCx as normal PWM\n\tTCCx->WAVE.reg |= TCC_WAVE_WAVEGEN_NPWM;\n\tsyncTCC(TCCx);\n\n\t// Set TCx in waveform mode Normal PWM\n\tTCCx->CC[1].reg = (uint32_t)0;\n\tsyncTCC(TCCx);\n\n\tTCCx->CC[0].reg = (uint32_t)0;\n\tsyncTCC(TCCx);\n\n\t// Set PER to maximum counter value (resolution : 0xFFF = 12 bits)\n\t// =48e6/2^12=11kHz frequency\n\tTCCx->PER.reg = DAC_MAX;\n\tsyncTCC(TCCx);\n\n\t// Enable TCCx\n\tTCCx->CTRLA.reg |= TCC_CTRLA_ENABLE ;\n\tsyncTCC(TCCx);\n\n}\n\n\n/*\n * The SAMD21 has two analog comparators\n *  COMP_FET_A(A4/PA05) and COMP_FET_B(D9/PA07) are the reference voltages\n *\n *  ISENSE_FET_A(A3/PA04) and ISENSE_FET_B(D8/PA06) are the current sense\n *\n */\n/*\nstatic void setupComparators(void)\n{\n\t//setup the pins as analog inputs\n\tpinPeripheral(COMP_FET_A, PIO_ANALOG); //AIN[1]\n\tpinPeripheral(COMP_FET_B, PIO_ANALOG); \t//AIN[3]\n\tpinPeripheral(ISENSE_FET_A, PIO_ANALOG);  //AIN[0]\n\tpinPeripheral(ISENSE_FET_B, PIO_ANALOG);  //AIN[2]\n\n\t//enable the clock for the Analog comparator\n\tPM->APBCMASK.reg |= PM_APBCMASK_AC; //enable clock in the power manager\n\n\t//setup the GCLK for the analog and digital clock to the AC\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_AC_ANA )) ;\n\t while ( GCLK->STATUS.bit.SYNCBUSY == 1 ) ;\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_AC_DIG )) ;\n\t while ( GCLK->STATUS.bit.SYNCBUSY == 1 ) ;\n\n\n\t//we will drive the CMP0 and CMP1 high when our current is exceeded.\n\t// To do this we will set ISense Pins as the non-inverting input\n\tAC->CTRLA.reg=0x01; //disable AC_COMPCTRL_ENABLE and reset\n\twhile ( AC->STATUSB.bit.SYNCBUSY == 1 ) ;\n\tAC->CTRLB.reg=0x0; // set start bits low (will not be used)\n\twhile ( AC->STATUSB.bit.SYNCBUSY == 1 ) ;\n\tAC->COMPCTRL[0].reg = \tAC_COMPCTRL_FLEN_MAJ3_Val | //add a 3 bit majority digital filter\n\t\t\t\t\t\t\tAC_COMPCTRL_HYST | //enable hysterisis\n\t\t\t\t\t\t\tAC_COMPCTRL_MUXPOS_PIN0 | //non-inverting is AIN[0]\n\t\t\t\t\t\t\tAC_COMPCTRL_MUXNEG_PIN1 | //inverting pin is AIN[1]\n\t\t\t\t\t\t\tAC_COMPCTRL_INTSEL_RISING | //interrupt on the rising edge (TODO we might want on both edges)\n\t\t\t\t\t\t\tAC_COMPCTRL_SPEED_HIGH |\n\t\t\t\t\t\t\tAC_COMPCTRL_ENABLE;  //set to high speed mode, we don't care about power consumption\n\twhile ( AC->STATUSB.bit.SYNCBUSY == 1 ) ;\n\tAC->COMPCTRL[1].reg = \t//AC_COMPCTRL_FLEN_MAJ3_Val | //add a 3 bit majority digital filter\n\t\t\t\t\t\t\t//AC_COMPCTRL_HYST | //enable hysterisis\n\t\t\t\t\t\t\tAC_COMPCTRL_MUXPOS_PIN2 | //non-inverting is AIN[2]\n\t\t\t\t\t\t\tAC_COMPCTRL_MUXNEG_PIN3 | //inverting pin is AIN[3]\n\t\t\t\t\t\t\tAC_COMPCTRL_INTSEL_RISING | //interrupt on the rising edge (TODO we might want on both edges)\n\t\t\t\t\t\t\tAC_COMPCTRL_SPEED_HIGH |\n\t\t\t\t\t\t\t//AC_COMPCTRL_SWAP |\n\t\t\t\t\t\t\tAC_COMPCTRL_ENABLE;  //set to high speed mode, we don't care about power consumption\n\twhile ( AC->STATUSB.bit.SYNCBUSY == 1 ) ;\n\n\t//enable the comparator\n\tAC->CTRLA.reg=AC_CTRLA_ENABLE;\n\twhile ( AC->STATUSB.bit.SYNCBUSY == 1 );\n\n\n\n\tAC->INTENSET.bit.COMP0=1;\n\tAC->INTENSET.bit.COMP1=1;\n\tNVIC_EnableIRQ(AC_IRQn); //enable the comparator interrupt\n}\n */\n\nstatic __inline__ void syncADC() __attribute__((always_inline, unused));\nstatic void syncADC() {\n\tvolatile int32_t t0=100;\n\twhile ((ADC->STATUS.bit.SYNCBUSY == 1))// && t0>0)\n\t{\n\t\tt0--;\n\t\tif (t0>0)\n\t\t{\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (t0<=0)\n\t{\n\t\tERROR(\"sync ADC timeout\");\n\t}\n}\n\n\n\n\nstatic uint32_t ADCRead(uint32_t ulPin)\n{\n\tuint32_t valueRead = 0;\n\tuint32_t gainValue=0;\n\n\tif ( ulPin <= 5 ) // turn '0' -> 'A0'\n\t{\n\t\tulPin += A0 ;\n\t}\n\tif (ulPin == 6) ulPin = PIN_A6;\n\tif (ulPin == 7) ulPin = PIN_A7;\n\n\tpinPeripheral(PIN_A4, PIO_ANALOG);\n\n\tpinPeripheral(ulPin, PIO_ANALOG);\n\n\tsyncADC();\n\tADC->CTRLB.reg = ADC_CTRLB_PRESCALER_DIV32 |    // Divide Clock by 512.\n\t\t\tADC_CTRLB_RESSEL_12BIT;         // 10 bits resolution as default\n\t//  syncADC();\n\t// ADC->INPUTCTRL.reg = 0;\n\n\t//  syncADC();\n\t//  ADC->INPUTCTRL.bit.MUXNEG=  ADC_INPUTCTRL_MUXNEG_GND;//g_APinDescription[ulPin].ulADCChannelNumber; //ADC_INPUTCTRL_MUXNEG_GND;\n\t//ADC_INPUTCTRL_MUXNEG_IOGND; //ADC_INPUTCTRL_MUXNEG_PIN5;   // No Negative input (Internal Ground)\n\n\n\tsyncADC();\n\tADC->INPUTCTRL.bit.MUXPOS =  g_APinDescription[ulPin].ulADCChannelNumber;//ADC_INPUTCTRL_MUXPOS_DAC;// g_APinDescription[ulPin].ulADCChannelNumber; // Selection for the positive ADC input\n\n\n\tsyncADC();\n\tADC->INPUTCTRL.bit.GAIN = 0xF; //0x0F == gain of 1/2\n\n\tsyncADC();\n\tADC->REFCTRL.reg=ADC_REFCTRL_REFSEL_INTVCC1; //set the ADC reference to 1/2VDDANA\n\n\tsyncADC();\n\tADC->SAMPCTRL.reg=0x02;\n\t/*\n\t * Bit 1 ENABLE: Enable\n\t *   0: The ADC is disabled.\n\t *   1: The ADC is enabled.\n\t * Due to synchronization, there is a delay from writing CTRLA.ENABLE until the peripheral is enabled/disabled. The\n\t * value written to CTRL.ENABLE will read back immediately and the Synchronization Busy bit in the Status register\n\t * (STATUS.SYNCBUSY) will be set. STATUS.SYNCBUSY will be cleared when the operation is complete.\n\t *\n\t * Before enabling the ADC, the asynchronous clock source must be selected and enabled, and the ADC reference must be\n\t * configured. The first conversion after the reference is changed must not be used.\n\t */\n\n\tsyncADC();\n\tADC->CTRLA.bit.ENABLE = 0x01;             // Enable ADC\n\n\n\t// Clear the Data Ready flag\n\tsyncADC();\n\tADC->INTFLAG.bit.RESRDY = 1;\n\t// Start conversion\n\tsyncADC();\n\tADC->SWTRIG.bit.START = 1;\n\n\n\t// wait for conversion to be done\n\twhile ( ADC->INTFLAG.bit.RESRDY == 0 );   // Waiting for conversion to complete\n\n\t// Clear the Data Ready flag\n\tsyncADC();\n\tADC->INTFLAG.bit.RESRDY = 1;\n\t// Start conversion again, since The first conversion after the reference is changed must not be used.\n\tsyncADC();\n\tADC->SWTRIG.bit.START = 1;\n\n\twhile ( ADC->INTFLAG.bit.RESRDY == 0 );   // Waiting for conversion to complete\n\tvalueRead = ADC->RESULT.reg;\n\n\t//\tsyncADC();\n\t//\tADC->CTRLA.bit.ENABLE = 0x00;             // Disable ADC\n\t//\tsyncADC();\n\n\treturn valueRead; //mapResolution(valueRead, _ADCResolution, _readResolution);\n\n}\n\nint32_t fastADCRead(uint32_t ulPin)\n{\n\tint32_t valueRead;\n\tif ( ulPin <= 5 ) // turn '0' -> 'A0'\n\t{\n\t\tulPin += A0 ;\n\t}\n\tif (ulPin == 6) ulPin = PIN_A6;\n\tif (ulPin == 7) ulPin = PIN_A7;\n\tsyncADC();\n\tADC->INPUTCTRL.bit.MUXPOS =  g_APinDescription[ulPin].ulADCChannelNumber;//ADC_INPUTCTRL_MUXPOS_DAC;// g_APinDescription[ulPin].ulADCChannelNumber; // Selection for the positive ADC input\n\t// Clear the Data Ready flag\n\tsyncADC();\n\tADC->INTFLAG.bit.RESRDY = 1;\n\t// Start conversion again, since The first conversion after the reference is changed must not be used.\n\tsyncADC();\n\tADC->SWTRIG.bit.START = 1;\n\n\twhile ( ADC->INTFLAG.bit.RESRDY == 0 );   // Waiting for conversion to complete\n\tvalueRead = ADC->RESULT.reg;\n\treturn valueRead;\n}\n\nint32_t GetMeanAdc(uint16_t pin, uint16_t samples)\n{\n\tint32_t i=0;\n\tint32_t mean=0;\n\tint32_t adc;\n\twhile (i<samples)\n\t{\n\t\tadc=ADCRead(pin);\n\t\tmean+=adc;\n\t\ti++;\n\t}\n\treturn mean/i;\n}\n\nstatic uint32_t ADCStart(uint32_t ulPin)\n{\n\tuint32_t valueRead = 0;\n\tuint32_t gainValue=0;\n\n\tif ( ulPin <= 5 ) // turn '0' -> 'A0'\n\t{\n\t\tulPin += A0 ;\n\t}\n\tif (ulPin == 6) ulPin = PIN_A6;\n\tif (ulPin == 7) ulPin = PIN_A7;\n\n\tpinPeripheral(PIN_A4, PIO_ANALOG);\n\n\tpinPeripheral(ulPin, PIO_ANALOG);\n\n\tsyncADC();\n\tADC->CTRLB.reg = ADC_CTRLB_PRESCALER_DIV64 |    // Divide Clock by 512.\n\t\t\tADC_CTRLB_RESSEL_12BIT;         // 10 bits resolution as default\n\t//  syncADC();\n\t// ADC->INPUTCTRL.reg = 0;\n\n\t//  syncADC();\n\t//  ADC->INPUTCTRL.bit.MUXNEG=  ADC_INPUTCTRL_MUXNEG_GND;//g_APinDescription[ulPin].ulADCChannelNumber; //ADC_INPUTCTRL_MUXNEG_GND;\n\t//ADC_INPUTCTRL_MUXNEG_IOGND; //ADC_INPUTCTRL_MUXNEG_PIN5;   // No Negative input (Internal Ground)\n\n\tsyncADC();\n\tADC->INPUTCTRL.bit.MUXPOS =  g_APinDescription[ulPin].ulADCChannelNumber;//ADC_INPUTCTRL_MUXPOS_DAC;// g_APinDescription[ulPin].ulADCChannelNumber; // Selection for the positive ADC input\n\n\tsyncADC();\n\tADC->INPUTCTRL.bit.INPUTSCAN=0;\n\t//\n\t//\tswitch (gain)\n\t//\t{\n\t//\t\tcase 1:\n\t//\t\t\tgainValue=ADC_INPUTCTRL_GAIN_1X_Val;\n\t//\t\t\tbreak;\n\t//\t\tcase 2:\n\t//\t\t\tgainValue=ADC_INPUTCTRL_GAIN_2X_Val;\n\t//\t\t\tbreak;\n\t//\t\tcase 4:\n\t//\t\t\tgainValue=ADC_INPUTCTRL_GAIN_4X_Val;\n\t//\t\t\tbreak;\n\t//\t\tcase 8:\n\t//\t\t\tgainValue=ADC_INPUTCTRL_GAIN_8X_Val;\n\t//\t\t\tbreak;\n\t//\t\tcase 16:\n\t//\t\t\tgainValue=ADC_INPUTCTRL_GAIN_16X_Val;\n\t//\t\t\tbreak;\n\t//\t\tdefault:\n\t//\t\t\tgainValue=ADC_INPUTCTRL_GAIN_1X_Val;\n\t//\t\t\tbreak;\n\t//\t}\n\n\t//  syncADC();\n\t// ADC->CTRLB.bit.DIFFMODE = 0; //set to differential mode\n\n\tsyncADC();\n\tADC->INPUTCTRL.bit.GAIN = 0xF; //0x0F == gain of 1/2\n\n\t// syncADC();\n\t// ADC->AVGCTRL.reg=5;\n\n\tsyncADC();\n\tADC->REFCTRL.reg=ADC_REFCTRL_REFSEL_INTVCC1; //set the ADC reference to 1/2VDDANA\n\n\tsyncADC();\n\tADC->SAMPCTRL.reg=0x0F;\n\t/*\n\t * Bit 1 ENABLE: Enable\n\t *   0: The ADC is disabled.\n\t *   1: The ADC is enabled.\n\t * Due to synchronization, there is a delay from writing CTRLA.ENABLE until the peripheral is enabled/disabled. The\n\t * value written to CTRL.ENABLE will read back immediately and the Synchronization Busy bit in the Status register\n\t * (STATUS.SYNCBUSY) will be set. STATUS.SYNCBUSY will be cleared when the operation is complete.\n\t *\n\t * Before enabling the ADC, the asynchronous clock source must be selected and enabled, and the ADC reference must be\n\t * configured. The first conversion after the reference is changed must not be used.\n\t */\n\tsyncADC();\n\tADC->CTRLA.bit.ENABLE = 0x01;             // Enable ADC\n\n\n\t//Setup up for ISR\n\tADC->INTENCLR.reg=0x0F;\n\tADC->INTENSET.bit.RESRDY=1;\n\n\tNVIC_SetPriority(ADC_IRQn, 3);\n\n\n\t// Clear the Data Ready flag\n\tADC->INTFLAG.bit.RESRDY = 1;\n\n\t// Start conversion\n\tsyncADC();\n\tADC->SWTRIG.bit.START = 1;\n\n\n\n\t// Start conversion again, since The first conversion after the reference is changed must not be used.\n\t//syncADC();\n\t//ADC->SWTRIG.bit.START = 1;\n\n\t//ADC->INTENSET.bit.RESRDY=1;\n\n\t//  // Store the value\n\twhile ( ADC->INTFLAG.bit.RESRDY == 0 );   // Waiting for conversion to complete\n\t//  valueRead = ADC->RESULT.reg;\n\t//\n\t//  syncADC();\n\t//  ADC->CTRLA.bit.ENABLE = 0x00;             // Disable ADC\n\t//  syncADC();\n\n\tuint32_t reg;\n\n\tsyncADC();\n\treg=ADC->CTRLA.reg;\n\tLOG(\"ADC CTRLA 0x%04X\",reg);\n\n\tsyncADC();\n\treg=ADC->REFCTRL.reg;\n\tLOG(\"ADC REFCTRL 0x%04X\",reg);\n\n\tsyncADC();\n\treg=ADC->AVGCTRL.reg;\n\tLOG(\"ADC AVGCTRL 0x%04X\",reg);\n\n\tsyncADC();\n\treg=ADC->SAMPCTRL.reg;\n\tLOG(\"ADC SAMPCTRL 0x%04X\",reg);\n\n\tsyncADC();\n\treg=ADC->CTRLB.reg;\n\tLOG(\"ADC CTRLB 0x%04X\",reg);\n\n\tsyncADC();\n\treg=ADC->INPUTCTRL.reg;\n\tLOG(\"ADC INPUTCTRL 0x%04X\",reg);\n\n\tsyncADC();\n\treg=ADC->GAINCORR.reg;\n\tLOG(\"ADC GAINCORR 0x%04X\",reg);\n\n\tsyncADC();\n\treg=ADC->OFFSETCORR.reg;\n\tLOG(\"ADC OFFSETCORR 0x%04X\",reg);\n\n\tsyncADC();\n\treg=ADC->CALIB.reg;\n\tLOG(\"ADC CALIB 0x%04X\",reg);\n\n\n\t// Enable InterruptVector\n\tNVIC_EnableIRQ(ADC_IRQn);\n\n\t// Clear the Data Ready flag\n\tADC->INTFLAG.bit.RESRDY = 1;\n\n\n\t// Start conversion\n\tsyncADC();\n\tADC->SWTRIG.bit.START = 1;\n\n\treturn 0;//valueRead; //mapResolution(valueRead, _ADCResolution, _readResolution);\n}\nvoid ADC_Handler(void)\n{\n\n\tuint16_t channel;\n\tuint16_t value;\n\tstatic uint16_t lastChannel=0;\n\n\t//static int state=0;\n\tYELLOW_LED(1);\n\t//state=(state+1)&0x01;\n\n\tvalue=ADC->RESULT.reg;\n\tchannel=ADC->INPUTCTRL.bit.MUXPOS;// + ADC->INPUTCTRL.bit.INPUTOFFSET;\n\n\t//LOG(\"channel is %d %d\", lastChannel,value);\n\n\tFetDriver::ADC_Callback(lastChannel,value);\n\tlastChannel=channel;\n\n\tif (channel == g_APinDescription[ISENSE_FET_B].ulADCChannelNumber)\n\t{\n\t\tsyncADC();\n\t\tADC->INPUTCTRL.bit.MUXPOS =  g_APinDescription[ISENSE_FET_A].ulADCChannelNumber;\n\t} else\n\t{\n\t\tsyncADC();\n\t\tADC->INPUTCTRL.bit.MUXPOS =  g_APinDescription[ISENSE_FET_B].ulADCChannelNumber;\n\t}\n\n\t//LOG(\"channel is %d %d\", ADC->INPUTCTRL.bit.MUXPOS ,value);\n\t//syncADC();\n\tADC->INTFLAG.bit.RESRDY = 1;\n\t//syncADC();\n\tADC->SWTRIG.bit.START = 1;\n\tYELLOW_LED(0);\n\t//state=(state+1)&0x01;\n\n}\n\n\n\nvoid FetDriver::ADC_Callback(uint16_t channel, uint16_t value)\n{\n\n\t//ptrInstance->begin();\n\tif (ptrInstance==NULL)\n\t{\n\t\treturn;\n\t}\n\tptrInstance->ctrl_update(channel,value);\n\n}\n\nvoid FetDriver::ctrl_update(uint16_t channel, uint16_t value)\n{\n\tint32_t x,error;\n\n\tif (channel ==  g_APinDescription[ISENSE_FET_A].ulADCChannelNumber)\n\t{\n\t\tstatic int32_t iterm;\n\n\t\tx=value-coilA_Zero;\n\t\terror=coilA_SetPoint-x;\n\t\tcoilA_error=x;\n\t\titerm+=error;\n\n\t\tx=error*15;//+iterm/10;\n\t\tx=x/1024;\n\t\tcoilA_value+=x;\n\n//\t\tif (error>0)\n//\t\t\tcoilA_value++;\n//\t\t\telse\n//\t\t\t\tcoilA_value--;\n//\n//\t\tcoilA_value+= iterm/1024;\n\t\tcoilA_PWM(coilA_value);\n//\t\tif (error>0)\n//\t\t{\n//\t\t\tcoilA(COIL_FORWARD);\n//\t\t}else\n//\t\t{\n//\t\t\tcoilA(COIL_BRAKE);\n//\t\t}\n\n\t}\n\n\tif (channel ==  g_APinDescription[ISENSE_FET_B].ulADCChannelNumber)\n\t{\n\t\tstatic int32_t itermB;\n\t\tx=value-coilB_Zero;\n\t\terror=coilB_SetPoint-x;\n\t\tcoilB_error=error;\n\n\n\t\tx=error*15+itermB/10;\n\t\tx=x/1024;\n\t\tcoilB_value+=x;\n\n\t\t//coilB_PWM(coilB_value);\n//\t\tif (error>0)\n//\t\t{\n//\t\t\tcoilB(COIL_FORWARD);\n//\t\t}else\n//\t\t{\n//\t\t\tcoilB(COIL_BRAKE);\n//\t\t}\n\n\t}\n\treturn;\n\n\t//LOG(\"channel is %d %d\", channel,value);\n\tif (channel ==  g_APinDescription[ISENSE_FET_B].ulADCChannelNumber)\n\t{\n\t\tstatic int32_t ib=0;\n\t\tstatic int32_t meanb=0;\n\t\tint32_t error,u,de;\n\t\tstatic int32_t itermb=0;;\n\t\tstatic int32_t lastErrorb=0;\n\n\t\tadc=value;\n\t\tx=value-coilB_Zero;\n\t\tif (coilB_Zero==-1)\n\t\t{\n\t\t\tif(ib<FET_DRIVER_NUM_ZERO_AVG)\n\t\t\t{\n\t\t\t\tmeanb=meanb+x;\n\t\t\t\tib++;\n\t\t\t}else\n\t\t\t{\n\t\t\t\tcoilB_Zero=meanb/ib;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\terror=coilB_SetPoint-x;\n\n\t\t//\t\tif (error>0)\n\t\t//\t\t\tu=1;\n\t\t//\t\telse\n\t\t//\t\t\tu=-1;\n\n\t\tde=error-lastErrorb;\n\t\tlastErrorb=error;\n\n\t\tif (ABS(error)<50)\n\t\t{\n\t\t\titermb=itermb+1*error;\n\t\t}else\n\t\t{\n\t\t\titermb=0;\n\t\t}\n\t\tu=error*320 + itermb +100*de;\n\t\tu=u/16382;\n\t\tif (u>10) u=10;\n\t\tif (u<-10) u=-10;\n\n\t\tcoilB_value+=u;;\n\t\t//LOG(\"coil value %d, %d\",coilB_value,u);\n\t\tcoilB_value=MIN(coilB_value,(int32_t)(F_CPU/FET_DRIVER_FREQ));\n\t\tcoilB_value=MAX(coilB_value,(int32_t)(-(F_CPU/FET_DRIVER_FREQ)));\n\n\t\tcoilB_PWM(coilB_value);\n\n\t\treturn;\n\t}\n\n\tif (channel ==  g_APinDescription[ISENSE_FET_A].ulADCChannelNumber)\n\t{\n\t\tstatic int32_t i=0;\n\t\tstatic int32_t mean=0;\n\t\tint32_t error,u,de;\n\t\tstatic int32_t iterm=0;;\n\t\tstatic int32_t lastError=0;\n\n\n\t\tx=value-coilA_Zero;\n\t\tif (coilA_Zero==-1)\n\t\t{\n\t\t\tif(i<FET_DRIVER_NUM_ZERO_AVG)\n\t\t\t{\n\t\t\t\tmean=mean+x;\n\t\t\t\ti++;\n\t\t\t}else\n\t\t\t{\n\t\t\t\tcoilA_Zero=mean/i;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\terror=coilA_SetPoint-x;\n\t\tde=error-lastError;\n\t\tlastError=error;\n\n\t\tif (ABS(error)<50)\n\t\t{\n\t\t\titerm=iterm+1*error;\n\t\t}else\n\t\t{\n\t\t\titerm=0;\n\t\t}\n\t\tu=error*320 + iterm +100*de;\n\t\tu=u/16382;\n\t\tif (u>10) u=10;\n\t\tif (u<-10) u=-10;\n\n\t\tcoilA_value+=u;\n\t\t//LOG(\"coil value %d, %d\",coilB_value,u);\n\t\tcoilA_value=MIN(coilA_value,(int32_t)(F_CPU/FET_DRIVER_FREQ));\n\t\tcoilA_value=MAX(coilA_value,(int32_t)(-(F_CPU/FET_DRIVER_FREQ)));\n\n\t\tcoilA_PWM(coilA_value);\n\t\treturn;\n\t}\n\n}\n\n\nvoid FetDriver::measureCoilB_zero(void)\n{\n\tcoilB_Zero=GetMeanAdc(ISENSE_FET_B,FET_DRIVER_NUM_ZERO_AVG);\n\tLOG(\"Coil B Zero is %d\",coilB_Zero);\n\treturn;\n}\n\nvoid FetDriver::measureCoilA_zero(void)\n{\n\tcoilA_Zero=GetMeanAdc(ISENSE_FET_A,FET_DRIVER_NUM_ZERO_AVG);\n\tLOG(\"Coil A Zero is %d\",coilA_Zero);\n\treturn;\n}\n\n\nvoid FetDriver::CalTableA(int32_t maxMA)\n{\n\n\tint16_t table2[512]={0};\n\tint32_t pwm=0;\n\tint32_t mA=0;\n\tint i;\n\n\n\twhile (mA>-maxMA)\n\t{\n\t\tint32_t adc;\n\t\t//LOG(\"Running %d\",pwm);\n\t\tadc=GetMeanAdc(ISENSE_FET_A,10)-coilA_Zero;\n\t\t//LOG(\"ADC is %d\",adc);\n\t\tmA=FET_ADC_TO_MA(adc);\n\t\t//LOG(\"mA is %d, ADC %d\",mA,ADC);\n\t\tpwm=pwm-1;\n\n\t\tif (coilA_PWM(pwm)==1)\n\t\t{\n\t\t\tERROR(\"CoilA PWM maxed\");\n\t\t\tbreak;\n\t\t}\n\t\t//delay(5);\n\t}\n\n\t//LOG(\"First PWM is %d %d\",pwm, mA);\n\tPWM_Table_A[0]=pwm;\n\ttable2[0]=mA;\n\ti=1;\n\twhile (i<512)\n\t{\n\t\tint32_t adc;\n\t\tadc=GetMeanAdc(ISENSE_FET_A,10)-coilA_Zero;\n\t\tmA=FET_ADC_TO_MA(adc);\n\n\t\t//LOG(\"PWM %d, %d %d\",i,mA,pwm);\n\t\tif (mA>((i-255)*maxMA/256))\n\t\t{\n\t\t\tPWM_Table_A[i]=pwm;\n\t\t\ttable2[i]=mA;\n\t\t\ti++;\n\t\t}else\n\t\t{\n\t\t\tpwm=pwm+1;\n\t\t\tcoilA_PWM(pwm);\n\t\t\t//delay(5);\n\t\t}\n\t}\n\tcoilA_PWM(0);\n\n\tSerial.print(\"\\n\\r TABLE A \\n\\r\");;\n\tfor (i=0; i<512; i++)\n\t{\n\t\tSerial.print(PWM_Table_A[i]);\n\t\tSerial.print(\",\");\n\t}\n\tSerial.print(\"\\n\\r\");\n\n\tSerial.print(\"\\n\\r\");\n\tfor (i=0; i<512; i++)\n\t{\n\t\tSerial.print(table2[i]);\n\t\tSerial.print(\",\");\n\t}\n\tSerial.print(\"\\n\\r\");\n}\n\nvoid FetDriver::CalTableB(int32_t maxMA)\n{\n\n\tint16_t table2[512]={0};\n\tint32_t pwm=0;\n\tint32_t mA=0;\n\tint i;\n\n\twhile (mA>-maxMA)\n\t{\n\t\tint32_t adc;\n\t\tadc=GetMeanAdc(ISENSE_FET_B,10)-coilB_Zero;\n\t\tmA=FET_ADC_TO_MA(adc);\n\t\tpwm=pwm-1;\n\t\tcoilB_PWM(pwm);\n\t\t//delay(5);\n\t}\n\n\t//LOG(\"First PWM is %d %d\",pwm, mA);\n\tPWM_Table_B[0]=pwm;\n\ttable2[0]=mA;\n\ti=1;\n\twhile (i<512)\n\t{\n\t\tint32_t adc;\n\t\tadc=GetMeanAdc(ISENSE_FET_B,10)-coilB_Zero;\n\t\tmA=FET_ADC_TO_MA(adc);\n\n\t\t//LOG(\"PWM %d, %d %d\",i,mA,pwm);\n\t\tif (mA>((i-255)*maxMA/256))\n\t\t{\n\t\t\tPWM_Table_B[i]=pwm;\n\t\t\ttable2[i]=mA;\n\t\t\ti++;\n\t\t}else\n\t\t{\n\t\t\tpwm=pwm+1;\n\t\t\tcoilB_PWM(pwm);\n\t\t\t//delay(5);\n\t\t}\n\t}\n\n\tcoilB_PWM(0);\n\tSerial.print(\"\\n\\r TABLE B \\n\\r\");\n\tfor (i=0; i<512; i++)\n\t{\n\t\tSerial.print(PWM_Table_B[i]);\n\t\tSerial.print(\",\");\n\t}\n\tSerial.print(\"\\n\\r\");\n\n\tSerial.print(\"\\n\\r\");\n\tfor (i=0; i<512; i++)\n\t{\n\t\tSerial.print(table2[i]);\n\t\tSerial.print(\",\");\n\t}\n\tSerial.print(\"\\n\\r\");\n}\n\n\nvoid FetDriver::begin()\n{\n\tint16_t i;\n\tuint32_t t0;\n\tint32_t i0=0;\n\tuint32_t zero,x,k;\n\tint32_t max_mA;\n\n\n\tptrInstance=(FetDriver *)this;\n\t//enable 1V reference\n\tSYSCTRL->VREF.reg |= SYSCTRL_VREF_BGOUTEN;\n\tADCRead(ISENSE_FET_A); //setup the adc with fast timing\n\t//nt32_t min,max,avg;\n\t//Setup the FET inputs\n\tGPIO_OUTPUT(PIN_FET_IN1);\n\tGPIO_OUTPUT(PIN_FET_IN2);\n\tGPIO_OUTPUT(PIN_FET_IN3);\n\tGPIO_OUTPUT(PIN_FET_IN4);\n\tGPIO_OUTPUT(PIN_FET_ENABLE);\n\tGPIO_HIGH(PIN_FET_ENABLE);\n\n\t//setup the Pin peripheral setting correct\n\tpinPeripheral(PIN_FET_IN2, PIO_TIMER_ALT); //TCC0 WO[7]\n\tpinPeripheral(PIN_FET_IN1, PIO_TIMER_ALT);\n\tSET_PIN_PERHERIAL(PIN_FET_IN4, PIO_TIMER_ALT); //TCC0 WO[7]\n\tSET_PIN_PERHERIAL(PIN_FET_IN3, PIO_TIMER_ALT);\n\n\tpinPeripheral(ISENSE_FET_A, PIO_ANALOG);  //AIN[0]\n\tpinPeripheral(ISENSE_FET_B, PIO_ANALOG);  //AIN[2]\n\n\tenableTCC0();\n\tcoilB_PWM(0);\n\tcoilA_PWM(0);\n\tdelay(100);\n\tmeasureCoilA_zero();\n\tmeasureCoilB_zero();\n\n\n//\tADCStart(ISENSE_FET_A);\n\n\n\t//return;\n//\twhile(1)\n//\t{\n//\t\tLOG(\"tick %d %d\", TCC0->CC[1].reg,TCC0->CC[0].reg);\n//\t\tLOG(\"%d %d\",coilA_error,coilB_error);\n//\t}\n\n//\tuint16_t data[1000];\n//\t\tADCRead(ISENSE_FET_A);\n//\n//\t\tt0=micros();\n//\t\tGPIO_LOW(PIN_FET_IN2);\n//\t\t\t\tGPIO_GPIO_OUTPUT(PIN_FET_IN2);\n//\t\t\t\tGPIO_HIGH(PIN_FET_IN1);\n//\t\t\t\tGPIO_GPIO_OUTPUT(PIN_FET_IN1);\n//\n//\t\tfor (i=0; i<1000; i++)\n//\t\t{\n//\t\t\tdata[i]=fastADCRead(ISENSE_FET_A);\n//\t\t}\n//\t\tcoilA_PWM(0);\n//\n//\t\tt0=micros()-t0;\n//\n//\t\tSerial.print(\"\\n\\r Step response \\n\\r\");\n//\t\tSerial.print(t0);\n//\n//\t\tSerial.print(\"\\n\\r Step response \\n\\r\");\n//\t\tfor (i=0; i<1000; i++)\n//\t\t{\n//\t\t\tSerial.print(data[i]);\n//\t\t\tSerial.print(\",\");\n//\t\t}\n//\t\tSerial.print(\"\\n\\r\");\n//\n//\t\twhile(1)\n//\t\t{\n//\n//\t\t}\n\tmax_mA=NVM->motorParams.currentMa;\n\tWARNING(\"Maximum current is %d\",max_mA);\n\n\n\tif (NVM->motorParams.parametersVaild && max_mA!=0)\n\t{\n\t\tCalTableA(max_mA);\n\t\tCalTableB(max_mA);\n\n\t}else\n\t{\n\t\tWARNING(\"NVM is not correct default to 1500mA\");\n\t\tmax_mA=1500;\n\t\tWARNING(\"calibrating phase A %dmA\",max_mA);\n\t\tCalTableA(max_mA);\n\t\tWARNING(\"calibrating phase B %dmA\",max_mA);\n\t\tCalTableB(max_mA);\n\n\t}\n\treturn;\n\n\t//coilA_PWM(100);\n\n\tx=0;\n\twhile(1)\n\t{\n\t\t//LOG(\"Trying to move motor %d\",x);\n\t\tdelay(1);\n\t\tmove(x, 1000);\n\t\tx=x+256;\n\n\t}\n\n\n\treturn; // all done\n\n\t//\t//set DAC to mid level\n\t//\tsyncDAC();\n\t//\tDAC->DATA.reg = 0x2FF;  // DAC on 10 bits.\n\t//\tsyncDAC();\n\t//\tDAC->CTRLA.bit.ENABLE = 0x01;     // Enable DAC\n\t//\tsyncDAC();\n\n\t//\tWARNING(\"Running ADC ISR test\");\n\t//\tADCRead(3);\n\n\t//LOG(\"coil value %d %d\",coilB_value,coilB_Zero);\n\ti=47;\n\tx=0;\n\twhile(1)\n\t{\n\t\tint32_t adc,value;\n\t\tint32_t mA;\n\n\t\tif (0)\n\t\t{\n\n\t\t\tcoilB_PWM(i);\n\t\t\tdelayMicroseconds(1000);\n\t\t\t//LOG(\"%d\",i);\n\t\t\t//if (i==47 ) delay(50);\n\n\t\t\tif (x==0)\n\t\t\t{\n\t\t\t\ti=i+1;\n\t\t\t\tif (i>200)\n\t\t\t\t{\n\t\t\t\t\tx=1;\n\t\t\t\t\t//i=47;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (x == 1)\n\t\t\t{\n\t\t\t\ti=i-1;\n\t\t\t\tif (i<47)\n\t\t\t\t{\n\t\t\t\t\tx=2;\n\t\t\t\t\ti=-47;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif (x == 2)\n\t\t\t{\n\t\t\t\ti=i-1;\n\t\t\t\tif (i<-200)\n\t\t\t\t{\n\t\t\t\t\tx=3;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (x == 3)\n\t\t\t{\n\t\t\t\ti=i+1;\n\t\t\t\tif (i>-47)\n\t\t\t\t{\n\t\t\t\t\tx=0;\n\t\t\t\t\ti=47;\n\t\t\t\t}\n\t\t\t}\n\t\t}else\n\t\t{\n\n\t\t\tadc=ADCRead(ISENSE_FET_A);\n\t\t\tvalue=adc-coilA_Zero;\n\n\t\t\tmA=(value*2206)/1000;\n\n\n\n\t\t\t//\n\t\t\t//delay(500);\n\t\t\t//NVIC_DisableIRQ(ADC_IRQn);\n\n\t\t\tLOG(\"coil A %d %d, %d \",coilA_Zero, value, mA );\n\n\t\t}\n\t\t//\t\t\tNVIC_DisableIRQ(ADC_IRQn);\n\t\t//\n\t\t//\t\t\tNVIC_EnableIRQ(ADC_IRQn);\n\t}\n\n\tx=0;\n\tfor (k=0; k<128; k++)\n\t{\n\t\tx=x+ADCRead(8);\n\t}\n\tzero=x/32;\n\n\t//setupDAC();\n\t//setDAC(5,5);\n\tenableTCC0();\n\t//setupComparators();\n\n\n\tERROR(\"Enable PWM\");\n\tpinPeripheral(PIN_FET_IN4, PIO_TIMER_ALT); //TCC0 WO[7]\n\n\t//\n\t//\tfor (i=40; i<55; i++)\n\t//\t{\n\t//\t\tcoilB_PWM(i);\n\t//\t\tdelay(200);\n\t//\t\tADCRead(8,16);\n\t//\t\tLOG(\"COMP is 0x%04X \", AC->STATUSA.reg);\n\t//\t\tLOG(\"%d ADC is %d \",i, ADCRead(8,16));\n\t//\t\tYELLOW_LED(0);\n\t//\t}\n\n\t//ADCRead(8,16);\n\t//AC->INTENCLR.bit.COMP1=1;\n\t//coilA_Value=0;\n\n\tcoilB_PWM(0);\n\n\ti=47;\n\tcoilB_PWM(i);\n\twhile(1)\n\t{\n\t\tint32_t x=0,k;\n\t\tcoilB_PWM(i);\n\t\tdelay(3000);\n\t\tfor (k=0; k<128; k++)\n\t\t{\n\t\t\tx=x+ADCRead(8);\n\t\t}\n\t\tx=x/32;\n\t\tLOG(\"%d %d %d\",i,x-zero,(x*3300)/(4096*4));\n\t\tLOG(\"%d\",((x-zero)*5517)/10000);\n\n\t\ti=i+20;\n\t\tif (i>140)\n\t\t{\n\t\t\ti=47;\n\t\t}\n\n\t}\n\t/*\tAC->INTENSET.bit.COMP1=1;\n\twhile(1)\n\t{\n\t\tAC->INTENCLR.bit.COMP1=1;\n\t\tYELLOW_LED(0);\n\t\tAC->INTENSET.bit.COMP1=1;\n\t\tif ((millis()-t0)>10000)\n\t\t{\n\t\t\tint j;\n\t\t\tmin=0xFFFFFF;\n\t\t\tmax=(int16_t)ADCRead(8,16);\n\t\t\tavg=0;\n\t\t\tj=0;\n\t\t\tt0=micros();\n\t\t\twhile( (micros()-t0)<1000)\n\t\t\t{\n\t\t\t\t int16_t valueRead;\n\n\t\t\t\t  valueRead = ADCRead(8,16);\n\n\t\t\t\t  if (valueRead<min)\n\t\t\t\t  {\n\t\t\t\t\t  min=valueRead;\n\t\t\t\t  }\n\t\t\t\t  if (valueRead>max)\n\t\t\t\t  {\n\t\t\t\t\t  max=valueRead;\n\t\t\t\t  }\n\t\t\t\t  avg+=valueRead;\n\t\t\t\t  j++;\n\t\t\t}\n\n\n\t\t\tint32_t ma,x,duty;\n\t\t\tduty=i-45;\n\t\t\tduty=(1000*duty)/(F_CPU/FET_DRIVER_FREQ);\n\n\t\t\tLOG(\"min %d max %d, avg %d j %d, %d\", min, max, (avg*10)/j, j,(avg*10)/j*(1000-duty)/1000);\n\n\t\t\tx=(avg*10)/j*(1000-duty)/1000;\n\t\t\tx=(x*600)/1000+200;\n\n\t\t\tLOG(\"mA %d\\n\\r\",x);\n\n\t\t\tif (i<150)\n\t\t\t{\n\t\t\t\ti=100;\n\t\t\t}else\n\t\t\t{\n\t\t\t\ti=45;\n\t\t\t}\n\t\t\tLOG(\"COMP is 0x%04X \", AC->STATUSA.reg);\n\t\t\tLOG(\"%d ADC is %d %d\",i, ADCRead(8,16),coilA_Value);\n\t\t\tt0=millis();\n\t\t\tAC->INTENCLR.bit.COMP1=1;\n\t\t\tcoilA_Value=0;\n\t\t\tcoilB_PWM(i);\n\t\t\tAC->INTENSET.bit.COMP1=1;\n\t\t}\n\t}\n\t */\n\treturn;\n\n\t//setup the PWM for current on the A4954, set for low current\n\tdigitalWrite(PIN_A4954_VREF12,LOW);\n\tdigitalWrite(PIN_A4954_VREF34,LOW);\n\tpinMode(PIN_A4954_VREF34, OUTPUT);\n\tpinMode(PIN_A4954_VREF12, OUTPUT);\n\n\tenabled=true;\n\tlastStepMicros=0;\n\tforwardRotation=true;\n\n\tenableTCC0();\n\tsetupDAC();\n\t//\n\t//\tWARNING(\"Setting DAC for 500mA output\");\n\t//\tsetDAC((int32_t)((int64_t)1000*(DAC_MAX))/3300,(int32_t)((int64_t)1000*(DAC_MAX))/3300);\n\t//\tbridge1(0);\n\t//\tbridge2(0);\n\t//\twhile(1)\n\t//\t{\n\t//\n\t//\t}\n\treturn;\n}\n\n\n\n\n\n\n\n\nint32_t FetDriver::getCoilB_mA(void)\n{\n\tint32_t adc,ret;\n\t//fastADCRead(ISENSE_FET_B);\n\tadc=(int32_t)fastADCRead(ISENSE_FET_B);\n\tret=FET_ADC_TO_MA(adc-coilB_Zero);\n\t//LOG(\"coilb %d %d\",adc,ret);\n\treturn ret;\n}\nint32_t FetDriver::getCoilA_mA(void)\n{\n\tint32_t adc,ret;\n\t//fastADCRead(ISENSE_FET_A);\n\tadc=(int32_t)fastADCRead(ISENSE_FET_A);\n\tret=FET_ADC_TO_MA(adc-coilA_Zero);\n\t//LOG(\"coila %d %d\",adc,ret);\n\treturn ret;\n}\n\n\n//this is precise move and modulo of A4954_NUM_MICROSTEPS is a full step.\n// stepAngle is in A4954_NUM_MICROSTEPS units..\n// The A4954 has no idea where the motor is, so the calling function has to\n// to tell the A4954 what phase to drive motor coils.\n// A4954_NUM_MICROSTEPS is 256 by default so stepAngle of 1024 is 360 degrees\n// Note you can only move up to +/-A4954_NUM_MICROSTEPS from where you\n// currently are.\nint32_t FetDriver::move(int32_t stepAngle, uint32_t mA)\n{\n\tuint16_t angle;\n\tint32_t cos,sin;\n\tint32_t dacSin,dacCos;\n\tint32_t dacSin_mA,dacCos_mA;\n\tint32_t maxMa;\n\tstatic int32_t last_dacSin_mA=0,last_dacCos_mA=0;;\n\tif (enabled == false)\n\t{\n\t\tWARNING(\"FET Driver disabled\");\n\n\t\t//turn the current off to FETs\n\t\tcoilA_PWM(0);\n\t\tcoilB_PWM(0);\n\n\t\t//float the FET outputs by disabling FET driver.\n\t\tGPIO_LOW(PIN_FET_ENABLE);\n\t\treturn stepAngle;\n\t}\n\tGPIO_HIGH(PIN_FET_ENABLE);\n\n\n\tmaxMa=NVM->motorParams.currentMa;\n\tif (maxMa==0)\n\t{\n\t\tmaxMa=2200;\n\t}\n\n\t//WARNING(\"move %d %d\",stepAngle,mA);\n\t//handle roll overs, could do with modulo operator\n\t//stepAngle=stepAngle%SINE_STEPS;\n\t//\twhile (stepAngle<0)\n\t//\t{\n\t//\t\tstepAngle=stepAngle+SINE_STEPS;\n\t//\t}\n\t//\twhile (stepAngle>=SINE_STEPS)\n\t//\t{\n\t//\t\tstepAngle=stepAngle-SINE_STEPS;\n\t//\t}\n\n\t//figure out our sine Angle\n\t// note our SINE_STEPS is 4x of microsteps for a reason\n\t//angle=(stepAngle+(SINE_STEPS/8)) % SINE_STEPS;\n\tangle=(stepAngle) % SINE_STEPS;\n\t//calculate the sine and cosine of our angle\n\tsin=sine(angle);\n\tcos=cosine(angle);\n\n\t//if we are reverse swap the sign of one of the angels\n\tif (false == forwardRotation)\n\t{\n\t\tcos=-cos;\n\t}\n\n\t//LOG(\"sin/cos %d %d %d\", sin,cos,angle);\n\t//scale sine result by current(mA)\n\tdacSin_mA=((int32_t)mA*(int32_t)(sin))/SINE_MAX;\n\n\t//scale cosine result by current(mA)\n\tdacCos_mA=((int32_t)mA*(int32_t)(cos))/SINE_MAX;\n\n\tcoilA_SetPoint=FET_MA_TO_ADC(dacSin_mA);\n\tcoilB_SetPoint=FET_MA_TO_ADC(dacCos_mA);\n\t//LOG(\"sin/cos %d %d\", dacSin,dacCos);\n\n\t//convert value into 12bit DAC scaled to 3300mA max\n\tdacSin=(int32_t)((int64_t)dacSin_mA*(255))/maxMa;\n\n\t//convert value into 12bit DAC scaled to 3300mA max\n\tdacCos=(int32_t)((int64_t)dacCos_mA*(255))/maxMa;\n\n\t//LOG(\"sin/cos %d %d\", dacSin,dacCos);\n\t//limit the table index to +/-255\n\tdacCos=MIN(dacCos,(int32_t)255);\n\tdacCos=MAX(dacCos,(int32_t)-255);\n\tdacSin=MIN(dacSin,(int32_t)255);\n\tdacSin=MAX(dacSin,(int32_t)-255);\n\n\n\tif ((dacSin_mA-last_dacSin_mA)>200)\n\t{\n\t\tGPIO_LOW(PIN_FET_IN2);\n\t\tPIN_GPIO_OUTPUT(PIN_FET_IN2);\n\t\tGPIO_HIGH(PIN_FET_IN1);\n\t\tPIN_GPIO_OUTPUT(PIN_FET_IN1);\n\t}else if ((dacSin_mA-last_dacSin_mA)<-200)\n\t{\n\t\tGPIO_HIGH(PIN_FET_IN2);\n\t\tPIN_GPIO_OUTPUT(PIN_FET_IN2);\n\t\tGPIO_LOW(PIN_FET_IN1);\n\t\tPIN_GPIO_OUTPUT(PIN_FET_IN1);\n\t}\n\n\tif ((dacCos_mA-last_dacCos_mA)>200)\n\t{\n\t\tGPIO_LOW(PIN_FET_IN4);\n\t\tPIN_GPIO_OUTPUT(PIN_FET_IN4);\n\t\tGPIO_HIGH(PIN_FET_IN3);\n\t\tPIN_GPIO_OUTPUT(PIN_FET_IN3);\n\t}else if ((dacCos_mA-last_dacCos_mA)<-200)\n\t{\n\t\tGPIO_HIGH(PIN_FET_IN4);\n\t\tPIN_GPIO_OUTPUT(PIN_FET_IN4);\n\t\tGPIO_LOW(PIN_FET_IN3);\n\t\tPIN_GPIO_OUTPUT(PIN_FET_IN3);\n\t\t}\n\tdelayMicroseconds(20);\n\tlast_dacSin_mA=dacSin_mA;\n\tlast_dacCos_mA=dacCos_mA;\n\n//\tYELLOW_LED(1);\n//\tuint32_t t0=micros();\n//\tint done=0;\n//\tint32_t a,b;\n//\ta=FET_MA_TO_ADC(dacSin_mA);\n//\tb=FET_MA_TO_ADC(dacCos_mA);\n//\twhile ((micros()-t0)<20 && done!=0x03)\n//\t{\n//\t\tif ( (fastADCRead(ISENSE_FET_A)-a)<FET_MA_TO_ADC(200))\n//\t\t{\n//\t\t\tGPIO_LOW(PIN_FET_IN2);\n//\t\t\tPIN_GPIO_OUTPUT(PIN_FET_IN2);\n//\t\t\tGPIO_HIGH(PIN_FET_IN1);\n//\t\t\tPIN_GPIO_OUTPUT(PIN_FET_IN1);\n//\t\t\t//coilA_PWM(PWM_Table_A[dacSin+255]);\n//\t\t\tdone |=0x01;\n//\t\t}\n//\n//\t\tif ((fastADCRead(ISENSE_FET_A)-a)>FET_MA_TO_ADC(200))\n//\t\t{\n//\t\t\tGPIO_HIGH(PIN_FET_IN2);\n//\t\t\tPIN_GPIO_OUTPUT(PIN_FET_IN2);\n//\t\t\tGPIO_LOW(PIN_FET_IN1);\n//\t\t\tPIN_GPIO_OUTPUT(PIN_FET_IN1);\n//\t\t\tdone |=0x01;\n//\t\t}\n//\t\tif  ((fastADCRead(ISENSE_FET_B)-b)<FET_MA_TO_ADC(200))\n//\t\t{\n//\t\t\tGPIO_LOW(PIN_FET_IN4);\n//\t\t\tPIN_GPIO_OUTPUT(PIN_FET_IN4);\n//\t\t\tGPIO_HIGH(PIN_FET_IN3);\n//\t\t\tPIN_GPIO_OUTPUT(PIN_FET_IN3);\n//\t\t\tdone |=0x02;\n//\t\t}\n//\t\tif  ((fastADCRead(ISENSE_FET_B)-b)>FET_MA_TO_ADC(200))\n//\t\t{\n//\t\t\tGPIO_HIGH(PIN_FET_IN4);\n//\t\t\tPIN_GPIO_OUTPUT(PIN_FET_IN4);\n//\t\t\tGPIO_LOW(PIN_FET_IN3);\n//\t\t\tPIN_GPIO_OUTPUT(PIN_FET_IN3);\n//\t\t\tdone |=0x02;\n//\t\t}\n//\n//\t}\n//\n//\tYELLOW_LED(0);\n\n\n\t//LOG(\"sin/cos %d %d\", dacSin,dacCos);\n\t//loop up the current from table and set the PWM\n\tcoilA_PWM(PWM_Table_A[dacSin+255]);\n\tcoilB_PWM(PWM_Table_B[dacCos+255]);\n\n\tlastStepMicros=micros();\n\treturn stepAngle;\n}\n#pragma GCC pop_options //fast optimization\n\n#endif //NEMA_23_10A_HW\n\n#pragma GCC pop_options\n"
  },
  {
    "path": "firmware/stepper_nano_zero/fet_driver.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#ifndef FET_DRIVER_H_\n#define FET_DRIVER_H_\n\n\n\n#include <Arduino.h>\n#include \"board.h\"\n#include \"angle.h\"\n#include \"sine.h\"\n\n#ifdef NEMA_23_10A_HW\n#define FET_DRIVER_NUM_MICROSTEPS (SINE_STEPS/4) //number of steps to use for microstepping, default is 256\n#define FET_DRIVER_NUM_ZERO_AVG (100)\n\n\n#define FET_ADC_TO_MA(x) (((x)*2537)/1000)\n#define FET_MA_TO_ADC(x) (((x)*1000)/2537)\n//prvent someone for making a mistake with the code\n#if ((FET_DRIVER_NUM_MICROSTEPS*4) != SINE_STEPS)\n#error \"SINE_STEPS must be 4x of Micro steps for the move function\"\n#endif\n\n/*\n *  When it comes to the stepper driver if we use angles\n *  we will always have a rounding error. For example\n *  a 0-65536(360) angle for 1.8 degree step is 327.68 so\n *  if you increment 200 of these as 327 you have a 13.6 error\n *  after one rotation.\n *  If you use floating point the effect is the same but takes longer.\n *\n *  The only error-less accumulation system is to use native units, ie full\n *  steps and microsteps.\n *\n */\n\nclass FetDriver\n{\n\tstatic FetDriver *ptrInstance;\nprivate:\n\tuint32_t lastStepMicros; // time in microseconds that last step happened\n\n\tint32_t PWM_Table_B[512];\n\tint32_t PWM_Table_A[512];\n\n\tbool forwardRotation=true;\n\tvolatile bool enabled=true;\n\n\tvolatile int32_t adc;\n\n\n\tvolatile int32_t coilB_value=0;\n\tvolatile int32_t coilB_Zero=-1;\n\tvolatile int32_t coilB_SetPoint=100;\n\tvolatile int32_t coilB_error=0;\n\n\tvolatile int32_t coilA_value=0;\n\tvolatile int32_t coilA_Zero=-1;\n\tvolatile int32_t coilA_SetPoint=200;\n\tvolatile int32_t coilA_error=0;\n\tvoid ctrl_update(uint16_t channel, uint16_t value);\n\tvoid measureCoilB_zero(void);\n\tvoid measureCoilA_zero(void);\n\tvoid CalTableB(int32_t maxMA);\n\tvoid CalTableA(int32_t maxMA);\n\tint coilA_PWM(int32_t value);\n\tvoid coilB_PWM(int32_t value);\n\tint32_t getCoilB_mA(void);\n\tint32_t getCoilA_mA(void);\npublic:\n\n\tstatic void ADC_Callback(uint16_t channel, uint16_t value);\n\tvoid begin(void);\n\n\t//moves motor where the modulo of A4954_NUM_MICROSTEPS is a full step.\n\tint32_t move(int32_t stepAngle, uint32_t mA);\n\n\tuint32_t microsSinceStep(void) {return micros()-lastStepMicros;};\n\tvoid setRotationDirection(bool forward) {forwardRotation=forward;};\n\n\tvoid enable(bool enable) {enabled=enable;};\n\tvoid limitCurrent(uint8_t x) {return;};\n};\n\n\n#endif //#ifdef NEMA_23_10A_HW\n#endif /* FET_DRIVER_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/ftoa.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include \"board.h\"\n#include \"ftoa.h\"\n/*******************************************************************\n  *  FUNCTION: ftoa\n  *  AUTHOR \t\t= \tTRAMPAS STERN\n  *  FILE \t\t=\tstrio.c\n  *  DATE\t\t=   2/6/2003  4:27:14 PM\n  *\n  *  PARAMETERS: long,*str, int count\n  *\n  *  DESCRIPTION: Convets an float to string\n  *\t\t\tformat 'f', 'E', or 'e'\n  *\n  *\n  *  RETURNS:\n  *\n  * NOTE this code was found on the web and modified to actually work\n  *******************************************************************/\n int ftoa (float x, char *str, char  prec, char format)\n {\n\n \tint ie, i, k, ndig, fstyle;\n \tdouble y;\n \tchar *start;\n\n \tstart=str;\n\n \t//based on percission set number digits\n \tndig=prec+1;\n \tif (prec<0)\n \t\tndig=7;\n \tif (prec>22)\n \t\tndig=23;\n\n \tfstyle = 0;\t//exponent 'e'\n \tif  (format == 'f' || format == 'F')\n \t\tfstyle = 1;\t//normal 'f'\n \tif (format=='g' || format=='G')\n \t\tfstyle=2;\n\n \tie = 0;\n \t/* if x negative, write minus and reverse */\n \tif ( x < 0)\n \t{\n \t  *str++ = '-';\n \t  x = -x;\n \t}\n\n \t//if (x<0.0) then increment by 10 till betwen 1.0 and 10.0\n \tif (x!=0.0)\n \t{\n \t\twhile (x < 1.0)\n \t\t{\n \t\t  x =x* 10.0;\n \t\t  ie--;\n \t\t}\n \t}\n\n    \t//if x>10 then let's shift it down\n \twhile (x >= 10.0)\n \t{\n \t\tx = x*(1.0/10.0);\n \t\tie++;\n \t}\n\n \tif (ABS(ie)>MAX_MANTISA)\n \t{\n \t\tif (fstyle==1)\n \t\t{\n \t\t\tfstyle=0;\n \t\t\tformat='e';\n \t\t\t//ie=2;\n \t\t}\n \t}\n\n\n \t/* in f format, number of digits is related to size */\n \tif (fstyle)\n \t\tndig =ndig + ie;\n\n \tif(prec==0 && ie>ndig && fstyle)\n \t{\n \t\tndig=ie;\n \t}\n\n \t/* round. x is between 1 and 10 and ndig will be printed to\n \t   right of decimal point so rounding is ... */\n \ty=1;\n \tfor (i = 1; i < ndig; i++)\t//find lest significant digit\n \t  y = y *(1.0/10.0); \t\t//multiply by 1/10 is faster than divides\n\n \tx = x+ y *(1.0/2.0);\t\t\t//add rounding\n\n \t/* repair rounding disasters */\n \tif (x >= 10.0)\n \t{\n \t\tx = 1.0;\n \t\tie++;\n \t\tndig++;\n \t}\n\n \t//check and see if the number is less than 1.0\n \tif (fstyle && ie<0)\n \t{\n \t\t*str++ = '0';\n \t\tif (prec!=0)\n \t\t\t*str++ = '.';\n \t\tif (ndig < 0)\n \t\t\tie = ie-ndig; /* limit zeros if underflow */\n \t\tfor (i = -1; i > ie; i--)\n \t\t\t*str++ = '0';\n \t}\n\n \t//for each digit\n \tfor (i=0; i < ndig; i++)\n \t{\n \t\tfloat b;\n \t\tk = x;\t\t\t\t\t\t//k = most significant digit\n \t\t*str++ = k + '0';\t\t\t//output the char representation\n \t\tif (((!fstyle && i==0) || (fstyle && i==ie)) && prec!=0)\n \t\t\t*str++ = '.';\t\t\t//output a decimal point\n \t\tb=(float)k;\n \t\t//multiply by 10 before subtraction to remove\n \t\t//errors from limited number of bits in float.\n \t\tb=b*10.0;\n \t\tx=x*10.0;\n \t\tx =x - b;\t\t\t\t//subtract k from x\n \t\t//b=x+b;\n \t\t//x =x* 10.0;\t\t\t\t\t//get next digit\n \t}\n\n /* now, in estyle,  put out exponent if not zero */\n \tif (!fstyle && ie != 0)\n \t{\n \t\t*str++ = format;\n \t\tif (ie < 0)\t\t//if number has negative exponent\n \t\t{\n \t\t\tie = -ie;\n \t\t\t*str++ = '-';\n \t\t}\n\n \t\t//now we need to convert the exponent to string\n \t\tfor (k=1000; k>ie; k=k/10);\t\t//find the decade of exponent\n\n \t\tfor (; k > 0; k=k/10)\n \t\t{\n \t\t\tchar t;\n \t\t\tt=DIV(ie,k);\n \t\t\t*str++ = t + '0';\n \t\t\tie = ie -(t*k);\n \t\t}\n\n \t}\n \t*str++ = '\\0';\n \treturn (str-start);\t//return string length\n }\n"
  },
  {
    "path": "firmware/stepper_nano_zero/ftoa.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#ifndef FTOA_H_\n#define FTOA_H_\n\n#define MAX_MANTISA (1000)\n\nint ftoa (float x, char *str, char  prec, char format);\n\n\n\n#endif /* FTOA_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/gfxfont.h",
    "content": "// Font structures for newer Adafruit_GFX (1.1 and later).\n// Example fonts are included in 'Fonts' directory.\n// To use a font in your Arduino sketch, #include the corresponding .h\n// file and pass address of GFXfont struct to setFont().  Pass NULL to\n// revert to 'classic' fixed-space bitmap font.\n\n#ifndef _GFXFONT_H_\n#define _GFXFONT_H_\n\ntypedef struct { // Data stored PER GLYPH\n\tuint16_t bitmapOffset;     // Pointer into GFXfont->bitmap\n\tuint8_t  width, height;    // Bitmap dimensions in pixels\n\tuint8_t  xAdvance;         // Distance to advance cursor (x axis)\n\tint8_t   xOffset, yOffset; // Dist from cursor pos to UL corner\n} GFXglyph;\n\ntypedef struct { // Data stored for FONT AS A WHOLE:\n\tuint8_t  *bitmap;      // Glyph bitmaps, concatenated\n\tGFXglyph *glyph;       // Glyph array\n\tuint8_t   first, last; // ASCII extents\n\tuint8_t   yAdvance;    // Newline distance (y axis)\n} GFXfont;\n\n#endif // _GFXFONT_H_\n"
  },
  {
    "path": "firmware/stepper_nano_zero/glcdfont.c",
    "content": "// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.\n// See gfxfont.h for newer custom bitmap font info.\n\n#ifndef FONT5X7_H\n#define FONT5X7_H\n\n#ifdef __AVR__\n #include <avr/io.h>\n #include <avr/pgmspace.h>\n#elif defined(ESP8266)\n #include <pgmspace.h>\n#else\n #define PROGMEM\n#endif\n\n// Standard ASCII 5x7 font\n\nstatic const unsigned char font[] PROGMEM = {\n\t0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x3E, 0x5B, 0x4F, 0x5B, 0x3E,\n\t0x3E, 0x6B, 0x4F, 0x6B, 0x3E,\n\t0x1C, 0x3E, 0x7C, 0x3E, 0x1C,\n\t0x18, 0x3C, 0x7E, 0x3C, 0x18,\n\t0x1C, 0x57, 0x7D, 0x57, 0x1C,\n\t0x1C, 0x5E, 0x7F, 0x5E, 0x1C,\n\t0x00, 0x18, 0x3C, 0x18, 0x00,\n\t0xFF, 0xE7, 0xC3, 0xE7, 0xFF,\n\t0x00, 0x18, 0x24, 0x18, 0x00,\n\t0xFF, 0xE7, 0xDB, 0xE7, 0xFF,\n\t0x30, 0x48, 0x3A, 0x06, 0x0E,\n\t0x26, 0x29, 0x79, 0x29, 0x26,\n\t0x40, 0x7F, 0x05, 0x05, 0x07,\n\t0x40, 0x7F, 0x05, 0x25, 0x3F,\n\t0x5A, 0x3C, 0xE7, 0x3C, 0x5A,\n\t0x7F, 0x3E, 0x1C, 0x1C, 0x08,\n\t0x08, 0x1C, 0x1C, 0x3E, 0x7F,\n\t0x14, 0x22, 0x7F, 0x22, 0x14,\n\t0x5F, 0x5F, 0x00, 0x5F, 0x5F,\n\t0x06, 0x09, 0x7F, 0x01, 0x7F,\n\t0x00, 0x66, 0x89, 0x95, 0x6A,\n\t0x60, 0x60, 0x60, 0x60, 0x60,\n\t0x94, 0xA2, 0xFF, 0xA2, 0x94,\n\t0x08, 0x04, 0x7E, 0x04, 0x08,\n\t0x10, 0x20, 0x7E, 0x20, 0x10,\n\t0x08, 0x08, 0x2A, 0x1C, 0x08,\n\t0x08, 0x1C, 0x2A, 0x08, 0x08,\n\t0x1E, 0x10, 0x10, 0x10, 0x10,\n\t0x0C, 0x1E, 0x0C, 0x1E, 0x0C,\n\t0x30, 0x38, 0x3E, 0x38, 0x30,\n\t0x06, 0x0E, 0x3E, 0x0E, 0x06,\n\t0x00, 0x00, 0x00, 0x00, 0x00,\n\t0x00, 0x00, 0x5F, 0x00, 0x00,\n\t0x00, 0x07, 0x00, 0x07, 0x00,\n\t0x14, 0x7F, 0x14, 0x7F, 0x14,\n\t0x24, 0x2A, 0x7F, 0x2A, 0x12,\n\t0x23, 0x13, 0x08, 0x64, 0x62,\n\t0x36, 0x49, 0x56, 0x20, 0x50,\n\t0x00, 0x08, 0x07, 0x03, 0x00,\n\t0x00, 0x1C, 0x22, 0x41, 0x00,\n\t0x00, 0x41, 0x22, 0x1C, 0x00,\n\t0x2A, 0x1C, 0x7F, 0x1C, 0x2A,\n\t0x08, 0x08, 0x3E, 0x08, 0x08,\n\t0x00, 0x80, 0x70, 0x30, 0x00,\n\t0x08, 0x08, 0x08, 0x08, 0x08,\n\t0x00, 0x00, 0x60, 0x60, 0x00,\n\t0x20, 0x10, 0x08, 0x04, 0x02,\n\t0x3E, 0x51, 0x49, 0x45, 0x3E,\n\t0x00, 0x42, 0x7F, 0x40, 0x00,\n\t0x72, 0x49, 0x49, 0x49, 0x46,\n\t0x21, 0x41, 0x49, 0x4D, 0x33,\n\t0x18, 0x14, 0x12, 0x7F, 0x10,\n\t0x27, 0x45, 0x45, 0x45, 0x39,\n\t0x3C, 0x4A, 0x49, 0x49, 0x31,\n\t0x41, 0x21, 0x11, 0x09, 0x07,\n\t0x36, 0x49, 0x49, 0x49, 0x36,\n\t0x46, 0x49, 0x49, 0x29, 0x1E,\n\t0x00, 0x00, 0x14, 0x00, 0x00,\n\t0x00, 0x40, 0x34, 0x00, 0x00,\n\t0x00, 0x08, 0x14, 0x22, 0x41,\n\t0x14, 0x14, 0x14, 0x14, 0x14,\n\t0x00, 0x41, 0x22, 0x14, 0x08,\n\t0x02, 0x01, 0x59, 0x09, 0x06,\n\t0x3E, 0x41, 0x5D, 0x59, 0x4E,\n\t0x7C, 0x12, 0x11, 0x12, 0x7C,\n\t0x7F, 0x49, 0x49, 0x49, 0x36,\n\t0x3E, 0x41, 0x41, 0x41, 0x22,\n\t0x7F, 0x41, 0x41, 0x41, 0x3E,\n\t0x7F, 0x49, 0x49, 0x49, 0x41,\n\t0x7F, 0x09, 0x09, 0x09, 0x01,\n\t0x3E, 0x41, 0x41, 0x51, 0x73,\n\t0x7F, 0x08, 0x08, 0x08, 0x7F,\n\t0x00, 0x41, 0x7F, 0x41, 0x00,\n\t0x20, 0x40, 0x41, 0x3F, 0x01,\n\t0x7F, 0x08, 0x14, 0x22, 0x41,\n\t0x7F, 0x40, 0x40, 0x40, 0x40,\n\t0x7F, 0x02, 0x1C, 0x02, 0x7F,\n\t0x7F, 0x04, 0x08, 0x10, 0x7F,\n\t0x3E, 0x41, 0x41, 0x41, 0x3E,\n\t0x7F, 0x09, 0x09, 0x09, 0x06,\n\t0x3E, 0x41, 0x51, 0x21, 0x5E,\n\t0x7F, 0x09, 0x19, 0x29, 0x46,\n\t0x26, 0x49, 0x49, 0x49, 0x32,\n\t0x03, 0x01, 0x7F, 0x01, 0x03,\n\t0x3F, 0x40, 0x40, 0x40, 0x3F,\n\t0x1F, 0x20, 0x40, 0x20, 0x1F,\n\t0x3F, 0x40, 0x38, 0x40, 0x3F,\n\t0x63, 0x14, 0x08, 0x14, 0x63,\n\t0x03, 0x04, 0x78, 0x04, 0x03,\n\t0x61, 0x59, 0x49, 0x4D, 0x43,\n\t0x00, 0x7F, 0x41, 0x41, 0x41,\n\t0x02, 0x04, 0x08, 0x10, 0x20,\n\t0x00, 0x41, 0x41, 0x41, 0x7F,\n\t0x04, 0x02, 0x01, 0x02, 0x04,\n\t0x40, 0x40, 0x40, 0x40, 0x40,\n\t0x00, 0x03, 0x07, 0x08, 0x00,\n\t0x20, 0x54, 0x54, 0x78, 0x40,\n\t0x7F, 0x28, 0x44, 0x44, 0x38,\n\t0x38, 0x44, 0x44, 0x44, 0x28,\n\t0x38, 0x44, 0x44, 0x28, 0x7F,\n\t0x38, 0x54, 0x54, 0x54, 0x18,\n\t0x00, 0x08, 0x7E, 0x09, 0x02,\n\t0x18, 0xA4, 0xA4, 0x9C, 0x78,\n\t0x7F, 0x08, 0x04, 0x04, 0x78,\n\t0x00, 0x44, 0x7D, 0x40, 0x00,\n\t0x20, 0x40, 0x40, 0x3D, 0x00,\n\t0x7F, 0x10, 0x28, 0x44, 0x00,\n\t0x00, 0x41, 0x7F, 0x40, 0x00,\n\t0x7C, 0x04, 0x78, 0x04, 0x78,\n\t0x7C, 0x08, 0x04, 0x04, 0x78,\n\t0x38, 0x44, 0x44, 0x44, 0x38,\n\t0xFC, 0x18, 0x24, 0x24, 0x18,\n\t0x18, 0x24, 0x24, 0x18, 0xFC,\n\t0x7C, 0x08, 0x04, 0x04, 0x08,\n\t0x48, 0x54, 0x54, 0x54, 0x24,\n\t0x04, 0x04, 0x3F, 0x44, 0x24,\n\t0x3C, 0x40, 0x40, 0x20, 0x7C,\n\t0x1C, 0x20, 0x40, 0x20, 0x1C,\n\t0x3C, 0x40, 0x30, 0x40, 0x3C,\n\t0x44, 0x28, 0x10, 0x28, 0x44,\n\t0x4C, 0x90, 0x90, 0x90, 0x7C,\n\t0x44, 0x64, 0x54, 0x4C, 0x44,\n\t0x00, 0x08, 0x36, 0x41, 0x00,\n\t0x00, 0x00, 0x77, 0x00, 0x00,\n\t0x00, 0x41, 0x36, 0x08, 0x00,\n\t0x02, 0x01, 0x02, 0x04, 0x02,\n\t0x3C, 0x26, 0x23, 0x26, 0x3C,\n\t0x1E, 0xA1, 0xA1, 0x61, 0x12,\n\t0x3A, 0x40, 0x40, 0x20, 0x7A,\n\t0x38, 0x54, 0x54, 0x55, 0x59,\n\t0x21, 0x55, 0x55, 0x79, 0x41,\n\t0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut\n\t0x21, 0x55, 0x54, 0x78, 0x40,\n\t0x20, 0x54, 0x55, 0x79, 0x40,\n\t0x0C, 0x1E, 0x52, 0x72, 0x12,\n\t0x39, 0x55, 0x55, 0x55, 0x59,\n\t0x39, 0x54, 0x54, 0x54, 0x59,\n\t0x39, 0x55, 0x54, 0x54, 0x58,\n\t0x00, 0x00, 0x45, 0x7C, 0x41,\n\t0x00, 0x02, 0x45, 0x7D, 0x42,\n\t0x00, 0x01, 0x45, 0x7C, 0x40,\n\t0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut\n\t0xF0, 0x28, 0x25, 0x28, 0xF0,\n\t0x7C, 0x54, 0x55, 0x45, 0x00,\n\t0x20, 0x54, 0x54, 0x7C, 0x54,\n\t0x7C, 0x0A, 0x09, 0x7F, 0x49,\n\t0x32, 0x49, 0x49, 0x49, 0x32,\n\t0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut\n\t0x32, 0x4A, 0x48, 0x48, 0x30,\n\t0x3A, 0x41, 0x41, 0x21, 0x7A,\n\t0x3A, 0x42, 0x40, 0x20, 0x78,\n\t0x00, 0x9D, 0xA0, 0xA0, 0x7D,\n\t0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut\n\t0x3D, 0x40, 0x40, 0x40, 0x3D,\n\t0x3C, 0x24, 0xFF, 0x24, 0x24,\n\t0x48, 0x7E, 0x49, 0x43, 0x66,\n\t0x2B, 0x2F, 0xFC, 0x2F, 0x2B,\n\t0xFF, 0x09, 0x29, 0xF6, 0x20,\n\t0xC0, 0x88, 0x7E, 0x09, 0x03,\n\t0x20, 0x54, 0x54, 0x79, 0x41,\n\t0x00, 0x00, 0x44, 0x7D, 0x41,\n\t0x30, 0x48, 0x48, 0x4A, 0x32,\n\t0x38, 0x40, 0x40, 0x22, 0x7A,\n\t0x00, 0x7A, 0x0A, 0x0A, 0x72,\n\t0x7D, 0x0D, 0x19, 0x31, 0x7D,\n\t0x26, 0x29, 0x29, 0x2F, 0x28,\n\t0x26, 0x29, 0x29, 0x29, 0x26,\n\t0x30, 0x48, 0x4D, 0x40, 0x20,\n\t0x38, 0x08, 0x08, 0x08, 0x08,\n\t0x08, 0x08, 0x08, 0x08, 0x38,\n\t0x2F, 0x10, 0xC8, 0xAC, 0xBA,\n\t0x2F, 0x10, 0x28, 0x34, 0xFA,\n\t0x00, 0x00, 0x7B, 0x00, 0x00,\n\t0x08, 0x14, 0x2A, 0x14, 0x22,\n\t0x22, 0x14, 0x2A, 0x14, 0x08,\n\t0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code\n\t0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block\n\t0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block\n\t0x00, 0x00, 0x00, 0xFF, 0x00,\n\t0x10, 0x10, 0x10, 0xFF, 0x00,\n\t0x14, 0x14, 0x14, 0xFF, 0x00,\n\t0x10, 0x10, 0xFF, 0x00, 0xFF,\n\t0x10, 0x10, 0xF0, 0x10, 0xF0,\n\t0x14, 0x14, 0x14, 0xFC, 0x00,\n\t0x14, 0x14, 0xF7, 0x00, 0xFF,\n\t0x00, 0x00, 0xFF, 0x00, 0xFF,\n\t0x14, 0x14, 0xF4, 0x04, 0xFC,\n\t0x14, 0x14, 0x17, 0x10, 0x1F,\n\t0x10, 0x10, 0x1F, 0x10, 0x1F,\n\t0x14, 0x14, 0x14, 0x1F, 0x00,\n\t0x10, 0x10, 0x10, 0xF0, 0x00,\n\t0x00, 0x00, 0x00, 0x1F, 0x10,\n\t0x10, 0x10, 0x10, 0x1F, 0x10,\n\t0x10, 0x10, 0x10, 0xF0, 0x10,\n\t0x00, 0x00, 0x00, 0xFF, 0x10,\n\t0x10, 0x10, 0x10, 0x10, 0x10,\n\t0x10, 0x10, 0x10, 0xFF, 0x10,\n\t0x00, 0x00, 0x00, 0xFF, 0x14,\n\t0x00, 0x00, 0xFF, 0x00, 0xFF,\n\t0x00, 0x00, 0x1F, 0x10, 0x17,\n\t0x00, 0x00, 0xFC, 0x04, 0xF4,\n\t0x14, 0x14, 0x17, 0x10, 0x17,\n\t0x14, 0x14, 0xF4, 0x04, 0xF4,\n\t0x00, 0x00, 0xFF, 0x00, 0xF7,\n\t0x14, 0x14, 0x14, 0x14, 0x14,\n\t0x14, 0x14, 0xF7, 0x00, 0xF7,\n\t0x14, 0x14, 0x14, 0x17, 0x14,\n\t0x10, 0x10, 0x1F, 0x10, 0x1F,\n\t0x14, 0x14, 0x14, 0xF4, 0x14,\n\t0x10, 0x10, 0xF0, 0x10, 0xF0,\n\t0x00, 0x00, 0x1F, 0x10, 0x1F,\n\t0x00, 0x00, 0x00, 0x1F, 0x14,\n\t0x00, 0x00, 0x00, 0xFC, 0x14,\n\t0x00, 0x00, 0xF0, 0x10, 0xF0,\n\t0x10, 0x10, 0xFF, 0x10, 0xFF,\n\t0x14, 0x14, 0x14, 0xFF, 0x14,\n\t0x10, 0x10, 0x10, 0x1F, 0x00,\n\t0x00, 0x00, 0x00, 0xF0, 0x10,\n\t0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\n\t0xF0, 0xF0, 0xF0, 0xF0, 0xF0,\n\t0xFF, 0xFF, 0xFF, 0x00, 0x00,\n\t0x00, 0x00, 0x00, 0xFF, 0xFF,\n\t0x0F, 0x0F, 0x0F, 0x0F, 0x0F,\n\t0x38, 0x44, 0x44, 0x38, 0x44,\n\t0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta\n\t0x7E, 0x02, 0x02, 0x06, 0x06,\n\t0x02, 0x7E, 0x02, 0x7E, 0x02,\n\t0x63, 0x55, 0x49, 0x41, 0x63,\n\t0x38, 0x44, 0x44, 0x3C, 0x04,\n\t0x40, 0x7E, 0x20, 0x1E, 0x20,\n\t0x06, 0x02, 0x7E, 0x02, 0x02,\n\t0x99, 0xA5, 0xE7, 0xA5, 0x99,\n\t0x1C, 0x2A, 0x49, 0x2A, 0x1C,\n\t0x4C, 0x72, 0x01, 0x72, 0x4C,\n\t0x30, 0x4A, 0x4D, 0x4D, 0x30,\n\t0x30, 0x48, 0x78, 0x48, 0x30,\n\t0xBC, 0x62, 0x5A, 0x46, 0x3D,\n\t0x3E, 0x49, 0x49, 0x49, 0x00,\n\t0x7E, 0x01, 0x01, 0x01, 0x7E,\n\t0x2A, 0x2A, 0x2A, 0x2A, 0x2A,\n\t0x44, 0x44, 0x5F, 0x44, 0x44,\n\t0x40, 0x51, 0x4A, 0x44, 0x40,\n\t0x40, 0x44, 0x4A, 0x51, 0x40,\n\t0x00, 0x00, 0xFF, 0x01, 0x03,\n\t0xE0, 0x80, 0xFF, 0x00, 0x00,\n\t0x08, 0x08, 0x6B, 0x6B, 0x08,\n\t0x36, 0x12, 0x36, 0x24, 0x36,\n\t0x06, 0x0F, 0x09, 0x0F, 0x06,\n\t0x00, 0x00, 0x18, 0x18, 0x00,\n\t0x00, 0x00, 0x10, 0x10, 0x00,\n\t0x30, 0x40, 0xFF, 0x01, 0x01,\n\t0x00, 0x1F, 0x01, 0x01, 0x1E,\n\t0x00, 0x19, 0x1D, 0x17, 0x12,\n\t0x00, 0x3C, 0x3C, 0x3C, 0x3C,\n\t0x00, 0x00, 0x00, 0x00, 0x00  // #255 NBSP\n};\n#endif // FONT5X7_H\n"
  },
  {
    "path": "firmware/stepper_nano_zero/nonvolatile.cpp",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include \"nonvolatile.h\"\n#include \"Flash.h\"  //thanks to Kent Larsen for pointing out the lower case error\n#include <Arduino.h>\n\n\n\n\n//we use this so we can hard code calibration table\n// be sure to set the last word as status flag\n// this save time calibrating each time we do a code build\n#ifdef NZS_FAST_CAL\n__attribute__((__aligned__(FLASH_ROW_SIZE))) const uint16_t NVM_flash[16767]={  //allocates 33280 bytes\n#else\n__attribute__((__aligned__(FLASH_ROW_SIZE))) const uint16_t NVM_flash[256]={  //allocates 512 bytes\n#endif\n//59962,60291,60621,60949,61267,61596,61924,62252,62567,62897,63223,63548,63865,64192,64518,64842,65157,65482,274,600,917,1247,1573,1902,2225,2560,2892,3225,3550,3888,4226,4564,4893,5234,5575,5914,6246,6587,6930,7267,7596,7937,8275,8611,8936,9274,9606,9940,10262,10594,10925,11253,11572,11902,12228,12553,12870,13195,13518,13844,14159,14480,14801,15123,15435,15756,16078,16398,16708,17031,17350,17675,17988,18312,18640,18965,19282,19609,19943,20271,20593,20924,21257,21589,21914,22250,22586,22920,23241,23578,23912,24245,24570,24902,25236,25567,25887,26219,26549,26877,27196,27524,27851,28178,28496,28823,29145,29470,29788,30112,30436,30759,31074,31396,31720,32041,32355,32681,33003,33329,33644,33971,34297,34625,34947,35278,35610,35941,36271,36605,36944,37280,37609,37948,38287,38625,38960,39300,39640,39977,40308,40651,40988,41325,41653,41989,42326,42655,42982,43316,43646,43976,44294,44626,44951,45277,45598,45924,46250,46572,46888,47212,47536,47856,48167,48490,48813,49133,49447,49769,50091,50412,50726,51051,51377,51701,52022,52353,52681,53013,53334,53668,53999,54334,54661,54997,55331,55665,55991,56330,56664,57001,57326,57662,57994,58327,58650,58981,59313,59641,\n\n\t\t\t0xFFFF\n};\n\n\n\nstatic_assert (sizeof(nvm_t)<sizeof(NVM_flash), \"nvm_t structure larger than allocated memory\");\n\n\n\n\n//FLASH_ALLOCATE(NVM_flash, sizeof(nvm_t));\n\n\nbool nvmWriteCalTable(void *ptrData, uint32_t size)\n{\n\tbool x=true;\n\tflashWrite(&NVM->CalibrationTable,ptrData,size);\n\treturn true;\n}\n\nbool nvmWrite_sPID(float Kp, float Ki, float Kd)\n{\n\tPIDparams_t pid;\n\n\tpid.Kp=Kp;\n\tpid.Ki=Ki;\n\tpid.Kd=Kd;\n\tpid.parametersVaild=true;\n\n\tflashWrite((void *)&NVM->sPID,&pid,sizeof(pid));\n\treturn true;\n}\n\nbool nvmWrite_vPID(float Kp, float Ki, float Kd)\n{\n\tPIDparams_t pid;\n\n\tpid.Kp=Kp;\n\tpid.Ki=Ki;\n\tpid.Kd=Kd;\n\tpid.parametersVaild=true;\n\n\tflashWrite((void *)&NVM->vPID,&pid,sizeof(pid));\n\treturn true;\n}\n\nbool nvmWrite_pPID(float Kp, float Ki, float Kd)\n{\n\tPIDparams_t pid;\n\n\tpid.Kp=Kp;\n\tpid.Ki=Ki;\n\tpid.Kd=Kd;\n\tpid.parametersVaild=true;\n\n\tflashWrite((void *)&NVM->pPID,&pid,sizeof(pid));\n\treturn true;\n}\n\nbool nvmWriteSystemParms(SystemParams_t &systemParams)\n{\n\tsystemParams.parametersVaild=true;\n\n\tflashWrite((void *)&NVM->SystemParams,&systemParams,sizeof(systemParams));\n\treturn true;\n}\n\nbool nvmWriteMotorParms(MotorParams_t &motorParams)\n{\n\tmotorParams.parametersVaild=true;\n\n\tflashWrite((void *)&NVM->motorParams,&motorParams,sizeof(motorParams));\n\treturn true;\n}\n\nbool nvmErase(void)\n{\n\tbool data=false;\n\tuint16_t cs=0;\n\n\tflashWrite((void *)&NVM->CalibrationTable.status,&data,sizeof(data));\n\tflashWrite((void *)&NVM->sPID.parametersVaild ,&data,sizeof(data));\n\tflashWrite((void *)&NVM->vPID.parametersVaild ,&data,sizeof(data));\n\tflashWrite((void *)&NVM->pPID.parametersVaild ,&data,sizeof(data));\n\tflashWrite((void *)&NVM->motorParams.parametersVaild ,&data,sizeof(data));\n\tflashWrite((void *)&NVM->SystemParams.parametersVaild ,&data,sizeof(data));\n#ifdef NZS_FAST_CAL\n\tflashWrite((void *)&NVM->FastCal.checkSum,&cs,sizeof(cs));\n#endif\n}\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/nonvolatile.h",
    "content": "/**********************************************************************\n\tCopyright (C) 2018  MisfitTech LLC,  All rights reserved.\n\n \tMisfitTech uses a dual license model that allows the software to be used under\n\ta standard GPL open source license, or a commercial license.  The standard GPL\n\tlicense  requires that all software statically linked with MisfitTec Code is\n\talso distributed under the same GPL V2 license terms.  Details of both license\n\toptions follow:\n\n\t- Open source licensing -\n\tMisfitTech is a free download and may be used, modified, evaluated and\n\tdistributed without charge provided the user adheres to version two of the GNU\n\tGeneral Public License (GPL) and does not remove the copyright notice or this\n\ttext.  The GPL V2 text is available on the gnu.org web site\n\n\t- Commercial licensing -\n\tBusinesses and individuals that for commercial or other reasons cannot comply\n\twith the terms of the GPL V2 license must obtain a low cost commercial license\n\tbefore incorporating MisfitTech code into proprietary software for distribution in\n\tany form.  Commercial licenses can be purchased from www.misfittech.net\n\tand do not require any source files to be changed.\n\n\n\tThis code is distributed in the hope that it will be useful.  You cannot\n\tuse MisfitTech's code unless you agree that you use the software 'as is'.\n\tMisfitTech's code is provided WITHOUT ANY WARRANTY; without even the implied\n\twarranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\n\tPURPOSE. MisfitTech LLC disclaims all conditions and terms, be they\n\timplied, expressed, or statutory.\n\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#ifndef __NONVOLATILE__H__\n#define __NONVOLATILE__H__\n\n#include \"calibration.h\"\n#include \"board.h\"\n\n\ntypedef struct {\n\tfloat Kp;\n\tfloat Ki;\n\tfloat Kd;\n\tbool parametersVaild;\n} PIDparams_t;\n\ntypedef struct {\n\tint32_t currentMa;   //maximum current for the motor\n\tint32_t currentHoldMa; //hold current for the motor\n\tint32_t homeMa; //maximum current when error homing\n\tint32_t homeHoldMa; //hold current when error homing\n\tbool motorWiring;  //forward wiring of motor or reverse\n\tint32_t fullStepsPerRotation; //how many full steps per rotation is the motor\n\tbool parametersVaild;\n} MotorParams_t;\n\ntypedef struct {\n\tint32_t microsteps;    //number of microsteps on the dir/step pin interface from host\n\tRotationDir_t dirPinRotation;  //is the direction pin high for clockwise or counterClockWise\n\tint32_t errorLimit;    //error limit before error pin asserts 65536==360degrees\n\tErrorPinMode_t errorPinMode;  //is error pin used for enable, error, or bidirectional\n\tfeedbackCtrl_t controllerMode; //feedback mode for the controller\n\tint32_t homePin; //if greater than zero this is the pin we use trigger home current settings\n\tbool errorLogic; //if high and error will be high on output pin\n\tint32_t homeAngleDelay; //the angle to delay before switching to lower homing current\n\tbool parametersVaild;\n} SystemParams_t;\n\n#ifdef NZS_FAST_CAL\ntypedef struct {\n\tuint16_t angle[16384];\n\tuint16_t checkSum;\n}FastCal_t;\n#endif\n\ntypedef struct {\n\tFlashCalData_t CalibrationTable;\n\t__attribute__((__aligned__(8))) PIDparams_t sPID; //simple PID parameters\n\t__attribute__((__aligned__(8))) PIDparams_t pPID; //position PID parameters\n\t__attribute__((__aligned__(8))) PIDparams_t vPID; //velocity PID parameters\n\t__attribute__((__aligned__(8))) SystemParams_t SystemParams;\n\t__attribute__((__aligned__(8))) MotorParams_t motorParams;\n#ifdef NZS_FAST_CAL\n\t__attribute__((__aligned__(8))) FastCal_t FastCal;\n#endif\n} nvm_t;\n\n#ifdef NZS_FAST_CAL\nextern  const uint16_t  NVM_flash[16767];\n#else\nextern  const uint16_t  NVM_flash[256];\n#endif\n#define NVM ((const nvm_t *)NVM_flash)\n\nbool nvmWriteCalTable(void *ptrData, uint32_t size);\nbool nvmWrite_sPID(float Kp, float Ki, float Kd);\nbool nvmWrite_pPID(float Kp, float Ki, float Kd);\nbool nvmWrite_vPID(float Kp, float Ki, float Kd);\nbool nvmWriteSystemParms(SystemParams_t &systemParams);\nbool nvmWriteMotorParms(MotorParams_t &motorParams);\nbool nvmErase(void);\n\n#endif // __NONVOLATILE__H__\n"
  },
  {
    "path": "firmware/stepper_nano_zero/nzs.cpp",
    "content": "/*\n * nzs.cpp\n *\n *  Created on: Dec 8, 2016\n *      Author: trampas\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#include \"nzs.h\"\n#include \"commands.h\"\n#include \"nonvolatile.h\"\n#include \"angle.h\"\n#include \"eeprom.h\"\n#include \"steppin.h\"\n#include \"wiring_private.h\"\n\n#pragma GCC push_options\n#pragma GCC optimize (\"-Ofast\")\n\neepromData_t PowerupEEPROM={0};\n\n\nvolatile bool enableState=true;\n\nint32_t dataEnabled=0;\n\nStepperCtrl stepperCtrl;\nLCD Lcd;\n\nint menuCalibrate(int argc, char *argv[])\n{\n\tstepperCtrl.calibrateEncoder();\n}\n\nint menuTestCal(int argc, char *argv[])\n{\n\tAngle error;\n\tint32_t x,y;\n\tchar str[25];\n\terror=stepperCtrl.maxCalibrationError();\n\n\tx=(36000*(int32_t)error)/ANGLE_STEPS;\n\tLOG(\"Error %d %d\", (int32_t)error, x);\n\ty=x/100;\n\tx=x-(y*100);\n\tx=abs(x);\n\tsprintf(str, \"%d.%02d deg\",y,x);\n#ifndef DISABLE_LCD\n\tLcd.lcdShow(\"Cal Error\", str,\"\");\n#endif\n\n\tLOG(\"Calibration error %s\",str);\n#ifndef MECHADUINO_HARDWARE\n\twhile(digitalRead(PIN_SW3)==1)\n\t{\n\t\t//wait for button press\n\t}\n\twhile(digitalRead(PIN_SW3)==0)\n\t{\n\t\t//wait for button release\n\t}\n#endif\n}\n\nstatic  options_t stepOptions[] {\n\t\t{\"200\"},\n\t\t{\"400\"},\n\t\t{\"\"},\n};\n\n//returns the index of the stepOptions when called\n// with no arguments.\nint motorSteps(int argc, char *argv[])\n{\n\tif (argc==0)\n\t{\n\t\tint i;\n\t\ti=NVM->motorParams.fullStepsPerRotation;\n\t\tif (i==400)\n\t\t{\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0; //default to 200\n\t}\n\tif (argc>0)\n\t{\n\t\tint32_t i;\n\t\tMotorParams_t params;\n\t\tmemcpy((void *)&params, (void *)&NVM->motorParams, sizeof(params));\n\t\ti=atol(argv[0]);\n\t\tif (i!=params.fullStepsPerRotation)\n\t\t{\n\t\t\tparams.fullStepsPerRotation=i;\n\t\t\tnvmWriteMotorParms(params);\n\t\t}\n\t}\n\n\treturn 0;\n}\n\nstatic  options_t currentOptions[] {\n\t\t{\"0\"},\n\t\t{\"100\"},\n\t\t{\"200\"},\n\t\t{\"300\"},\n\t\t{\"400\"},\n\t\t{\"500\"},\n\t\t{\"600\"},\n\t\t{\"700\"},\n\t\t{\"800\"},\n\t\t{\"900\"},\n\t\t{\"1000\"},\n\t\t{\"1100\"},\n\t\t{\"1200\"},\n\t\t{\"1300\"},\n\t\t{\"1400\"},\n\t\t{\"1500\"},\n\t\t{\"1600\"},\n\t\t{\"1700\"},\n\t\t{\"1800\"},\n\t\t{\"1900\"},\n\t\t{\"2000\"},\n\t\t{\"2100\"},\n\t\t{\"2200\"},\n\t\t{\"2300\"},\n\t\t{\"2400\"},\n\t\t{\"2500\"},\n\t\t{\"2600\"},\n\t\t{\"2700\"},\n\t\t{\"2800\"},\n\t\t{\"2900\"},\n\t\t{\"3000\"},\n\t\t{\"3100\"},\n\t\t{\"3200\"},\n\t\t{\"3300\"},\n\t\t{\"\"},\n};\n\nint motorCurrent(int argc, char *argv[])\n{\n\tLOG(\"called motorCurrent %d\",argc);\n\tif (argc==1)\n\t{\n\t\tint i;\n\t\tLOG(\"called %s\",argv[0]);\n\t\ti=atol(argv[0]);\n\t\ti=i*100;\n\t\tMotorParams_t params;\n\t\tmemcpy((void *)&params, (void *)&NVM->motorParams, sizeof(params));\n\t\tif (i!=params.currentMa)\n\t\t{\n\t\t\tparams.currentMa=i;\n\t\t\tnvmWriteMotorParms(params);\n\t\t}\n\t\treturn i/100;\n\t}\n\tint i;\n\ti=NVM->motorParams.currentMa/100;\n\tLOG(\" motorCurrent return %d\",i);\n\treturn i;\n\n}\n\nint motorHoldCurrent(int argc, char *argv[])\n{\n\tif (argc==1)\n\t{\n\t\tint i;\n\t\ti=atol(argv[0]);\n\t\ti=i*100;\n\t\tMotorParams_t params;\n\t\tmemcpy((void *)&params, (void *)&NVM->motorParams, sizeof(params));\n\t\tif (i!=params.currentHoldMa)\n\t\t{\n\t\t\tparams.currentHoldMa=i;\n\t\t\tnvmWriteMotorParms(params);\n\t\t}\n\t\treturn i/100;\n\t}else\n\t{\n\t\tint i;\n\t\ti=NVM->motorParams.currentHoldMa/100;\n\t\treturn i;\n\t}\n}\n\nstatic  options_t microstepOptions[] {\n\t\t{\"1\"},\n\t\t{\"2\"},\n\t\t{\"4\"},\n\t\t{\"8\"},\n\t\t{\"16\"},\n\t\t{\"32\"},\n\t\t{\"64\"},\n\t\t{\"128\"},\n\t\t{\"256\"},\n\t\t{\"\"}\n};\n\nint microsteps(int argc, char *argv[])\n{\n\tif (argc==1)\n\t{\n\t\tint i,steps;\n\t\ti=atol(argv[0]);\n\t\tSystemParams_t params;\n\t\tmemcpy((void *)&params, (void *)&NVM->SystemParams, sizeof(params));\n\t\tsteps=0x01<<i;\n\t\tif (steps!=params.microsteps)\n\t\t{\n\t\t\tparams.microsteps=steps;\n\t\t\tnvmWriteSystemParms(params);\n\t\t}\n\t\treturn i;\n\t}\n\tint i,j;\n\ti=NVM->SystemParams.microsteps;\n\tfor (j=0; j<9; j++)\n\t{\n\n\t\tif ((0x01<<j) == i)\n\t\t{\n\t\t\treturn j;\n\t\t}\n\t}\n\treturn 0;\n}\n\nstatic  options_t controlLoopOptions[] {\n\t\t{\"Off\"},\n\t\t{\"Open\"},\n\t\t{\"Simple\"},\n\t\t{\"Pos PID\"},\n\t\t{\"Vel PID\"},\n\t\t{\"\"}\n};\n\n\n\nint controlLoop(int argc, char *argv[])\n{\n\tif (argc==1)\n\t{\n\t\tint i;\n\t\ti=atol(argv[0]);\n\t\tSystemParams_t params;\n\t\tmemcpy((void *)&params, (void *)&NVM->SystemParams, sizeof(params));\n\t\tif (i!=params.controllerMode)\n\t\t{\n\t\t\tparams.controllerMode=(feedbackCtrl_t)i;\n\t\t\tnvmWriteSystemParms(params);\n\t\t}\n\t\treturn i;\n\t}\n\treturn NVM->SystemParams.controllerMode;\n}\n\n\n\n\n#ifndef PIN_ENABLE\nstatic  options_t errorPinOptions[] {\n\t\t{\"Enable\"},\n\t\t{\"!Enable\"}, //error pin works like enable on step sticks\n\t\t{\"Error\"},\n\t\t//\t{\"BiDir\"}, //12/12/2016 not implemented yet\n\t\t{\"\"}\n};\n\nint errorPin(int argc, char *argv[])\n{\n\tif (argc==1)\n\t{\n\t\tint i;\n\t\ti=atol(argv[0]);\n\t\tSystemParams_t params;\n\t\tmemcpy((void *)&params, (void *)&NVM->SystemParams, sizeof(params));\n\t\tif (i!=params.errorPinMode)\n\t\t{\n\t\t\tparams.errorPinMode=(ErrorPinMode_t)i;\n\t\t\tnvmWriteSystemParms(params);\n\t\t}\n\t\treturn i;\n\t}\n\treturn NVM->SystemParams.errorPinMode;\n}\n#else\n\n\tstatic  options_t errorPinOptions[] {\n\t\t\t{\"Enable\"},\n\t\t\t{\"!Enable\"}, //error pin works like enable on step sticks\n\t\t\t//      {\"Error\"},\n\t\t\t//\t{\"BiDir\"}, //12/12/2016 not implemented yet\n\t\t\t{\"\"}\n\t};\n\n\tint enablePin(int argc, char *argv[])\n\t{\n\t\tif (argc==1)\n\t\t{\n\t\t\tint i;\n\t\t\ti=atol(argv[0]);\n\t\t\tSystemParams_t params;\n\t\t\tmemcpy((void *)&params, (void *)&NVM->SystemParams, sizeof(params));\n\t\t\tif (i!=params.errorPinMode)\n\t\t\t{\n\t\t\t\tparams.errorPinMode=(ErrorPinMode_t)i;\n\t\t\t\tnvmWriteSystemParms(params);\n\t\t\t}\n\t\t\treturn i;\n\t\t}\n\t\treturn NVM->SystemParams.errorPinMode;\n\t}\n\n#endif\n\nstatic  options_t dirPinOptions[] {\n\t\t{\"High CW\"},\n\t\t{\"High CCW\"},\n\t\t{\"\"}\n};\n\nint dirPin(int argc, char *argv[])\n{\n\tif (argc==1)\n\t{\n\t\tint i;\n\t\ti=atol(argv[0]);\n\t\tSystemParams_t params;\n\t\tmemcpy((void *)&params, (void *)&NVM->SystemParams, sizeof(params));\n\t\tif (i!=params.dirPinRotation)\n\t\t{\n\t\t\tparams.dirPinRotation=(RotationDir_t)i;\n\t\t\tnvmWriteSystemParms(params);\n\t\t}\n\t\treturn i;\n\t}\n\treturn NVM->SystemParams.dirPinRotation;\n}\n\n\nstatic  menuItem_t MenuMain[] {\n\t\t{\"Calibrate\", menuCalibrate,NULL},\n\t\t{\"Test Cal\", menuTestCal,NULL},\n\t\t//\t\t{\"Mtr steps\", motorSteps,stepOptions}, NOT GOOD for user to call this\n\t\t{\"Motor mA\", motorCurrent,currentOptions},\n\t\t{\"Hold mA\", motorHoldCurrent,currentOptions},\n\t\t{\"Microstep\", microsteps,microstepOptions},\n\t\t//\t\t{\"Ctlr Mode\", controlLoop,controlLoopOptions}, //this may not be good for user to call\n#ifndef PIN_ENABLE\n\t\t{\"Error Pin\", errorPin,errorPinOptions},\n#else\n\t\t{\"EnablePin\", enablePin,errorPinOptions},\n#endif\n\t\t{\"Dir Pin\", dirPin,dirPinOptions},\n\n\n\t\t{ \"\", NULL}\n};\n\nstatic  menuItem_t MenuCal[] {\n\t\t{\"Calibrate\", menuCalibrate,NULL},\n\t\t//{\"Test Cal\", menuTestCal,NULL},\n\t\t{ \"\", NULL}\n};\n\n\n\n\n\n\n//this function is called when error pin changes as enable signal\nstatic void enableInput(void)\n{\n\tstatic bool lastState=true;\n#ifdef PIN_ENABLE\n\tif (NVM->SystemParams.errorPinMode == ERROR_PIN_MODE_ENABLE)\n\t{\n\t\tstatic int enable;\n\t\t//read our enable pin\n\t\tenable = digitalRead(PIN_ENABLE);\n\t\tif (enable != enableState)\n\t\t{\n\t\t\tWARNING(\"Enable now %d\",enable);\n\t\t}\n\t\tenableState=enable;\n\t\t//stepperCtrl.enable(enable);\n\t}\n\tif (NVM->SystemParams.errorPinMode == ERROR_PIN_MODE_ACTIVE_LOW_ENABLE)\n\t{\n\t\tstatic int enable;\n\t\t//read our enable pin\n\t\tenable = !digitalRead(PIN_ENABLE);\n\t\tif (enable != enableState)\n\t\t{\n\t\t\tWARNING(\"Enable now %d\",enable);\n\t\t}\n\t\tenableState=enable;\n\t\t//stepperCtrl.enable(enable);\n\t}\n#else\n\tif (NVM->SystemParams.errorPinMode == ERROR_PIN_MODE_ENABLE)\n\t{\n\t\tstatic int enable;\n\t\t//read our enable pin\n\t\tenable = digitalRead(PIN_ERROR);\n\t\tenableState=enable;\n\t\t//stepperCtrl.enable(enable);\n\t}\n\tif (NVM->SystemParams.errorPinMode == ERROR_PIN_MODE_ACTIVE_LOW_ENABLE)\n\t{\n\t\tstatic int enable;\n\t\t//read our enable pin\n\t\tenable = !digitalRead(PIN_ERROR);\n\t\tenableState=enable;\n\t\t//stepperCtrl.enable(enable);\n\t}\n#endif\n\n#ifdef USE_STEP_DIR_SERIAL\n\n\tstatic uint8_t pinCFG[2];\n\tstatic uint8_t pinMux[2];\n\tif (enableState == false  && lastState==true)\n\t{\n\t\t// turn the step/dir to serial port\n\n\t\t//save pin config for restoring\n\t\tpinCFG[0]=getPinCfg(PIN_STEP_INPUT);\n\t\tpinCFG[1]=getPinCfg(PIN_DIR_INPUT);\n\t\tpinMux[0]=getPinMux(PIN_STEP_INPUT);\n\t\tpinMux[1]=getPinMux(PIN_DIR_INPUT);\n\n\t\t//lets see if the step pin has interrupt enabled\n\t\tif (pinMux[0] == PORT_PMUX_PMUXE_A_Val)\n\t\t{\n\t\t\tEExt_Interrupts in = g_APinDescription[PIN_STEP_INPUT].ulExtInt;\n\t\t\tEIC->INTENCLR.reg = EIC_INTENCLR_EXTINT(1 << in); //disable the interrupt\n\t\t\t//we need to disable the interrupt\n\t\t}\n\n\t\t//now we need to set the pins to serial port peripheral (sercom0)\n\t\tsetPinMux(PIN_STEP_INPUT,PORT_PMUX_PMUXE_C_Val);\n\t\tsetPinMux(PIN_DIR_INPUT,PORT_PMUX_PMUXE_C_Val);\n\n\t\t//make sure that step pin is input with mux to peripheral\n\t\tsetPinCfg(PIN_STEP_INPUT, PORT_PINCFG_PMUXEN | PORT_PINCFG_INEN | PORT_PINCFG_PULLEN);\n\n\t\t//make sure that dir pin is an output with mux to peripheral\n\t\tsetPinCfg(PIN_DIR_INPUT, PORT_PINCFG_PMUXEN );\n\n\t\tSerial1.begin(STEP_DIR_BAUD);\n\n\t}\n\tif (enableState == true  && lastState==false)\n\t{\n\t\tSerial1.end();\n\t\tsetPinMux(PIN_STEP_INPUT,pinMux[0]);\n\t\tsetPinMux(PIN_DIR_INPUT,pinMux[1]);\n\t\tsetPinCfg(PIN_STEP_INPUT,pinCFG[0]);\n\t\tsetPinCfg(PIN_DIR_INPUT,pinCFG[1]);\n\t\t//turn step/dir pins back to GPIO\n\t\tif (PORT_PMUX_PMUXE_A_Val == pinMux[0])\n\t\t{\n\t\t\t//if interrupt was enabled for step pin renable it.\n\t\t\tEExt_Interrupts in = g_APinDescription[PIN_STEP_INPUT].ulExtInt;\n\t\t\tEIC->INTENSET.reg = EIC_INTENCLR_EXTINT(1 << in); //enable the interrupt\n\t\t}\n\n\t}\n\n#endif //USE_STEP_DIR_SERIAL\n\tlastState=enableState;\n}\n\n\n\n\n\nvoid TC5_Handler()\n{\n//\tstatic bool led=false;\n//\tYELLOW_LED(led);\n//\tled=!led;\n\tinterrupts(); //allow other interrupts\n\tif (TC5->COUNT16.INTFLAG.bit.OVF == 1)\n\t{\n\t\tint error=0;\n\n\n\t\terror=(stepperCtrl.processFeedback()); //handle the control loop\n\t\tYELLOW_LED(error);\n#ifdef PIN_ENABLE\n\t\tGPIO_OUTPUT(PIN_ERROR);\n\t\tbool level;\n\t\tlevel = !NVM->SystemParams.errorLogic;\n\t\tif (error)\n\t\t{\t//assume high is inactive and low is active on error pin\n\t\t\tdigitalWrite(PIN_ERROR,level);\n\t\t}else\n\t\t{\n\t\t\tdigitalWrite(PIN_ERROR,!level);\n\t\t}\n#else\n\n\t\tif (NVM->SystemParams.errorPinMode == ERROR_PIN_MODE_ERROR)\n\t\t{\n\t\t\tGPIO_OUTPUT(PIN_ERROR);\n\t\t\tif (error)\n\t\t\t{\t//assume high is inactive and low is active on error pin\n\t\t\t\tdigitalWrite(PIN_ERROR,LOW);\n\t\t\t}else\n\t\t\t{\n\t\t\t\tdigitalWrite(PIN_ERROR,HIGH);\n\t\t\t}\n\t\t}\n#endif\n\t\tTC5->COUNT16.INTFLAG.bit.OVF = 1;    // writing a one clears the flag ovf flag\n\t}\n\n}\n\n//check the NVM and set to defaults if there is any\nvoid validateAndInitNVMParams(void)\n{\n\n\tif (false == NVM->sPID.parametersVaild)\n\t{\n\t\tnvmWrite_sPID(0.9,0.0001, 0.01);\n\t}\n\n\tif (false == NVM->pPID.parametersVaild)\n\t{\n\t\tnvmWrite_pPID(1.0, 0, 0);\n\t}\n\n\tif (false == NVM->vPID.parametersVaild)\n\t{\n\t\tnvmWrite_vPID(2.0, 1.0, 1.0);\n\t}\n\n\tif (false == NVM->SystemParams.parametersVaild)\n\t{\n\t\tSystemParams_t params;\n\t\tparams.microsteps=16;\n\t\tparams.controllerMode=CTRL_SIMPLE;\n\t\tparams.dirPinRotation=CW_ROTATION; //default to clockwise rotation when dir is high\n\t\tparams.errorLimit=(int32_t)ANGLE_FROM_DEGREES(1.8);\n\t\tparams.errorPinMode=ERROR_PIN_MODE_ENABLE;  //default to enable pin\n\t\tparams.homePin=-1;\n\t\tparams.errorLogic=false;\n\t\tparams.homeAngleDelay=ANGLE_FROM_DEGREES(10);\n\t\tnvmWriteSystemParms(params);\n\t}\n\n\t//the motor parameters are check in the stepper_controller code\n\t// as that there we can auto set much of them.\n\n\n}\n\n\n\nvoid SYSCTRL_Handler(void)\n{\n\tif (SYSCTRL->INTFLAG.reg & SYSCTRL_INTFLAG_BOD33DET)\n\t{\n\t\teepromFlush(); //flush the eeprom\n\t\tSYSCTRL->INTFLAG.reg |= SYSCTRL_INTFLAG_BOD33DET;\n\t}\n}\n\n// Wait for synchronization of registers between the clock domains\nstatic __inline__ void syncBOD33(void) __attribute__((always_inline, unused));\nstatic void syncBOD33(void)  {\n\t//int32_t t0=1000;\n\twhile (SYSCTRL->PCLKSR.bit.BOD33RDY==1)\n\t{\n\t\t//\t\tt0--;\n\t\t//\t\tif (t0==0)\n\t\t//\t\t{\n\t\t//\t\t\tbreak;\n\t\t//\t\t}\n\t}\n}\nstatic void configure_bod(void)\n{\n\t//syncBOD33();\n\t//SYSCTRL->BOD33.reg=0; //disable BOD33 before starting\n\t//syncBOD33();\n\tSYSCTRL->BOD33.reg=SYSCTRL_BOD33_ACTION_INTERRUPT | //generate interrupt when BOD is triggered\n\t\t\tSYSCTRL_BOD33_LEVEL(48) | //about 3.2V\n\t\t\t//SYSCTRL_BOD33_HYST | //enable hysteresis\n\t\t\tSYSCTRL_BOD33_ENABLE; //turn module on\n\n\tLOG(\"BOD33 %02X\", SYSCTRL->BOD33.reg );\n\tSYSCTRL->INTENSET.reg |= SYSCTRL_INTENSET_BOD33DET;\n\n\tNVIC_SetPriority(SYSCTRL_IRQn, 1); //make highest priority as we need to save eeprom\n\t// Enable InterruptVector\n\tNVIC_EnableIRQ(SYSCTRL_IRQn);\n}\n\n\nvoid NZS::begin(void)\n{\n\tint to=20;\n\tstepCtrlError_t stepCtrlError;\n\n\t//set up the pins correctly on the board.\n\tboardSetupPins();\n\n\t//start up the USB serial interface\n\t//TODO check for power on USB before doing this...\n#ifndef MECHADUINO_HARDWARE\n\tSerialUSB.begin(SERIAL_BAUD);\n#endif\n\n\t//setup the serial port for syslog\n\tSerial5.begin(SERIAL_BAUD);\n\n\n#ifndef CMD_SERIAL_PORT\n\tSysLogInit(&Serial5,LOG_DEBUG);\n\tpinPeripheral(PIN_TXD, PIO_SERCOM_ALT);\n\tpinPeripheral(PIN_RXD, PIO_SERCOM_ALT);\n#else\n\tSysLogInit(NULL, LOG_WARNING);\n#endif\n\n\tLOG(\"Power up!\");\n\tpinMode(PIN_USB_PWR, INPUT);\n\n#ifndef MECHADUINO_HARDWARE\n\tif (digitalRead(PIN_USB_PWR))\n\t{\n\t\t//wait for USB serial port to come alive\n\t\twhile (!SerialUSB)\n\t\t{\n\t\t\tto--;\n\t\t\tif (to == 0)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdelay(500);\n\t\t};     //wait for serial\n\t} else\n\t{\n\t\tWARNING(\"USB Not connected\");\n\t}\n#endif\n\n\tvalidateAndInitNVMParams();\n\n\tLOG(\"EEPROM INIT\");\n\tif (EEPROM_OK == eepromInit()) //init the EEPROM\n\t{\n\t\teepromRead((uint8_t *)&PowerupEEPROM, sizeof(PowerupEEPROM));\n\t}\n\tconfigure_bod(); //configure the BOD\n#ifndef DISABLE_LCD\n\tLOG(\"Testing LCD\");\n\tLcd.begin(&stepperCtrl);\n\n#ifdef A5995_DRIVER\n\tLcd.lcdShow(\"MisfitTech\",\"NEMA 23\", VERSION);\n#else\n\tLcd.lcdShow(\"MisfitTech\",\"NEMA 17\", VERSION);\n#endif\n\n#endif\n\n\tLOG(\"command init!\");\n\tcommandsInit(); //setup command handler system\n\n\n\tstepCtrlError=STEPCTRL_NO_CAL;\n\n\n\twhile (STEPCTRL_NO_ERROR != stepCtrlError)\n\t{\n\t\tLOG(\"init the stepper controller\");\n\t\tstepCtrlError=stepperCtrl.begin(); //start controller before accepting step inputs\n\n\t\t//todo we need to handle error on LCD and through command line\n\t\tif (STEPCTRL_NO_POWER == stepCtrlError)\n\t\t{\n#ifndef MECHADUINO_HARDWARE\n\t\t\tSerialUSB.println(\"Appears that there is no Motor Power\");\n\t\t\tSerialUSB.println(\"Connect motor power!\");\n#else\n      Serial5.println(\"Appears that there is no Motor Power\");\n      Serial5.println(\"Connect motor power!\");\n#endif\n#ifndef DISABLE_LCD\n\t\t\tLcd.lcdShow(\"Waiting\", \"MOTOR\", \"POWER\");\n#endif\n\t\t\twhile (STEPCTRL_NO_POWER == stepCtrlError)\n\t\t\t{\n\t\t\t\tstepCtrlError=stepperCtrl.begin(); //start controller before accepting step inputs\n\t\t\t}\n\n\t\t}\n\n\t\tif (STEPCTRL_NO_CAL == stepCtrlError)\n\t\t{\n#ifndef MECHADUINO_HARDWARE\n\t\t\tSerialUSB.println(\"You need to Calibrate\");\n#else\n      Serial5.println(\"You need to Calibrate\");\n#endif\n#ifndef DISABLE_LCD\n\t\t\tLcd.lcdShow(\"   NOT \", \"Calibrated\", \" \");\n\t\t\tdelay(1000);\n\t\t\tLcd.setMenu(MenuCal);\n\t\t\tLcd.forceMenuActive();\n#endif\n\n\t\t\t//TODO add code here for LCD and command line loop\n\t\t\twhile(false == stepperCtrl.calibrationValid())\n\t\t\t{\n\t\t\t\tcommandsProcess(); //handle commands\n\n#ifndef DISABLE_LCD\n\t\t\t\tLcd.process();\n#endif\n\n\t\t\t}\n\n#ifndef DISABLE_LCD\n\t\t\tLcd.setMenu(NULL);\n#endif\n\t\t}\n\n\t\tif (STEPCTRL_NO_ENCODER == stepCtrlError)\n\t\t{\n#ifndef MECHADUINO_HARDWARE\n\t\t\tSerialUSB.println(\"AS5047D not working\");\n\t\t\tSerialUSB.println(\" try disconnecting power from board for 15+mins\");\n\t\t\tSerialUSB.println(\" you might have to short out power pins to ground\");\n#else\n      Serial5.println(\"AS5047D not working\");\n      Serial5.println(\" try disconnecting power from board for 15+mins\");\n      Serial5.println(\" you might have to short out power pins to ground\");\n#endif\n#ifndef DISABLE_LCD\n\t\t\tLcd.lcdShow(\"Encoder\", \" Error!\", \" REBOOT\");\n#endif\n\t\t\twhile(1)\n\t\t\t{\n\n\t\t\t}\n\t\t}\n\n\t}\n#ifndef DISABLE_LCD\n\tLcd.setMenu(MenuMain);\n#endif\n\n\tstepPinSetup(); //setup the step pin\n\n#ifdef PIN_ENABLE\n\t//attachInterrupt(digitalPinToInterrupt(PIN_ENABLE), enableInput, CHANGE);\n\tNVIC_SetPriority(EIC_IRQn, 0); //set port A interrupt as highest priority\n#else\n\tattachInterrupt(digitalPinToInterrupt(PIN_ERROR), enableInput, CHANGE);\n#endif\n\n\tSmartPlanner.begin(&stepperCtrl);\n\tRED_LED(false);\n\tLOG(\"SETUP DONE!\");\n}\n\n\nvoid printLocation(void)\n{\n\tchar buf[128]={0};\n\tLocation_t loc;\n\tint32_t n, i, len;\n\tint32_t pktSize;\n\n\tif (dataEnabled==0)\n\t{\n\t\t//RED_LED(false);\n\t\treturn;\n\t}\n\n\t//the packet length for binary print is 12bytes\n\t// assuming rate of 6Khz this would be 72,000 baud\n\ti=0;\n\tn=stepperCtrl.getLocation(&loc);\n\tif (n==-1)\n\t{\n\t\t//RED_LED(false);\n\t\treturn;\n\t}\n\n\tlen=0;\n\tpktSize=sizeof(Location_t)+1; //packet lenght is size location plus sync byte\n\n\t//     //binary write\n\n\twhile(n>=0 && (len)<=(128-pktSize))\n\t{\n\t\tmemcpy(&buf[len],&loc,sizeof(Location_t));\n\t\tlen+=sizeof(Location_t);\n\t\tbuf[len]=0XAA; //sync\n\t\tlen++;\n\t\tbuf[len]=sizeof(Location_t); //data len\n\t\tlen++;\n\n\t\tn=stepperCtrl.getLocation(&loc);\n\t\ti++;\n\t}\n#ifndef MECHADUINO_HARDWARE\n\tSerialUSB.write(buf,len);\n#endif\n\n\t//hex write\n\t// hex write is 29 bytes per tick, @ 6khz this 174000 baud\n\t//   while(n>=0 && (i*29)<(200-29))\n\t//   {\n\t//      sprintf(buf,\"%s%08X\\t%08X\\t%08X\\n\\r\",buf,loc.microSecs,loc.desiredLoc,loc.actualLoc);\n\t//      n=stepperCtrl.getLocation(&loc);\n\t//      i++;\n\t//   }\n\t//   SerialUSB.write(buf,strlen(buf));\n\n//\tif (n<=0)\n//\t{\n//\t\tRED_LED(false);\n//\t}else\n//\t{\n//\t\tRED_LED(true);\n//\t}\n\n\treturn;\n}\n\nvoid NZS::loop(void)\n{\n\teepromData_t eepromData;\n\n\n\t//   if (dataEnabled==0)\n\t//   {\n\t//      LOG(\"loop time is %dus\",stepperCtrl.getLoopTime());\n\t//   }\n\n\t//read the enable pin and update\n\t// this is also done as an edge interrupt but does not always see\n\t// to trigger the ISR.\n\tenableInput();\n\n\tif (enableState != stepperCtrl.getEnable())\n\t{\n\t\tstepperCtrl.enable(enableState);\n\t}\n\n\t//handle EEPROM\n\teepromData.angle=stepperCtrl.getCurrentAngle();\n\teepromData.encoderAngle=stepperCtrl.getEncoderAngle();\n\teepromData.valid=1;\n\teepromWriteCache((uint8_t *)&eepromData,sizeof(eepromData));\n\n\tcommandsProcess(); //handle commands\n#ifndef DISABLE_LCD\n\tLcd.process();\n#endif\n\t//stepperCtrl.PrintData(); //prints steps and angle to serial USB.\n\n\n\tprintLocation(); //print out the current location\n\n\treturn;\n}\n\n#pragma GCC pop_options\n"
  },
  {
    "path": "firmware/stepper_nano_zero/nzs.h",
    "content": "/*\n * nzs.h\n *\n *  Created on: Dec 8, 2016\n *      Author: trampas\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#ifndef NZS_H_\n#define NZS_H_\n\n#include \"board.h\"\n#include \"nzs_lcd.h\"\n#include \"stepper_controller.h\"\n#include \"planner.h\"\n\ntypedef struct\n{\n\tint64_t angle;\n\tuint16_t encoderAngle;\n\tuint8_t valid;\n}eepromData_t;\n\nclass NZS //nano Zero Stepper\n{\n\n\tpublic:\n\t\tvoid begin(void);\n\t\tvoid loop(void);\n\n};\n\n\n#endif /* NZS_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/nzs_lcd.cpp",
    "content": "/*\n * nzs_lcd.cpp\n *\n *  Created on: Dec 8, 2016\n *      Author: trampas\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#include \"nzs_lcd.h\"\n#include <string.h>\n#include <stdio.h>\n#include <Wire.h>\n\n\n#ifndef DISABLE_LCD\nvoid LCD::begin(StepperCtrl *ptrsCtrl)\n{\n#ifndef MECHADUINO_HARDWARE\n\tpinMode(PIN_SW1, INPUT_PULLUP);\n\tpinMode(PIN_SW3, INPUT_PULLUP);\n\tpinMode(PIN_SW4, INPUT_PULLUP);\n#endif\n\tbuttonState=0;\n\n\t//we need access to the stepper controller\n\tptrStepperCtrl=ptrsCtrl; //save a pointer to the stepper controller\n\n\n\tptrMenu=NULL;\n\tmenuIndex=0;\n\tmenuActive=false;\n\toptionIndex=0;\n\tptrOptions=NULL;\n\tdisplayEnabled=true;\n\n\t//check that the SCL and SDA are pulled high\n\tpinMode(PIN_SDA, INPUT);\n\tpinMode(PIN_SCL, INPUT);\n\tif (digitalRead(PIN_SDA)==0)\n\t{\n\t\t//pin is not pulled up\n\t\tdisplayEnabled=false;\n\t}\n\tif (digitalRead(PIN_SCL)==0)\n\t{\n\t\t//pin is not pulled up\n\t\tdisplayEnabled=false;\n\t}\n\n\tif (displayEnabled)\n\t{\n\t\tdisplayEnabled=display.begin(SSD1306_SWITCHCAPVCC, 0x3C);\n\t}else\n\t{\n\t\tWARNING(\"SCL/SDA not pulled up\");\n\t}\n\tif (false == displayEnabled)\n\t{\n\t\tWARNING(\"NO display found, LCD will not be used\");\n\t}\n\tWire.setClock(800000);\n\n\t//showSplash();\n\n}\n\n\nvoid __attribute__ ((optimize(\"Ofast\"))) LCD::lcdShow(const char *line1, const char *line2,const char *line3)\n{\n\n\tif (false == displayEnabled)\n\t{\n\t\treturn;\n\t}\n\tdisplay.clearDisplay();\n\tdisplay.setTextSize(2);\n\tdisplay.setTextColor(WHITE);\n\tdisplay.setCursor(0,0);\n\tdisplay.println(line1);\n\tdisplay.setCursor(0,20);\n\tdisplay.println(line2);\n\tdisplay.setCursor(0,40);\n\tdisplay.println(line3);\n\tdisplay.display();\n\n}\n\nvoid LCD::showSplash(void)\n{\n\tif (false == displayEnabled)\n\t{\n\t\treturn;\n\t}\n#ifdef A5995_DRIVER\n\tlcdShow(\"MisfitTech\",\"NEMA 23\", VERSION);\n#else\n\tlcdShow(\"MisfitTech\",\"NEMA 17\", VERSION);\n#endif\n}\n\n\nvoid LCD::setMenu(menuItem_t *pMenu)\n{\n\tif (false == displayEnabled)\n\t{\n\t\treturn;\n\t}\n\tptrMenu=pMenu;\n\tmenuIndex=0;\n}\n\n\nvoid LCD::showOptions(void)\n{\n\tint32_t i,j;\n\tchar str[3][26]={0};\n\tif (false == displayEnabled)\n\t{\n\t\treturn;\n\t}\n\n\ti=optionIndex;\n\tj=0;\n\twhile(strlen(ptrOptions[i].str)>0 && j<3)\n\t{\n\t\tif (i == optionIndex)\n\t\t{\n\t\t\tsprintf(str[j],\"*%s\",ptrOptions[i].str);\n\t\t}else\n\t\t{\n\t\t\tsprintf(str[j],\" %s\",ptrOptions[i].str);\n\t\t}\n\t\tj++;\n\t\ti++;\n\t}\n\n\tlcdShow(str[0], str[1], str[2]);\n\n\treturn;\n}\n\n\nvoid __attribute__ ((optimize(\"Ofast\"))) LCD::showMenu(void)\n{\n\tint32_t i,j;\n\tchar str[3][26]={0};\n\tif (false == displayEnabled)\n\t{\n\t\treturn;\n\t}\n\n\ti=menuIndex;\n\tj=0;\n\twhile(ptrMenu[i].func!=NULL && j<3)\n\t{\n\t\tif (i == menuIndex)\n\t\t{\n\t\t\tsprintf(str[j],\"*%s\",ptrMenu[i].str);\n\t\t}else\n\t\t{\n\t\t\tsprintf(str[j],\" %s\",ptrMenu[i].str);\n\t\t}\n\t\tj++;\n\t\ti++;\n\t}\n\n\t//show exit if there is room\n\tif (j<3)\n\t{\n\t\tif (j==0)\n\t\t{\n\t\t\tsprintf(str[j],\"*Exit\");\n\t\t}else\n\t\t{\n\t\t\tsprintf(str[j],\" Exit\");\n\t\t}\n\t}\n\n\tlcdShow(str[0], str[1], str[2]);\n\n\n\treturn;\n}\n\n\nvoid __attribute__ ((optimize(\"Ofast\"))) LCD::updateMenu(void)\n{\n\tif (false == displayEnabled)\n\t{\n\t\treturn;\n\t}\n\n\tif (ptrOptions != NULL)\n\t{\n\t\tshowOptions();\n\t}else\n\t{\n\t\tshowMenu();\n\t}\n\n\t//handle push buttons\n\tif (digitalRead(PIN_SW3)==0 && (buttonState & 0x02)==0)\n\t{\n\t\tbuttonState |= 0x02;\n\n\t\tLOG(\"SW3 pressed\");\n\t\tif (ptrMenu[menuIndex].func == NULL)\n\t\t{\n\t\t\t//exit pressed\n\t\t\tmenuIndex=0; //reset menu index\n\t\t\tmenuActive=false;\n\t\t\treturn;\n\t\t}\n\n\t\tif (ptrMenu[menuIndex].func != NULL)\n\t\t{\n\t\t\tLOG(\"Calling function for %s\",ptrMenu[menuIndex].str);\n\t\t\tif (ptrOptions != NULL)\n\t\t\t{\n\t\t\t\tchar *ptrArgV[1];\n\t\t\t\tchar str[25]={0};\n\t\t\t\tptrArgV[0]=str;\n\t\t\t\tsprintf(str,\"%d\",optionIndex);\n\t\t\t\tLOG(\"Calling function for %s %s\",ptrMenu[menuIndex].str,str);\n\t\t\t\tptrMenu[menuIndex].func(1,ptrArgV);\n\t\t\t\tptrOptions=NULL;\n\t\t\t\toptionIndex=0;\n\t\t\t}else\n\t\t\t{\n\t\t\t\tint i;\n\t\t\t\ti=ptrMenu[menuIndex].func(0,NULL);\n\t\t\t\tif (ptrMenu[menuIndex].ptrOptions != NULL)\n\t\t\t\t{\n\t\t\t\t\tLOG(\"displaying options for %s %d\",ptrMenu[menuIndex].str,i);\n\t\t\t\t\tptrOptions=ptrMenu[menuIndex].ptrOptions;\n\t\t\t\t\toptionIndex=i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t}\n\tif (digitalRead(PIN_SW1)==0 && (buttonState & 0x01)==0)\n\t{\n\t\tbuttonState |= 0x01;\n\t\tLOG(\"SW1 pressed\");\n\t\tif (ptrOptions != NULL)\n\t\t{\n\t\t\toptionIndex++;\n\t\t\tif (strlen(ptrOptions[optionIndex].str) == 0)\n\t\t\t{\n\t\t\t\toptionIndex=0;\n\t\t\t}\n\t\t} else\n\t\t{\n\t\t\tif (ptrMenu[menuIndex].func != NULL)\n\t\t\t{\n\t\t\t\tmenuIndex++;\n\t\t\t} else\n\t\t\t{\n\t\t\t\tmenuIndex=0;\n\t\t\t}\n\t\t}\n\n\t}\n\n\tif (digitalRead(PIN_SW1))\n\t{\n\t\tbuttonState &= ~0x01;\n\t}\n\n\tif (digitalRead(PIN_SW3))\n\t{\n\t\tbuttonState &= ~0x02;\n\t}\n}\n\nvoid LCD::forceMenuActive(void)\n{\n\n\tmenuActive=true;\n}\n\nvoid __attribute__((optimize(\"Ofast\")))LCD::process(void)\n{\n\tif (false == displayEnabled)\n\t{\n\t\treturn;\n\t}\n\n\tif (false == menuActive || ptrMenu==NULL)\n\t{\n\t\tupdateLCD();\n\t}else\n\t{\n\t\tupdateMenu();\n\t}\n\n\tif (digitalRead(PIN_SW4)==0 && (buttonState & 0x04)==0)\n\t{\n\t\tbuttonState |= 0x04;\n\t\tmenuActive=!menuActive;\n\t}\n\n\tif (digitalRead(PIN_SW4))\n\t{\n\t\tbuttonState &= ~0x04;\n\t}\n}\n#endif\n/*\n//does the LCD menu system\nvoid StepperCtrl::menu(void)\n{\n\n\tbool done=false;\n\tint menuItem=0;\n\tchar str[100];\n\tint sw1State=0;\n\tint sw3State=0;\n\n\tpinMode(PIN_SW1, INPUT_PULLUP);\n\tpinMode(PIN_SW3, INPUT_PULLUP);\n\tpinMode(PIN_SW4, INPUT_PULLUP);\n\n\n\twhile (!done)\n\t{\n\t\tdisplay.clearDisplay();\n\t\tdisplay.setTextSize(2);\n\t\tdisplay.setTextColor(WHITE);\n\n\t\tif (menuItem==0)\n\t\t{\n\t\t\tsprintf(str,\"*Run Cal\");\n\t\t\tdisplay.setCursor(0,0);\n\t\t\tdisplay.println(str);\n\t\t}else\n\t\t{\n\t\t\tsprintf(str,\" Run Cal\");\n\t\t\tdisplay.setCursor(0,0);\n\t\t\tdisplay.println(str);\n\t\t}\n\n\t\tif (menuItem==1)\n\t\t{\n\t\t\tsprintf(str,\"*Check Cal\");\n\t\t\tdisplay.setCursor(0,20);\n\t\t\tdisplay.println(str);\n\t\t}else\n\t\t{\n\t\t\tsprintf(str,\" Check Cal\");\n\t\t\tdisplay.setCursor(0,20);\n\t\t\tdisplay.println(str);\n\t\t}\n\n\t\tif (menuItem==2)\n\t\t{\n\t\t\tsprintf(str,\"*Exit\");\n\t\t\tdisplay.setCursor(0,40);\n\t\t\tdisplay.println(str);\n\t\t}else\n\t\t{\n\t\t\tsprintf(str,\" Exit\");\n\t\t\tdisplay.setCursor(0,40);\n\t\t\tdisplay.println(str);\n\t\t}\n\n\t\tdisplay.display();\n\n\t\tif (sw1State==1)\n\t\t{\n\t\t\twhile (digitalRead(PIN_SW1)==0);\n\t\t\tsw1State=0;\n\t\t}\n\n\t\tif (digitalRead(PIN_SW1)==0)\n\t\t{\n\t\t\tsw1State=1;\n\t\t\tmenuItem=(menuItem+1)%3;\n\t\t}\n\n\t\tif (sw3State==1)\n\t\t{\n\t\t\twhile (digitalRead(PIN_SW3)==0);\n\t\t\tsw3State=0;\n\t\t}\n\n\t\tif (digitalRead(PIN_SW3)==0)\n\t\t{\n\t\t\tsw3State=1;\n\t\t\tswitch(menuItem)\n\t\t\t{\n\t\t\t\tcase 0:\n\t\t\t\t\tdisplay.clearDisplay();\n\t\t\t\t\tdisplay.setTextSize(2);\n\t\t\t\t\tdisplay.setTextColor(WHITE);\n\t\t\t\t\tdisplay.setCursor(0,0);\n\t\t\t\t\tdisplay.println(\"Running\");\n\t\t\t\t\tdisplay.setCursor(0,20);\n\t\t\t\t\tdisplay.println(\"Cal\");\n\t\t\t\t\tdisplay.display();\n\t\t\t\t\tcalibrateEncoder();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1:\n\t\t\t\t{\n\t\t\t\t\tdisplay.clearDisplay();\n\t\t\t\t\tdisplay.setTextSize(2);\n\t\t\t\t\tdisplay.setTextColor(WHITE);\n\t\t\t\t\tdisplay.setCursor(0,0);\n\t\t\t\t\tdisplay.println(\"Testing\");\n\t\t\t\t\tdisplay.setCursor(0,20);\n\t\t\t\t\tdisplay.println(\"Cal\");\n\t\t\t\t\tdisplay.display();\n\t\t\t\t\tint32_t error,x,y,m;\n\t\t\t\t\terror=maxCalibrationError();\n\t\t\t\t\tx=(error*100 *360)/ANGLE_STEPS;\n\t\t\t\t\tm=x/100;\n\t\t\t\t\ty=abs(x-(m*100));\n\t\t\t\t\tdisplay.clearDisplay();\n\t\t\t\t\tdisplay.setTextSize(2);\n\t\t\t\t\tdisplay.setTextColor(WHITE);\n\t\t\t\t\tdisplay.setCursor(0,0);\n\t\t\t\t\tdisplay.println(\"Error\");\n\n\t\t\t\t\tsprintf(str, \"%02d.%02d deg\",m,y);\n\t\t\t\t\tdisplay.setCursor(0,20);\n\t\t\t\t\tdisplay.println(str);\n\t\t\t\t\tdisplay.display();\n\t\t\t\t\twhile (digitalRead(PIN_SW3));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 2:\n\t\t\t\t\treturn;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n */\n\nvoid LCD::updateLCD(void)\n{\n\tif (false == displayEnabled)\n\t{\n\t\treturn;\n\t}\n\tchar str[3][25];\n\tstatic int highRPM=0;\n\tint32_t y,z,err;\n\n\tstatic int64_t lastAngle,deg;\n\tstatic int32_t RPM=0;\n\tstatic int32_t lasttime=0;\n\n\tbool state;\n\tstatic int32_t dt=40;\n\tstatic uint32_t t0=0;\n\n\tstatic bool rpmDone=false;\n\n\tif ((millis()-t0)>500)\n\t{\n\n\t\tint32_t x,d;\n\n\t\t//do first half of RPM measurement\n\t\tif (!rpmDone)\n\t\t{\n\t\t\t//LOG(\"loop time is %dus\",ptrStepperCtrl->getLoopTime());\n\t\t\tlastAngle=ptrStepperCtrl->getCurrentAngle();\n\t\t\tlasttime=millis();\n\t\t\trpmDone=true;\n\t\t\treturn;\n\t\t}\n\n\t\t//do the second half of rpm measurement and update LCD.\n\t\tif (rpmDone && (millis()-lasttime)>(dt))\n\t\t{\n\t\t\trpmDone=false;\n\t\t\tdeg=ptrStepperCtrl->getCurrentAngle();\n\t\t\ty=millis()-lasttime;\n\t\t\terr=ptrStepperCtrl->getLoopError();\n\n\t\t\tt0=millis();\n\t\t\td=(int64_t)(lastAngle-deg);\n\n\t\t\td=abs(d);\n\n\t\t\tx=0;\n\t\t\tif (d>0)\n\t\t\t{\n\t\t\t\tx=((int64_t)d*(60*1000UL))/((int64_t)y * ANGLE_STEPS);\n\t\t\t}\n\n\t\t\tlastAngle=deg;\n\t\t\tRPM=(int32_t)x; //(7*RPM+x)/8; //average RPMs\n\t\t\tif (RPM>500)\n\t\t\t{\n\t\t\t\tdt=10;\n\t\t\t}\n\t\t\tif (RPM<100)\n\t\t\t{\n\t\t\t\tdt=100;\n\t\t\t}\n\t\t\tstr[0][0]='\\0';\n\t\t\t//LOG(\"RPMs is %d, %d, %d\",(int32_t)x,(int32_t)d,(int32_t)y);\n\t\t\tswitch(ptrStepperCtrl->getControlMode())\n\t\t\t{\n\t\t\t\tcase CTRL_SIMPLE:\n\t\t\t\t\tsprintf(str[0], \"%dRPM simp\",RPM);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CTRL_POS_PID:\n\t\t\t\t\tsprintf(str[0], \"%dRPM pPID\",RPM);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CTRL_POS_VELOCITY_PID:\n\t\t\t\t\tsprintf(str[0], \"%dRPM vPID\",RPM);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CTRL_OPEN:\n\t\t\t\t\tsprintf(str[0], \"%dRPM open\",RPM);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CTRL_OFF:\n\t\t\t\t\tsprintf(str[0], \"%dRPM off\",RPM);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsprintf(str[0], \"error %u\",ptrStepperCtrl->getControlMode());\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\n\t\t\terr=(err*360*100)/(int32_t)ANGLE_STEPS;\n\t\t\t//LOG(\"error is %d %d %d\",err,(int32_t)ptrStepperCtrl->getCurrentLocation(),(int32_t)ptrStepperCtrl->getDesiredLocation());\n\t\t\tz=(err)/100;\n\t\t\ty=abs(err-(z*100));\n\n\t\t\tsprintf(str[1],\"%01d.%02d err\", z,y);\n\n\n\t\t\tdeg=ptrStepperCtrl->getDesiredAngle();\n\n#ifndef NZS_LCD_ABSOULTE_ANGLE\n\t\t\tdeg=deg & ANGLE_MAX; //limit to 360 degrees\n#endif\n\n\t\t\tdeg=(deg*360*10)/(int32_t)ANGLE_STEPS;\n\t\t\tint K=0;\n\t\t\tif (abs(deg)>9999)\n\t\t\t{\n\t\t\t\tK=1;\n\t\t\t\tdeg=deg/1000;\n\t\t\t}\n\n\t\t\tx=(deg)/10;\n\t\t\ty=abs(deg-(x*10));\n\n\t\t\tif (K==1)\n\t\t\t{\n\t\t\t\tsprintf(str[2],\"%03d.%01uKdeg\", x,y);\n\t\t\t}else\n\t\t\t{\n\t\t\t\tsprintf(str[2],\"%03d.%01udeg\", x,y);\n\t\t\t}\n\t\t\tstr[0][10]='\\0';\n\t\t\tstr[1][10]='\\0';\n\t\t\tstr[2][10]='\\0';\n\t\t\tlcdShow(str[0],str[1],str[2]);\n\t\t}\n\t}\n}\n\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/nzs_lcd.h",
    "content": "/*\n * nzs_lcd.h\n *\n *  Created on: Dec 8, 2016\n *      Author: trampas\n *\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#ifndef NZS_LCD_H_\n#define NZS_LCD_H_\n\n#include \"Arduino.h\"\n#include \"syslog.h\"\n#include \"board.h\"\n#include \"stepper_controller.h\"\n\n#include \"Adafruit_GFX.h\"\n#include \"Adafruit_SSD1306.h\"\n#include \"gfxfont.h\"\n\n\ntypedef struct {\n\tchar str[15];\n} options_t;\n\ntypedef struct {\n\tchar str[15];\n\n\t//only one of the following should be not null\n\tint (*func)(int argc, char *argv[]);\n\toptions_t *ptrOptions;\n\n} menuItem_t;\n\n\n\n\n\nclass LCD\n{\n\tprivate:\n\t\tbool displayEnabled;\n\t\tAdafruit_SSD1306 display;\n\t\tStepperCtrl *ptrStepperCtrl;\n\t\tmenuItem_t *ptrMenu;\n\t\tint32_t menuIndex;\n\t\tbool menuActive;\n\n\t\toptions_t *ptrOptions;\n\t\tint32_t optionIndex;\n\n\t\tint32_t buttonState;\n\n\t\tvoid updateLCD(void);\n\t\tvoid showMenu(void);\n\t\tvoid updateMenu(void);\n\t\tvoid showOptions(void);\n\tpublic:\n\t\tvoid forceMenuActive(void);\n\t\tvoid setMenu(menuItem_t *pMenu);\n\t\tvoid begin(StepperCtrl *ptrStepperCtrl); //sets up the LCD\n\t\tvoid process(void); //processes the LCD and updates as needed\n\t\tvoid showSplash(void);\n\t\tvoid lcdShow(const char *line1, const char *line2,const char *line3);\n\n\n};\n\n\n#endif /* NZS_LCD_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/planner.cpp",
    "content": "/**********************************************************************\n *      Author: tstern\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include \"planner.h\"\n\n#include \"board.h\"\n#include \"wiring_private.h\"\n#include \"syslog.h\"\n#include \"angle.h\"\n#include \"Arduino.h\"\n\n#define WAIT_TC16_REGS_SYNC(x) while(x->COUNT16.STATUS.bit.SYNCBUSY);\n\n//define the planner class as being global\nPlanner SmartPlanner;\n\nstatic bool enterTC3CriticalSection()\n{\n\tbool state=NVIC_IS_IRQ_ENABLED(TC3_IRQn);\n\tNVIC_DisableIRQ(TC3_IRQn);\n\treturn state;\n}\n\nstatic void exitTC3CriticalSection(bool prevState)\n{\n\tif (prevState)\n\t{\n\t\tNVIC_EnableIRQ(TC3_IRQn);\n\t} //else do nothing\n}\n\n\n\n\nvoid TC3_Init(void)\n{\n\t// Enable GCLK for TC3\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_TCC2_TC3 )) ;\n\twhile (GCLK->STATUS.bit.SYNCBUSY);\n\n\tTC3->COUNT16.CTRLA.reg &= ~TC_CTRLA_ENABLE;   // Disable TCx\n\tWAIT_TC16_REGS_SYNC(TC3)                      // wait for sync\n\n\tTC3->COUNT16.CTRLA.reg |= TC_CTRLA_MODE_COUNT16;   // Set Timer counter Mode to 16 bits\n\tWAIT_TC16_REGS_SYNC(TC3)\n\n\tTC3->COUNT16.CTRLA.reg |= TC_CTRLA_WAVEGEN_MFRQ; // Set TC as normal Normal Frq\n\tWAIT_TC16_REGS_SYNC(TC3)\n\n\tTC3->COUNT16.CTRLA.reg |= TC_CTRLA_PRESCALER_DIV2;   // Set perscaler\n\tWAIT_TC16_REGS_SYNC(TC3)\n\n\n\tTC3->COUNT16.CC[0].reg = F_CPU/PLANNER_UPDATE_RATE_HZ/2; //divide by two because of prescaler\n\n\tWAIT_TC16_REGS_SYNC(TC3)\n\n\n\tTC3->COUNT16.INTENSET.reg = 0;              // disable all interrupts\n\tTC3->COUNT16.INTENSET.bit.OVF = 1;          // enable overfollow\n\n\n\n\tNVIC_SetPriority(TC3_IRQn, 3);\n\n\n\t// Enable InterruptVector\n\tNVIC_EnableIRQ(TC3_IRQn);\n\n\n\t// Enable TC\n\tTC3->COUNT16.CTRLA.reg |= TC_CTRLA_ENABLE;\n\tWAIT_TC16_REGS_SYNC(TC3);\n}\n\n\nvoid TC3_Handler(void)\n{\n\tinterrupts(); //allow other interrupts\n\t//do the planner tick\n\tSmartPlanner.tick();\n\t//SerialUSB.println('x');\n\tTC3->COUNT16.INTFLAG.bit.OVF = 1; //clear interrupt by writing 1 to flag\n}\n\nvoid Planner::begin(StepperCtrl *ptrStepper)\n{\n\n\tptrStepperCtrl=ptrStepper;\n\tcurrentMode=PLANNER_NONE;\n\t//setup the timer and interrupt as the last thing\n\tTC3_Init();\n}\n\nvoid Planner::tick(void)\n{\n\tif (currentMode == PLANNER_NONE)\n\t{\n\t\treturn; //do nothing\n\t}\n\n\tif (PLANNER_CV == currentMode)\n\t{\n//\t\tSerialUSB.println(currentSetAngle);\n//\t\tSerialUSB.println(endAngle);\n//\t\tSerialUSB.println(tickIncrement);\n//\t\tSerialUSB.println(fabs(currentSetAngle-endAngle));\n//\t\tSerialUSB.println(fabs(tickIncrement*2));\n//\t\tSerialUSB.println();\n\t\tint32_t x;\n\t\tif (fabs(currentSetAngle-endAngle) >= fabs(tickIncrement))\n\t\t{\n\t\t\tcurrentSetAngle+=tickIncrement;\n\t\t\tx=ANGLE_FROM_DEGREES(currentSetAngle);\n\t\t\tptrStepperCtrl->moveToAbsAngle(x);\n\t\t}else\n\t\t{\n\t\t\t//we are done, make sure we end at the right point\n\t\t\t//SerialUSB.println(\"done\");\n\t\t\tx=ANGLE_FROM_DEGREES(endAngle);\n\t\t\tptrStepperCtrl->moveToAbsAngle(x);\n\t\t\tcurrentMode=PLANNER_NONE;\n\t\t}\n\t}\n\n\n}\n\nvoid Planner::stop(void)\n{\n\tbool state;\n\tstate = enterTC3CriticalSection();\n\tcurrentMode=PLANNER_NONE;\n\texitTC3CriticalSection(state);\n}\n\nbool Planner::moveConstantVelocity(float finalAngle, float rpm)\n{\n\tbool state;\n\tstate = enterTC3CriticalSection();\n\n\t//first determine if operation is in progress\n\tif (PLANNER_NONE != currentMode)\n\t{\n#ifndef MECHADUINO_HARDWARE\n\t\t//we are in operation return false\n\t\tSerialUSB.println(\"planner operational\");\n#else\n    Serial5.println(\"planner operational\");\n#endif\n\t\texitTC3CriticalSection(state);\n\t\treturn false;\n\t}\n\n\t//get current posistion\n\tstartAngle = ANGLE_T0_DEGREES(ptrStepperCtrl->getCurrentAngle());\n\n\t//deterime the tick increment\n\ttickIncrement=360.0*fabs(rpm)/60/PLANNER_UPDATE_RATE_HZ;\n\n\n\n\t//set the desired end angle\n\tendAngle=finalAngle;\n\n\n\t//set the current angle\n\tcurrentSetAngle=startAngle;\n\n\tif (startAngle>endAngle)\n\t{\n#ifndef MECHADUINO_HARDWARE\n\t\tSerialUSB.println(\"reverse\");\n#endif\n\t\ttickIncrement=-tickIncrement;\n\t}\n\n//\tSerialUSB.println(currentSetAngle);\n//\t\tSerialUSB.println(endAngle);\n//\t\tSerialUSB.println(tickIncrement);\n//\t\tSerialUSB.println();\n\n\tcurrentMode=PLANNER_CV;\n\n\texitTC3CriticalSection(state);\n\treturn true;\n}\n"
  },
  {
    "path": "firmware/stepper_nano_zero/planner.h",
    "content": "/**********************************************************************\n *      Author: tstern\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n/*\n *  This file implements a trajectory planner for use with serial\n *  interface. It allows the smart stepper to move at constant velocity.\n *  Additionally you can move to some location at constant velocity or\n *  with a trajectory curve\n */\n\n#ifndef PLANNER_H_\n#define PLANNER_H_\n#include \"board.h\"\n#include \"stepper_controller.h\"\n\n#define PLANNER_UPDATE_RATE_HZ (3000UL) //how often planner updates PID\n\ntypedef enum {\n\tPLANNER_NONE =0,\n\tPLANNER_CV =1, //constant velocity\n\t//PLANNER_CA =2, //constant accleration\n\t//PLANNER_S_CURVE =3, //s-curve move\n} PlannerMode;\nclass Planner\n{\n\tprivate:\n\t\tStepperCtrl *ptrStepperCtrl;\n\t\tvolatile PlannerMode currentMode=PLANNER_NONE;\n\t\t//todo we should not use floating point, rather use \"Angle\"\n\t\tvolatile float endAngle;\n\t\tvolatile float startAngle;\n\t\tvolatile float currentSetAngle;\n\t\tvolatile float tickIncrement;\n\n\tpublic:\n\t\tvoid begin(StepperCtrl *ptrStepper);\n\t\tbool moveConstantVelocity(float finalAngle, float rpm); //moves to the final location at a constant RPM\n\t\tvoid tick(void); //this is called on regular tick interval\n\t\tvoid stop(void);\n\t\tbool done(void) {return currentMode==PLANNER_NONE;}\n};\n\n\nextern Planner SmartPlanner;\n\n\n#endif /* PLANNER_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/sine.cpp",
    "content": "/*\n * since.cpp\n *\n *  Created on: Dec 24, 2016\n *      Author: tstern\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#include \"sine.h\"\n\n#pragma GCC push_options\n#pragma GCC optimize (\"-Ofast\")\n\n#ifdef NZS_FAST_SINE\nstatic const int16_t sineTable[1280]={\n0,201,402,603,804,1005,1206,1407,1608,1808,2009,2210,2410,2611,2811,3011,\n3212,3412,3611,3811,4011,4210,4410,4609,4808,5007,5205,5404,5602,5800,5998,6195,\n6392,6589,6786,6983,7179,7375,7571,7766,7962,8156,8351,8545,8739,8933,9126,9319,\n9512,9704,9896,10087,10278,10469,10659,10849,11039,11228,11417,11605,11793,11980,12167,12353,\n12539,12725,12910,13094,13278,13462,13645,13828,14010,14191,14372,14553,14732,14912,15090,15269,\n15446,15623,15800,15976,16151,16325,16499,16673,16846,17018,17189,17360,17530,17700,17869,18037,\n18204,18371,18537,18703,18868,19032,19195,19357,19519,19680,19841,20000,20159,20317,20475,20631,\n20787,20942,21097,21250,21403,21554,21705,21856,22005,22154,22301,22448,22594,22739,22884,23027,\n23170,23312,23452,23592,23732,23870,24007,24143,24279,24413,24547,24680,24812,24942,25072,25201,\n25329,25456,25583,25708,25832,25955,26077,26199,26319,26438,26556,26674,26790,26905,27019,27133,\n27245,27356,27466,27575,27683,27791,27897,28001,28105,28208,28310,28411,28510,28609,28706,28803,\n28898,28992,29085,29178,29268,29358,29447,29535,29621,29707,29791,29874,29956,30037,30117,30195,\n30273,30349,30425,30499,30572,30643,30714,30783,30852,30919,30985,31050,31113,31176,31237,31297,\n31356,31414,31471,31526,31580,31633,31685,31736,31785,31834,31881,31926,31971,32015,32057,32098,\n32138,32176,32214,32250,32285,32319,32351,32382,32413,32441,32469,32496,32521,32545,32568,32589,\n32609,32629,32646,32663,32678,32693,32706,32717,32728,32737,32745,32752,32757,32762,32765,32767,\n32767,32767,32765,32762,32757,32752,32745,32737,32728,32717,32706,32693,32678,32663,32646,32629,\n32609,32589,32568,32545,32521,32496,32469,32441,32413,32382,32351,32319,32285,32250,32214,32176,\n32138,32098,32057,32015,31971,31926,31881,31834,31785,31736,31685,31633,31580,31526,31471,31414,\n31356,31297,31237,31176,31113,31050,30985,30919,30852,30783,30714,30643,30572,30499,30425,30349,\n30273,30195,30117,30037,29956,29874,29791,29707,29621,29535,29447,29358,29268,29178,29085,28992,\n28898,28803,28706,28609,28510,28411,28310,28208,28105,28001,27897,27791,27683,27575,27466,27356,\n27245,27133,27019,26905,26790,26674,26556,26438,26319,26199,26077,25955,25832,25708,25583,25456,\n25329,25201,25072,24942,24812,24680,24547,24413,24279,24143,24007,23870,23732,23592,23452,23312,\n23170,23027,22884,22739,22594,22448,22301,22154,22005,21856,21705,21554,21403,21250,21097,20942,\n20787,20631,20475,20317,20159,20000,19841,19680,19519,19357,19195,19032,18868,18703,18537,18371,\n18204,18037,17869,17700,17530,17360,17189,17018,16846,16673,16499,16325,16151,15976,15800,15623,\n15446,15269,15090,14912,14732,14553,14372,14191,14010,13828,13645,13462,13278,13094,12910,12725,\n12539,12353,12167,11980,11793,11605,11417,11228,11039,10849,10659,10469,10278,10087,9896,9704,\n9512,9319,9126,8933,8739,8545,8351,8156,7962,7766,7571,7375,7179,6983,6786,6589,\n6392,6195,5998,5800,5602,5404,5205,5007,4808,4609,4410,4210,4011,3811,3611,3412,\n3212,3011,2811,2611,2410,2210,2009,1808,1608,1407,1206,1005,804,603,402,201,\n0,-201,-402,-603,-804,-1005,-1206,-1407,-1608,-1809,-2010,-2210,-2411,-2611,-2812,-3012,\n-3212,-3412,-3612,-3812,-4011,-4211,-4410,-4609,-4808,-5007,-5206,-5404,-5602,-5800,-5998,-6196,\n-6393,-6590,-6787,-6983,-7180,-7376,-7571,-7767,-7962,-8157,-8352,-8546,-8740,-8933,-9127,-9320,\n-9512,-9704,-9896,-10088,-10279,-10470,-10660,-10850,-11039,-11228,-11417,-11605,-11793,-11980,-12167,-12354,\n-12540,-12725,-12910,-13095,-13279,-13463,-13646,-13828,-14010,-14192,-14373,-14553,-14733,-14912,-15091,-15269,\n-15447,-15624,-15800,-15976,-16151,-16326,-16500,-16673,-16846,-17018,-17190,-17361,-17531,-17700,-17869,-18037,\n-18205,-18372,-18538,-18703,-18868,-19032,-19195,-19358,-19520,-19681,-19841,-20001,-20160,-20318,-20475,-20632,\n-20788,-20943,-21097,-21250,-21403,-21555,-21706,-21856,-22006,-22154,-22302,-22449,-22595,-22740,-22884,-23028,\n-23170,-23312,-23453,-23593,-23732,-23870,-24007,-24144,-24279,-24414,-24548,-24680,-24812,-24943,-25073,-25202,\n-25330,-25457,-25583,-25708,-25832,-25956,-26078,-26199,-26319,-26439,-26557,-26674,-26790,-26906,-27020,-27133,\n-27245,-27357,-27467,-27576,-27684,-27791,-27897,-28002,-28106,-28209,-28310,-28411,-28511,-28609,-28707,-28803,\n-28899,-28993,-29086,-29178,-29269,-29359,-29448,-29535,-29622,-29707,-29791,-29875,-29957,-30038,-30117,-30196,\n-30273,-30350,-30425,-30499,-30572,-30644,-30715,-30784,-30852,-30919,-30985,-31050,-31114,-31176,-31238,-31298,\n-31357,-31415,-31471,-31527,-31581,-31634,-31686,-31736,-31786,-31834,-31881,-31927,-31972,-32015,-32057,-32098,\n-32138,-32177,-32214,-32250,-32285,-32319,-32352,-32383,-32413,-32442,-32470,-32496,-32521,-32545,-32568,-32590,\n-32610,-32629,-32647,-32664,-32679,-32693,-32706,-32718,-32728,-32738,-32746,-32752,-32758,-32762,-32765,-32767,\n-32768,-32767,-32765,-32762,-32758,-32752,-32746,-32738,-32728,-32718,-32706,-32693,-32679,-32664,-32647,-32629,\n-32610,-32590,-32568,-32545,-32521,-32496,-32470,-32442,-32413,-32383,-32352,-32319,-32285,-32250,-32214,-32177,\n-32138,-32098,-32057,-32015,-31972,-31927,-31881,-31834,-31786,-31736,-31686,-31634,-31581,-31527,-31471,-31415,\n-31357,-31298,-31238,-31176,-31114,-31050,-30985,-30919,-30852,-30784,-30715,-30644,-30572,-30499,-30425,-30350,\n-30273,-30196,-30117,-30038,-29957,-29875,-29791,-29707,-29622,-29535,-29448,-29359,-29269,-29178,-29086,-28993,\n-28899,-28803,-28707,-28609,-28511,-28411,-28310,-28209,-28106,-28002,-27897,-27791,-27684,-27576,-27467,-27357,\n-27245,-27133,-27020,-26906,-26790,-26674,-26557,-26439,-26319,-26199,-26078,-25956,-25832,-25708,-25583,-25457,\n-25330,-25202,-25073,-24943,-24812,-24680,-24548,-24414,-24279,-24144,-24007,-23870,-23732,-23593,-23453,-23312,\n-23170,-23028,-22884,-22740,-22595,-22449,-22302,-22154,-22006,-21856,-21706,-21555,-21403,-21250,-21097,-20943,\n-20788,-20632,-20475,-20318,-20160,-20001,-19841,-19681,-19520,-19358,-19195,-19032,-18868,-18703,-18538,-18372,\n-18205,-18037,-17869,-17700,-17531,-17361,-17190,-17018,-16846,-16673,-16500,-16326,-16151,-15976,-15800,-15624,\n-15447,-15269,-15091,-14912,-14733,-14553,-14373,-14192,-14010,-13828,-13646,-13463,-13279,-13095,-12910,-12725,\n-12540,-12354,-12167,-11980,-11793,-11605,-11417,-11228,-11039,-10850,-10660,-10470,-10279,-10088,-9896,-9704,\n-9512,-9320,-9127,-8933,-8740,-8546,-8352,-8157,-7962,-7767,-7571,-7376,-7180,-6983,-6787,-6590,\n-6393,-6196,-5998,-5800,-5602,-5404,-5206,-5007,-4808,-4609,-4410,-4211,-4011,-3812,-3612,-3412,\n-3212,-3012,-2812,-2611,-2411,-2210,-2010,-1809,-1608,-1407,-1206,-1005,-804,-603,-402,-201,\n0,201,402,603,804,1005,1206,1407,1608,1808,2009,2210,2410,2611,2811,3011,\n3212,3412,3611,3811,4011,4210,4410,4609,4808,5007,5205,5404,5602,5800,5998,6195,\n6392,6589,6786,6983,7179,7375,7571,7766,7962,8156,8351,8545,8739,8933,9126,9319,\n9512,9704,9896,10087,10278,10469,10659,10849,11039,11228,11417,11605,11793,11980,12167,12353,\n12539,12725,12910,13094,13278,13462,13645,13828,14010,14191,14372,14553,14732,14912,15090,15269,\n15446,15623,15800,15976,16151,16325,16499,16673,16846,17018,17189,17360,17530,17700,17869,18037,\n18204,18371,18537,18703,18868,19032,19195,19357,19519,19680,19841,20000,20159,20317,20475,20631,\n20787,20942,21097,21250,21403,21554,21705,21856,22005,22154,22301,22448,22594,22739,22884,23027,\n23170,23312,23452,23592,23732,23870,24007,24143,24279,24413,24547,24680,24812,24942,25072,25201,\n25329,25456,25583,25708,25832,25955,26077,26199,26319,26438,26556,26674,26790,26905,27019,27133,\n27245,27356,27466,27575,27683,27791,27897,28001,28105,28208,28310,28411,28510,28609,28706,28803,\n28898,28992,29085,29178,29268,29358,29447,29535,29621,29707,29791,29874,29956,30037,30117,30195,\n30273,30349,30425,30499,30572,30643,30714,30783,30852,30919,30985,31050,31113,31176,31237,31297,\n31356,31414,31471,31526,31580,31633,31685,31736,31785,31834,31881,31926,31971,32015,32057,32098,\n32138,32176,32214,32250,32285,32319,32351,32382,32413,32441,32469,32496,32521,32545,32568,32589,\n32609,32629,32646,32663,32678,32693,32706,32717,32728,32737,32745,32752,32757,32762,32765,32767\n};\n#else\nstatic const uint16_t sineTable[257]={\n\t\t0,402,804,1206,1608,2010,2412,2814,3216,3617,4019,4420,4821,5222,5623,6023,\n\t\t6424,6824,7223,7623,8022,8421,8820,9218,9616,10014,10411,10808,11204,11600,11996,12391,\n\t\t12785,13179,13573,13966,14359,14751,15142,15533,15924,16313,16703,17091,17479,17866,18253,18639,\n\t\t19024,19408,19792,20175,20557,20939,21319,21699,22078,22456,22834,23210,23586,23960,24334,24707,\n\t\t25079,25450,25820,26189,26557,26925,27291,27656,28020,28383,28745,29106,29465,29824,30181,30538,\n\t\t30893,31247,31600,31952,32302,32651,32999,33346,33692,34036,34379,34721,35061,35400,35738,36074,\n\t\t36409,36743,37075,37406,37736,38064,38390,38715,39039,39361,39682,40001,40319,40635,40950,41263,\n\t\t41575,41885,42194,42500,42806,43109,43411,43712,44011,44308,44603,44897,45189,45479,45768,46055,\n\t\t46340,46624,46905,47185,47464,47740,48014,48287,48558,48827,49095,49360,49624,49885,50145,50403,\n\t\t50659,50913,51166,51416,51664,51911,52155,52398,52638,52877,53113,53348,53580,53811,54039,54266,\n\t\t54490,54713,54933,55151,55367,55582,55794,56003,56211,56417,56620,56822,57021,57218,57413,57606,\n\t\t57797,57985,58171,58356,58537,58717,58895,59070,59243,59414,59582,59749,59913,60075,60234,60391,\n\t\t60546,60699,60850,60998,61144,61287,61429,61567,61704,61838,61970,62100,62227,62352,62475,62595,\n\t\t62713,62829,62942,63053,63161,63267,63371,63472,63571,63668,63762,63853,63943,64030,64114,64196,\n\t\t64276,64353,64428,64500,64570,64638,64703,64765,64826,64883,64939,64992,65042,65090,65136,65179,\n\t\t65219,65258,65293,65327,65357,65386,65412,65435,65456,65475,65491,65504,65515,65524,65530,65534,\n\t\t65535,\n};\n#endif\n\n\n\n\nint16_t sine(uint16_t angle)\n{\n#ifdef NZS_FAST_SINE\n\treturn sineTable[angle];\n#else\n\tint sign=1;\n\tint16_t ret;\n\t//our sine table has 1024 points per rotation so convert angle to closest step\n\n\tif (angle>=(SINE_STEPS/2))\n\t{\n\t\tsign=-1;\n\t}\n\n\tangle=angle % (SINE_STEPS/2); //limit to 0-180 as sign takes care of 180-360\n\n\tif (angle>(SINE_STEPS/4-1))  //if we are greater than 90 we need to look up table backwards\n\t{\n\t\tangle=(SINE_STEPS/2)-angle;\n\t}\n\n\tret=(int16_t)(sineTable[angle]/2)*sign;\n\treturn ret;\n#endif\n}\n\nint16_t cosine(uint16_t angle)\n{\n#ifdef NZS_FAST_SINE\n\tangle=angle+(SINE_STEPS/4);\n\treturn sineTable[angle];\n#else\n\n\tint sign=1;\n\tint16_t ret;\n\t//our sine table has 1024 points per rotation so convert angle to closest step\n\n\tif (angle>=(SINE_STEPS/4) and angle<(3*(SINE_STEPS/4)))\n\t{\n\t\tsign=-1;\n\t}\n\n\tangle=angle % (SINE_STEPS/2); //limit to 0-180 as sign takes care of 180-360\n\n\tif (angle>(SINE_STEPS/4-1))  //if we are greater than 90 we need to look up table backwards\n\t{\n\t\tangle=(SINE_STEPS/2)-angle;\n\t}\n\n\t//for cosine we need 90 degree phase shift\n\tangle=(SINE_STEPS/4)-angle;\n\n\tret=(int16_t)(sineTable[angle]/2)*sign;\n\treturn ret;\n#endif\n}\n\n#pragma GCC pop_options\n"
  },
  {
    "path": "firmware/stepper_nano_zero/sine.h",
    "content": "/**********************************************************************\n * sine.h\n *\n *  Created on: Dec 24, 2016\n *      Author: tstern\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n\n#ifndef SINE_H_\n#define SINE_H_\n\n#include \"board.h\"\n\n#define SINE_STEPS (1024L)\n\n#define SINE_MAX ((int32_t)(32768L))\n\n\nint16_t sine(uint16_t angle);\nint16_t cosine(uint16_t angle);\n\n\n#endif /* SINE_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/stepper_controller.cpp",
    "content": "/**********************************************************************\n *      Author: tstern\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include \"stepper_controller.h\"\n\n#include \"nonvolatile.h\" //for programmable parameters\n#include <Wire.h>\n#include <inttypes.h>\n#include \"steppin.h\"\n\n#pragma GCC push_options\n#pragma GCC optimize (\"-Ofast\")\n\n#define WAIT_TC16_REGS_SYNC(x) while(x->COUNT16.STATUS.bit.SYNCBUSY);\n\nvolatile bool TC5_ISR_Enabled=false;\n\nvoid setupTCInterrupts() {\n\n\t// Enable GCLK for TC4 and TC5 (timer counter input clock)\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TC4_TC5));\n\twhile (GCLK->STATUS.bit.SYNCBUSY);\n\n\tTC5->COUNT16.CTRLA.reg &= ~TC_CTRLA_ENABLE;   // Disable TCx\n\tWAIT_TC16_REGS_SYNC(TC5)                      // wait for sync\n\n\tTC5->COUNT16.CTRLA.reg |= TC_CTRLA_MODE_COUNT16;   // Set Timer counter Mode to 16 bits\n\tWAIT_TC16_REGS_SYNC(TC5)\n\n\tTC5->COUNT16.CTRLA.reg |= TC_CTRLA_WAVEGEN_MFRQ; // Set TC as normal Normal Frq\n\tWAIT_TC16_REGS_SYNC(TC5)\n\n\tTC5->COUNT16.CTRLA.reg |= TC_CTRLA_PRESCALER_DIV1;   // Set perscaler\n\tWAIT_TC16_REGS_SYNC(TC5)\n\n\n\tTC5->COUNT16.CC[0].reg = F_CPU/NZS_CONTROL_LOOP_HZ;\n\tWAIT_TC16_REGS_SYNC(TC5)\n\n\n\tTC5->COUNT16.INTENSET.reg = 0;              // disable all interrupts\n\tTC5->COUNT16.INTENSET.bit.OVF = 1;          // enable overfollow\n\t//  TC5->COUNT16.INTENSET.bit.MC0 = 1;         // enable compare match to CC0\n\n\n\tNVIC_SetPriority(TC5_IRQn, 2);\n\n\n\t// Enable InterruptVector\n\tNVIC_EnableIRQ(TC5_IRQn);\n\n\n\t// Enable TC\n\tTC5->COUNT16.CTRLA.reg |= TC_CTRLA_ENABLE;\n\tWAIT_TC16_REGS_SYNC(TC5)\n\n}\n\nstatic void enableTCInterrupts() {\n\n\tTC5_ISR_Enabled=true;\n\tNVIC_EnableIRQ(TC5_IRQn);\n\tTC5->COUNT16.INTENSET.bit.OVF = 1;\n\t//  TC5->COUNT16.CTRLA.reg |= TC_CTRLA_ENABLE;    //Enable TC5\n\t//  WAIT_TC16_REGS_SYNC(TC5)                      //wait for sync\n}\n\nstatic void disableTCInterrupts() {\n\n\tTC5_ISR_Enabled=false;\n\t//NVIC_DisableIRQ(TC5_IRQn);\n\tTC5->COUNT16.INTENCLR.bit.OVF = 1;\n}\n\nstatic bool enterCriticalSection()\n{\n\tbool state=TC5_ISR_Enabled;\n\tdisableTCInterrupts();\n\treturn state;\n}\n\nstatic void exitCriticalSection(bool prevState)\n{\n\tif (prevState)\n\t{\n\t\tenableTCInterrupts();\n\t} //else do nothing\n}\n\n\nvoid StepperCtrl::updateParamsFromNVM(void)\n{\n\tbool state=enterCriticalSection();\n\n\tpPID.Kd=NVM->pPID.Kd*CTRL_PID_SCALING;\n\tpPID.Ki=NVM->pPID.Ki*CTRL_PID_SCALING;\n\tpPID.Kp=NVM->pPID.Kp*CTRL_PID_SCALING;\n\n\tvPID.Kd=NVM->vPID.Kd*CTRL_PID_SCALING;\n\tvPID.Ki=NVM->vPID.Ki*CTRL_PID_SCALING;\n\tvPID.Kp=NVM->vPID.Kp*CTRL_PID_SCALING;\n\n\tsPID.Kd=NVM->sPID.Kd*CTRL_PID_SCALING;\n\tsPID.Ki=NVM->sPID.Ki*CTRL_PID_SCALING;\n\tsPID.Kp=NVM->sPID.Kp*CTRL_PID_SCALING;\n\n\tif (NVM->SystemParams.parametersVaild)\n\t{\n\t\tmemcpy((void *)&systemParams, (void *)&NVM->SystemParams, sizeof(systemParams));\n\t\tLOG(\"Home pin %d\",systemParams.homePin);\n\n\t}else\n\t{\n\t\tERROR(\"This should never happen but just in case\");\n\t\tsystemParams.microsteps=16;\n\t\tsystemParams.controllerMode=CTRL_SIMPLE;\n\t\tsystemParams.dirPinRotation=CW_ROTATION; //default to clockwise rotation when dir is high\n\t\tsystemParams.errorLimit=(int32_t)ANGLE_FROM_DEGREES(1.8);\n\t\tsystemParams.errorPinMode=ERROR_PIN_MODE_ENABLE;  //default to enable pin\n\t\tsystemParams.errorLogic=false;\n\t\tsystemParams.homeAngleDelay=ANGLE_FROM_DEGREES(10);\n\t\tsystemParams.homePin=-1; //no homing pin configured\n\t}\n\n\t//default the error pin to input, if it is an error pin the\n\t// handler for this will change the pin to be an output.\n\t// for bidirection error it has to handle input/output it's self as well.\n\t// This is not the cleanest way to handle this...\n\t// TODO implement this cleaner?\n\tpinMode(PIN_ERROR, INPUT_PULLUP); //we have input pin\n\n\tif (NVM->motorParams.parametersVaild)\n\t{\n\t\tmemcpy((void *)&motorParams, (void *)&NVM->motorParams, sizeof(motorParams));\n\t} else\n\t{\n\t\t//MotorParams_t Params;\n\t\tmotorParams.fullStepsPerRotation=200;\n\t\tmotorParams.currentHoldMa=500;\n\t\tmotorParams.currentMa=1500;\n\t\tmotorParams.homeHoldMa=200;\n\t\tmotorParams.homeMa=800;\n\t\tmotorParams.motorWiring=true;\n\t\t//memcpy((void *)&Params, (void *)&motorParams, sizeof(motorParams));\n\t\t//nvmWriteMotorParms(Params);\n\t}\n\n\tstepperDriver.setRotationDirection(motorParams.motorWiring);\n\n\texitCriticalSection(state);\n}\n\n\nvoid  StepperCtrl::motorReset(void)\n{\n\t//when we reset the motor we want to also sync the motor\n\t// phase.  Therefore we move forward a few full steps then back\n\t// to sync motor phasing, leaving the motor at \"phase 0\"\n\tbool state=enterCriticalSection();\n\n\t//\tstepperDriver.move(0,motorParams.currentMa);\n\t//\tdelay(100);\n\t//\tstepperDriver.move(A4954_NUM_MICROSTEPS,motorParams.currentMa);\n\t//\tdelay(100);\n\t//\tstepperDriver.move(A4954_NUM_MICROSTEPS*2,motorParams.currentMa);\n\t//\tdelay(100);\n\t//\tstepperDriver.move(A4954_NUM_MICROSTEPS*3,motorParams.currentMa);\n\t//\tdelay(100);\n\t//\tstepperDriver.move(A4954_NUM_MICROSTEPS*2,motorParams.currentMa);\n\t//\tdelay(100);\n\t//\tstepperDriver.move(A4954_NUM_MICROSTEPS,motorParams.currentMa);\n\t//\tdelay(100);\n\tstepperDriver.move(0,motorParams.currentMa);\n\tdelay(1000);\n\n\tsetLocationFromEncoder(); //measure new starting point\n\texitCriticalSection(state);\n}\n\nvoid StepperCtrl::setLocationFromEncoder(void)\n{\n\tnumSteps=0;\n\tcurrentLocation=0;\n\n\tif (calTable.calValid())\n\t{\n\t\tint32_t n,x;\n\t\tint32_t calIndex;\n\t\tAngle a;\n\n\t\t//set our angles based on previous cal data\n\n\t\tx=sampleMeanEncoder(200);\n\t\ta=calTable.fastReverseLookup(x);\n\n\t\t//our cal table starts at angle zero, so lets set starting based on this and stepsize\n\t\tLOG(\"start angle %d, encoder %d\", (uint16_t)a,x);\n\n\t\t// we were rounding to nearest full step, but this should not be needed TBS 10/12/2017\n\t\t//\t\t//TODO we need to handle 0.9 degree motor\n\t\t//\t\tif (CALIBRATION_TABLE_SIZE == motorParams.fullStepsPerRotation)\n\t\t//\t\t{\n\t\t//\t\t\tn=(int32_t)ANGLE_STEPS/CALIBRATION_TABLE_SIZE;\n\t\t//\n\t\t//\t\t\tcalIndex=((int32_t)((uint16_t)a+n/2)*CALIBRATION_TABLE_SIZE)/ANGLE_STEPS; //find calibration index\n\t\t//\t\t\tif (calIndex>CALIBRATION_TABLE_SIZE)\n\t\t//\t\t\t{\n\t\t//\t\t\t\tcalIndex-=CALIBRATION_TABLE_SIZE;\n\t\t//\t\t\t}\n\t\t//\t\t\ta=(uint16_t)((calIndex*ANGLE_STEPS)/CALIBRATION_TABLE_SIZE);\n\t\t//\t\t}\n\n\n\t\tx=(int32_t)((((float)(uint16_t)a)*360.0/(float)ANGLE_STEPS)*1000);\n\t\tLOG(\"start angle after rounding %d %d.%03d\", (uint16_t)a,x/1000,x%1000);\n\n\t\t//we need to set our numSteps\n\t\tnumSteps=DIVIDE_WITH_ROUND( ((int32_t)a *motorParams.fullStepsPerRotation*systemParams.microsteps),ANGLE_STEPS);\n\t\tcurrentLocation=(uint16_t)a;\n\t}\n\tzeroAngleOffset=getCurrentLocation(); //zero the angle shown on LCD\n}\n\nint64_t StepperCtrl::getZeroAngleOffset(void)\n{\n\tint64_t x;\n\tbool state=enterCriticalSection();\n\n\tx=zeroAngleOffset;\n\n\texitCriticalSection(state);\n\treturn x;\n}\n\nvoid StepperCtrl::setAngle(int64_t angle)\n{\n\tbool state=enterCriticalSection();\n\n\tzeroAngleOffset=getCurrentLocation()-angle;\n\n\texitCriticalSection(state);\n}\n\nvoid StepperCtrl::setZero(void)\n{\n\t//we want to set the starting angle to zero.\n\tbool state=enterCriticalSection();\n\n\tzeroAngleOffset=getCurrentLocation();\n\n\texitCriticalSection(state);\n}\n\nvoid StepperCtrl::encoderDiagnostics(char *ptrStr)\n{\n\tbool state=TC5_ISR_Enabled;\n\tdisableTCInterrupts();\n\n\tencoder.diagnostics(ptrStr);\n\n\tif (state) enableTCInterrupts();\n}\n\n\n//TODO This function does two things, set rotation direction\n//  and measures step size, it should be two functions.\n//return is anlge in degreesx100 ie 360.0 is returned as 36000\nfloat StepperCtrl::measureStepSize(void)\n{\n\tint32_t angle1,angle2,x,i;\n\tbool feedback=enableFeedback;\n\tint32_t microsteps=systemParams.microsteps;\n\n\tsystemParams.microsteps=1;\n\tenableFeedback=false;\n\tmotorParams.motorWiring=true; //assume we are forward wiring to start with\n\tstepperDriver.setRotationDirection(motorParams.motorWiring);\n\t/////////////////////////////////////////\n\t//// Measure the full step size /////\n\t/// Note we assume machine can take one step without issue///\n\n\tLOG(\"reset motor\");\n\tmotorReset(); //this puts stepper motor at stepAngle of zero\n\n\tLOG(\"sample encoder\");\n\n\tangle1=sampleMeanEncoder(200);\n\n\tLOG(\"move\");\n\tstepperDriver.move(A4954_NUM_MICROSTEPS/2,motorParams.currentMa); //move one half step 'forward'\n\tdelay(100);\n\tstepperDriver.move(A4954_NUM_MICROSTEPS,motorParams.currentMa); //move one half step 'forward'\n\tdelay(500);\n\tLOG(\"sample encoder\");\n\tangle2=sampleMeanEncoder(200);\n\n\tLOG(\"Angles %d %d\",angle1,angle2);\n\tif ((abs(angle2-angle1))>(ANGLE_STEPS/2))\n\t{\n\t\t//we crossed the wrap around\n\t\tif (angle1>angle2)\n\t\t{\n\t\t\tangle1=angle1+(int32_t)ANGLE_STEPS;\n\t\t}else\n\t\t{\n\t\t\tangle2=angle2+(int32_t)ANGLE_STEPS;\n\t\t}\n\t}\n\tLOG(\"Angles %d %d\",angle1,angle2);\n\n\t//when we are increase the steps in the  stepperDriver.move() command\n\t// we want the encoder increasing. This ensures motor is moving clock wise\n\t// when encoder is increasing.\n\t//\tif (angle2>angle1)\n\t//\t{\n\t//\t\tmotorParams.motorWiring=true;\n\t//\t\tstepperDriver.setRotationDirection(true);\n\t//\t\tLOG(\"Forward rotating\");\n\t//\t}else\n\t//\t{\n\t//\t\t//the motor is wired backwards so correct in stepperDriver\n\t//\t\tmotorParams.motorWiring=false;\n\t//\t\tstepperDriver.setRotationDirection(false);\n\t//\t\tLOG(\"Reverse rotating\");\n\t//\t}\n\tx=((int64_t)(angle2-angle1)*36000)/(int32_t)ANGLE_STEPS;\n\t// if x is ~180 we have a 1.8 degree step motor, if it is ~90 we have 0.9 degree step\n\tLOG(\"%angle delta %d %d (%d %d)\",x,abs(angle2-angle1),angle1,angle2 );\n\n\t//move back\n\tstepperDriver.move(-A4954_NUM_MICROSTEPS/2,motorParams.currentMa); //move one half step 'forward'\n\tdelay(100);\n\tstepperDriver.move(-A4954_NUM_MICROSTEPS,motorParams.currentMa); //move one half step 'forward'\n\n\tsystemParams.microsteps=microsteps;\n\tenableFeedback=feedback;\n\n\treturn ((float)x)/100.0;\n}\n\n\nint32_t StepperCtrl::measureError(void)\n{\n\t//LOG(\"current %d desired %d %d\",(int32_t) currentLocation, (int32_t)getDesiredLocation(), numSteps);\n\n\treturn ((int32_t)currentLocation-(int32_t)getDesiredLocation());\n}\n\n/*\nbool StepperCtrl::changeMicrostep(uint16_t microSteps)\n{\n\tbool state=TC5_ISR_Enabled;\n\tdisableTCInterrupts();\n\tsystemParams.microsteps=microSteps;\n\tmotorReset();\n\tif (state) enableTCInterrupts();\n\treturn true;\n}\n */\nAngle StepperCtrl::maxCalibrationError(void)\n{\n\t//Angle startingAngle;\n\tbool done=false;\n\tint32_t mean;\n\tint32_t maxError=0, j;\n\tint16_t dist;\n\tuint16_t angle=0;\n\tbool feedback=enableFeedback;\n\tuint16_t microSteps=systemParams.microsteps;\n\tint32_t steps;\n\tbool state=TC5_ISR_Enabled;\n\tdisableTCInterrupts();\n\n\n\tif (false == calTable.calValid())\n\t{\n\t\treturn ANGLE_MAX;\n\t}\n\n\tenableFeedback=false;\n\tj=0;\n\tLOG(\"Running calibration test\");\n\n\tsystemParams.microsteps=1;\n\tmotorReset();\n\tsteps=0;\n\n\twhile(!done)\n\t{\n\t\tAngle cal;\n\t\tAngle act, desiredAngle;\n\n\t\t//todo we should measure mean and wait until stable.\n\t\tdelay(200);\n\t\tmean=sampleMeanEncoder(200);\n\t\tdesiredAngle=(uint16_t)(getDesiredLocation() & 0x0FFFFLL);\n\n\t\tcal=calTable.getCal(desiredAngle);\n\t\tdist=Angle(mean)-cal;\n\t\tact=calTable.fastReverseLookup(cal);\n\n\t\tLOG(\"actual %d, cal %d\",mean,(uint16_t)cal);\n\t\tLOG(\"desired %d\",(uint16_t)desiredAngle);\n\t\tLOG(\"numSteps %d\", numSteps);\n\n\t\tLOG(\"cal error for step %d is %d\",j,dist);\n\t\tLOG(\"mean %d, cal %d\",mean, (uint16_t)cal);\n\n\t\tupdateStep(0,1);\n\n\t\t// move one half step at a time, a full step move could cause a move backwards depending on how current ramps down\n\t\tsteps+=A4954_NUM_MICROSTEPS/2;\n\t\tstepperDriver.move(steps,motorParams.currentMa);\n\n\t\tdelay(50);\n\t\tsteps+=A4954_NUM_MICROSTEPS/2;\n\t\tstepperDriver.move(steps,motorParams.currentMa);\n\n\n\t\tif (400==motorParams.fullStepsPerRotation)\n\t\t{\n\t\t\tdelay(100);\n\t\t\tupdateStep(0,1);\n\t\t\t// move one half step at a time, a full step move could cause a move backwards depending on how current ramps down\n\t\t\tsteps+=A4954_NUM_MICROSTEPS/2;\n\t\t\tstepperDriver.move(steps,motorParams.currentMa);\n\n\t\t\tdelay(100);\n\t\t\tsteps+=A4954_NUM_MICROSTEPS/2;\n\t\t\tstepperDriver.move(steps,motorParams.currentMa);\n\t\t}\n\t\t//delay(400);\n\n\t\tif (abs(dist)>maxError)\n\t\t{\n\t\t\tmaxError=abs(dist);\n\t\t}\n\n\t\tj++;\n\t\tif (j>=(1*CALIBRATION_TABLE_SIZE+3))\n\t\t{\n\t\t\tdone=true;\n\t\t}\n\n\n\t}\n\tsystemParams.microsteps=microSteps;\n\tmotorReset();\n\tenableFeedback=feedback;\n\tif (state) enableTCInterrupts();\n\tLOG(\"max error is %d cnts\", maxError);\n\treturn Angle((uint16_t)maxError);\n}\n\n\n//The encoder needs to be calibrated to the motor.\n// we will assume full step detents are correct,\n// ex 1.8 degree motor will have 200 steps for 360 degrees.\n// We also need to calibrate the phasing of the motor\n// to the A4954. This requires that the A4954 \"step angle\" of\n// zero is the first entry in the calibration table.\nbool StepperCtrl::calibrateEncoder(void)\n{\n\tint32_t x,i,j;\n\tuint32_t angle=0;\n\tint32_t steps;\n\tbool done=false;\n\n\tint32_t mean;\n\tuint16_t microSteps=systemParams.microsteps;\n\tbool feedback=enableFeedback;\n\tbool state=TC5_ISR_Enabled;\n\n\tdisableTCInterrupts();\n\n\tenableFeedback=false;\n\tsystemParams.microsteps=1;\n\tLOG(\"reset motor\");\n\tmotorReset();\n\tLOG(\"Starting calibration\");\n\tdelay(200);\n\tsteps=0;\n\tj=0;\n\twhile(!done)\n\t{\n\t\tint ii,N;\n\t\tAngle cal,desiredAngle;\n\t\tdesiredAngle=(uint16_t)(getDesiredLocation() & 0x0FFFFLL);\n\t\tcal=calTable.getCal(desiredAngle);\n\t\tdelay(200);\n\t\tmean=sampleMeanEncoder(200);\n\n\t\tLOG(\"Previous cal distance %d, %d, mean %d, cal %d\",j, cal-Angle((uint16_t)mean), mean, (uint16_t)cal);\n\n\t\tcalTable.updateTableValue(j,mean);\n\n\t\tupdateStep(0,1);\n\n\t\tN=2;\n\t\t// move one half step at a time, a full step move could cause a move backwards depending on how current ramps down\n\t\tfor (ii=0; ii<N; ii++)\n\t\t{\n\t\t\tsteps+=A4954_NUM_MICROSTEPS/N;\n\t\t\tstepperDriver.move(steps,motorParams.currentMa);\n\n\t\t\tdelay(50);\n\t\t}\n\t\t//steps+=A4954_NUM_MICROSTEPS/2;\n\t\t//stepperDriver.move(steps,motorParams.currentMa);\n\n\n\n\t\tif (400==motorParams.fullStepsPerRotation)\n\t\t{\n\t\t\tdelay(100);\n\t\t\tupdateStep(0,1);\n\t\t\t// move one half step at a time, a full step move could cause a move backwards depending on how current ramps down\n\t\t\tsteps+=A4954_NUM_MICROSTEPS/2;\n\t\t\tstepperDriver.move(steps,motorParams.currentMa);\n\n\t\t\tdelay(100);\n\t\t\tsteps+=A4954_NUM_MICROSTEPS/2;\n\t\t\tstepperDriver.move(steps,motorParams.currentMa);\n\n\t\t}\n\n\t\tj++;\n\t\tif (j>=CALIBRATION_TABLE_SIZE)\n\t\t{\n\t\t\tdone=true;\n\t\t}\n\n\n\t}\n\t//calTable.printCalTable();\n\t//calTable.smoothTable();\n\t//calTable.printCalTable();\n\tcalTable.saveToFlash(); //saves the calibration to flash\n\tcalTable.printCalTable();\n\n\tsystemParams.microsteps=microSteps;\n\tmotorReset();\n\tenableFeedback=feedback;\n\tif (state) enableTCInterrupts();\n\treturn done;\n}\n\n\n\n\n\nstepCtrlError_t StepperCtrl::begin(void)\n{\n\tint i;\n\tfloat x;\n\n\n\tenableFeedback=false;\n\tvelocity=0;\n\tcurrentLocation=0;\n\tnumSteps=0;\n\n\t//we have to update from NVM before moving motor\n\tupdateParamsFromNVM(); //update the local cache from the NVM\n\n\tLOG(\"start up encoder\");\n\tif (false == encoder.begin(PIN_AS5047D_CS))\n\t{\n\t\treturn STEPCTRL_NO_ENCODER;\n\t}\n\n\tLOG(\"cal table init\");\n\tcalTable.init();\n\n\tstartUpEncoder=(uint16_t)getEncoderAngle();\n\tWARNING(\"start up encoder %d\",startUpEncoder);\n\n\tLOG(\"start stepper driver\");\n\tstepperDriver.begin();\n\n#ifdef NEMA17_SMART_STEPPER_3_21_2017\n\tif (NVM->motorParams.parametersVaild)\n\t{\n\t\t//lets read the motor voltage\n\t\tif (GetMotorVoltage()<5)\n\t\t{\n\t\t\t//if we have less than 5 volts the motor is not powered\n\t\t\tuint32_t x;\n\t\t\tx=(uint32_t)(GetMotorVoltage()*1000.0);\n\t\t\tERROR(\"Motor voltage is %\" PRId32 \"mV\",x); //default printf does not support floating point numbers\n\t\t\tERROR(\"Motor may not have power\");\n\t\t\treturn STEPCTRL_NO_POWER;\n\t\t}\n\t\tbool state=enterCriticalSection();\n\t\tsetLocationFromEncoder(); //measure new starting point\n\t\texitCriticalSection(state);\n\n\t}else\n\t{\n\t\tLOG(\"measuring step size\");\n\t\tx=measureStepSize();\n\t\tif (abs(x)<0.5)\n\t\t{\n\t\t\tERROR(\"Motor may not have power\");\n\t\t\treturn STEPCTRL_NO_POWER;\n\t\t}\n\t}\n\n#else\n\tLOG(\"measuring step size\");\n\tx=measureStepSize();\n\tif (abs(x)<0.5)\n\t{\n\t\tERROR(\"Motor may not have power\");\n\t\treturn STEPCTRL_NO_POWER;\n\t}\n#endif\n\n\n\tLOG(\"Checking the motor parameters\");\n\t//todo we might want to move this up a level to the NZS\n\t//  especially since it has default values\n\tif (false == NVM->motorParams.parametersVaild)\n\t{\n\t\tMotorParams_t params;\n\t\tWARNING(\"NVM motor parameters are not set, we will update\");\n\n\t\t//power could have just been applied and step size read wrong\n\t\t// if we are more than 200 steps/rotation which is most common\n\t\t// lets read again just to be sure.\n\t\tif (abs(x)<1.5)\n\t\t{\n\t\t\t//run step test a second time to be sure\n\t\t\tx=measureStepSize();\n\t\t}\n\n\t\tif (x>0)\n\t\t{\n\t\t\tmotorParams.motorWiring=true;\n\t\t} else\n\t\t{\n\t\t\tmotorParams.motorWiring=false;\n\t\t}\n\t\tif (abs(x)<=1.2)\n\t\t{\n\t\t\tmotorParams.fullStepsPerRotation=400;\n\t\t}else\n\t\t{\n\t\t\tmotorParams.fullStepsPerRotation=200;\n\t\t}\n\n\t\tmemcpy((void *)&params, (void *)&motorParams,sizeof(motorParams));\n\t\tnvmWriteMotorParms(params);\n\t}\n\n\tLOG(\"Motor params are now good\");\n\tLOG(\"fullSteps %d\", motorParams.fullStepsPerRotation);\n\tLOG(\"motorWiring %d\", motorParams.motorWiring);\n\tLOG(\"currentMa %d\", motorParams.currentMa);\n\tLOG(\"holdCurrentMa %d\", motorParams.currentHoldMa);\n\tLOG(\"homeMa %d\", motorParams.homeMa);\n\tLOG(\"homeHoldMa %d\", motorParams.homeHoldMa);\n\n\n\tupdateParamsFromNVM(); //update the local cache from the NVM\n\n\n\tif (false == calTable.calValid())\n\t{\n\t\treturn STEPCTRL_NO_CAL;\n\t}\n\n\n\tenableFeedback=true;\n\tsetupTCInterrupts();\n\tenableTCInterrupts();\n\treturn STEPCTRL_NO_ERROR;\n\n}\n\nAngle StepperCtrl::sampleAngle(void)\n{\n\tuint16_t angle;\n\tint32_t x,y;\n\n#ifdef NZS_AS5047_PIPELINE\n\t//read encoder twice such that we get the latest sample as the pipeline is always once sample behind\n\n\n\ty=encoder.readEncoderAnglePipeLineRead(); //convert the 14 bit encoder value to a 16 bit number\n\tx=encoder.readEncoderAnglePipeLineRead();\n\n\n\tangle=((uint32_t)(x)*4); //convert the 14 bit encoder value to a 16 bit number\n#else\n\tangle=((uint32_t)encoder.readEncoderAngle())<<2; //convert the 14 bit encoder value to a 16 bit number\n#endif\n\treturn Angle(angle);\n}\n\n//when sampling the mean of encoder if we are on roll over\n// edge we can have an issue so we have this function\n// to do the mean correctly\nAngle StepperCtrl::sampleMeanEncoder(int32_t numSamples)\n{\n\n\tint32_t i,last,x=0;\n\tint64_t mean=0;\n\tint32_t min,max;\n\n\tmean=0;\n\tfor (i=0; i<(numSamples); i++)\n\t{\n\t\tint32_t d;\n\t\tlast=x;\n\t\tx=(((int32_t)encoder.readEncoderAngle())*4);\n\t\tif (encoder.getError())\n\t\t{\n#ifndef MECHADUINO_HARDWARE\n\t\t\tSerialUSB.println(\"AS5047 Error\");\n#else\n      Serial5.print(\"AS5047 Error\");\n#endif\n\t\t\tdelay(1000);\n\t\t\treturn 0;\n\t\t}\n\t\tif(i==0)\n\t\t{\n\t\t\tlast=x;\n\t\t\tmin=x;\n\t\t\tmax=x;\n\t\t}\n\t\t//LOG(\"i %d,min %d, max %d, last %d, x %d\", i, min, max, last, x);\n\t\tif (abs(last-x)>65536/2)\n\t\t{\n\t\t\tif (last>x)\n\t\t\t{\n\t\t\t\tx=x+65536;\n\t\t\t} else\n\t\t\t{\n\t\t\t\tx=x-65536;\n\t\t\t}\n\t\t}\n\n\n\t\tif (x>max)\n\t\t{\n\t\t\tmax=x;\n\t\t}\n\t\tif (x<min)\n\t\t{\n\t\t\tmin=x;\n\t\t}\n\n\t\tmean=mean+(x);\n\t}\n\n\tLOG(\"min %d, max %d, mean %d\", min, max, (int32_t)(mean/numSamples));\n\treturn Angle(mean/numSamples);\n}\n\nvoid StepperCtrl::feedback(bool enable)\n{\n\tdisableTCInterrupts();\n\tmotorReset();\n\tenableFeedback=enable;\n\tif (enable == true)\n\t{\n\t\tenableTCInterrupts();\n\t}\n}\n\n\nvoid StepperCtrl::updateSteps(int64_t steps)\n{\n\tbool state=TC5_ISR_Enabled;\n\tdisableTCInterrupts();\n\tnumSteps+=steps;\n\tif (state) enableTCInterrupts();\n}\n\nvoid StepperCtrl::updateStep(int dir, uint16_t steps)\n{\n\tbool state=TC5_ISR_Enabled;\n\tdisableTCInterrupts();\n\tif (dir)\n\t{\n\t\tnumSteps-=steps;\n\t}else\n\t{\n\t\tnumSteps+=steps;\n\t}\n\tif (state) enableTCInterrupts();\n}\n\nvoid StepperCtrl::requestStep(int dir, uint16_t steps)\n{\n\tbool state;\n\tstate=TC5_ISR_Enabled;\n\tdisableTCInterrupts();\n\n\tif (dir)\n\t{\n\t\tnumSteps-=steps;\n\t}else\n\t{\n\t\tnumSteps+=steps;\n\t}\n\n\tif (false == enableFeedback)\n\t{\n\t\tmoveToAngle(getDesiredLocation(),motorParams.currentMa);\n\t}\n\tif (state) enableTCInterrupts();\n}\n\n\nvoid StepperCtrl::move(int dir, uint16_t steps)\n{\n\tint64_t ret;\n\tint32_t n;\n\n\n\n\tupdateStep(dir,steps);\n\n\tif (false == enableFeedback)\n\t{\n\t\tn=systemParams.microsteps;\n\t\tret=((int64_t)numSteps * A4954_NUM_MICROSTEPS+(n/2))/n;\n\t\tn=A4954_NUM_MICROSTEPS*motorParams.fullStepsPerRotation;\n\t\twhile(ret>n)\n\t\t{\n\t\t\tret-=n;\n\t\t}\n\t\twhile(ret<-n)\n\t\t{\n\t\t\tret+=n;\n\t\t}\n\t\tn=(int32_t)(ret);\n\t\tLOG(\"s is %d %d\",n,steps);\n\t\tstepperDriver.move(n,motorParams.currentMa);\n\t}\n\n\n}\n\n\n\nint64_t StepperCtrl::getDesiredLocation(void)\n{\n\tint64_t ret;\n\tint32_t n;\n\tbool state=TC5_ISR_Enabled;\n\tdisableTCInterrupts();\n\tn=motorParams.fullStepsPerRotation * systemParams.microsteps;\n\tret=((int64_t)numSteps * (int64_t)ANGLE_STEPS+(n/2))/n ;\n\tif (state) enableTCInterrupts();\n\treturn ret;\n}\n\n\n//int32_t StepperCtrl::getSteps(void)\n//{\n//\tint32_t ret;\n//\tbool state=enterCriticalSection();\n//\tret=numSteps;\n//\texitCriticalSection(state);\n//\treturn ret;\n//}\n\nvoid StepperCtrl::moveToAbsAngle(int32_t a)\n{\n\n\tint64_t ret;\n\tint32_t n;\n\n\n\tn=motorParams.fullStepsPerRotation * systemParams.microsteps;\n\n\tret=(((int64_t)a+zeroAngleOffset)*n+ANGLE_STEPS/2)/(int32_t)ANGLE_STEPS;\n\tbool state=enterCriticalSection();\n\tnumSteps=ret;\n\texitCriticalSection(state);\n}\n\nvoid StepperCtrl::moveToAngle(int32_t a, uint32_t ma)\n{\n\t//we need to convert 'Angle' to A4954 steps\n\ta=a % ANGLE_STEPS;  //we only interested in the current angle\n\n\n\ta=DIVIDE_WITH_ROUND( (a*motorParams.fullStepsPerRotation*A4954_NUM_MICROSTEPS), ANGLE_STEPS);\n\n\t//LOG(\"move %d %d\",a,ma);\n\tstepperDriver.move(a,ma);\n\n}\n\nAngle StepperCtrl::getEncoderAngle(void)\n{\n\tAngle a;\n\tbool state=enterCriticalSection();\n\ta=calTable.fastReverseLookup(sampleAngle());\n\texitCriticalSection(state);\n\treturn a;\n}\n\nint64_t StepperCtrl::getCurrentLocation(void)\n{\n\tAngle a;\n\tint32_t x;\n\tbool state=TC5_ISR_Enabled;\n\tdisableTCInterrupts();\n\ta=calTable.fastReverseLookup(sampleAngle());\n\tx=(int32_t)a - (int32_t)((currentLocation) & ANGLE_MAX);\n\n\tif (x>((int32_t)ANGLE_STEPS/2))\n\t{\n\t\tcurrentLocation -= ANGLE_STEPS;\n\t}\n\tif (x<-((int32_t)ANGLE_STEPS/2))\n\t{\n\t\tcurrentLocation += ANGLE_STEPS;\n\t}\n\tcurrentLocation=(currentLocation & 0xFFFFFFFFFFFF0000UL) | (uint16_t)a;\n\tif (state) enableTCInterrupts();\n\treturn currentLocation;\n\n}\n\n\n\nint64_t StepperCtrl::getCurrentAngle(void)\n{\n\tint64_t x;\n\tx=getCurrentLocation()-zeroAngleOffset;\n\treturn x;\n}\n\n\nint64_t StepperCtrl::getDesiredAngle(void)\n{\n\tint64_t x;\n\tx=getDesiredLocation()-zeroAngleOffset;\n\treturn x;\n}\n\nvoid StepperCtrl::setVelocity(int64_t vel)\n{\n\tbool state=enterCriticalSection();\n\n\tvelocity=vel;\n\texitCriticalSection(state);\n}\n\nint64_t StepperCtrl::getVelocity(void)\n{\n\tint64_t vel;\n\tbool state=enterCriticalSection();\n\n\tvel=velocity;\n\texitCriticalSection(state);\n\treturn vel;\n}\n\nvoid StepperCtrl::PrintData(void)\n{\n\tchar s[128];\n\tbool state=enterCriticalSection();\n\tsprintf(s, \"%u,%u,%u\", (uint32_t)numSteps,(uint32_t)getDesiredAngle(),(uint32_t)getCurrentAngle());\n#ifndef MECHADUINO_HARDWARE\n\tSerialUSB.println(s);\n#endif\n\texitCriticalSection(state);\n}\n//this is the velocity PID feedback loop\nbool StepperCtrl::vpidFeedback(int64_t desiredLoc, int64_t currentLoc, Control_t *ptrCtrl)\n{\n\tint32_t fullStep=ANGLE_STEPS/motorParams.fullStepsPerRotation;\n\tstatic int64_t lastY=getCurrentLocation();\n\tstatic int32_t lastError=0;\n\tstatic int64_t Iterm=0;\n\tint64_t y,z;\n\tint64_t v,dy;\n\tint64_t u;\n\n\t//get the current location\n\ty =currentLoc;\n\n\tv=y-lastY;\n\n\t//add in phase prediction\n\ty=y+calculatePhasePrediction(currentLoc);\n\tz=y;\n\n\tlastY=y;\n\n\tv=v*NZS_CONTROL_LOOP_HZ;\n\n\n\tif (enableFeedback) //if ((micros()-lastCall)>(updateRate/10))\n\t{\n\t\tint64_t error,U;\n\t\terror = velocity-v;\n\n\t\tIterm += (vPID.Ki * error);\n\t\tif (Iterm>(16*4096*CTRL_PID_SCALING *(int64_t)motorParams.currentMa))\n\t\t{\n\t\t\tIterm=(16*4096*CTRL_PID_SCALING *(int64_t)motorParams.currentMa);\n\t\t}\n\t\tif (Iterm<-(16*4096*CTRL_PID_SCALING *(int64_t)motorParams.currentMa))\n\t\t{\n\t\t\tIterm=-(16*4096*CTRL_PID_SCALING*(int64_t)motorParams.currentMa);\n\t\t}\n\n\t\tu=((vPID.Kp * error) + Iterm - (vPID.Kd *(lastError-error)));\n\t\tU=abs(u)/CTRL_PID_SCALING/1024; //scale the error to make PID params close to 1.0;//scale the error to make PID params close to 1.0 by dividing by 1024\n\n\t\tif (U>motorParams.currentMa)\n\t\t{\n\t\t\tU=motorParams.currentMa;\n\t\t}\n\n\t\t//when error is positive we need to move reverse direction\n\t\tif (u>0)\n\t\t{\n\t\t\tz=z+(fullStep);\n\t\t}else\n\t\t{\n\t\t\tz=z-(fullStep);\n\n\t\t}\n\n\t\tptrCtrl->ma=U;\n\t\tptrCtrl->angle=(int32_t)z;\n\t\tmoveToAngle(z,U);\n\t\tloopError=error;\n\t\tlastError=error;\n\t} else\n\t{\n\t\tlastError=0;\n\t\tIterm=0;\n\t}\n\n\tif (abs(lastError)>(systemParams.errorLimit))\n\t{\n\t\treturn 1;\n\t}\n\treturn 0;\n}\n\n\n//Since we are doing fixed point math our\n// threshold needs to be large.\n// We need a large threshold when we have fast update\n// rate as well. But for most part it is random\nbool StepperCtrl::pidFeedback(int64_t desiredLoc, int64_t currentLoc, Control_t *ptrCtrl)\n{\n\tstatic int count=0;\n\n\tstatic int32_t maxError=0;\n\tstatic int32_t lastError=0;\n\tstatic int32_t Iterm=0;\n\tint32_t ma;\n\tint64_t y;\n\n\tint32_t fullStep=ANGLE_STEPS/motorParams.fullStepsPerRotation;\n\tint32_t dy;\n\n\ty=currentLoc;\n\n\t//add in phase prediction\n\ty=y+calculatePhasePrediction(currentLoc);\n\n\tif (enableFeedback) //if ((micros()-lastCall)>(updateRate/10))\n\t{\n\t\tint64_t error,u;\n\t\tint32_t U,x;\n\n\t\t//error is in units of degrees when 360 degrees == 65536\n\t\terror=(desiredLoc-y); //error is currentPos-desiredPos\n\n\t\tIterm+=(pPID.Ki * error);\n\n\t\tif (systemParams.homePin>0 && digitalRead(systemParams.homePin)==0)\n\t\t{\n\t\t\tma=motorParams.homeMa;\n\t\t} else\n\t\t{\n\t\t\tma=motorParams.currentMa;\n\t\t}\n\n\t\t//Over the long term we do not want error\n\t\t// to be much more than our threshold\n\t\tif (Iterm> (ma*CTRL_PID_SCALING) )\n\t\t{\n\t\t\tIterm=(ma*CTRL_PID_SCALING) ;\n\t\t}\n\t\tif (Iterm<-(ma*CTRL_PID_SCALING)  )\n\t\t{\n\t\t\tIterm=-(ma*CTRL_PID_SCALING) ;\n\t\t}\n\n\t\tu=((pPID.Kp * error) + Iterm - (pPID.Kd *(lastError-error)));\n\n\t\tU=abs(u)/CTRL_PID_SCALING;\n\t\tif (U>ma)\n\t\t{\n\t\t\tU=ma;\n\t\t}\n\n\n\t\t//when error is positive we need to move reverse direction\n\t\tif (u>0)\n\t\t{\n\t\t\ty=y+fullStep;\n\t\t}else\n\t\t{\n\t\t\ty=y-fullStep;\n\n\t\t}\n\n\t\tptrCtrl->ma=U;\n\t\tptrCtrl->angle=(int32_t)y;\n\t\tmoveToAngle(y,U);\n\t\tloopError=error;\n\t\tlastError=error;\n\n\t}else\n\t{\n\t\tlastError=0;\n\t\tIterm=0;\n\t}\n\n\tif (abs(lastError)>(systemParams.errorLimit))\n\t{\n\t\treturn 1;\n\t}\n\treturn 0;\n}\n\n\n\n// the phase prediction tries to predict error from sensor based\n// on current location and previous location.\n// TODO our error can help in the phase prediction.\n// if the error\nint64_t StepperCtrl::calculatePhasePrediction(int64_t currentLoc)\n{\n\tstatic int64_t lastLoc=0;\n\tstatic int32_t mean=0;\n\tint32_t dx,x;\n\n#ifndef ENABLE_PHASE_PREDICTION\n\treturn 0;\n#endif\n\n\t//what was our change in the location\n\tdx=currentLoc-lastLoc;  //max value is typically less than 327(1.8 degrees) or 163(0.9 degree)\n\n\t//if the motor direction changes,  zero phase prediction\n\tif (SIGN(dx) != SIGN(mean))\n\t{\n\t\t//last thing we want is phase prediction during direction change.\n\t\tmean=0;\n\t} else\n\t{\n\t\tif (abs(dx)>abs(mean))\n\t\t{\n\t\t\t//increase mean really slowly, 2048 ~ 1/3 second with 6khz processing loop\n\t\t\t// in fixed point since the dx is so small we need to scale it up to average\n\t\t\t// dx has be be greater than 8 to change the mean...\n\t\t\t// this limits the acceleration of motor above max processing speed (6k*1.8)=1800RPM\n\t\t\t//  however I doubt the motor can accelerate that fast with any load...\n\t\t\t//  The average helps prevent external impulse error from causing prediction to cause issues.\n\t\t\tmean=DIVIDE_WITH_ROUND(2047*mean + dx*128, 2048);\n\t\t}else\n\t\t{\n\t\t\t//decrease fast\n\t\t\t//do not add more phase prediction than the difference in last two samples.\n\t\t\tmean=dx*128;\n\t\t}\n\t}\n\tlastLoc=currentLoc;\n\n\tx= mean/128; //scale back to normal\n\treturn x;\n}\n\n\nbool StepperCtrl::determineError(int64_t currentLoc,int64_t error)\n{\n\tstatic int64_t lastLocation=0;\n\tstatic int64_t lastError=0;\n\tstatic int64_t lastVelocity=0;\n\n\tint64_t velocity;\n\n\t//since this is called on periodic timer the velocity\n\t// is propotional to the change in location\n\t// one rotation per second is velocity of 10, assumming 6khz update rate\n\t// one rotation per minute is 10/60 velocity units\n\t// since this is less than 1 we will scale the velo\n\tvelocity=(currentLoc-lastLocation);\n\n\tif (velocity>0 &&  lastVelocity>0)\n\t{\n\n\t}\n\n\n\tlastVelocity=velocity;\n\tlastError=error;\n\tlastLocation=currentLoc;\n}\n\n//this was written to do the PID loop not modeling a DC servo\n// but rather using features of stepper motor.\nbool StepperCtrl::simpleFeedback(int64_t desiredLoc, int64_t currentLoc, Control_t *ptrCtrl)\n{\n\tstatic uint32_t t0=0;\n\tstatic uint32_t calls=0;\n\tbool ret=false;\n\n\tstatic int32_t maxError=0;\n\tstatic int32_t lastError=0;\n\tstatic int32_t i=0;\n\tstatic int32_t iTerm=0;\n\t//static int64_t lastY=getCurrentLocation();\n\tstatic int32_t velocity=0;\n\tstatic int32_t errorCount=0;\n\n\tstatic bool lastProbeState=false;\n\tstatic int64_t probeStartAngle=0;\n\tstatic int32_t maxMa=0;\n\n\n\tstatic int64_t filteredError=0;\n\tstatic int32_t probeCount=0;\n\n\tint32_t fullStep=ANGLE_STEPS/motorParams.fullStepsPerRotation;\n\n\tint32_t ma=0;\n\n\tint64_t y;\n\n\n\n\t//estimate our current location based on the encoder\n\ty=currentLoc;\n\n\t//add in phase prediction\n\ty=y+calculatePhasePrediction(currentLoc);\n\n\n\t//we can limit the velocity by controlling the amount we move per call to this function\n\t// this only works for velocity greater than 100rpm\n\t/*\tif (velocity!=0)\n\t{\n\t\tfullStep=velocity/NZS_CONTROL_LOOP_HZ;\n\t}\n\tif (fullStep==0)\n\t{\n\t\tfullStep=1; //this RPM of (1*NZS_CONTROL_LOOP_HZ)/60 ie at 6Khz it is 100RPM\n\t}\n\t */\n\tif (enableFeedback)\n\t{\n\t\tint64_t error;\n\t\tint32_t u;\n\n\t\tint32_t x;\n\t\tint32_t kp;\n\n\t\t//error is in units of degrees when 360 degrees == 65536\n\t\terror=(desiredLoc-y);//measureError(); //error is currentPos-desiredPos\n\n\n\t\t//data[i]=(int16_t)error;\n\t\t//i++;\n\t\tif (i>=N_DATA)\n\t\t{\n\t\t\ti=0;\n\t\t}\n\n\t\tkp=sPID.Kp;\n\t\tif (1)//(abs(error)<(fullStep))\n\t\t{\n\t\t\tiTerm+=(sPID.Ki*error);\n\t\t\tx=iTerm/CTRL_PID_SCALING;\n\t\t}else\n\t\t{\n\t\t\tkp=(CTRL_PID_SCALING*9)/10;\n\t\t\tx=0;\n\t\t\tiTerm=0;\n\t\t}\n\n\t\tif (x>fullStep)\n\t\t{\n\t\t\tx=fullStep;\n\t\t\tiTerm=fullStep;\n\t\t}\n\t\tif (x<-fullStep)\n\t\t{\n\t\t\tx=-fullStep;\n\t\t\tiTerm=-fullStep;\n\t\t}\n\n\n\t\tu=(kp * error)/CTRL_PID_SCALING+x+(sPID.Kd *(error-lastError))/CTRL_PID_SCALING;\n\n\n\t\t//limit error to full step\n\t\tif (u>fullStep)\n\t\t{\n\t\t\tu=fullStep;\n\t\t}\n\t\tif (u<-fullStep)\n\t\t{\n\t\t\tu=-fullStep;\n\t\t}\n\n\t\tma=(abs(u)*(motorParams.currentMa-motorParams.currentHoldMa))/ fullStep + motorParams.currentHoldMa;\n\t\tif (ma>motorParams.currentMa)\n\t\t{\n\t\t\tma=motorParams.currentMa;\n\t\t}\n\t\t//maxMa=motorParams.currentMa;\n\n\t\tif (systemParams.homePin>=0)\n\t\t{\n\n\t\t\tif (digitalRead(systemParams.homePin)==0)\n\t\t\t{\n\t\t\t\tif (lastProbeState==false)\n\t\t\t\t{\n\t\t\t\t\t//record our current angle for homing\n\t\t\t\t\tprobeStartAngle=desiredLoc;\n\t\t\t\t\tprobeCount=0;\n\t\t\t\t\tmaxMa=0;\n\t\t\t\t}\n\t\t\t\tlastProbeState=true;\n\t\t\t\tprobeCount++;\n\t\t\t\t//we will lower current after whe have moved some amount\n\n\t\t\t\tif (probeCount > NZS_CONTROL_LOOP_HZ && probeCount <(2* NZS_CONTROL_LOOP_HZ))\n\t\t\t\t{\n\t\t\t\t\tmaxMa+=ma;\n\t\t\t\t\tif (abs(error)>maxError)\n\t\t\t\t\t{\n\t\t\t\t\t\tmaxError=abs(error);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\tif (probeCount>(2*NZS_CONTROL_LOOP_HZ))\n\t\t\t\t{\n\t\t\t\t\t//\t\t\t\t\tma=(abs(u)*(maxMa))/ fullStep;// + motorParams.homeHoldMa;\n\t\t\t\t\t//\t\t\t\t\tif (ma>motorParams.homeMa)\n\t\t\t\t\t//\t\t\t\t\t{\n\t\t\t\t\t//\t\t\t\t\t\tma=motorParams.homeMa;\n\t\t\t\t\t//\t\t\t\t\t}\n\n\t\t\t\t\t//if (ma>maxMa/NZS_CONTROL_LOOP_HZ)\n\t\t\t\t\t{\n\t\t\t\t\t\tma=((maxMa/NZS_CONTROL_LOOP_HZ)*9)/10;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else\n\t\t\t{\n\t\t\t\tlastProbeState=false;\n\t\t\t}\n\t\t}else\n\t\t{\n\t\t\tmaxError=0;\n\t\t\tprobeCount=0;\n\t\t\t//maxMa=0;\n\t\t}\n\n\n\t\ty=y+u;\n\t\tptrCtrl->ma=ma;\n\t\tptrCtrl->angle=(int32_t)y;\n\t\tmoveToAngle(y,ma); //35us\n\n\t\tlastError=error;\n\t\tloopError=error;\n\t\t//stepperDriver.limitCurrent(99);\n\t}\n\n\t//filteredError=(filteredError*15+lastError)/16;\n\n\tif (probeCount>(2*NZS_CONTROL_LOOP_HZ))\n\t{\n\t\tif (abs(lastError) > maxError )\n\t\t{\n\n\t\t\terrorCount++;\n\t\t\tif (errorCount>(10))\n\t\t\t{\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t}\n\telse\n\t{\n\t\tif (abs(lastError) > systemParams.errorLimit)\n\t\t{\n\n\t\t\terrorCount++;\n\t\t\tif (errorCount>(NZS_CONTROL_LOOP_HZ/128)) // error needs to exist for some time period\n\t\t\t{\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tif (errorCount>0)\n\t{\n\t\terrorCount--;\n\t}\n\n\t//errorCount=0;\n\tstepperDriver.limitCurrent(99); //reduce noise on low error\n\treturn 0;\n\n}\n\n\nvoid StepperCtrl::enable(bool enable)\n{\n\tbool state=TC5_ISR_Enabled;\n\tdisableTCInterrupts();\n\tbool feedback=enableFeedback;\n\n\tstepperDriver.enable(enable); //enable or disable the stepper driver as needed\n\n\n\tif (enabled==true && enable==false)\n\t{\n\t\tfeedback = false;\n\t}\n\tif (enabled==false && enable==true) //if we are enabling previous disabled motor\n\t{\n\t\tfeedback = true;\n\t\tsetLocationFromEncoder();\n\t}\n\n\tenabled=enable;\n\tenableFeedback=feedback;\n\tif (state) enableTCInterrupts();\n}\n\n/*\nvoid StepperCtrl::testRinging(void)\n{\n\tuint16_t c;\n\tint32_t steps;\n\tint32_t microSteps=systemParams.microsteps;\n\tbool feedback=enableFeedback;\n\n\tenableFeedback=false;\n\tsystemParams.microsteps=1;\n\tmotorReset();\n\tfor (c=2000; c>10; c=c-10)\n\t{\n\t\tSerialUSB.print(\"Current \");\n\t\tSerialUSB.println(c);\n\t\tsteps+=A4954_NUM_MICROSTEPS;\n\t\tstepperDriver.move(steps,NVM->SystemParams.currentMa);\n\t\tcurrentLimit=false;\n\t\tmeasure();\n\t}\n\tsystemParams.microsteps=microSteps;\n\tmotorReset();\n\tenableFeedback=feedback;\n}\n */\n\n//returns -1 if no data, else returns number of data points remaining.\nint32_t StepperCtrl::getLocation(Location_t *ptrLoc)\n{\n\tbool state=enterCriticalSection();\n\tint32_t n;\n\t//check for empty\n\tif (locReadIndx==locWriteIndx)\n\t{\n\t\t//empty data\n\t\texitCriticalSection(state);\n\t\treturn -1;\n\t}\n\n\t//else read data\n\tmemcpy(ptrLoc,(void *)&locs[locReadIndx], sizeof(Location_t));\n\n\t//update the read index\n\tlocReadIndx=(locReadIndx+1)%MAX_NUM_LOCATIONS;\n\n\t//calculate number of locations left\n\tn=((locWriteIndx+MAX_NUM_LOCATIONS)-locReadIndx)%MAX_NUM_LOCATIONS;\n\n\n\texitCriticalSection(state);\n\treturn n;\n}\n\nvoid StepperCtrl::updateLocTable(int64_t desiredLoc, int64_t currentLoc, Control_t *ptrCtrl)\n{\n\tbool state=enterCriticalSection();\n\tint32_t next;\n\n\t// set the next write location\n\tnext=(locWriteIndx+1)%MAX_NUM_LOCATIONS;\n\n\tif (next==locReadIndx)\n\t{\n\t\t//we are full, exit\n\t\texitCriticalSection(state);\n\t\t//RED_LED(true); //turn Red LED on to indciate buffer full\n\t\treturn;\n\t}\n\n\t//use ticks for the moment so we can tell if we miss data on the print.\n\tlocs[locWriteIndx].microSecs=(int32_t)micros();\n\tlocs[locWriteIndx].desiredLoc=(int32_t)(desiredLoc-zeroAngleOffset);\n\tlocs[locWriteIndx].actualLoc=(int32_t)(currentLoc-zeroAngleOffset);\n\tlocs[locWriteIndx].angle=(ptrCtrl->angle-zeroAngleOffset);\n\tlocs[locWriteIndx].ma=ptrCtrl->ma;\n\tlocWriteIndx=next;\n\n\n\texitCriticalSection(state);\n}\n\n\nbool StepperCtrl::processFeedback(void)\n{\n\tbool ret;\n\tint32_t us,j;\n\tControl_t ctrl;\n\tint64_t desiredLoc;\n\tint64_t currentLoc;\n\tint32_t steps;\n\tstatic int64_t mean=0;;\n\n\tus=micros();\n\n#ifdef USE_TC_STEP\n\tstatic int64_t lastSteps;\n\tint64_t x;\n\tx=getSteps()-lastSteps;\n\tupdateSteps(x);\n\tlastSteps+=x;\n#endif\n\n//\tsteps=getSteps();\n//\tif (steps>0)\n//\t{\n//\t\trequestStep(1, (uint16_t)steps);\n//\t}else\n//\t{\n//\t\trequestStep(0, (uint16_t)(-steps));\n//\t}\n\n\tdesiredLoc=getDesiredLocation();\n\n\tcurrentLoc=getCurrentLocation();\n\tmean=(31*mean+currentLoc+16)/32;\n\n#ifdef A5995_DRIVER //the A5995 is has more driver noise\n\tif (abs(currentLoc-mean)<ANGLE_FROM_DEGREES(0.9))\n#else\n\t\tif (abs(currentLoc-mean)<ANGLE_FROM_DEGREES(0.3))\n#endif\n\t\t{\n\t\t\tcurrentLoc=mean;\n\t\t}\n\n\n\n\tswitch (systemParams.controllerMode)\n\t{\n\tcase CTRL_POS_PID:\n\t{\n\t\tret=pidFeedback(desiredLoc, currentLoc,  &ctrl);\n\t\tbreak;\n\t}\n\tdefault:\n\tcase CTRL_SIMPLE:\n\t{\n\t\tret=simpleFeedback(desiredLoc, currentLoc,&ctrl);\n\t\tbreak;\n\t}\n\tcase CTRL_POS_VELOCITY_PID:\n\t{\n\t\tret=vpidFeedback(desiredLoc, currentLoc,&ctrl);\n\t\tbreak;\n\t}\n\t//TODO if disable feedback and someone switches mode\n\t// they will have to turn feedback back on.\n\tcase CTRL_OFF:\n\t{\n\t\tenableFeedback=false;\n\t\tbreak;\n\t}\n\tcase CTRL_OPEN:\n\t{\n\t\tenableFeedback=false;\n\t\tbreak;\n\t}\n\t}\n\tticks++;\n\tupdateLocTable(desiredLoc, currentLoc,&ctrl);\n\tloopTimeus=micros()-us;\n\treturn ret;\n}\n\n\n//auto tuning of PID parameters based on documentation here:\n// http://brettbeauregard.com/blog/2012/01/arduino-pid-autotune-library\n// http://www.controleng.com/search/search-single-display/relay-method-automates-pid-loop-tuning/4a5774decc.html\nvoid StepperCtrl::PID_Autotune(void)\n{\n\tint32_t noiseMin, noiseMax, error;\n\tint32_t eMin, eMax;\n\tint64_t mean;\n\tint32_t startAngle, thres;\n\tint32_t i,j;\n\tint32_t t0,t1;\n\tint32_t times[100];\n\tint32_t angle;\n\n\t//save previous state;\n\tuint16_t microSteps=systemParams.microsteps;\n\tbool feedback=enableFeedback;\n\tfeedbackCtrl_t prevCtrl=systemParams.controllerMode;\n\n\t//disable interrupts and feedback controller\n\tbool state=TC5_ISR_Enabled;\n\tdisableTCInterrupts();\n\tsystemParams.controllerMode=CTRL_POS_PID;\n\tenableFeedback=false;\n\tmotorReset();\n\t//nvmWritePID(1,0,0,2);\n\t//set the number of microsteps to 1\n\t//systemParams.microsteps=1;\n\tfor (i=0; i<10; i++)\n\t{\n\t\tangle=getCurrentLocation();\n\t}\n\t//\tpKp=NVM->PIDparams.Kp;\n\t//\tpKi=NVM->PIDparams.Ki;\n\t//\tpKd=NVM->PIDparams.Kd;\n\t//\tthreshold=NVM->PIDparams.Threshold;\n\n\t//enableTCInterrupts();\n\tmoveToAngle(angle,motorParams.currentMa);\n\n\n\t//moveToAngle(angle,NVM->SystemParams.currentMa);\n\t/*\n\t//next lets measure our noise on the encoder\n\tnoiseMin=(int32_t)ANGLE_MAX;\n\tnoiseMax=-(int32_t)ANGLE_MAX;\n\tmean=0;\n\tj=1000000UL/NZS_CONTROL_LOOP_HZ;\n\tprevAngle=sampleAngle();\n\tfor (i=0; i<(NZS_CONTROL_LOOP_HZ/2); i++)\n\t{\n\t\tAngle a;\n\t\ta=sampleAngle();\n\t\terror=(int32_t)(prevAngle-a);\n\n\t\tif (error<noiseMin)\n\t\t{\n\t\t\tnoiseMin=error;\n\t\t}\n\n\t\tif (error>noiseMax)\n\t\t{\n\t\t\tnoiseMax=error;\n\t\t}\n\t\tmean=mean+(int32_t)a;\n\t\tdelayMicroseconds(j);\n\n\t}\n\tmean=mean/i;\n\twhile (mean>ANGLE_MAX)\n\t{\n\t\tmean=mean-ANGLE_STEPS;\n\t}\n\twhile (mean<0)\n\t{\n\t\tmean=mean+ANGLE_STEPS;\n\t}\n\t//mean is the average of the encoder.\n\t */\n\n\n\n\tstepperDriver.move(0,motorParams.currentMa);\n\tdelay(1000);\n\n\t//now we need to do the relay control\n\tfor (i=0; i<10; i++)\n\t{\n\t\tstartAngle=getCurrentLocation();\n\t\tLOG(\"Start %d\", (int32_t)startAngle);\n\t}\n\tthres=startAngle + (int32_t)((ANGLE_STEPS/motorParams.fullStepsPerRotation)*10/9);\n\tLOG(\"Thres %d, start %d\",(int32_t)thres,(int32_t)startAngle);\n\teMin=(int32_t)ANGLE_MAX;\n\teMax=-(int32_t)ANGLE_MAX;\n\tint32_t reset=0;\n\tint32_t force=(motorParams.currentMa);\n\n\tfor (i=0; i<100; i++)\n\t{\n\t\tint32_t error;\n\t\tif (reset)\n\t\t{\n\t\t\tmotorReset();\n\t\t\tstepperDriver.move(0,motorParams.currentMa);\n\t\t\tdelay(1000);\n\t\t\tstartAngle=getCurrentLocation();\n\t\t\tLOG(\"Start %d\", (int32_t)startAngle);\n\t\t\tforce=force-100;\n\n\t\t\teMin=(int32_t)ANGLE_MAX;\n\t\t\teMax=-(int32_t)ANGLE_MAX;\n\n\t\t\tif (force<100)\n\t\t\t{\n\t\t\t\ti=100;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tLOG(\"force set to %d\",force);\n\t\t\ti=0;\n\t\t}\n\t\treset=0;\n\n\t\tstepperDriver.move(A4954_NUM_MICROSTEPS,force);\n\t\t//moveToAngle(startAngle+(ANGLE_STEPS/motorParams.fullStepsPerRotation),force);\n\t\t//stepperDriver.move(A4954_NUM_MICROSTEPS,NVM->SystemParams.currentMa);\n\t\tt0=micros();\n\n\t\terror=0;\n\t\twhile(error<=((ANGLE_STEPS/motorParams.fullStepsPerRotation)/2+40))\n\t\t{\n\t\t\tint32_t y;\n\t\t\ty=getCurrentLocation();\n\t\t\terror=y-startAngle;\n\t\t\t//LOG(\"Error1 %d\",error);\n\t\t\tif (error<eMin)\n\t\t\t{\n\t\t\t\teMin=error;\n\t\t\t}\n\t\t\tif (error>eMax)\n\t\t\t{\n\t\t\t\teMax=error;\n\t\t\t}\n\t\t\tif (abs(error)>ANGLE_STEPS/motorParams.fullStepsPerRotation*2)\n\t\t\t{\n\t\t\t\tLOG(\"large Error1 %d, %d, %d\",error, y, startAngle);\n\n\t\t\t\treset=1;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t}\n\n\t\tstepperDriver.move(0,force);\n\n\t\t//stepperDriver.move(0,NVM->SystemParams.currentMa);\n\t\tt1=micros();\n\n\t\terror=(ANGLE_STEPS/motorParams.fullStepsPerRotation);\n\t\twhile(error>=((ANGLE_STEPS/motorParams.fullStepsPerRotation)/2-40))\n\t\t{\n\t\t\terror=getCurrentLocation()-startAngle;\n\t\t\t//LOG(\"Error2 %d\",error);\n\t\t\tif (error<eMin)\n\t\t\t{\n\t\t\t\teMin=error;\n\t\t\t}\n\t\t\tif (error>eMax)\n\t\t\t{\n\t\t\t\teMax=error;\n\t\t\t}\n\t\t\tif (abs(error)>ANGLE_STEPS/motorParams.fullStepsPerRotation*2)\n\t\t\t{\n\t\t\t\tLOG(\"large Error2 %d\",error);\n\t\t\t\treset=1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\ttimes[i]=t1-t0;\n\n\t}\n\tfor (i=0; i<100; i++)\n\t{\n\t\tLOG(\"Time %d %d\",i,times[i]);\n\t}\n\tLOG(\"errorMin=%d\",eMin);\n\tLOG(\"errorMax=%d\",eMax);\n\n\tmotorReset();\n\tsystemParams.controllerMode=prevCtrl;\n\tsystemParams.microsteps=microSteps;\n\tenableFeedback=feedback;\n\tif (state) enableTCInterrupts();\n\n}\n\n//void StepperCtrl::printData(void)\n//{\n//\tbool state=TC5_ISR_Enabled;\n//\tdisableTCInterrupts();\n//\tint32_t i;\n//\tfor(i=0; i<N_DATA; i++)\n//\t{\n//\t\tLOG (\"%d\\n\",data[i]);\n//\t}\n//\n//\tif (state) enableTCInterrupts();\n//\n//}\n\n#pragma GCC pop_options\n"
  },
  {
    "path": "firmware/stepper_nano_zero/stepper_controller.h",
    "content": "/**********************************************************************\n *      Author: tstern\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#ifndef __STEPPER_CONTROLLER_H__\n#define __STEPPER_CONTROLLER_H__\n\n#include \"syslog.h\"\n#include \"board.h\"\n#include \"as5047d.h\"\n#include \"A1333.h\"\n#include \"calibration.h\"\n#include \"A4954.h\"\n#include \"A5995.h\"\n#include \"nonvolatile.h\"\n#include \"fet_driver.h\" //for the NEMA23 10A\n\n\n#define N_DATA (1024)\n\n\ntypedef enum {\n\tSTEPCTRL_NO_ERROR=0,\n\tSTEPCTRL_NO_POWER=1, //no power to motor\n\tSTEPCTRL_NO_CAL=2, //calibration not set\n\tSTEPCTRL_NO_ENCODER=3, //encoder not working\n} stepCtrlError_t;\n\n\ntypedef struct {\n\t\tint32_t Kp;\n\t\tint32_t Ki;\n\t\tint32_t Kd;\n} PID_t;\n\n\n typedef __attribute__((aligned(4))) struct {\n      int32_t microSecs;\n      int32_t desiredLoc;\n      int32_t actualLoc;\n      int32_t angle;\n      int32_t ma;\n} Location_t;\n\n\ntypedef struct {\n      int32_t angle;\n      int32_t ma;\n}Control_t;\n\n#define MAX_NUM_LOCATIONS (64) //maximum number of locations to buffer\n\n\n//this scales the PID parameters from Flash to floating point\n// to fixed point int32_t values\n#define CTRL_PID_SCALING (1024)\n\nclass StepperCtrl \n{\n\tprivate:\n\t\tvolatile bool enableFeedback; //true if we are using PID control algorithm\n\n#ifdef A1333_ENCODER\n\t\tA1333 encoder;\n#else\n\t\tAS5047D encoder;\n#endif\n\n#ifdef NEMA_23_10A_HW\n\t\tFetDriver stepperDriver;\n#else\n#ifdef A5995_DRIVER\n\t\tA5995 stepperDriver;\n#else\n\t\tA4954 stepperDriver;\n#endif\n#endif\n\t\tuint16_t startUpEncoder;\n\t\tvolatile int32_t ticks=0;\n\t\tvolatile Location_t locs[MAX_NUM_LOCATIONS];\n\t\tvolatile int32_t locReadIndx=0;\n\t\tvolatile int32_t locWriteIndx=0;\n\n\t\tvolatile MotorParams_t motorParams;\n\t\tvolatile SystemParams_t systemParams;\n\t\tvolatile bool enabled;\n\n\n\n\t\tvolatile int32_t loopTimeus; //time to run loop in microseconds\n\n\t\tvolatile PID_t sPID; //simple control loop PID parameters\n\t\tvolatile PID_t pPID; //positional current based PID control parameters\n\t\tvolatile PID_t vPID; //velocity PID control parameters\n\n\t\tvolatile int64_t numSteps; //this is the number of steps we have taken from our start angle\n\n\t\tvolatile int32_t loopError;\n\n\t\tvolatile int64_t currentLocation; //estimate of the current location from encoder feedback\n\t\t// the current location lower 16 bits is angle (0-360 degrees in 65536 steps) while upper\n\t\t// bits is the number of full rotations.\n\n\t\t//this is used for the velocity PID feedback\n\t\t// units are in Angles/sec where 1 Angle=360deg/65536\n\t\tvolatile int64_t velocity;\n\n\t\tint64_t zeroAngleOffset=0;\n\n\n\t\t//volatile int16_t data[N_DATA];\n\n\t\t//does linear interpolation of the encoder calibration table\n\t\tint32_t getAngleCalibration(int32_t encoderAngle);\n\n\t\t//updates the currentMeasuredAngle with our best guess where we are\n\t\tAngle sampleAngle(void);\n\t\tAngle sampleMeanEncoder(int32_t numSamples);\n\n\t\tfloat measureStepSize(void); //steps motor and estimates step size\n\t\tuint32_t measureMaxCalibrationError(void);\n\t\tvoid setLocationFromEncoder(void);\n\n\t\tvoid  motorReset(void);\n\t\tvoid updateStep(int dir, uint16_t steps);\n\n\n\t\tbool pidFeedback(int64_t desiredLoc, int64_t currentLoc, Control_t *ptrCtrl);\n\t\tbool simpleFeedback(int64_t desiredLoc, int64_t currentLoc,Control_t *ptrCtrl);\n\t\tbool vpidFeedback(int64_t desiredLoc, int64_t currentLoc,Control_t *ptrCtrl);\n\t\tint64_t getCurrentLocation(void);\n\t\tint64_t getDesiredLocation(void);\n\t\tvoid updateLocTable(int64_t desiredLoc, int64_t currentLoc,Control_t *ptrCtrl);\n\n\t\tint64_t calculatePhasePrediction(int64_t currentLoc);\n\t\tbool determineError(int64_t currentLoc, int64_t error);\n\n\tpublic:\n\t\tuint16_t getStartupEncoder(void) {return startUpEncoder;}\n\t\tint32_t getLocation(Location_t *ptrLoc);\n\n\t\t//int32_t getSteps(void);\n\t\tAngle getEncoderAngle(void);\n\n\t\tvoid setAngle(int64_t loc);\n\n\t\tint64_t getZeroAngleOffset(void);\n\t\tvoid PrintData(void);\n\t\tvoid setVelocity(int64_t vel); //set velocity for vPID mode\n\t\tint64_t getVelocity(void);\n\t\tint32_t getLoopError(void) {return loopError;}; //assume atomic read\n\n\t\tbool calibrationValid(void) { return calTable.calValid();}  //returns true if calbiration is good\n\n\t\tvoid updateParamsFromNVM(void);  //updates the parameters from NVM\n\t\tCalibrationTable calTable;\n\t\t//void printData(void);\n\n\t\tbool calibrateEncoder(void); //do manual calibration of the encoder\n\t\tAngle maxCalibrationError(void); //measures the maximum calibration error as an angle\n\n\t\tvoid moveToAbsAngle(int32_t a);\n\t\tvoid moveToAngle(int32_t a, uint32_t ma);\n\n\t\tstepCtrlError_t begin(void); //returns false if we can not use motor\n\n\t\tbool processFeedback(void); // does the feedback loop\n\n\t\tfeedbackCtrl_t getControlMode(void) { return systemParams.controllerMode;};\n\n\t\tvoid updateSteps(int64_t steps);\n\t\tvoid requestStep(int dir, uint16_t steps); //requests a step, if feedback controller is off motor does not move\n\n\t\tvoid feedback(bool enable);\n\t\tbool getFeedback(void) {return enableFeedback;}\n\n\t\tvoid encoderDiagnostics(char *ptrStr);\n\t\tint32_t measureError(void);\n\n\t\t//these two functions are compenstated by the zero offset\n\t\tint64_t getCurrentAngle(void);\n\t\tint64_t getDesiredAngle(void);\n\n\t\tvoid move(int dir, uint16_t steps); //forces motor to move even if feedback controller is turned off.\n\t\tvoid enable(bool enable);\n\t\tbool getEnable(void) {return enabled;}\n\n\t\tint32_t getLoopTime(void) { return loopTimeus;}\n\n\t\tvoid PID_Autotune(void);\n\t\tvoid setZero(void);\n};\n\n#endif //__STEPPER_CONTROLLER_H__\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/stepper_nano_zero.ino",
    "content": "#include \"nzs.h\"\n\nNZS nzs;\n  \n\nvoid setup() {\n  nzs.begin();\n}\n\n\nvoid loop() {\n\tnzs.loop(); \n}\n"
  },
  {
    "path": "firmware/stepper_nano_zero/steppin.cpp",
    "content": "/*\n * \tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n */\n#include \"steppin.h\"\n#include \"stepper_controller.h\"\n#include \"wiring_private.h\"\n#include \"Arduino.h\"\n\nextern StepperCtrl stepperCtrl;\n\nvolatile int32_t stepsChanged=0;\nvolatile int64_t steps=0;\n\n\n#if (PIN_STEP_INPUT != 0)\n#error \"this code only works with step pin being D0 (PA11, EXTINT11)\"\n#endif\n\n\n#define WAIT_TCC2_SYNC() while(TCC2->SYNCBUSY.reg)\n\nvoid checkDir(void)\n{\n\tint dir=1;\n\tstatic int lastDir=-1;\n\n\n\tif (CW_ROTATION == NVM->SystemParams.dirPinRotation)\n\t{\n\t\tdir=0; //reverse the rotation\n\t}\n\n\tif (lastDir != dir)\n\t{\n\t\tif (dir)\n\t\t{\n\t\t\tEIC->CONFIG[1].reg &= ~EIC_CONFIG_SENSE2_Msk;\n\t\t\tEIC->CONFIG[1].reg |=  EIC_CONFIG_SENSE2_HIGH;\n\n\t\t} else\n\t\t{\n\t\t\tEIC->CONFIG[1].reg &= ~EIC_CONFIG_SENSE2_Msk;\n\t\t\tEIC->CONFIG[1].reg |=  EIC_CONFIG_SENSE2_LOW;\n\t\t}\n\t\tlastDir=dir;\n\t}\n\n}\n\n//this function can not be called in interrupt context as the overflow interrupt for tC4 needs to run.\nint64_t getSteps(void)\n{\n\n//#ifndef USE_NEW_STEP\n//\treturn 0;\n//#endif\n\tint64_t x;\n#ifdef USE_TC_STEP\n\tuint16_t y;\n\tstatic uint16_t lasty=0;\n\n\tTCC2->CTRLBSET.reg=TCC_CTRLBSET_CMD_READSYNC;\n\tWAIT_TCC2_SYNC();\n\n\n\ty=(uint16_t)(TCC2->COUNT.reg & 0x0FFFFul); //use only lowest 16bits\n\t//LOG(\"count is %d\",y);\n\tsteps += (int16_t)(y-lasty);\n\tlasty=y;\n\n\tcheckDir();\n\treturn steps;\n\n#else\n\tEIC->INTENCLR.reg = EIC_INTENCLR_EXTINT11;\n\tx=stepsChanged;\n\tstepsChanged=0;\n\tEIC->INTENSET.reg = EIC_INTENSET_EXTINT11;\n\treturn x;\n#endif\n}\n\n\n\n\n//this function is called on the rising edge of a step from external device\nstatic void stepInput(void)\n{\n\tstatic int dir;\n\n\t//read our direction pin\n\tdir = digitalRead(PIN_DIR_INPUT);\n\n\tif (CW_ROTATION == NVM->SystemParams.dirPinRotation)\n\t{\n\t\tdir=!dir; //reverse the rotation\n\t}\n\n#ifndef USE_NEW_STEP\n\tstepperCtrl.requestStep(dir,1);\n#else\n\tif (dir)\n\t{\n\t\tstepsChanged++;\n\t}else\n\t{\n\t\tstepsChanged--;\n\t}\n#endif\n}\n\nvoid enableEIC(void)\n{\n\t PM->APBAMASK.reg |= PM_APBAMASK_EIC;\n\tif (EIC->CTRL.bit.ENABLE == 0)\n\t{\n\t\t// Enable GCLK for IEC (External Interrupt Controller)\n\t\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_EIC));\n\n\t\t// Enable EIC\n\t\tEIC->CTRL.bit.ENABLE = 1;\n\t\twhile (EIC->STATUS.bit.SYNCBUSY == 1) { }\n\t}\n}\n\n\n\n\n\nvoid setupStepEvent(void)\n{\n\t//we will set up the EIC to generate an even on rising edge of step pin\n\t//make sure EIC is setup\n\tenableEIC();\n\n\n\t// Assign step pin to EIC\n\t// Step pin is PA11, EXTINT11\n\tpinPeripheral(PIN_STEP_INPUT, PIO_EXTINT);\n\n\t//set up the direction pin PA10 to trigger external interrupt\n\tpinPeripheral(PIN_DIR_INPUT, PIO_EXTINT); //EXTINT10\n\n\n\t//***** setup EIC ******\n\tEIC->EVCTRL.bit.EXTINTEO11=1; //enable event for EXTINT11\n\tEIC->EVCTRL.bit.EXTINTEO10=1; //enable event for EXTINT10\n\t//setup up external interurpt 11 to be rising edge triggered\n\t//setup up external interurpt 10 to be both edge triggered\n\tEIC->CONFIG[1].reg |= EIC_CONFIG_SENSE3_RISE | EIC_CONFIG_SENSE2_HIGH;\n\n\tcheckDir();\n\n\t//disable actually generating an interrupt, we only want event triggered\n\tEIC->INTENCLR.reg = EIC_INTENCLR_EXTINT11;\n\tEIC->INTENCLR.reg = EIC_INTENCLR_EXTINT10;\n\n\t//**** setup the event system ***\n\t// Enable GCLK for EVSYS channel 0\n\tPM->APBCMASK.reg |= PM_APBCMASK_EVSYS;\n\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_EVSYS_CHANNEL_0));\n\twhile (GCLK->STATUS.bit.SYNCBUSY);\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_EVSYS_CHANNEL_1));\n\twhile (GCLK->STATUS.bit.SYNCBUSY);\n\n\t//setup the step pin to trigger event 0 on the TCC2 (step)\n\tEVSYS->CHANNEL.reg=EVSYS_CHANNEL_CHANNEL(0)\n\t\t\t\t\t\t\t\t| EVSYS_CHANNEL_EDGSEL_RISING_EDGE\n\t\t\t\t\t\t\t\t| EVSYS_CHANNEL_EVGEN(EVSYS_ID_GEN_EIC_EXTINT_11)\n\t\t\t\t\t\t\t\t| EVSYS_CHANNEL_PATH_ASYNCHRONOUS;\n\n\tEVSYS->USER.reg = \tEVSYS_USER_CHANNEL(1)\n\t\t\t\t\t\t\t\t| EVSYS_USER_USER(EVSYS_ID_USER_TCC2_EV_0);\n\n\t//setup the dir pin to trigger event 2 on the TCC2 (dir change)\n\tEVSYS->CHANNEL.reg=EVSYS_CHANNEL_CHANNEL(1)\n\t\t\t\t\t\t\t\t| EVSYS_CHANNEL_EDGSEL_BOTH_EDGES\n\t\t\t\t\t\t\t\t| EVSYS_CHANNEL_EVGEN(EVSYS_ID_GEN_EIC_EXTINT_10)\n\t\t\t\t\t\t\t\t| EVSYS_CHANNEL_PATH_ASYNCHRONOUS;\n\n\tEVSYS->USER.reg = \tEVSYS_USER_CHANNEL(2)\n\t\t\t\t\t\t\t\t| EVSYS_USER_USER(EVSYS_ID_USER_TCC2_EV_1);\n\n\t//**** setup the Timer counter ******\n\tPM->APBCMASK.reg |= PM_APBCMASK_TCC2;\n\n\t// Enable GCLK for TCC2 (timer counter input clock)\n\tGCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TCC2_TC3));\n\twhile (GCLK->STATUS.bit.SYNCBUSY);\n\n\n\n\tTCC2->CTRLA.reg &= ~TCC_CTRLA_ENABLE;\n\tWAIT_TCC2_SYNC();\n\n\tTCC2->CTRLA.reg= TCC_CTRLA_SWRST;  //reset TCC2\n\tWAIT_TCC2_SYNC();\n\twhile(TCC2->CTRLA.bit.SWRST ==1);\n\n\n\t//TCC2->WAVE.reg = TCC_WAVE_WAVEGEN_NFRQ;\n\t//WAIT_TCC2_SYNC();\n\n\tTCC2->EVCTRL.reg=TCC_EVCTRL_EVACT0_COUNTEV | TCC_EVCTRL_TCEI0\n\t\t\t| TCC_EVCTRL_EVACT1_DIR | TCC_EVCTRL_TCEI1;\n\tWAIT_TCC2_SYNC();\n\n\n\tTCC2->COUNT.reg=0;\n\tWAIT_TCC2_SYNC();\n\n\t//TCC2->CTRLBSET.bit.CMD=TCC_CTRLBSET_CMD_RETRIGGER;\n\t//checkDirPin();\n\tTCC2->CTRLBSET.bit.DIR=1;\n\n\tWAIT_TCC2_SYNC();\n\tTCC2->CTRLA.reg |=TCC_CTRLA_ENABLE;\n\tWAIT_TCC2_SYNC();\n\n\n\t//checkDirPin();\n\n//\n//\tTC4->COUNT16.CTRLA.reg = TC_CTRLA_MODE_COUNT16    // Set Timer counter Mode to 16 bits\n//\t| TC_CTRLA_WAVEGEN_NFRQ  //normal counting mode (not using waveforms)\n//\t| TC_CTRLA_PRESCALER_DIV1; //count each pulse\n//\tWAIT_TC32_REGS_SYNC(TC4)\n//\n//\tTC4->COUNT16.CTRLBCLR.reg=0xFF; //clear all values.\n//\tWAIT_TC32_REGS_SYNC(TC4)\n//\n//\tTC4->COUNT16.EVCTRL.reg=TC_EVCTRL_TCEI | TC_EVCTRL_EVACT_COUNT; //enable event input and count\n//\tWAIT_TC32_REGS_SYNC(TC4)\n//\n//\tTC4->COUNT16.COUNT.reg=0;\n//\tWAIT_TC32_REGS_SYNC(TC4)\n//\n//\tTC4->COUNT16.INTENSET.bit.OVF = 1; //enable over/under flow interrupt\n//\t//setup the TC overflow/underflow interrupt\n//\tNVIC_SetPriority(TC4_IRQn, 0);\n//\t// Enable InterruptVector\n//\tNVIC_EnableIRQ(TC4_IRQn);\n//\n//\n//\t// Enable TC\n//\tTC4->COUNT16.CTRLA.reg |= TC_CTRLA_ENABLE;\n//\tWAIT_TC32_REGS_SYNC(TC4)\n}\n\n//static void dirChanged_ISR(void)\n//{\n//\tint dir=0;\n//\t//read our direction pin\n//\t//dir = digitalRead(PIN_DIR_INPUT);\n//\tif ( (PORT->Group[g_APinDescription[PIN_DIR_INPUT].ulPort].IN.reg & (1ul << g_APinDescription[PIN_DIR_INPUT].ulPin)) != 0 )\n//\t{\n//\t\tdir=1;\n//\t}\n//\n//\n//\tif (CW_ROTATION == NVM->SystemParams.dirPinRotation)\n//\t{\n//\t\tdir=!dir; //reverse the rotation\n//\t}\n//\tif (dir)\n//\t{\n//\t\tTC4->COUNT16.CTRLBSET.bit.DIR=1;\n//\t} else\n//\t{\n//\t\tTC4->COUNT16.CTRLBCLR.bit.DIR=1;\n//\t}\n//}\n\n\nvoid stepPinSetup(void)\n{\n\n\n#ifdef USE_TC_STEP\n\n//\t//setup the direction pin\n//\tdirChanged_ISR();\n//\n//\t//attachInterrupt configures the EIC as highest priority interrupts.\n//\tattachInterrupt(digitalPinToInterrupt(PIN_DIR_INPUT), dirChanged_ISR, CHANGE);\n\tsetupStepEvent();\n//\tNVIC_SetPriority(EIC_IRQn, 1); //set port A interrupt as highest priority\n\n\n#else\n\tattachInterrupt(digitalPinToInterrupt(PIN_STEP_INPUT), stepInput, RISING);\n\tNVIC_SetPriority(EIC_IRQn, 0); //set port A interrupt as highest priority\n#endif\n\n}\n"
  },
  {
    "path": "firmware/stepper_nano_zero/steppin.h",
    "content": "/*\n * \tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n */\n#ifndef __STEPPIN_H___\n#define __STEPPIN_H___\n#include \"board.h\"\n\nvoid stepPinSetup(void); //setup step pin\n\nint64_t getSteps(void); //returns the number of steps changed since last call\n\n\n#endif // __STEPPIN_H___\n"
  },
  {
    "path": "firmware/stepper_nano_zero/syslog.cpp",
    "content": "/*\n * syslog.c\n *\n *  Created on: Sep 14, 2011\n *      Author: trampas.stern\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n#include \"syslog.h\"\n#include <Arduino.h>\n#include \"board.h\"\n\n\n#define ANSI_WHITE \t\t\"\\033[37m\"\n#define ANSI_NORMAL \t\"\\033[0m\"\n#define ANSI_BLINK \t\t\"\\033[5m\"\n#define ANSI_BLUE \t\t\"\\033[34m\"\n#define ANSI_MAGENTA \t\"\\033[35m\"\n#define ANSI_CYAN \t\t\"\\033[36m\"\n#define ANSI_WHITE \t\t\"\\033[37m\"\n#define ANSI_RED \t\t\"\\033[31m\"\n#define ANSI_GREEN \t\t\"\\033[32m\"\n#define ANSI_PINK \t\t\"\\033[35m\\033[1m\"\n#define ANSI_BROWN \t\t\"\\033[33m\"\n#define ANSI_YELLOW \t\"\\033[33m\\033[1m\"\n#define ANSI_BLACK      \"\\033[30m\"\n#define ANSI_BELL_AND_RED \t\t\"\\a\\033[31m\"\n\n#define NEW_LINE \"\\n\\r\"\n\nStream *ptrSerial=NULL;\neLogLevel SyslogLevelToWrite;\n\nbool DebugUART=false;\nstatic char buffer[SYSLOG_BUFFER_SIZE];\nstatic unsigned int BufIndex=0;\n\nstatic int SysLog_Enabled=1;\n\nint SysLogDisable(void)\n{\n\tSysLog_Enabled=0;\n\treturn 0;\n}\n\nint SysLogEnable(void)\n{\n\tSysLog_Enabled=1;\n\treturn 0;\n}\n\nint SysLogIsEnabled(void)\n{\n\treturn SysLog_Enabled;\n}\nvoid SysLogDebug(bool x)\n{\n\tDebugUART=x;\n}\n\nvoid SysLogPuts(const char *ptrStr)\n{\n\tif (!SysLog_Enabled)\n\t\treturn;\n\n\tif (NULL == ptrSerial)\n\t{\n\t\twhile(*ptrStr)\n\t\t{\n\n\t\t\tSYSLOG_PUTC(*ptrStr);\n\t\t\tptrStr++;\n\t\t}\n\t} else\n\t{\n\t\tptrSerial->write(ptrStr);\n\t}\n#ifndef MECHADUINO_HARDWARE \n\tif (DebugUART)\n\t{\n\t\tSerialUSB.write(ptrStr);\n\t}\n#endif\n}\n\nint SysLogInitDone=0;\nvoid SysLogInit(Stream *ptrSerialObj, eLogLevel LevelToWrite)\n{\n\tptrSerial=ptrSerialObj;\n\tSyslogLevelToWrite=LevelToWrite;\n\n\tSysLogInitDone=1;\n\tBufIndex=0;\n\tmemset(buffer,0,SYSLOG_BUFFER_SIZE);\n}\n\n\nint SysLogProcessing=0; // this is used such that syslog can be reentrent\nint SysLogMissed=0;\n\n\nvoid SysLog(eLogLevel priorty, const char *fmt, ...)\n{\n    //UINT32 ret;\n\tint previousState=SysLog_Enabled;\n    char vastr[MAX_SYSLOG_STRING]={0};\n    //char outstr[MAX_SYSLOG_STRING]={0};\n\n\n    va_list ap;\n\n    if (SysLogProcessing)\n    {\n    \t//we have a syslog from a syslog call thus return as not much we can do...\n    \t//memset(buffer,0,SYSLOG_BUFFER_SIZE);\n    \tva_start(ap,fmt);\n    \tvsnprintf(&buffer[BufIndex],SYSLOG_BUFFER_SIZE-BufIndex,(char *)fmt,ap);\n    \tBufIndex=strlen(buffer);\n    \tsnprintf(&buffer[BufIndex],SYSLOG_BUFFER_SIZE-BufIndex,NEW_LINE);\n    \tBufIndex=strlen(buffer);\n    \tSysLogMissed++; //set flag that we missed a call\n    \treturn;\n    }\n\n    SysLogProcessing=1;\n\n    //stop the watch dog will doing a SysLog print\n    Sys_WDogHoldOn();\n\n    if(!SysLogInitDone)\n    {\n    \tSysLogInit(NULL, LOG_WARNING); //not sure who is reseting serial port but before we print set it up\n        WARNING(\"You should init SysLog\");\n    \t//SysLogInitDone=0;\n    }\n\n    //Send out a * that we missed a SysLog Message before this current message\n    if (SysLogMissed)\n    {\n    \t//SysLogPuts(ANSI_RED);\n    \tSysLogPuts(\"*** Reentrant Log call possible loss of message(s):\");\n    \tSysLogPuts(NEW_LINE);\n    \tif (BufIndex>0)\n    \t{\n    \t\tSysLogPuts(buffer);\n    \t\tmemset(buffer,0,SYSLOG_BUFFER_SIZE);\n    \t\tBufIndex=0;\n    \t}\n    \t//SysLogPuts(ANSI_RED);\n    \tSysLogPuts(\"***********\");\n    \tSysLogPuts(NEW_LINE);\n    \tSysLogMissed=0;\n    }\n    memset(vastr,0,MAX_SYSLOG_STRING);\n    va_start(ap,fmt);\n//#ifndef PGM_P\n#if 1\n   vsnprintf(vastr,MAX_SYSLOG_STRING,(char *)fmt,ap);\n#else\n    vsprintf_P(vastr,(const char *)fmt,ap);\n#endif\n    //get time and store in datetimestr if desired\n    //sprintf(outstr, \"[%s] %s\\r\\n\", datetimestr, vastr);\n\n\n\n    if (priorty<=LOG_ERROR)\n    {\n    \tSysLog_Enabled=1;\n    \tSysLogPuts(ANSI_RED);\n\n    }else if (priorty==LOG_DEBUG)\n    {\n    \tSysLogPuts(ANSI_WHITE);\n    }else if (priorty==LOG_WARNING)\n    {\n    \tSysLogPuts(ANSI_BLUE);\n    }\n\n#ifdef RTC_H_\n#ifdef TIME_H_\n    {\n    \tstruct tm tp;\n    \tRTC_Time_s tm;\n    \ttime_t secs;\n    \tchar datetimestr[MAX_SYSLOG_STRING]={0};\n\n    \tRTC_ReadTime(&tm);\n    \tsecs=tm.seconds;\n    \tconvertFlexNetTime((time_t *)&secs, &tp);\n    \ttime_str(datetimestr,&tp);\n    \tSysLogPuts(datetimestr);\n\n    \tif (priorty<=SyslogLevelToWrite && SysLogWriteFunc!=NULL)\n\t\t{\n\t\t\tSysLogWriteFunc(datetimestr,strlen(datetimestr));\n\t\t}\n    }\n#endif\n#endif\n\n    SysLogPuts(vastr);\n//\n//    if (priorty<=SyslogLevelToWrite && SysLogWriteFunc!=NULL)\n//    {\n//    \tSysLogWriteFunc(vastr,strlen(vastr));\n//    \tSysLogWriteFunc(NEW_LINE,strlen(NEW_LINE));\n//    }\n\n\n    SysLogPuts(ANSI_NORMAL);\n    SysLogPuts(NEW_LINE);\n\n\n\n    if (priorty == LOG_EMERG) {\n    \t//you can reboot processor here\n    }\n\n    //start the watch dog where left off..\n    Sys_WDogHoldOff();\n    SysLogProcessing=0;\n    SysLog_Enabled=previousState;\n    return;\n}\n"
  },
  {
    "path": "firmware/stepper_nano_zero/syslog.h",
    "content": "/*\n * syslog.h\n *\n *  Created on: Sep 14, 2011\n *      Author: trampas.stern\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#ifndef SYSLOG_H_\n#define SYSLOG_H_\n\n#include <stdarg.h>\n#include <string.h>\n#include <stdio.h>\n#include \"Arduino.h\"\n#include \"variant.h\"\n\n#ifdef __cplusplus\nextern \"C\"\n{\n#endif // __cplusplus\n\n#define SYSLOG_BUFFER_SIZE  (250)\n\n#define MAX_SYSLOG_STRING   (250)\n#define __FILENAME1__ (__builtin_strrchr(__FILE__, '\\\\') ? __builtin_strrchr(__FILE__, '\\\\') + 1 : __FILE__)\n#define __FILENAME__ (__builtin_strrchr(__FILENAME1__, '/') ? __builtin_strrchr(__FILENAME1__, '/') + 1 : __FILENAME1__)\n\n#define SYSLOG_WRITE(buffer,nBytes)\n\n#ifdef CMD_SERIAL_PORT\n#define SYSLOG_PUTC(x)\n#else\n#define SYSLOG_PUTC(x) //SerialUSB.write(x)\n#endif\n\n#define Sys_WDogHoldOn()\n#define Sys_WDogHoldOff()\n/*\n  * priorities/facilities are encoded into a single 32-bit quantity, where the\n  * bottom 3 bits are the priority (0-7) and the top 28 bits are the facility\n  * (0-big number).  Both the priorities and the facilities map roughly\n  * one-to-one to strings in the syslogd(8) source code.  This mapping is\n  * included in this file.\n  *\n  * priorities (these are ordered)\n  */\n\ntypedef enum _eLogLevel {\n    LOG_EMERG    = 0,   // system is unusable\n    LOG_ALERT    = 1,   // action must be taken immediately\n    LOG_CRIT     = 2,   // critical conditions\n    LOG_ERROR    = 3,   // error conditions\n    LOG_WARNING  = 4,   // warning conditions\n    LOG_NOTICE   = 5,   // normal but significant condition\n    LOG_INFO     = 6,   // informational\n    LOG_DEBUG    = 7,   // debug-level messages\n    LOG_DISABLED = 8    // disabled messages\n} eLogLevel;\n\n#if 0\n#define CONCAT(x, y) CONCAT_(x, y)\n#define CONCAT_(x, y) x##y\n\n#define ID(...) __VA_ARGS__\n\n#define IFMULTIARG(if,then,else) \\\nCONCAT(IFMULTIARG_, IFMULTIARG_(if, \\\n1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \\\n1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \\\n1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \\\n1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \\\n1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \\\n1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \\\n1, 1, 0, ))(then,else)\n#define IFMULTIARG_(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, \\\n_10, _11, _12, _13, _14, _15, _16, _17, _18, _19, \\\n_20, _21, _22, _23, _24, _25, _26, _27, _28, _29, \\\n_30, _31, _32, _33, _34, _35, _36, _37, _38, _39, \\\n_40, _41, _42, _43, _44, _45, _46, _47, _48, _49, \\\n_50, _51, _52, _53, _54, _55, _56, _57, _58, _59, \\\n_60, _61, _62, _63, ...) _63\n#define IFMULTIARG_0(then, else) else\n#define IFMULTIARG_1(then, else) then\n\n#define PROVIDE_SECOND_ARGUMENT(x, ...)  CONCAT( IFMULTIARG(ID(__VA_ARGS__), INSERT_, ADD_), SECOND_ARGUMENT ) (x, __VA_ARGS__)\n#define PROVIDE_SECOND_ARGUMENT2(x, y, ...)  CONCAT( IFMULTIARG(ID(__VA_ARGS__), INSERT_, ADD_), SECOND_ARGUMENT2 ) (x, y, __VA_ARGS__)\n\n#define ADD_SECOND_ARGUMENT(x, y) y, x\n#define INSERT_SECOND_ARGUMENT(x, y, ...) y, x, __VA_ARGS__\n\n#define ADD_SECOND_ARGUMENT2(x, z, y) y, x, z\n#define INSERT_SECOND_ARGUMENT2(x, z, y, ...) y, x, z, __VA_ARGS__\n\n#endif \n//#define DEBUG1(...) printf( \"DEBUG %s %s: \"\n//PROVIDE_SECOND_ARGUMENT2(__FILE__, __LINE__, __VA_ARGS__))\n\n\n//TXT(x) macro is used for system which can store strings in flash, like AVR processors\n#ifndef TXT\n    #define TXT(x) x\n#endif\n\nvoid     SysLog(eLogLevel priorty,  const char *fmt, ...);\n\n\n\nstatic inline const char * __file__( const char *filename ) {\n    char const *p = strrchr( filename, '/' );\n    if ( p )\n        return p+1;\n    else\n        return filename;\n}                               // __file__\n\n\n//These macros abstract the logging and append the file and line number to errors.\n#ifndef SYSLOG_DISABLE\n//#ifndef PGM_P\n#if 1\n//EMERG means system is unstable thus will force a reboot!\n#define EMERG(fmt, ...)    SysLog( LOG_EMERG,   \"EMERG:    %s %4d: \" fmt, __FILENAME__, __LINE__, ## __VA_ARGS__ )\n#define ALERT(fmt, ...)    SysLog( LOG_ALERT,   \"ALERT:    %s %4d: \" fmt, __FILENAME__, __LINE__, ## __VA_ARGS__ )\n#define CRITICAL(fmt, ...) SysLog( LOG_CRIT,    \"CRITICAL: %s %4d: \" fmt, __FILENAME__, __LINE__, ## __VA_ARGS__ )\n#define ERROR(fmt, ...)    SysLog( LOG_ERROR,   \"ERROR:    %s %4d: \" fmt, __FILENAME__, __LINE__, ## __VA_ARGS__ )\n#define WARNING(fmt, ...)  SysLog( LOG_WARNING, \"WARNING:  %s %4d: \" fmt, __FILENAME__, __LINE__, ## __VA_ARGS__ )\n#define NOTICE(fmt, ...)   SysLog( LOG_NOTICE,  \"NOTICE:   %s %4d: \" fmt, __FILENAME__, __LINE__, ## __VA_ARGS__ )\n#define INFO(fmt, ...)     SysLog( LOG_INFO,    \"INFO:     %s %4d: \" fmt, __FILENAME__, __LINE__, ## __VA_ARGS__ )\n#define LOG(fmt, ...)      SysLog( LOG_DEBUG,   \"%s %4d: \"           fmt, __FILENAME__ , __LINE__, ## __VA_ARGS__ )\n//\n//#define EMERG(...)    SysLog( LOG_EMERG,   \"EMERG:    %15s %4d: \" PROVIDE_SECOND_ARGUMENT2(BASE_FILE_NAME, __LINE__,__VA_ARGS__ ) )\n//#define ALERT(...)    SysLog( LOG_ALERT,   \"ALERT:    %15s %4d: \" PROVIDE_SECOND_ARGUMENT2(BASE_FILE_NAME, __LINE__,__VA_ARGS__ ) )\n//#define CRITICAL(...) SysLog( LOG_CRIT,    \"CRITICAL: %15s %4d: \" PROVIDE_SECOND_ARGUMENT2(BASE_FILE_NAME, __LINE__,__VA_ARGS__ ) )\n//#define ERROR(...)    SysLog( LOG_ERROR,   \"ERROR:    %15s %4d: \" PROVIDE_SECOND_ARGUMENT2(BASE_FILE_NAME, __LINE__,__VA_ARGS__ ) )\n//#define WARNING(...)  SysLog( LOG_WARNING, \"WARNING:  %15s %4d: \" PROVIDE_SECOND_ARGUMENT2(BASE_FILE_NAME, __LINE__,__VA_ARGS__ ) )\n//#define NOTICE(...)   SysLog( LOG_NOTICE,  \"NOTICE:   %15s %4d: \" PROVIDE_SECOND_ARGUMENT2(BASE_FILE_NAME, __LINE__,__VA_ARGS__ ) )\n//#define INFO(...)     SysLog( LOG_INFO,    \"INFO:     %15s %4d: \" PROVIDE_SECOND_ARGUMENT2(BASE_FILE_NAME, __LINE__,__VA_ARGS__ ) )\n//#define LOG(...) \t  SysLog( LOG_DEBUG,   \"%s %4d: \"             PROVIDE_SECOND_ARGUMENT2(BASE_FILE_NAME, __LINE__,__VA_ARGS__ ) )\n#else\n//EMERG means system is unstable thus will force a reboot!\n#define EMERG(fmt, ...)    SysLog( LOG_EMERG,   PSTR(\"EMERG:    %15s %4d: \" fmt), __file__(__FILE__), __LINE__, ## __VA_ARGS__ )\n#define ALERT(fmt, ...)    SysLog( LOG_ALERT,   PSTR(\"ALERT:    %15s %4d: \" fmt), __file__(__FILE__), __LINE__, ## __VA_ARGS__ )\n#define CRITICAL(fmt, ...) SysLog( LOG_CRIT,    PSTR(\"CRITICAL: %15s %4d: \" fmt), __file__(__FILE__), __LINE__, ## __VA_ARGS__ )\n#define ERROR(fmt, ...)    SysLog( LOG_ERROR,   PSTR(\"ERROR:    %15s %4d: \" fmt), __file__(__FILE__), __LINE__, ## __VA_ARGS__ )\n#define WARNING(fmt, ...)  SysLog( LOG_WARNING, PSTR(\"WARNING:  %15s %4d: \" fmt), __file__(__FILE__), __LINE__, ## __VA_ARGS__ )\n#define NOTICE(fmt, ...)   SysLog( LOG_NOTICE,  PSTR(\"NOTICE:   %15s %4d: \" fmt), __file__(__FILE__), __LINE__, ## __VA_ARGS__ )\n#define INFO(fmt, ...)     SysLog( LOG_INFO,    PSTR(\"INFO:     %15s %4d: \" fmt), __file__(__FILE__), __LINE__, ## __VA_ARGS__ )\n#define LOG(fmt, ...)      SysLog( LOG_DEBUG,   PSTR(\"%15s %4d: \" fmt), __file__(__FILE__), __LINE__, ## __VA_ARGS__ )\n\n#endif\n#else\n#define EMERG(fmt, ...)\n#define ALERT(fmt, ...)\n#define CRITICAL(fmt, ...)\n#define ERROR(fmt, ...)\n#define WARNING(fmt, ...)\n#define NOTICE(fmt, ...)\n#define INFO(fmt, ...)\n#define LOG(fmt, ...)\n\n#endif //SYSLOG_DIABLE\n\n//Note that if you are running debug code with JTAG the assert will stop\n// However you might want to run release code with syslog enabled for testing\n// where you want error logging, but asserts are not enabled.\n// Thus this macro does error logging and an assert.\n//This macro assumed to take a constant string as argument\n\n\n//this can be enabled to log asserts to the history file, if you have code space to do it.\n#ifdef ASSERT_HISTORY\n#define ASSERT(x) {if(!(x)){ERROR(#x); HISTORY_ASSERT();} assert(x);}\n#define ASSERT_ERROR(x) {HISTORY_ASSERT(); ERROR(x); ASSERT_FAIL(x);}\n#else\n#define ASSERT(x) {if(!(x)){ERROR(#x);} assert(x);}\n#define ASSERT_ERROR(x) {ERROR(x); ASSERT_FAIL(x);}\n#endif\n\n\nvoid SysLogInit(Stream *ptrSerialObj, eLogLevel LevelToWrite);\nint SysLogDisable(void);\nint SysLogEnable(void);\nint SysLogIsEnabled(void);\n\nvoid SysLogDebug(bool x);\n\n#ifdef __cplusplus\n}\n#endif // __cplusplus\n\n#endif /* SYSLOG_H_ */\n"
  },
  {
    "path": "firmware/stepper_nano_zero/utils.cpp",
    "content": "/**********************************************************************\n *      Author: tstern\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n#include \"utils.h\"\n#include \"syslog.h\"\n\ndouble CubicInterpolate(\n   double y0,double y1,\n   double y2,double y3,\n   double mu)\n{\n   double a0,a1,a2,a3,mu2;\n\n   mu2 = mu*mu;\n   a0 = y3 - y2 - y0 + y1;\n   a1 = y0 - y1 - a0;\n   a2 = y2 - y0;\n   a3 = y1;\n\n   return(a0*mu*mu2+a1*mu2+a2*mu+a3);\n}\n\n\n\n"
  },
  {
    "path": "firmware/stepper_nano_zero/utils.h",
    "content": "/**********************************************************************\n *      Author: tstern\n *\n\tCopyright (C) 2018  MisfitTech,  All rights reserved.\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n    Written by Trampas Stern for MisfitTech.\n\n    Misfit Tech invests time and resources providing this open source code,\n    please support MisfitTech and open-source hardware by purchasing\n\tproducts from MisfitTech, www.misifittech.net!\n *********************************************************************/\n\n/* this file contains generic utilities and functions */\n\n#ifndef UTILS_H_\n#define UTILS_H_\n\n\ndouble CubicInterpolate(\n   double y0,double y1,\n   double y2,double y3,\n   double mu);\n\n\n\n\n#endif /* UTILS_H_ */\n"
  },
  {
    "path": "hardware/NZS_A4954_R2.0.PrjPcb",
    "content": "[Design]\nVersion=1.0\nHierarchyMode=0\nChannelRoomNamingStyle=0\nReleasesFolder=\nReleaseVaultGUID=\nReleaseVaultName=\nChannelDesignatorFormatString=$Component_$RoomName\nChannelRoomLevelSeperator=_\nOpenOutputs=1\nArchiveProject=0\nTimestampOutput=0\nSeparateFolders=0\nTemplateLocationPath=\nPinSwapBy_Netlabel=1\nPinSwapBy_Pin=1\nAllowPortNetNames=0\nAllowSheetEntryNetNames=1\nAppendSheetNumberToLocalNets=0\nNetlistSinglePinNets=0\nDefaultConfiguration=Default Configuration\nUserID=0xFFFFFFFF\nDefaultPcbProtel=1\nDefaultPcbPcad=0\nReorderDocumentsOnCompile=1\nNameNetsHierarchically=0\nPowerPortNamesTakePriority=0\nPushECOToAnnotationFile=1\nDItemRevisionGUID=\nReportSuppressedErrorsInMessages=0\nOutputPath=\nLogFolderPath=\nManagedProjectGUID=\n\n[Preferences]\nPrefsVaultGUID=\nPrefsRevisionGUID=\n\n[Document1]\nDocumentPath=Nano_stepper.SchDoc\nAnnotationEnabled=1\nAnnotateStartValue=1\nAnnotationIndexControlEnabled=0\nAnnotateSuffix=\nAnnotateScope=All\nAnnotateOrder=0\nDoLibraryUpdate=1\nDoDatabaseUpdate=1\nClassGenCCAutoEnabled=1\nClassGenCCAutoRoomEnabled=0\nClassGenNCAutoScope=None\nDItemRevisionGUID=\nGenerateClassCluster=0\nDocumentUniqueId=JDFVPUVV\n\n[Document2]\nDocumentPath=..\\..\\..\\..\\Altium\\DBlib\\SYM\\A4954.SchLib\nAnnotationEnabled=1\nAnnotateStartValue=1\nAnnotationIndexControlEnabled=0\nAnnotateSuffix=\nAnnotateScope=All\nAnnotateOrder=-1\nDoLibraryUpdate=1\nDoDatabaseUpdate=1\nClassGenCCAutoEnabled=1\nClassGenCCAutoRoomEnabled=1\nClassGenNCAutoScope=None\nDItemRevisionGUID=\nGenerateClassCluster=0\nDocumentUniqueId=KQAKUJIP\n\n[Document3]\nDocumentPath=..\\..\\..\\..\\Altium\\DBlib\\FTPT\\A4954.PcbLib\nAnnotationEnabled=1\nAnnotateStartValue=1\nAnnotationIndexControlEnabled=0\nAnnotateSuffix=\nAnnotateScope=All\nAnnotateOrder=-1\nDoLibraryUpdate=1\nDoDatabaseUpdate=1\nClassGenCCAutoEnabled=1\nClassGenCCAutoRoomEnabled=1\nClassGenNCAutoScope=None\nDItemRevisionGUID=\nGenerateClassCluster=0\nDocumentUniqueId=MHDBBAFF\n\n[Document4]\nDocumentPath=NZS_A4954_R2_0.PcbDoc\nAnnotationEnabled=1\nAnnotateStartValue=1\nAnnotationIndexControlEnabled=0\nAnnotateSuffix=\nAnnotateScope=All\nAnnotateOrder=-1\nDoLibraryUpdate=1\nDoDatabaseUpdate=1\nClassGenCCAutoEnabled=1\nClassGenCCAutoRoomEnabled=1\nClassGenNCAutoScope=None\nDItemRevisionGUID=\nGenerateClassCluster=0\nDocumentUniqueId=IUPHFOFT\n\n[GeneratedDocument1]\nDocumentPath=Project Outputs for NZS_A4954_R2.0\\Design Rule Check - NZS_A4954_R2_0.html\nDItemRevisionGUID=\n\n[Configuration1]\nName=Default Configuration\nParameterCount=0\nConstraintFileCount=0\nReleaseItemId=\nCurrentRevision=\nVariant=[No Variations]\nGenerateBOM=1\nOutputJobsCount=0\n\n[OutputGroup1]\nName=Netlist Outputs\nDescription=\nTargetPrinter=Microsoft Print to PDF\nPrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1\nOutputType1=CadnetixNetlist\nOutputName1=Cadnetix Netlist\nOutputDocumentPath1=\nOutputVariantName1=\nOutputDefault1=0\nOutputType2=CalayNetlist\nOutputName2=Calay Netlist\nOutputDocumentPath2=\nOutputVariantName2=\nOutputDefault2=0\nOutputType3=EDIF\nOutputName3=EDIF for PCB\nOutputDocumentPath3=\nOutputVariantName3=\nOutputDefault3=0\nOutputType4=EESofNetlist\nOutputName4=EESof Netlist\nOutputDocumentPath4=\nOutputVariantName4=\nOutputDefault4=0\nOutputType5=IntergraphNetlist\nOutputName5=Intergraph Netlist\nOutputDocumentPath5=\nOutputVariantName5=\nOutputDefault5=0\nOutputType6=MentorBoardStationNetlist\nOutputName6=Mentor BoardStation Netlist\nOutputDocumentPath6=\nOutputVariantName6=\nOutputDefault6=0\nOutputType7=MultiWire\nOutputName7=MultiWire\nOutputDocumentPath7=\nOutputVariantName7=\nOutputDefault7=0\nOutputType8=OrCadPCB2Netlist\nOutputName8=Orcad/PCB2 Netlist\nOutputDocumentPath8=\nOutputVariantName8=\nOutputDefault8=0\nOutputType9=PADSNetlist\nOutputName9=PADS ASCII Netlist\nOutputDocumentPath9=\nOutputVariantName9=\nOutputDefault9=0\nOutputType10=Pcad\nOutputName10=Pcad for PCB\nOutputDocumentPath10=\nOutputVariantName10=\nOutputDefault10=0\nOutputType11=PCADNetlist\nOutputName11=PCAD Netlist\nOutputDocumentPath11=\nOutputVariantName11=\nOutputDefault11=0\nOutputType12=PCADnltNetlist\nOutputName12=PCADnlt Netlist\nOutputDocumentPath12=\nOutputVariantName12=\nOutputDefault12=0\nOutputType13=Protel2Netlist\nOutputName13=Protel2 Netlist\nOutputDocumentPath13=\nOutputVariantName13=\nOutputDefault13=0\nOutputType14=ProtelNetlist\nOutputName14=Protel\nOutputDocumentPath14=\nOutputVariantName14=\nOutputDefault14=0\nOutputType15=RacalNetlist\nOutputName15=Racal Netlist\nOutputDocumentPath15=\nOutputVariantName15=\nOutputDefault15=0\nOutputType16=RINFNetlist\nOutputName16=RINF Netlist\nOutputDocumentPath16=\nOutputVariantName16=\nOutputDefault16=0\nOutputType17=SciCardsNetlist\nOutputName17=SciCards Netlist\nOutputDocumentPath17=\nOutputVariantName17=\nOutputDefault17=0\nOutputType18=SIMetrixNetlist\nOutputName18=SIMetrix\nOutputDocumentPath18=\nOutputVariantName18=\nOutputDefault18=0\nOutputType19=SIMPLISNetlist\nOutputName19=SIMPLIS\nOutputDocumentPath19=\nOutputVariantName19=\nOutputDefault19=0\nOutputType20=TangoNetlist\nOutputName20=Tango Netlist\nOutputDocumentPath20=\nOutputVariantName20=\nOutputDefault20=0\nOutputType21=TelesisNetlist\nOutputName21=Telesis Netlist\nOutputDocumentPath21=\nOutputVariantName21=\nOutputDefault21=0\nOutputType22=Verilog\nOutputName22=Verilog File\nOutputDocumentPath22=\nOutputVariantName22=\nOutputDefault22=0\nOutputType23=VHDL\nOutputName23=VHDL File\nOutputDocumentPath23=\nOutputVariantName23=\nOutputDefault23=0\nOutputType24=WireListNetlist\nOutputName24=WireList Netlist\nOutputDocumentPath24=\nOutputVariantName24=\nOutputDefault24=0\nOutputType25=XSpiceNetlist\nOutputName25=XSpice Netlist\nOutputDocumentPath25=\nOutputVariantName25=\nOutputDefault25=0\n\n[OutputGroup2]\nName=Simulator Outputs\nDescription=\nTargetPrinter=Microsoft Print to PDF\nPrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1\nOutputType1=AdvSimNetlist\nOutputName1=Mixed Sim\nOutputDocumentPath1=\nOutputVariantName1=\nOutputDefault1=0\nOutputType2=SIMetrixSimulation\nOutputName2=SIMetrix\nOutputDocumentPath2=\nOutputVariantName2=\nOutputDefault2=0\nOutputType3=SIMPLISSimulation\nOutputName3=SIMPLIS\nOutputDocumentPath3=\nOutputVariantName3=\nOutputDefault3=0\n\n[OutputGroup3]\nName=Documentation Outputs\nDescription=\nTargetPrinter=Virtual Printer\nPrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1\nOutputType1=Assembler Source Print\nOutputName1=Assembler Source Prints\nOutputDocumentPath1=\nOutputVariantName1=\nOutputDefault1=0\nPageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType2=C Source Print\nOutputName2=C Source Prints\nOutputDocumentPath2=\nOutputVariantName2=\nOutputDefault2=0\nPageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType3=C/C++ Header Print\nOutputName3=C/C++ Header Prints\nOutputDocumentPath3=\nOutputVariantName3=\nOutputDefault3=0\nPageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType4=C++ Source Print\nOutputName4=C++ Source Prints\nOutputDocumentPath4=\nOutputVariantName4=\nOutputDefault4=0\nPageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType5=Composite\nOutputName5=Composite Drawing\nOutputDocumentPath5=C:\\Users\\TSTERN\\Google Drive\\projects\\Stepper_feedback\\hardware\\NZS_A4954\\NZS_A4954_R1.0.PcbDoc\nOutputVariantName5=\nOutputDefault5=0\nPageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=0|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=0|PaperKind=Letter (8  x 11 in)|PaperIndex=1\nConfiguration5_Name1=OutputConfigurationParameter1\nConfiguration5_Item1=DesignatorDisplayMode=Physical|PrintArea=DesignExtent|PrintAreaLowerLeftCornerX=0|PrintAreaLowerLeftCornerY=0|PrintAreaUpperRightCornerX=0|PrintAreaUpperRightCornerY=0|Record=PcbPrintView\nConfiguration5_Name2=OutputConfigurationParameter2\nConfiguration5_Item2=IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=0|Mirror=False|Name=Multilayer Composite Print|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False\nConfiguration5_Name3=OutputConfigurationParameter3\nConfiguration5_Item3=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=TopOverlay|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer\nConfiguration5_Name4=OutputConfigurationParameter4\nConfiguration5_Item4=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=TopLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer\nConfiguration5_Name5=OutputConfigurationParameter5\nConfiguration5_Item5=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=BottomLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer\nConfiguration5_Name6=OutputConfigurationParameter6\nConfiguration5_Item6=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=MultiLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer\nConfiguration5_Name7=OutputConfigurationParameter7\nConfiguration5_Item7=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=BottomOverlay|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer\nConfiguration5_Name8=OutputConfigurationParameter8\nConfiguration5_Item8=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=KeepOutLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer\nConfiguration5_Name9=OutputConfigurationParameter9\nConfiguration5_Item9=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer\nConfiguration5_Name10=OutputConfigurationParameter10\nConfiguration5_Item10=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical2|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer\nConfiguration5_Name11=OutputConfigurationParameter11\nConfiguration5_Item11=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer\nConfiguration5_Name12=OutputConfigurationParameter12\nConfiguration5_Item12=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer\nOutputType6=FSM Print\nOutputName6=FSM Prints\nOutputDocumentPath6=\nOutputVariantName6=\nOutputDefault6=0\nPageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType7=OpenBus Print\nOutputName7=OpenBus Prints\nOutputDocumentPath7=\nOutputVariantName7=\nOutputDefault7=0\nPageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType8=PCB 3D Print\nOutputName8=PCB 3D Print\nOutputDocumentPath8=\nOutputVariantName8=[No Variations]\nOutputDefault8=0\nPageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType9=PCB 3D Video\nOutputName9=PCB 3D Video\nOutputDocumentPath9=\nOutputVariantName9=[No Variations]\nOutputDefault9=0\nPageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType10=PCB Print\nOutputName10=PCB Prints\nOutputDocumentPath10=\nOutputVariantName10=\nOutputDefault10=0\nPageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType11=PCBLIB Print\nOutputName11=PCBLIB Prints\nOutputDocumentPath11=\nOutputVariantName11=\nOutputDefault11=0\nPageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType12=Report Print\nOutputName12=Report Prints\nOutputDocumentPath12=\nOutputVariantName12=\nOutputDefault12=0\nPageOptions12=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType13=Schematic Print\nOutputName13=Schematic Prints\nOutputDocumentPath13=\nOutputVariantName13=\nOutputDefault13=0\nPageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType14=SimView Print\nOutputName14=SimView Prints\nOutputDocumentPath14=\nOutputVariantName14=\nOutputDefault14=0\nPageOptions14=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType15=Software Platform Print\nOutputName15=Software Platform Prints\nOutputDocumentPath15=\nOutputVariantName15=\nOutputDefault15=0\nPageOptions15=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType16=VHDL Print\nOutputName16=VHDL Prints\nOutputDocumentPath16=\nOutputVariantName16=\nOutputDefault16=0\nPageOptions16=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType17=Wave Print\nOutputName17=Wave Prints\nOutputDocumentPath17=\nOutputVariantName17=\nOutputDefault17=0\nPageOptions17=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType18=WaveSim Print\nOutputName18=WaveSim Prints\nOutputDocumentPath18=\nOutputVariantName18=\nOutputDefault18=0\nPageOptions18=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType19=Logic Analyser Print\nOutputName19=Logic Analyser Prints\nOutputDocumentPath19=\nOutputVariantName19=\nOutputDefault19=0\nPageOptions19=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\n\n[OutputGroup4]\nName=Assembly Outputs\nDescription=\nTargetPrinter=Microsoft Print to PDF\nPrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1\nOutputType1=Assembly\nOutputName1=Assembly Drawings\nOutputDocumentPath1=\nOutputVariantName1=[No Variations]\nOutputDefault1=0\nPageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType2=Pick Place\nOutputName2=Generates pick and place files\nOutputDocumentPath2=\nOutputVariantName2=[No Variations]\nOutputDefault2=0\nOutputType3=Test Points For Assembly\nOutputName3=Test Point Report\nOutputDocumentPath3=\nOutputVariantName3=[No Variations]\nOutputDefault3=0\n\n[OutputGroup5]\nName=Fabrication Outputs\nDescription=\nTargetPrinter=Microsoft Print to PDF\nPrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1\nOutputType1=Plane\nOutputName1=Power-Plane Prints\nOutputDocumentPath1=\nOutputVariantName1=\nOutputDefault1=0\nPageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType2=ODB\nOutputName2=ODB++ Files\nOutputDocumentPath2=\nOutputVariantName2=[No Variations]\nOutputDefault2=0\nOutputType3=NC Drill\nOutputName3=NC Drill Files\nOutputDocumentPath3=\nOutputVariantName3=\nOutputDefault3=0\nConfiguration3_Name1=OutputConfigurationParameter1\nConfiguration3_Item1=BoardEdgeRoutToolDia=2000000|GenerateBoardEdgeRout=False|GenerateDrilledSlotsG85=False|GenerateEIADrillFile=False|GenerateSeparatePlatedNonPlatedFiles=False|NumberOfDecimals=5|NumberOfUnits=2|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Record=DrillView|Units=Imperial|ZeroesMode=SuppressTrailingZeroes\nOutputType4=Test Points\nOutputName4=Test Point Report\nOutputDocumentPath4=\nOutputVariantName4=\nOutputDefault4=0\nOutputType5=Drill\nOutputName5=Drill Drawing/Guides\nOutputDocumentPath5=\nOutputVariantName5=\nOutputDefault5=0\nPageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType6=CompositeDrill\nOutputName6=Composite Drill Drawing\nOutputDocumentPath6=\nOutputVariantName6=\nOutputDefault6=0\nPageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType7=Board Stack Report\nOutputName7=Report Board Stack\nOutputDocumentPath7=\nOutputVariantName7=\nOutputDefault7=0\nPageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType8=Mask\nOutputName8=Solder/Paste Mask Prints\nOutputDocumentPath8=\nOutputVariantName8=\nOutputDefault8=0\nPageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType9=Final\nOutputName9=Final Artwork Prints\nOutputDocumentPath9=\nOutputVariantName9=[No Variations]\nOutputDefault9=0\nPageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType10=Gerber\nOutputName10=Gerber Files\nOutputDocumentPath10=\nOutputVariantName10=[No Variations]\nOutputDefault10=0\nConfiguration10_Name1=OutputConfigurationParameter1\nConfiguration10_Item1=AddToAllLayerClasses.Set= |AddToAllPlots.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean|CentrePlots=False|DrillDrawingSymbol=GraphicsSymbol|DrillDrawingSymbolSize=200000|EmbeddedApertures=True|FilmBorderSize=10000000|FilmXSize=200000000|FilmYSize=160000000|FlashAllFills=False|FlashPadShapes=True|G54OnApertureChange=False|GenerateDRCRulesFile=True|GenerateDRCRulesFile=True|GenerateReliefShapes=True|GerberUnit=Imperial|GerberUnit=Imperial|IncludeUnconnectedMidLayerPads=False|LayerClassesMirror.Set= |LayerClassesPlot.Set= |LeadingAndTrailingZeroesMode=SuppressLeadingZeroes|MaxApertureSize=2500000|MinusApertureTolerance=50|MinusApertureTolerance=50|Mirror.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean|MirrorDrillDrawingPlots=False|MirrorDrillGuidePlots=False|NoRegularPolygons=False|NumberOfDecimals=5|NumberOfDecimals=5|OptimizeChangeLocationCommands=True|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Panelize=False|Plot.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean,16973830~1,16973832~1,16973834~1,16777217~1,16842751~1,16973835~1,16973833~1,16973831~1,16973837~1,16973848~1,16973849~1|PlotPositivePlaneLayers=False|PlotUsedDrillDrawingLayerPairs=False|PlotUsedDrillGuideLayerPairs=False|PlusApertureTolerance=50|PlusApertureTolerance=50|Record=GerberView|SoftwareArcs=False|Sorted=False|Sorted=False\n\n[OutputGroup6]\nName=Report Outputs\nDescription=\nTargetPrinter=Microsoft Print to PDF\nPrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1\nOutputType1=Script\nOutputName1=Script Output\nOutputDocumentPath1=\nOutputVariantName1=[No Variations]\nOutputDefault1=0\nOutputType2=SimpleBOM\nOutputName2=Simple BOM\nOutputDocumentPath2=\nOutputVariantName2=[No Variations]\nOutputDefault2=0\nOutputType3=SinglePinNetReporter\nOutputName3=Report Single Pin Nets\nOutputDocumentPath3=\nOutputVariantName3=[No Variations]\nOutputDefault3=0\nOutputType4=BOM_PartType\nOutputName4=Bill of Materials\nOutputDocumentPath4=\nOutputVariantName4=[No Variations]\nOutputDefault4=0\nPageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nConfiguration4_Name1=ColumnNameFormat\nConfiguration4_Item1=CaptionAsName\nConfiguration4_Name2=Filter\nConfiguration4_Item2=545046300E5446696C74657257726170706572000D46696C7465722E416374697665090F46696C7465722E43726974657269610A04000000000000000000\nConfiguration4_Name3=General\nConfiguration4_Item3=OpenExported=False|AddToProject=False|ForceFit=False|NotFitted=False|Database=True|DatabasePriority=False|IncludePCBData=True|IncludeVaultData=False|IncludeAlternatives=False|ShowExportOptions=True|TemplateFilename=|BatchMode=5|FormWidth=950|FormHeight=661|SupplierProdQty=1|SupplierAutoQty=False|SupplierUseCachedPricing=False|SupplierCurrency=<none>\nConfiguration4_Name4=GroupOrder\nConfiguration4_Item4=Comment=True|Footprint=True\nConfiguration4_Name5=SortOrder\nConfiguration4_Item5=Designator=Up|Comment=Up|Footprint=Up\nConfiguration4_Name6=VisibleOrder\nConfiguration4_Item6=Comment=100|Description=100|Designator=100|Footprint=100|LibRef=100|Quantity=100|Manufacturer_Part_Number=100|Misfit Price=100\nOutputType5=ComponentCrossReference\nOutputName5=Component Cross Reference Report\nOutputDocumentPath5=\nOutputVariantName5=[No Variations]\nOutputDefault5=0\nOutputType6=ReportHierarchy\nOutputName6=Report Project Hierarchy\nOutputDocumentPath6=\nOutputVariantName6=[No Variations]\nOutputDefault6=0\n\n[OutputGroup7]\nName=Other Outputs\nDescription=\nTargetPrinter=Microsoft Print to PDF\nPrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1\nOutputType1=Text Print\nOutputName1=Text Print\nOutputDocumentPath1=\nOutputVariantName1=\nOutputDefault1=0\nPageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType2=Text Print\nOutputName2=Text Print\nOutputDocumentPath2=\nOutputVariantName2=\nOutputDefault2=0\nPageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType3=Text Print\nOutputName3=Text Print\nOutputDocumentPath3=\nOutputVariantName3=\nOutputDefault3=0\nPageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType4=Text Print\nOutputName4=Text Print\nOutputDocumentPath4=\nOutputVariantName4=\nOutputDefault4=0\nPageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType5=Text Print\nOutputName5=Text Print\nOutputDocumentPath5=\nOutputVariantName5=\nOutputDefault5=0\nPageOptions5=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType6=Text Print\nOutputName6=Text Print\nOutputDocumentPath6=\nOutputVariantName6=\nOutputDefault6=0\nPageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType7=Text Print\nOutputName7=Text Print\nOutputDocumentPath7=\nOutputVariantName7=\nOutputDefault7=0\nPageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType8=Text Print\nOutputName8=Text Print\nOutputDocumentPath8=\nOutputVariantName8=\nOutputDefault8=0\nPageOptions8=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType9=Text Print\nOutputName9=Text Print\nOutputDocumentPath9=\nOutputVariantName9=\nOutputDefault9=0\nPageOptions9=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType10=Text Print\nOutputName10=Text Print\nOutputDocumentPath10=\nOutputVariantName10=\nOutputDefault10=0\nPageOptions10=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType11=Text Print\nOutputName11=Text Print\nOutputDocumentPath11=\nOutputVariantName11=\nOutputDefault11=0\nPageOptions11=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType12=Text Print\nOutputName12=Text Print\nOutputDocumentPath12=\nOutputVariantName12=\nOutputDefault12=0\nPageOptions12=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType13=Text Print\nOutputName13=Text Print\nOutputDocumentPath13=\nOutputVariantName13=\nOutputDefault13=0\nPageOptions13=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType14=Text Print\nOutputName14=Text Print\nOutputDocumentPath14=\nOutputVariantName14=\nOutputDefault14=0\nPageOptions14=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType15=Text Print\nOutputName15=Text Print\nOutputDocumentPath15=\nOutputVariantName15=\nOutputDefault15=0\nPageOptions15=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType16=Text Print\nOutputName16=Text Print\nOutputDocumentPath16=\nOutputVariantName16=\nOutputDefault16=0\nPageOptions16=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType17=Text Print\nOutputName17=Text Print\nOutputDocumentPath17=\nOutputVariantName17=\nOutputDefault17=0\nPageOptions17=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType18=Text Print\nOutputName18=Text Print\nOutputDocumentPath18=\nOutputVariantName18=\nOutputDefault18=0\nPageOptions18=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType19=Text Print\nOutputName19=Text Print\nOutputDocumentPath19=\nOutputVariantName19=\nOutputDefault19=0\nPageOptions19=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType20=Text Print\nOutputName20=Text Print\nOutputDocumentPath20=\nOutputVariantName20=\nOutputDefault20=0\nPageOptions20=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType21=Text Print\nOutputName21=Text Print\nOutputDocumentPath21=\nOutputVariantName21=\nOutputDefault21=0\nPageOptions21=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType22=Text Print\nOutputName22=Text Print\nOutputDocumentPath22=\nOutputVariantName22=\nOutputDefault22=0\nPageOptions22=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType23=Text Print\nOutputName23=Text Print\nOutputDocumentPath23=\nOutputVariantName23=\nOutputDefault23=0\nPageOptions23=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType24=Text Print\nOutputName24=Text Print\nOutputDocumentPath24=\nOutputVariantName24=\nOutputDefault24=0\nPageOptions24=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType25=Text Print\nOutputName25=Text Print\nOutputDocumentPath25=\nOutputVariantName25=\nOutputDefault25=0\nPageOptions25=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType26=Text Print\nOutputName26=Text Print\nOutputDocumentPath26=\nOutputVariantName26=\nOutputDefault26=0\nPageOptions26=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType27=Text Print\nOutputName27=Text Print\nOutputDocumentPath27=\nOutputVariantName27=\nOutputDefault27=0\nPageOptions27=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType28=Text Print\nOutputName28=Text Print\nOutputDocumentPath28=\nOutputVariantName28=\nOutputDefault28=0\nPageOptions28=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType29=Text Print\nOutputName29=Text Print\nOutputDocumentPath29=\nOutputVariantName29=\nOutputDefault29=0\nPageOptions29=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\n\n[OutputGroup8]\nName=Validation Outputs\nDescription=\nTargetPrinter=Microsoft Print to PDF\nPrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1\nOutputType1=Configuration compliance\nOutputName1=Environment configuration compliance check\nOutputDocumentPath1=\nOutputVariantName1=\nOutputDefault1=0\nOutputType2=Design Rules Check\nOutputName2=Design Rules Check\nOutputDocumentPath2=\nOutputVariantName2=\nOutputDefault2=0\nPageOptions2=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType3=Differences Report\nOutputName3=Differences Report\nOutputDocumentPath3=\nOutputVariantName3=\nOutputDefault3=0\nPageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType4=Electrical Rules Check\nOutputName4=Electrical Rules Check\nOutputDocumentPath4=\nOutputVariantName4=\nOutputDefault4=0\nPageOptions4=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\nOutputType5=Footprint Comparison Report\nOutputName5=Footprint Comparison Report\nOutputDocumentPath5=\nOutputVariantName5=\nOutputDefault5=0\n\n[OutputGroup9]\nName=Export Outputs\nDescription=\nTargetPrinter=Microsoft Print to PDF\nPrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintWhat=1\nOutputType1=AutoCAD dwg/dxf PCB\nOutputName1=AutoCAD dwg/dxf File PCB\nOutputDocumentPath1=\nOutputVariantName1=\nOutputDefault1=0\nOutputType2=AutoCAD dwg/dxf Schematic\nOutputName2=AutoCAD dwg/dxf File Schematic\nOutputDocumentPath2=\nOutputVariantName2=\nOutputDefault2=0\nOutputType3=ExportIDF\nOutputName3=Export IDF\nOutputDocumentPath3=\nOutputVariantName3=\nOutputDefault3=0\nOutputType4=ExportSTEP\nOutputName4=Export STEP\nOutputDocumentPath4=\nOutputVariantName4=[No Variations]\nOutputDefault4=0\n\n[Modification Levels]\nType1=1\nType2=1\nType3=1\nType4=1\nType5=1\nType6=1\nType7=1\nType8=1\nType9=1\nType10=1\nType11=1\nType12=1\nType13=1\nType14=1\nType15=1\nType16=1\nType17=1\nType18=1\nType19=1\nType20=1\nType21=1\nType22=1\nType23=1\nType24=1\nType25=1\nType26=1\nType27=1\nType28=1\nType29=1\nType30=1\nType31=1\nType32=1\nType33=1\nType34=1\nType35=1\nType36=1\nType37=1\nType38=1\nType39=1\nType40=1\nType41=1\nType42=1\nType43=1\nType44=1\nType45=1\nType46=1\nType47=1\nType48=1\nType49=1\nType50=1\nType51=1\nType52=1\nType53=1\nType54=1\nType55=1\nType56=1\nType57=1\nType58=1\nType59=1\nType60=1\nType61=1\nType62=1\nType63=1\nType64=1\nType65=1\nType66=1\nType67=1\nType68=1\nType69=1\nType70=1\nType71=1\nType72=1\nType73=1\nType74=1\nType75=1\nType76=1\nType77=1\nType78=1\n\n[Difference Levels]\nType1=1\nType2=1\nType3=1\nType4=1\nType5=1\nType6=1\nType7=1\nType8=1\nType9=1\nType10=1\nType11=1\nType12=1\nType13=1\nType14=1\nType15=1\nType16=1\nType17=1\nType18=1\nType19=1\nType20=1\nType21=1\nType22=1\nType23=1\nType24=1\nType25=1\nType26=1\nType27=1\nType28=1\nType29=1\nType30=1\nType31=1\nType32=1\nType33=1\nType34=1\nType35=1\nType36=1\nType37=1\nType38=1\nType39=1\nType40=1\nType41=1\nType42=1\nType43=1\n\n[Electrical Rules Check]\nType1=1\nType2=1\nType3=2\nType4=1\nType5=2\nType6=2\nType7=1\nType8=1\nType9=1\nType10=1\nType11=2\nType12=2\nType13=2\nType14=1\nType15=1\nType16=1\nType17=1\nType18=1\nType19=1\nType20=1\nType21=1\nType22=1\nType23=1\nType24=1\nType25=2\nType26=2\nType27=2\nType28=1\nType29=1\nType30=1\nType31=1\nType32=2\nType33=2\nType34=2\nType35=1\nType36=2\nType37=1\nType38=2\nType39=2\nType40=2\nType41=0\nType42=2\nType43=1\nType44=1\nType45=2\nType46=1\nType47=2\nType48=2\nType49=1\nType50=2\nType51=1\nType52=1\nType53=1\nType54=1\nType55=1\nType56=2\nType57=1\nType58=1\nType59=0\nType60=1\nType61=2\nType62=2\nType63=1\nType64=0\nType65=2\nType66=3\nType67=2\nType68=2\nType69=1\nType70=2\nType71=2\nType72=2\nType73=2\nType74=1\nType75=2\nType76=1\nType77=1\nType78=1\nType79=1\nType80=2\nType81=3\nType82=3\nType83=3\nType84=3\nType85=3\nType86=2\nType87=2\nType88=2\nType89=1\nType90=1\nType91=3\nType92=3\nType93=2\nType94=2\nType95=2\nType96=2\nType97=2\nType98=0\nType99=1\nType100=2\nType101=1\nType102=2\nType103=2\nType104=1\nType105=2\nType106=2\nType107=2\nType108=2\nType109=1\n\n[ERC Connection Matrix]\nL1=NNNNNNNNNNNWNNNWW\nL2=NNWNNNNWWWNWNWNWN\nL3=NWEENEEEENEWNEEWN\nL4=NNENNNWEENNWNENWN\nL5=NNNNNNNNNNNNNNNNN\nL6=NNENNNNEENNWNENWN\nL7=NNEWNNWEENNWNENWN\nL8=NWEENEENEEENNEENN\nL9=NWEENEEEENEWNEEWW\nL10=NWNNNNNENNEWNNEWN\nL11=NNENNNNEEENWNENWN\nL12=WWWWNWWNWWWNWWWNN\nL13=NNNNNNNNNNNWNNNWW\nL14=NWEENEEEENEWNEEWW\nL15=NNENNNNEEENWNENWW\nL16=WWWWNWWNWWWNWWWNW\nL17=WNNNNNNNWNNNWWWWN\n\n[Annotate]\nSortOrder=3\nSortLocation=0\nMatchParameter1=Comment\nMatchStrictly1=1\nMatchParameter2=Library Reference\nMatchStrictly2=1\nPhysicalNamingFormat=$Component_$RoomName\nGlobalIndexSortOrder=3\nGlobalIndexSortLocation=0\n\n[PrjClassGen]\nCompClassManualEnabled=0\nCompClassManualRoomEnabled=0\nNetClassAutoBusEnabled=1\nNetClassAutoCompEnabled=0\nNetClassAutoNamedHarnessEnabled=0\nNetClassManualEnabled=1\n\n[LibraryUpdateOptions]\nSelectedOnly=0\nUpdateVariants=1\nPartTypes=0\nFullReplace=1\nUpdateDesignatorLock=1\nUpdatePartIDLock=1\nPreserveParameterLocations=1\nPreserveParameterVisibility=1\nDoGraphics=1\nDoParameters=1\nDoModels=1\nAddParameters=0\nRemoveParameters=0\nAddModels=1\nRemoveModels=1\nUpdateCurrentModels=1\n\n[DatabaseUpdateOptions]\nSelectedOnly=0\nUpdateVariants=1\nPartTypes=0\n\n[Comparison Options]\nComparisonOptions0=Kind=Net|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0\nComparisonOptions1=Kind=Net Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0\nComparisonOptions2=Kind=Component Class|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0\nComparisonOptions3=Kind=Rule|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0\nComparisonOptions4=Kind=Differential Pair|MinPercent=50|MinMatch=1|ShowMatch=0|Confirm=0|UseName=0|InclAllRules=0\nComparisonOptions5=Kind=Code Memory|MinPercent=75|MinMatch=3|ShowMatch=-1|Confirm=-1|UseName=-1|InclAllRules=0\n\n[SmartPDF]\nPageOptions=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=1|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=Letter|PaperIndex=1\n\n"
  },
  {
    "path": "hardware/Status Report.Txt",
    "content": "Source PCB Design panel.PcbDoc contains embedded board array. It is recomended to generate individual BOM for each embedded board PCB design.\n\nOutput: NC Drill Files\nType  : NC Drill\nFrom  : Project [Free Documents]\n   Generated File[panel-RoundHoles.TXT]\n   Generated File[panel-SlotHoles.TXT]\n   Generated File[panel.LDP]\n   Generated File[panel.DRR]\n\n\nFiles Generated   : 4\nDocuments Printed : 0\n\nFinished Output Generation At 7:25:51 AM On 10/11/2016\n"
  },
  {
    "path": "hardware/panel-RoundHoles.TXT",
    "content": "M48\n;Layer_Color=9474304\n;FILE_FORMAT=2:5\nINCH,LZ\n;TYPE=PLATED\nT1F00S00C0.00787\nT2F00S00C0.01200\nT5F00S00C0.02700\nT6F00S00C0.04000\nT7F00S00C0.04331\nT8F00S00C0.05118\nT9F00S00C0.13780\n;TYPE=NON_PLATED\nT10F00S00C0.03100\n%\nT01\nX0357013Y0242213\nY0246544\nX0361344\nY0242213\nX0365675\nY0246544\nY0250875\nX0361344\nX0357013\nX0185675\nX0181344\nX0177013\nY0246544\nX0181344\nY0242213\nX0177013\nX0185675\nY0246544\nY0422213\nY0426544\nY0430875\nX0181344\nX0177013\nY0426544\nX0181344\nY0422213\nX0177013\nX0357013\nY0426544\nX0361344\nY0422213\nX0365675\nY0426544\nY0430875\nX0361344\nX0357013\nT02\nX0151744Y0128744\nX0171744Y0150744\nX01889Y01524\nX01926Y01531\nY01495\nX01979Y0146186\nX01947Y01414\nX01845Y0143895\nX0214744Y0142244\nX0213244Y0148744\nX0217744Y0150244\nX02223Y015183\nX0242618Y0148744\nX0242744Y0128945\nX0258744Y0134244\nX0206744Y0128945\nX0331744Y0128744\nX0351744Y0150744\nX03689Y01524\nX03726Y01531\nY01495\nX03779Y0146186\nX03747Y01414\nX03645Y0143895\nX0394744Y0142244\nX0393244Y0148744\nX0397744Y0150244\nX04023Y015183\nX0422618Y0148744\nX0422744Y0128945\nX0438744Y0134244\nX0386744Y0128945\nX03824Y0165244\nX0383744Y0178244\nY0190244\nX0387744Y0188744\nX0392744Y0185744\nX0397744Y0187244\nX0400244Y0189744\nX0401744Y0185244\nY0178244\nX0406244Y0191244\nX04147Y01922\nY01881\nX04189Y0186044\nX04255Y01866\nX04351Y01904\nX04291Y01969\nX04261Y02007\nX0414744Y0202744\nX04107Y02112\nX0413941Y0225283\nX04189Y02207\nX04294Y0229705\nX04239Y02372\nX0412244Y0238244\nX04044Y0227244\nX0395244Y0243244\nX0379744\nX0381244Y0239744\nX0382244Y0236244\nX0378744Y0234244\nX03757Y02302\nX0381244Y0229244\nX0370244Y02259\nX0365744Y0227744\nX0363744Y0225244\nY0230744\nY0234244\nX0368244\nY0230744\nX0366244Y023665\nX0356744Y0236744\nX0358744Y0234244\nX0352444Y0234044\nX0349544\nX0346644\nX0348744Y0225244\nX0352744\nX0361744Y0221244\nX03708Y02173\nX03663Y02006\nX0358744Y0200744\nX0355244Y0202244\nX03531Y01913\nX0363244Y0187244\nX0369744Y0185244\nX0367244Y0181244\nX0363987Y0168409\nX0358Y01566\nX0346Y01653\nX03346Y0181244\nX0339087Y0202744\nX0330244Y0207744\nX0327744Y0217244\nX0320744\nX0321044Y0226544\nX0321244Y0232244\nX0330244\nX0329644Y0226644\nX0329244Y0246344\nX0321244Y0246244\nX0321244Y0251244\nX0316244Y0260244\nY0269244\nX0315744Y0277244\nX0323744Y0283744\nX0330744\nX0338744Y0283244\nX0339744Y0262244\nX0346744Y0261644\nX0346644Y0264944\nX0347044Y0268444\nX0356244Y0268744\nX0360244Y0268744\nX0364244Y0264744\nX0368244Y0260744\nX0372244Y0260744\nX0376244Y0264744\nY0268744\nX0372244\nX0380244Y0264744\nX0360244Y0260744\nX0362744Y0256744\nX0378544Y0199889\nX0379744Y0188244\nX04105Y0168409\nX04126Y01651\nX0406418Y0163\nX04089Y01601\nX04002Y0157244\nX04322Y01627\nX0439244Y0157244\nX0448744Y0170344\nX04467Y01818\nX0438744Y02027\nX0435244Y0215244\nX04529Y02052\nX04259Y01729\nX0422744Y0308945\nX0386744\nX0331744Y0308744\nX0242744Y0308945\nX0206744\nX0196244Y0268744\nY0264744\nX0200244\nX0192244Y0260744\nX0188244Y0260744\nX0180244\nX0182744Y0256744\nX0184244Y0264744\nX0180244Y0268744\nX0176244Y0268744\nX0167044Y0268444\nX0166644Y0264944\nX0166744Y0261644\nX0159744Y0262244\nX0158744Y0283244\nX0192244Y0268744\nX0199744Y0243244\nX0201244Y0239744\nX0202244Y0236244\nX0198744Y0234244\nX01957Y02302\nX0201244Y0229244\nX0190244Y02259\nX0185744Y0227744\nX0183744Y0225244\nY0230744\nY0234244\nX0188244\nY0230744\nX0186244Y023665\nX0176744Y0236744\nX0178744Y0234244\nX0172444Y0234044\nX0169544\nX0166644\nX0168744Y0225244\nX0172744\nX0181744Y0221244\nX01908Y02173\nX01863Y02006\nX0178744Y0200744\nX0175244Y0202244\nX01731Y01913\nX0183244Y0187244\nX0189744Y0185244\nX0187244Y0181244\nX0183987Y0168409\nX0178Y01566\nX0166Y01653\nX02024Y0165244\nX0203744Y0178244\nY0190244\nX0207744Y0188744\nX0212744Y0185744\nX0217744Y0187244\nX0220244Y0189744\nX0221744Y0185244\nY0178244\nX0226244Y0191244\nX02347Y01922\nY01881\nX02389Y0186044\nX02455Y01866\nX02551Y01904\nX02491Y01969\nX02461Y02007\nX0234744Y0202744\nX02307Y02112\nX0233941Y0225283\nX02389Y02207\nX02494Y0229705\nX02439Y02372\nX0232244Y0238244\nX02244Y0227244\nX0215244Y0243244\nX0198544Y0199889\nX0199744Y0188244\nX02305Y0168409\nX02326Y01651\nX0226418Y0163\nX02289Y01601\nX02202Y0157244\nX02522Y01627\nX0259244Y0157244\nX0268744Y0170344\nX02667Y01818\nX0258744Y02027\nX0255244Y0215244\nX02729Y02052\nX02459Y01729\nX0159087Y0202744\nX0150244Y0207744\nX0147744Y0217244\nX0140744\nX0141044Y0226544\nX0141244Y0232244\nX0150244\nX0149644Y0226644\nX0149244Y0246344\nX0141244Y0246244\nX0141244Y0251244\nX0136244Y0260244\nY0269244\nX0135744Y0277244\nX0143744Y0283744\nX0150744\nX0151744Y0308744\nX01546Y0181244\nY0361244\nX0150244Y0387744\nX0147744Y0397244\nX0140744\nX0141044Y0406544\nX0141244Y0412244\nX0150244\nX0149644Y0406644\nX0149244Y0426344\nX0141244Y0426244\nX0141244Y0431244\nX0136244Y0440244\nY0449244\nX0135744Y0457244\nX0143744Y0463744\nX0150744\nX0158744Y0463244\nX0159744Y0442244\nX0166744Y0441644\nX0166644Y0444944\nX0167044Y0448444\nX0176244Y0448744\nX0180244Y0448744\nX0184244Y0444744\nX0188244Y0440744\nX0192244Y0440744\nX0196244Y0444744\nY0448744\nX0192244\nX0200244Y0444744\nX0199744Y0423244\nX0201244Y0419744\nX0202244Y0416244\nX0198744Y0414244\nX01957Y04102\nX0201244Y0409244\nX0190244Y04059\nX0185744Y0407744\nX0183744Y0405244\nY0410744\nY0414244\nX0188244\nY0410744\nX0186244Y041665\nX0176744Y0416744\nX0178744Y0414244\nX0172444Y0414044\nX0169544\nX0166644\nX0168744Y0405244\nX0172744\nX0181744Y0401244\nX01908Y03973\nX01863Y03806\nX0178744Y0380744\nX0175244Y0382244\nX01731Y03713\nX0183244Y0367244\nX0189744Y0365244\nX0187244Y0361244\nX0183987Y0348409\nX0178Y03366\nX0171744Y0330744\nX01889Y03324\nX01926Y03331\nY03295\nX01979Y0326186\nX01947Y03214\nX01845Y0323895\nX0214744Y0322244\nX0213244Y0328744\nX0217744Y0330244\nX02223Y033183\nX02202Y0337244\nX02289Y03401\nX0226418Y0343\nX02326Y03451\nX02305Y0348409\nX0221744Y0358244\nY0365244\nX0220244Y0369744\nX0217744Y0367244\nX0212744Y0365744\nX0207744Y0368744\nX0203744Y0370244\nX0199744Y0368244\nX0198544Y0379889\nX0203744Y0358244\nX02024Y0345244\nX0166Y03453\nX0159087Y0382744\nX0234744\nX02347Y03722\nY03681\nX02389Y0366044\nX02455Y03666\nX02551Y03704\nX02491Y03769\nX02461Y03807\nX0258744Y03827\nX0255244Y0395244\nX02494Y0409705\nX02439Y04172\nX0232244Y0418244\nX0233941Y0405283\nX02389Y04007\nX02307Y03912\nX02244Y0407244\nX0215244Y0423244\nX0182744Y0436744\nX0180244Y0440744\nX0226244Y0371244\nX02459Y03529\nX02522Y03427\nX0259244Y0337244\nX0268744Y0350344\nX02667Y03618\nX02729Y03852\nX0258744Y0314244\nX0242618Y0328744\nX0351744Y0330744\nX0358Y03366\nX03689Y03324\nX03726Y03331\nY03295\nX03779Y0326186\nX03747Y03214\nX03645Y0323895\nX0363987Y0348409\nX0367244Y0361244\nX0369744Y0365244\nX0363244Y0367244\nX03531Y03713\nX0355244Y0382244\nX0358744Y0380744\nX03663Y03806\nX0378544Y0379889\nX0379744Y0368244\nX0383744Y0370244\nX0387744Y0368744\nX0392744Y0365744\nX0397744Y0367244\nX0400244Y0369744\nX0401744Y0365244\nY0358244\nX0406244Y0371244\nX04147Y03722\nY03681\nX04189Y0366044\nX04255Y03666\nX04351Y03704\nX04291Y03769\nX04261Y03807\nX0414744Y0382744\nX04107Y03912\nX0413941Y0405283\nX04189Y04007\nX04294Y0409705\nX04239Y04172\nX0412244Y0418244\nX04044Y0407244\nX0395244Y0423244\nX0379744\nX0381244Y0419744\nX0382244Y0416244\nX0378744Y0414244\nX03757Y04102\nX0381244Y0409244\nX0370244Y04059\nX0365744Y0407744\nX0363744Y0405244\nY0410744\nY0414244\nX0368244\nY0410744\nX0366244Y041665\nX0356744Y0416744\nX0358744Y0414244\nX0352444Y0414044\nX0349544\nX0346644\nX0348744Y0405244\nX0352744\nX0361744Y0401244\nX03708Y03973\nX0327744Y0397244\nX0320744\nX0321044Y0406544\nX0321244Y0412244\nX0330244\nX0329644Y0406644\nX0330244Y0387744\nX0339087Y0382744\nX03346Y0361244\nX0346Y03453\nX03824Y0345244\nX0383744Y0358244\nX04105Y0348409\nX04126Y03451\nX0406418Y0343\nX04089Y03401\nX04002Y0337244\nX04023Y033183\nX0397744Y0330244\nX0393244Y0328744\nX0394744Y0322244\nX0422618Y0328744\nX04322Y03427\nX0439244Y0337244\nX0448744Y0350344\nX04467Y03618\nX0438744Y03827\nX0435244Y0395244\nX04529Y03852\nX04259Y03529\nX0438744Y0314244\nX0380244Y0444744\nX0376244\nY0448744\nX0372244\nX0372244Y0440744\nX0368244Y0440744\nX0360244\nX0362744Y0436744\nX0364244Y0444744\nX0360244Y0448744\nX0356244Y0448744\nX0347044Y0448444\nX0346644Y0444944\nX0346744Y0441644\nX0339744Y0442244\nX0338744Y0463244\nX0330744Y0463744\nX0323744\nX0315744Y0457244\nX0316244Y0449244\nY0440244\nX0321244Y0431244\nX0321244Y0426244\nX0329244Y0426344\nT05\nX0321744Y0166744\nY0171744\nX0326744\nY0166744\nX0331744\nY0171744\nX0336744\nY0166744\nX0341744\nY0171744\nX0161744\nX0156744\nY0166744\nX0161744\nX0151744\nX0146744\nX0141744\nY0171744\nX0146744\nX0151744\nY0346744\nX0146744\nX0141744\nY0351744\nX0146744\nX0151744\nX0156744\nY0346744\nX0161744\nY0351744\nX0321744\nY0346744\nX0326744\nY0351744\nX0331744\nY0346744\nX0336744\nY0351744\nX0341744\nY0346744\nT06\nX0385244Y0252744\nX0395244\nX0405244\nX0415244\nX0312044Y0252344\nY0242344\nY0232344\nY0222344\nX0235244Y0252744\nX0225244\nX0215244\nX0205244\nX0132044Y0252344\nY0242344\nY0232344\nY0222344\nY0402344\nY0412344\nY0422344\nY0432344\nX0205244Y0432744\nX0215244\nX0225244\nX0235244\nX0312044Y0432344\nY0422344\nY0412344\nY0402344\nX0385244Y0432744\nX0395244\nX0405244\nX0415244\nT07\nX04635Y01612\nY01712\nY01812\nY01912\nY02012\nY02112\nY02212\nY02312\nY02412\nY02512\nX02835\nY02412\nY02312\nY02212\nY02112\nY02012\nY01912\nY01812\nY01712\nY01612\nY03412\nY03512\nY03612\nY03712\nY03812\nY03912\nY04012\nY04112\nY04212\nY04312\nX04635\nY04212\nY04112\nY04012\nY03912\nY03812\nY03712\nY03612\nY03512\nY03412\nT08\nX0395744Y0276244\nX0415744\nX0235744\nX0215744\nY0456244\nX0235744\nX0395744\nX0415744\nT09\nX0147744Y0146744\nX0269791\nX0327744\nX0449791\nY0268791\nX0327744\nX0269791\nX0147744\nY0326744\nY0448791\nX0269791\nY0326744\nX0327744\nX0449791\nY0448791\nX0327744\nT10\nX01246Y01525\nX01555Y0124\nX01605\nX01655\nX01705\nX01755\nX01805\nX02363Y01238\nX02413\nX02463\nX02513\nX02563\nX02613\nX02906Y015\nY0155\nX03051\nY015\nX0332Y0124\nX0337\nX0342\nX0347\nX0352\nX0357\nX04187Y01244\nX04237\nX04287\nX04337\nX04387\nX04437\nX04706Y01525\nY01575\nY01625\nY01675\nY01725\nY01775\nX04716Y02161\nY02211\nY02261\nY02311\nY02361\nY02411\nX04325Y02901\nX04275\nX04225\nX04175\nX04125\nX04075\nX04064Y03037\nX04114\nX04164\nX04214\nX04264\nX04314\nX03606Y03045\nX03556\nX03506\nX03456\nX03406\nX03356\nX03355Y02899\nX03405\nX03455\nX03505\nX03555\nX03605\nX03048Y02543\nY02493\nY02443\nY02393\nY02343\nY02293\nX02914Y02298\nY02348\nY02398\nY02448\nY02498\nY02548\nX02611Y02901\nX02561\nX02511\nX02461\nX02411\nX02361\nX02359Y03033\nX02409\nX02459\nX02509\nX02559\nX02609\nX01755Y03039\nX01705\nX01655\nX01605\nX01607Y02901\nX01657\nX01707\nX01757\nX02906Y0175\nY017\nY0165\nY016\nX03051\nY0165\nY017\nY0175\nX01246Y01775\nY01725\nY01675\nY01625\nY01575\nX0125Y024\nY0245\nY025\nY0255\nY026\nY0265\nX01507Y02901\nX01557\nX01555Y03039\nX01505\nX01251Y03317\nY03367\nY03417\nY03467\nY03517\nY03567\nX01252Y04092\nY04142\nY04192\nY04242\nY04292\nY04342\nX0291Y04291\nY04241\nY04191\nY04141\nY04091\nY04041\nX03049Y04045\nY04095\nY04145\nY04195\nY04245\nY04295\nX03047Y03632\nY03582\nY03532\nY03482\nY03432\nY03382\nX02912Y03383\nY03433\nY03483\nY03533\nY03583\nY03633\nX04716Y03645\nY03595\nY03545\nY03495\nY03445\nY03395\nX04712Y04014\nY04064\nY04114\nY04164\nY04214\nY04264\nX0435Y04696\nX043\nX0425\nX042\nX0415\nX041\nX0365\nX036\nX0355\nX035\nX0345\nX034\nX02526\nX02476\nX02426\nX02376\nX02326\nX02276\nX01832Y04698\nX01782\nX01732\nX01682\nX01632\nX01582\nM30\n"
  },
  {
    "path": "hardware/panel-SlotHoles.TXT",
    "content": "M48\n;Layer_Color=9474304\n;FILE_FORMAT=2:5\nINCH,LZ\n;TYPE=PLATED\nT3F00S00C0.01968\nT4F00S00C0.02165\n;TYPE=NON_PLATED\n%\nG90\nG05\nT03\nG00X0311728Y0181964\nM15\nG01X0314287\nM16\nG00X0311728Y0209524\nM15\nG01X0314287\nM16\nG00X0131728Y0209524\nM15\nG01X0134287\nM16\nG00X0131728Y0181964\nM15\nG01X0134287\nM16\nG00X0131728Y0361964\nM15\nG01X0134287\nM16\nG00X0131728Y0389524\nM15\nG01X0134287\nM16\nG00X0311728Y0389524\nM15\nG01X0314287\nM16\nG00X0311728Y0361964\nM15\nG01X0314287\nM16\nT04\nG00X0324031Y0186492\nM15\nG01Y0185311\nM16\nG00X0324031Y0206177\nM15\nG01Y0204996\nM16\nG00X0144031Y0206177\nM15\nG01Y0204996\nM16\nG00X0144031Y0186492\nM15\nG01Y0185311\nM16\nG00X0144031Y0366492\nM15\nG01Y0365311\nM16\nG00X0144031Y0386177\nM15\nG01Y0384996\nM16\nG00X0324031Y0386177\nM15\nG01Y0384996\nM16\nG00X0324031Y0366492\nM15\nG01Y0365311\nM16\nM17\nM30\n"
  },
  {
    "path": "hardware/panel-macro.APR_LIB",
    "content": "G04:AMPARAMS|DCode=11|XSize=31.5mil|YSize=35.43mil|CornerRadius=7.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD11*\n21,1,0.03150,0.01969,0,0,270.0*\n21,1,0.01575,0.03543,0,0,270.0*\n1,1,0.01575,-0.00984,-0.00787*\n1,1,0.01575,-0.00984,0.00787*\n1,1,0.01575,0.00984,0.00787*\n1,1,0.01575,0.00984,-0.00787*\n%\nG04:AMPARAMS|DCode=18|XSize=31.5mil|YSize=31.5mil|CornerRadius=7.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD18*\n21,1,0.03150,0.01575,0,0,90.0*\n21,1,0.01575,0.03150,0,0,90.0*\n1,1,0.01575,0.00787,0.00787*\n1,1,0.01575,0.00787,-0.00787*\n1,1,0.01575,-0.00787,-0.00787*\n1,1,0.01575,-0.00787,0.00787*\n%\nG04:AMPARAMS|DCode=20|XSize=27.56mil|YSize=51.18mil|CornerRadius=6.89mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD20*\n21,1,0.02756,0.03740,0,0,90.0*\n21,1,0.01378,0.05118,0,0,90.0*\n1,1,0.01378,0.01870,0.00689*\n1,1,0.01378,0.01870,-0.00689*\n1,1,0.01378,-0.01870,-0.00689*\n1,1,0.01378,-0.01870,0.00689*\n%\nG04:AMPARAMS|DCode=22|XSize=23.62mil|YSize=35.43mil|CornerRadius=5.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD22*\n21,1,0.02362,0.02362,0,0,270.0*\n21,1,0.01181,0.03543,0,0,270.0*\n1,1,0.01181,-0.01181,-0.00591*\n1,1,0.01181,-0.01181,0.00591*\n1,1,0.01181,0.01181,0.00591*\n1,1,0.01181,0.01181,-0.00591*\n%\nG04:AMPARAMS|DCode=25|XSize=78.74mil|YSize=39.37mil|CornerRadius=9.84mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD25*\n21,1,0.07874,0.01969,0,0,0.0*\n21,1,0.05906,0.03937,0,0,0.0*\n1,1,0.01969,0.02953,-0.00984*\n1,1,0.01969,-0.02953,-0.00984*\n1,1,0.01969,-0.02953,0.00984*\n1,1,0.01969,0.02953,0.00984*\n%\nG04:AMPARAMS|DCode=27|XSize=9.84mil|YSize=33.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD27*\n21,1,0.02362,0.00984,0.00000,0.00000,225.0*\n1,1,0.00984,0.00835,0.00835*\n1,1,0.00984,-0.00835,-0.00835*\n%\nG04:AMPARAMS|DCode=28|XSize=9.84mil|YSize=35.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD28*\n21,1,0.02559,0.00984,0.00000,0.00000,225.0*\n1,1,0.00984,0.00905,0.00905*\n1,1,0.00984,-0.00905,-0.00905*\n%\nG04:AMPARAMS|DCode=29|XSize=9.84mil|YSize=33.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD29*\n21,1,0.02362,0.00984,0.00000,0.00000,315.0*\n1,1,0.00984,-0.00835,0.00835*\n1,1,0.00984,0.00835,-0.00835*\n%\nG04:AMPARAMS|DCode=30|XSize=9.84mil|YSize=35.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD30*\n21,1,0.02559,0.00984,0.00000,0.00000,315.0*\n1,1,0.00984,-0.00905,0.00905*\n1,1,0.00984,0.00905,-0.00905*\n%\nG04:AMPARAMS|DCode=31|XSize=9.84mil|YSize=33.47mil|CornerRadius=2.46mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD31*\n21,1,0.00984,0.02854,0,0,225.0*\n21,1,0.00492,0.03347,0,0,225.0*\n1,1,0.00492,-0.01183,0.00835*\n1,1,0.00492,-0.00835,0.01183*\n1,1,0.00492,0.01183,-0.00835*\n1,1,0.00492,0.00835,-0.01183*\n%\nG04:AMPARAMS|DCode=63|XSize=23.62mil|YSize=62.99mil|CornerRadius=5.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD63*\n21,1,0.02362,0.05118,0,0,0.0*\n21,1,0.01181,0.06299,0,0,0.0*\n1,1,0.01181,0.00591,-0.02559*\n1,1,0.01181,-0.00591,-0.02559*\n1,1,0.01181,-0.00591,0.02559*\n1,1,0.01181,0.00591,0.02559*\n%\nG04:AMPARAMS|DCode=72|XSize=39.5mil|YSize=43.43mil|CornerRadius=11.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD72*\n21,1,0.03950,0.01969,0,0,270.0*\n21,1,0.01575,0.04343,0,0,270.0*\n1,1,0.02375,-0.00984,-0.00787*\n1,1,0.02375,-0.00984,0.00787*\n1,1,0.02375,0.00984,0.00787*\n1,1,0.02375,0.00984,-0.00787*\n%\nG04:AMPARAMS|DCode=79|XSize=39.5mil|YSize=39.5mil|CornerRadius=11.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD79*\n21,1,0.03950,0.01575,0,0,90.0*\n21,1,0.01575,0.03950,0,0,90.0*\n1,1,0.02375,0.00787,0.00787*\n1,1,0.02375,0.00787,-0.00787*\n1,1,0.02375,-0.00787,-0.00787*\n1,1,0.02375,-0.00787,0.00787*\n%\nG04:AMPARAMS|DCode=81|XSize=35.56mil|YSize=59.18mil|CornerRadius=10.89mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD81*\n21,1,0.03556,0.03740,0,0,90.0*\n21,1,0.01378,0.05918,0,0,90.0*\n1,1,0.02178,0.01870,0.00689*\n1,1,0.02178,0.01870,-0.00689*\n1,1,0.02178,-0.01870,-0.00689*\n1,1,0.02178,-0.01870,0.00689*\n%\nG04:AMPARAMS|DCode=83|XSize=31.62mil|YSize=43.43mil|CornerRadius=9.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD83*\n21,1,0.03162,0.02362,0,0,270.0*\n21,1,0.01181,0.04343,0,0,270.0*\n1,1,0.01981,-0.01181,-0.00591*\n1,1,0.01981,-0.01181,0.00591*\n1,1,0.01981,0.01181,0.00591*\n1,1,0.01981,0.01181,-0.00591*\n%\nG04:AMPARAMS|DCode=86|XSize=86.74mil|YSize=47.37mil|CornerRadius=13.84mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD86*\n21,1,0.08674,0.01969,0,0,0.0*\n21,1,0.05906,0.04737,0,0,0.0*\n1,1,0.02769,0.02953,-0.00984*\n1,1,0.02769,-0.02953,-0.00984*\n1,1,0.02769,-0.02953,0.00984*\n1,1,0.02769,0.02953,0.00984*\n%\nG04:AMPARAMS|DCode=88|XSize=17.84mil|YSize=41.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD88*\n21,1,0.02362,0.01784,0.00000,0.00000,225.0*\n1,1,0.01784,0.00835,0.00835*\n1,1,0.01784,-0.00835,-0.00835*\n%\nG04:AMPARAMS|DCode=89|XSize=17.84mil|YSize=43.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD89*\n21,1,0.02559,0.01784,0.00000,0.00000,225.0*\n1,1,0.01784,0.00905,0.00905*\n1,1,0.01784,-0.00905,-0.00905*\n%\nG04:AMPARAMS|DCode=90|XSize=17.84mil|YSize=41.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD90*\n21,1,0.02362,0.01784,0.00000,0.00000,315.0*\n1,1,0.01784,-0.00835,0.00835*\n1,1,0.01784,0.00835,-0.00835*\n%\nG04:AMPARAMS|DCode=91|XSize=17.84mil|YSize=43.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD91*\n21,1,0.02559,0.01784,0.00000,0.00000,315.0*\n1,1,0.01784,-0.00905,0.00905*\n1,1,0.01784,0.00905,-0.00905*\n%\nG04:AMPARAMS|DCode=92|XSize=17.84mil|YSize=41.47mil|CornerRadius=6.46mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD92*\n21,1,0.01784,0.02854,0,0,225.0*\n21,1,0.00492,0.04147,0,0,225.0*\n1,1,0.01292,-0.01183,0.00835*\n1,1,0.01292,-0.00835,0.01183*\n1,1,0.01292,0.01183,-0.00835*\n1,1,0.01292,0.00835,-0.01183*\n%\nG04:AMPARAMS|DCode=112|XSize=31.62mil|YSize=70.99mil|CornerRadius=9.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD112*\n21,1,0.03162,0.05118,0,0,0.0*\n21,1,0.01181,0.07099,0,0,0.0*\n1,1,0.01981,0.00591,-0.02559*\n1,1,0.01981,-0.00591,-0.02559*\n1,1,0.01981,-0.00591,0.02559*\n1,1,0.01981,0.00591,0.02559*\n%\n"
  },
  {
    "path": "hardware/panel.1",
    "content": "G04 Layer_Color=255*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\nM02*\n"
  },
  {
    "path": "hardware/panel.DRR",
    "content": "----------------------------------------------------------------------------------------------------------------------------------\nNCDrill File Report For: panel.PcbDoc   10/11/2016  7:25:51 AM\n----------------------------------------------------------------------------------------------------------------------------------\n\nLayer Pair : Top Layer to Bottom Layer\nASCII RoundHoles File : panel-RoundHoles.TXT\nASCII SlotHoles File : panel-SlotHoles.TXT\n\nTool       Hole Size               Hole Tolerance               Hole Type       Hole Count   Plated         Tool Travel\n----------------------------------------------------------------------------------------------------------------------------------\nT1      8mil (0.2mm)                                              Round             36        PTH        6.70inch (170.16mm)\nT2      12mil (0.305mm)                                           Round             492       PTH        63.35inch (1609.14mm)\nT3      20mil (0.5mm)                                             Slot              8         PTH        13.21inch (335.65mm)\nT4      22mil (0.55mm)                                            Slot              8         PTH        12.48inch (317.02mm)\nT5      27mil (0.686mm)                                           Round             40        PTH        7.00inch (177.80mm)\nT6      40mil (1.016mm)                                           Round             32        PTH        9.08inch (230.70mm)\nT7      43mil (1.1mm)                                             Round             40        PTH        9.00inch (228.60mm)\nT8      51mil (1.3mm)                                             Round             8         PTH        6.00inch (152.40mm)\nT9      138mil (3.5mm)                                            Round             16        PTH        15.74inch (399.88mm)\nT10     31mil (0.787mm)                                           Round             192       NPTH       28.19inch (715.91mm)\n----------------------------------------------------------------------------------------------------------------------------------\nTotals                                                                              872\n\nTotal Processing Time (hh:mm:ss) : 00:00:00\n"
  },
  {
    "path": "hardware/panel.EXTREP",
    "content": "------------------------------------------------------------------------------------------\nGerber File Extension Report For: panel.GBR   10/11/2016  7:23:43 AM\n------------------------------------------------------------------------------------------\n\n\n------------------------------------------------------------------------------------------\nLayer Extension     Layer Description                      \n------------------------------------------------------------------------------------------\n.GTL                Top Layer                               \n.GBL                Bottom Layer                            \n.GPB                Bottom Pad Master                       \n.GPT                Top Pad Master                          \n.GTO                Top Overlay                             \n.GTP                Top Paste                               \n.GTS                Top Solder                              \n.GBS                Bottom Solder                           \n.GBP                Bottom Paste                            \n.GBO                Bottom Overlay                          \n.GKO                Keep-Out Layer                          \n.GM1                Mechanical 1                            \n.GM3                Mechanical 3                            \n.GM2                Mechanical 2                            \n.GM13               Mechanical 13                           \n.GM15               Mechanical 15                           \n.1                  Dielectric 1                            \n.GML                Multi-Layer                             \n.GD1                Drill Drawing                           \n------------------------------------------------------------------------------------------\n"
  },
  {
    "path": "hardware/panel.GBL",
    "content": "G04 Layer_Physical_Order=2*\nG04 Layer_Color=16711680*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD13R,0.03347X0.03150*%\n%ADD24R,0.03543X0.02953*%\n%ADD38C,0.00600*%\n%ADD40C,0.02000*%\n%ADD41C,0.04000*%\n%ADD43C,0.00800*%\n%ADD48C,0.06000*%\n%ADD49C,0.01000*%\n%ADD50O,0.04724X0.09449*%\n%ADD51O,0.06102X0.03543*%\n%ADD52O,0.03740X0.04921*%\n%ADD53C,0.07000*%\n%ADD54R,0.07000X0.07000*%\n%ADD55C,0.04000*%\n%ADD56R,0.04000X0.04000*%\n%ADD57R,0.07000X0.07000*%\n%ADD58C,0.07874*%\n%ADD59C,0.02400*%\n%ADD60C,0.01969*%\n%ADD61R,0.03150X0.03347*%\n%ADD62R,0.02953X0.03543*%\nG04:AMPARAMS|DCode=63|XSize=23.62mil|YSize=62.99mil|CornerRadius=5.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD63*\n21,1,0.02362,0.05118,0,0,0.0*\n21,1,0.01181,0.06299,0,0,0.0*\n1,1,0.01181,0.00591,-0.02559*\n1,1,0.01181,-0.00591,-0.02559*\n1,1,0.01181,-0.00591,0.02559*\n1,1,0.01181,0.00591,0.02559*\n%\n%ADD63ROUNDEDRECTD63*%\n%ADD64R,0.02362X0.06299*%\n%ADD65R,0.01772X0.05512*%\n%ADD66O,0.01772X0.05512*%\nG36*\nX469325Y459112D02*\nY414044D01*\nY375657D01*\nX468825Y375449D01*\nX467337Y376937D01*\nX466907Y377225D01*\nX466610Y377284D01*\nX466476Y377812D01*\nX466709Y377991D01*\nX467431Y378931D01*\nX467884Y380025D01*\nX468039Y381200D01*\nX467884Y382375D01*\nX467431Y383469D01*\nX466709Y384409D01*\nX465769Y385131D01*\nX464675Y385584D01*\nX463500Y385739D01*\nX462325Y385584D01*\nX461231Y385131D01*\nX460291Y384409D01*\nX459569Y383469D01*\nX459116Y382375D01*\nX458961Y381200D01*\nX459116Y380025D01*\nX459569Y378931D01*\nX460291Y377991D01*\nX460540Y377799D01*\nX460380Y377326D01*\nX459300D01*\nX458793Y377225D01*\nX458363Y376937D01*\nX458153Y376727D01*\nX441516D01*\nY377878D01*\nX440069D01*\nY378551D01*\nX442437Y380919D01*\nX442725Y381349D01*\nX442826Y381856D01*\nY390602D01*\nX442725Y391109D01*\nX442437Y391539D01*\nX441637Y392339D01*\nX441516Y392420D01*\nY393878D01*\nX440069D01*\nY395851D01*\nX443437Y399219D01*\nX443725Y399649D01*\nX443825Y400156D01*\nY414044D01*\nY419397D01*\nX443725Y419904D01*\nX443437Y420334D01*\nX442624Y421148D01*\nX441025Y422746D01*\nY426532D01*\nX444819D01*\nY427879D01*\nX451800D01*\nX452307Y427980D01*\nX452737Y428268D01*\nX454344Y429875D01*\nX459178D01*\nX459569Y428931D01*\nX460291Y427991D01*\nX461231Y427269D01*\nX462325Y426816D01*\nX463500Y426661D01*\nX464675Y426816D01*\nX465769Y427269D01*\nX466709Y427991D01*\nX467431Y428931D01*\nX467884Y430025D01*\nX468039Y431200D01*\nX467884Y432375D01*\nX467431Y433469D01*\nX466709Y434409D01*\nX465769Y435131D01*\nX464675Y435584D01*\nX463500Y435739D01*\nX462325Y435584D01*\nX461231Y435131D01*\nX460291Y434409D01*\nX459569Y433469D01*\nX459178Y432525D01*\nX453795D01*\nX453288Y432425D01*\nX452858Y432137D01*\nX451251Y430530D01*\nX444819D01*\nY431878D01*\nX439669D01*\nY430524D01*\nX439193Y430429D01*\nX438763Y430142D01*\nX438475Y429712D01*\nX438375Y429205D01*\nY424353D01*\nX438094Y424237D01*\nX437875Y424194D01*\nX437463Y424469D01*\nX436956Y424570D01*\nX407378D01*\nY426016D01*\nX405533D01*\nX405266Y426516D01*\nX405335Y426618D01*\nX407232D01*\nX407739Y426719D01*\nX408170Y427007D01*\nX408581Y427419D01*\nX411244D01*\nX411751Y427520D01*\nX412181Y427807D01*\nX413125Y428751D01*\nX414069Y428360D01*\nX415244Y428205D01*\nX416419Y428360D01*\nX417513Y428813D01*\nX418453Y429535D01*\nX419175Y430475D01*\nX419628Y431569D01*\nX419783Y432744D01*\nX419628Y433919D01*\nX419175Y435013D01*\nX418453Y435953D01*\nX417513Y436675D01*\nX416419Y437128D01*\nX415244Y437283D01*\nX414069Y437128D01*\nX412975Y436675D01*\nX412035Y435953D01*\nX411313Y435013D01*\nX410860Y433919D01*\nX410705Y432744D01*\nX410860Y431569D01*\nX411251Y430625D01*\nX410695Y430070D01*\nX409423D01*\nX409214Y430570D01*\nX409628Y431569D01*\nX409783Y432744D01*\nX409628Y433919D01*\nX409175Y435013D01*\nX408453Y435953D01*\nX407513Y436675D01*\nX406419Y437128D01*\nX405244Y437283D01*\nX404069Y437128D01*\nX402975Y436675D01*\nX402035Y435953D01*\nX401313Y435013D01*\nX400860Y433919D01*\nX400705Y432744D01*\nX400860Y431569D01*\nX401313Y430475D01*\nX402035Y429535D01*\nX402837Y428919D01*\nX402963Y428338D01*\nX401026Y426400D01*\nX400769Y426016D01*\nX397110D01*\nY425243D01*\nX396610Y424977D01*\nX396102Y425316D01*\nX395244Y425487D01*\nX394386Y425316D01*\nX394319Y425272D01*\nX393878Y425508D01*\nY425819D01*\nX388532D01*\nY420669D01*\nX393878D01*\nY420981D01*\nX394319Y421216D01*\nX394386Y421172D01*\nX395244Y421001D01*\nX396102Y421172D01*\nX396610Y421511D01*\nX397110Y421246D01*\nY420472D01*\nX397110D01*\nY420016D01*\nX397110D01*\nY418570D01*\nX393878D01*\nY419819D01*\nX388532D01*\nY416445D01*\nX387656Y415570D01*\nX384793D01*\nX384426Y415937D01*\nX384487Y416244D01*\nX384316Y417102D01*\nX383830Y417830D01*\nX383403Y418116D01*\nX383233Y418761D01*\nX383316Y418886D01*\nX383487Y419744D01*\nX383316Y420603D01*\nX382830Y421330D01*\nX382102Y421816D01*\nX381956Y421846D01*\nX381764Y422308D01*\nX381816Y422386D01*\nX381987Y423244D01*\nX381816Y424102D01*\nX381330Y424830D01*\nX380603Y425316D01*\nX379744Y425487D01*\nX378886Y425316D01*\nX378158Y424830D01*\nX377672Y424102D01*\nX377501Y423244D01*\nX377562Y422937D01*\nX372663Y418037D01*\nX372375Y417607D01*\nX372274Y417100D01*\nY414044D01*\nY409330D01*\nX372176Y409209D01*\nX371811Y409098D01*\nX371621Y409225D01*\nX371114Y409326D01*\nX370473D01*\nX370237Y409766D01*\nX370316Y409886D01*\nX370388Y410244D01*\nX369744D01*\nY409326D01*\nX369374D01*\nX368867Y409225D01*\nX368437Y408937D01*\nX367207Y407707D01*\nX366919Y407277D01*\nX366819Y406770D01*\nY405030D01*\nX366919Y404523D01*\nX367207Y404093D01*\nX369475Y401825D01*\nY399060D01*\nX369214Y398886D01*\nX368728Y398158D01*\nX368557Y397300D01*\nX368728Y396442D01*\nX369214Y395714D01*\nX369744Y395360D01*\nX369942Y395228D01*\nX370800Y395057D01*\nX370929Y394952D01*\nX370941Y390222D01*\nX370479Y390031D01*\nX369282Y391227D01*\nX368735Y391774D01*\nX368305Y392062D01*\nX367798Y392162D01*\nX360867D01*\nX360360Y392062D01*\nX359930Y391774D01*\nX355500Y387344D01*\nX352225Y384070D01*\nX340847D01*\nX340673Y384330D01*\nX339945Y384816D01*\nX339087Y384987D01*\nX338228Y384816D01*\nX337501Y384330D01*\nX337014Y383602D01*\nX336843Y382744D01*\nX337014Y381886D01*\nX337501Y381158D01*\nX337761Y380984D01*\nY380016D01*\nX337110D01*\nY374473D01*\nX337761D01*\nY372113D01*\nX337862Y371606D01*\nX338149Y371176D01*\nX338963Y370363D01*\nX339393Y370075D01*\nX339900Y369974D01*\nX351340D01*\nX351514Y369714D01*\nX352242Y369228D01*\nX353100Y369057D01*\nX353958Y369228D01*\nX354686Y369714D01*\nX354906Y370043D01*\nX355403Y370092D01*\nX363088Y362407D01*\nX363519Y362120D01*\nX364026Y362019D01*\nX364761D01*\nX365078Y361632D01*\nX365001Y361244D01*\nX365172Y360386D01*\nX365658Y359658D01*\nX365958Y359457D01*\nY350819D01*\nX364610D01*\nY350819D01*\nX364326Y350585D01*\nX363987Y350653D01*\nX363128Y350482D01*\nX362401Y349995D01*\nX362116Y349570D01*\nX355731D01*\nX355223Y349469D01*\nX354793Y349181D01*\nX351374Y345762D01*\nX350912Y345953D01*\nY346576D01*\nX350811Y347083D01*\nX350524Y347513D01*\nX345356Y352681D01*\nX344926Y352969D01*\nX344744Y353005D01*\nY354744D01*\nX338744D01*\nY354556D01*\nX338296Y354335D01*\nX338257Y354364D01*\nX337527Y354667D01*\nX337244Y354704D01*\nY351744D01*\nX336244D01*\nY354704D01*\nX335961Y354667D01*\nX335231Y354364D01*\nX334604Y353884D01*\nX334494Y353740D01*\nX333994D01*\nX333884Y353884D01*\nX333257Y354364D01*\nX332527Y354667D01*\nX332244Y354704D01*\nY351744D01*\nX331244D01*\nY354704D01*\nX330961Y354667D01*\nX330231Y354364D01*\nX329604Y353884D01*\nX329494Y353740D01*\nX328994D01*\nX328884Y353884D01*\nX328257Y354364D01*\nX327527Y354667D01*\nX326744Y354770D01*\nX325961Y354667D01*\nX325231Y354364D01*\nX324604Y353884D01*\nX324494Y353740D01*\nX323994D01*\nX323884Y353884D01*\nX323257Y354364D01*\nX322527Y354667D01*\nX321744Y354770D01*\nX320961Y354667D01*\nX320598Y354517D01*\nX320315Y354941D01*\nX331181Y365807D01*\nX331469Y366237D01*\nX331570Y366744D01*\nY385984D01*\nX331830Y386158D01*\nX332316Y386886D01*\nX332487Y387744D01*\nX332316Y388602D01*\nX331830Y389330D01*\nX331102Y389816D01*\nX330244Y389987D01*\nX329386Y389816D01*\nX328658Y389330D01*\nX328172Y388602D01*\nX328001Y387744D01*\nX328172Y386886D01*\nX328658Y386158D01*\nX328919Y385984D01*\nY367293D01*\nX327426Y365801D01*\nX326926Y366008D01*\nY366492D01*\nX326828Y367241D01*\nX326538Y367939D01*\nX326078Y368539D01*\nX325479Y368999D01*\nX324781Y369288D01*\nX324531Y369321D01*\nY365901D01*\nX324031D01*\nY365401D01*\nX321136D01*\nY365311D01*\nX321235Y364562D01*\nX321524Y363863D01*\nX321984Y363264D01*\nX322584Y362804D01*\nX323282Y362515D01*\nX323415Y362497D01*\nX323595Y361969D01*\nX317463Y355837D01*\nX317175Y355407D01*\nX317074Y354900D01*\nY350088D01*\nX317175Y349581D01*\nX317463Y349151D01*\nX318899Y347715D01*\nX318821Y347527D01*\nX318718Y346744D01*\nX318821Y345961D01*\nX319124Y345231D01*\nX319604Y344604D01*\nX320231Y344124D01*\nX320961Y343821D01*\nX321744Y343718D01*\nX322527Y343821D01*\nX323257Y344124D01*\nX323884Y344604D01*\nX323994Y344748D01*\nX324494D01*\nX324604Y344604D01*\nX325231Y344124D01*\nX325961Y343821D01*\nX326744Y343718D01*\nX327527Y343821D01*\nX328257Y344124D01*\nX328884Y344604D01*\nX328994Y344748D01*\nX329494D01*\nX329604Y344604D01*\nX330231Y344124D01*\nX330418Y344046D01*\nY343244D01*\nX330519Y342737D01*\nX330807Y342307D01*\nX339151Y333963D01*\nX359807Y313307D01*\nX360237Y313019D01*\nX360744Y312919D01*\nX436984D01*\nX437158Y312658D01*\nX437886Y312172D01*\nX438744Y312001D01*\nX439603Y312172D01*\nX440330Y312658D01*\nX440816Y313386D01*\nX440987Y314244D01*\nX440816Y315103D01*\nX440330Y315830D01*\nX439603Y316316D01*\nX438744Y316487D01*\nX437886Y316316D01*\nX437158Y315830D01*\nX436984Y315570D01*\nX361293D01*\nX357250Y319613D01*\nX357441Y320075D01*\nX372939D01*\nX373113Y319814D01*\nX373841Y319328D01*\nX374700Y319157D01*\nX375558Y319328D01*\nX376286Y319814D01*\nX376505Y320143D01*\nX377003Y320192D01*\nX379188Y318007D01*\nX379618Y317720D01*\nX380125Y317619D01*\nX418642D01*\nX419149Y317720D01*\nX419579Y318007D01*\nX424530Y322958D01*\nX435991Y334419D01*\nX436744D01*\nX437251Y334520D01*\nX437681Y334807D01*\nX438182Y335308D01*\nX438386Y335172D01*\nX439244Y335001D01*\nX440102Y335172D01*\nX440830Y335658D01*\nX441316Y336386D01*\nX441487Y337244D01*\nX441316Y338103D01*\nX440830Y338830D01*\nX440102Y339316D01*\nX439244Y339487D01*\nX438386Y339316D01*\nX437658Y338830D01*\nX437172Y338103D01*\nX437158Y338032D01*\nX436195Y337070D01*\nX435442D01*\nX434935Y336969D01*\nX434505Y336681D01*\nX422656Y324832D01*\nX418093Y320270D01*\nX398267D01*\nX398076Y320731D01*\nX400121Y322777D01*\nX400408Y323207D01*\nX400509Y323714D01*\nY325195D01*\nX407355Y332041D01*\nX407643Y332471D01*\nX407744Y332979D01*\nY337671D01*\nX408244Y337987D01*\nX408900Y337857D01*\nX409758Y338028D01*\nX410486Y338514D01*\nX410972Y339242D01*\nX411143Y340100D01*\nX410972Y340958D01*\nX410964Y340971D01*\nX411264Y341421D01*\nX411500Y341374D01*\nX430440D01*\nX430614Y341114D01*\nX431342Y340628D01*\nX432200Y340457D01*\nX433058Y340628D01*\nX433786Y341114D01*\nX434272Y341842D01*\nX434443Y342700D01*\nX434272Y343558D01*\nX433786Y344286D01*\nX433058Y344772D01*\nX432200Y344943D01*\nX431342Y344772D01*\nX430614Y344286D01*\nX430440Y344025D01*\nX415084D01*\nX414729Y344526D01*\nX414843Y345100D01*\nX414672Y345958D01*\nX414186Y346686D01*\nX413926Y346860D01*\nY364847D01*\nX414387Y365038D01*\nX417317Y362109D01*\nX417747Y361821D01*\nX418254Y361720D01*\nX418254Y361720D01*\nX424446D01*\nX424953Y361821D01*\nX425383Y362109D01*\nX427885Y364610D01*\nX430675D01*\nY357878D01*\nX426972D01*\nY355385D01*\nX426472Y355029D01*\nX425900Y355143D01*\nX425042Y354972D01*\nX424314Y354486D01*\nX423828Y353758D01*\nX423657Y352900D01*\nX423828Y352042D01*\nX424314Y351314D01*\nX425042Y350828D01*\nX425900Y350657D01*\nX426472Y350771D01*\nX426972Y350415D01*\nY347610D01*\nX432516D01*\nY352425D01*\nX432516Y352563D01*\nX432516D01*\nY352925D01*\nX432516D01*\nY354183D01*\nX432937Y354464D01*\nX433225Y354894D01*\nX433325Y355402D01*\nY368338D01*\nX433825Y368606D01*\nX434242Y368328D01*\nX435100Y368157D01*\nX435472Y368231D01*\nX435972Y367821D01*\nY367610D01*\nX441310D01*\nX441671Y367193D01*\nX441663Y367137D01*\nX438307Y363781D01*\nX438019Y363351D01*\nX437919Y362844D01*\nY360378D01*\nX436472D01*\nY355563D01*\nX436472Y355425D01*\nY355063D01*\nX436472Y354925D01*\nY350110D01*\nX442016D01*\nY351261D01*\nX442300D01*\nX442807Y351362D01*\nX443237Y351649D01*\nX447637Y356049D01*\nX447925Y356479D01*\nX448026Y356987D01*\nY360040D01*\nX448286Y360214D01*\nX448772Y360942D01*\nX448943Y361800D01*\nX448772Y362658D01*\nX448286Y363386D01*\nX447558Y363872D01*\nX446700Y364043D01*\nX445842Y363872D01*\nX445114Y363386D01*\nX444628Y362658D01*\nX444457Y361800D01*\nX444628Y360942D01*\nX445114Y360214D01*\nX445374Y360040D01*\nY357536D01*\nX442478Y354639D01*\nX442016Y354830D01*\nX442016Y355063D01*\nY355425D01*\nX442016Y355563D01*\nY360378D01*\nX440569D01*\nY362295D01*\nX443149Y364875D01*\nX460133D01*\nX460218Y364622D01*\nX460264Y364374D01*\nX459569Y363469D01*\nX459116Y362375D01*\nX458961Y361200D01*\nX459116Y360025D01*\nX459569Y358931D01*\nX460291Y357991D01*\nX461231Y357269D01*\nX462325Y356816D01*\nX463500Y356661D01*\nX464675Y356816D01*\nX465769Y357269D01*\nX466709Y357991D01*\nX467431Y358931D01*\nX467884Y360025D01*\nX468039Y361200D01*\nX467884Y362375D01*\nX467431Y363469D01*\nX466709Y364409D01*\nX466671Y364439D01*\nX466796Y364973D01*\nX466807Y364975D01*\nX467237Y365263D01*\nX468825Y366850D01*\nX469325Y366643D01*\nY314888D01*\nX460466Y306029D01*\nX331936D01*\nX331887Y306529D01*\nX332073Y306566D01*\nX332603Y306672D01*\nX333330Y307158D01*\nX333816Y307886D01*\nX333888Y308244D01*\nX329601D01*\nX329672Y307886D01*\nX330158Y307158D01*\nX330886Y306672D01*\nX331415Y306566D01*\nX331601Y306529D01*\nX331552Y306029D01*\nX315334D01*\nX307029Y314334D01*\nY387344D01*\nY402127D01*\nX307529Y402160D01*\nX307536Y402110D01*\nX307544Y402045D01*\nX307660Y401169D01*\nX308113Y400075D01*\nX308835Y399135D01*\nX309775Y398413D01*\nX310869Y397960D01*\nX312044Y397805D01*\nX313219Y397960D01*\nX314313Y398413D01*\nX315253Y399135D01*\nX315975Y400075D01*\nX316428Y401169D01*\nX316583Y402344D01*\nX316428Y403519D01*\nX315975Y404613D01*\nX315253Y405553D01*\nX314313Y406275D01*\nX313219Y406728D01*\nX312044Y406883D01*\nX310869Y406728D01*\nX309775Y406275D01*\nX308835Y405553D01*\nX308113Y404613D01*\nX307660Y403519D01*\nX307544Y402643D01*\nX307529Y402528D01*\nX307029Y402561D01*\nD01*\nY412127D01*\nX307529Y412160D01*\nX307660Y411169D01*\nX308113Y410075D01*\nX308835Y409135D01*\nX309775Y408413D01*\nX310869Y407960D01*\nX312044Y407805D01*\nX313219Y407960D01*\nX314313Y408413D01*\nX315253Y409135D01*\nX315975Y410075D01*\nX316428Y411169D01*\nX316583Y412344D01*\nX316428Y413519D01*\nX315975Y414613D01*\nX315253Y415553D01*\nX314970Y415771D01*\nX315131Y416244D01*\nX343009D01*\nY415722D01*\nX342747Y415088D01*\nX342610Y414044D01*\nX342747Y413000D01*\nX343150Y412027D01*\nX343791Y411191D01*\nX344627Y410550D01*\nX345600Y410147D01*\nX346644Y410009D01*\nX352444D01*\nX353488Y410147D01*\nX354461Y410550D01*\nX355297Y411191D01*\nX355938Y412027D01*\nX356069Y412344D01*\nX356082Y412375D01*\nX356336Y412988D01*\nX356341Y413000D01*\nX356479Y414044D01*\nX356341Y415088D01*\nX355938Y416061D01*\nX355297Y416897D01*\nX354461Y417538D01*\nX353488Y417941D01*\nX352444Y418079D01*\nX351079D01*\nY444944D01*\nY448444D01*\nX350941Y449488D01*\nX350538Y450461D01*\nX349897Y451297D01*\nX349061Y451938D01*\nX348088Y452341D01*\nX347044Y452479D01*\nX346000Y452341D01*\nX345027Y451938D01*\nX344191Y451297D01*\nX343550Y450461D01*\nX343147Y449488D01*\nX343009Y448444D01*\nY444944D01*\nY418744D01*\nX315501D01*\nX315337Y419244D01*\nX315975Y420075D01*\nX316428Y421170D01*\nX316583Y422344D01*\nX316428Y423519D01*\nX315975Y424614D01*\nX315253Y425554D01*\nX314313Y426275D01*\nX313219Y426728D01*\nX312044Y426883D01*\nX310869Y426728D01*\nX309775Y426275D01*\nX308835Y425554D01*\nX308113Y424614D01*\nX307660Y423519D01*\nX307529Y422528D01*\nX307029Y422561D01*\nY459566D01*\nX315788Y468325D01*\nX460112D01*\nX469325Y459112D01*\nD02*\nG37*\nG36*\nX289325D02*\nY414044D01*\nY375657D01*\nX288825Y375449D01*\nX287337Y376937D01*\nX286907Y377225D01*\nX286610Y377284D01*\nX286476Y377812D01*\nX286709Y377991D01*\nX287431Y378931D01*\nX287884Y380025D01*\nX288039Y381200D01*\nX287884Y382375D01*\nX287431Y383469D01*\nX286709Y384409D01*\nX285769Y385131D01*\nX284675Y385584D01*\nX283500Y385739D01*\nX282325Y385584D01*\nX281231Y385131D01*\nX280291Y384409D01*\nX279569Y383469D01*\nX279116Y382375D01*\nX278961Y381200D01*\nX279116Y380025D01*\nX279569Y378931D01*\nX280291Y377991D01*\nX280540Y377799D01*\nX280380Y377326D01*\nX279300D01*\nX278793Y377225D01*\nX278363Y376937D01*\nX278153Y376727D01*\nX261516D01*\nY377878D01*\nX260069D01*\nY378551D01*\nX262437Y380919D01*\nX262725Y381349D01*\nX262825Y381856D01*\nY390602D01*\nX262725Y391109D01*\nX262437Y391539D01*\nX261637Y392339D01*\nX261516Y392420D01*\nY393878D01*\nX260069D01*\nY395851D01*\nX263437Y399219D01*\nX263725Y399649D01*\nX263825Y400156D01*\nY414044D01*\nY419397D01*\nX263725Y419904D01*\nX263437Y420334D01*\nX262624Y421148D01*\nX261026Y422746D01*\nY426532D01*\nX264819D01*\nY427879D01*\nX271800D01*\nX272307Y427980D01*\nX272737Y428268D01*\nX274344Y429875D01*\nX279178D01*\nX279569Y428931D01*\nX280291Y427991D01*\nX281231Y427269D01*\nX282325Y426816D01*\nX283500Y426661D01*\nX284675Y426816D01*\nX285769Y427269D01*\nX286709Y427991D01*\nX287431Y428931D01*\nX287884Y430025D01*\nX288039Y431200D01*\nX287884Y432375D01*\nX287431Y433469D01*\nX286709Y434409D01*\nX285769Y435131D01*\nX284675Y435584D01*\nX283500Y435739D01*\nX282325Y435584D01*\nX281231Y435131D01*\nX280291Y434409D01*\nX279569Y433469D01*\nX279178Y432525D01*\nX273795D01*\nX273288Y432425D01*\nX272858Y432137D01*\nX271251Y430530D01*\nX264819D01*\nY431878D01*\nX259669D01*\nY430524D01*\nX259193Y430429D01*\nX258763Y430142D01*\nX258475Y429712D01*\nX258375Y429205D01*\nY424353D01*\nX258094Y424237D01*\nX257874Y424194D01*\nX257463Y424469D01*\nX256956Y424570D01*\nX227378D01*\nY426016D01*\nX225533D01*\nX225266Y426516D01*\nX225335Y426618D01*\nX227232D01*\nX227740Y426719D01*\nX228169Y427007D01*\nX228581Y427419D01*\nX231244D01*\nX231751Y427520D01*\nX232181Y427807D01*\nX233125Y428751D01*\nX234069Y428360D01*\nX235244Y428205D01*\nX236419Y428360D01*\nX237513Y428813D01*\nX238453Y429535D01*\nX239175Y430475D01*\nX239628Y431569D01*\nX239783Y432744D01*\nX239628Y433919D01*\nX239175Y435013D01*\nX238453Y435953D01*\nX237513Y436675D01*\nX236419Y437128D01*\nX235244Y437283D01*\nX234069Y437128D01*\nX232975Y436675D01*\nX232035Y435953D01*\nX231313Y435013D01*\nX230860Y433919D01*\nX230705Y432744D01*\nX230860Y431569D01*\nX231251Y430625D01*\nX230695Y430070D01*\nX229423D01*\nX229214Y430570D01*\nX229628Y431569D01*\nX229783Y432744D01*\nX229628Y433919D01*\nX229175Y435013D01*\nX228453Y435953D01*\nX227513Y436675D01*\nX226419Y437128D01*\nX225244Y437283D01*\nX224069Y437128D01*\nX222975Y436675D01*\nX222035Y435953D01*\nX221313Y435013D01*\nX220860Y433919D01*\nX220705Y432744D01*\nX220860Y431569D01*\nX221313Y430475D01*\nX222035Y429535D01*\nX222837Y428919D01*\nX222964Y428338D01*\nX221026Y426400D01*\nX220769Y426016D01*\nX217110D01*\nY425243D01*\nX216610Y424977D01*\nX216103Y425316D01*\nX215244Y425487D01*\nX214386Y425316D01*\nX214319Y425272D01*\nX213878Y425508D01*\nY425819D01*\nX208532D01*\nY420669D01*\nX213878D01*\nY420981D01*\nX214319Y421216D01*\nX214386Y421172D01*\nX215244Y421001D01*\nX216103Y421172D01*\nX216610Y421511D01*\nX217110Y421246D01*\nY420472D01*\nX217110D01*\nY420016D01*\nX217110D01*\nY418570D01*\nX213878D01*\nY419819D01*\nX208532D01*\nY416445D01*\nX207656Y415570D01*\nX204793D01*\nX204426Y415937D01*\nX204487Y416244D01*\nX204316Y417102D01*\nX203830Y417830D01*\nX203403Y418116D01*\nX203233Y418761D01*\nX203316Y418886D01*\nX203487Y419744D01*\nX203316Y420603D01*\nX202830Y421330D01*\nX202102Y421816D01*\nX201956Y421846D01*\nX201764Y422308D01*\nX201816Y422386D01*\nX201987Y423244D01*\nX201816Y424102D01*\nX201330Y424830D01*\nX200603Y425316D01*\nX199744Y425487D01*\nX198886Y425316D01*\nX198158Y424830D01*\nX197672Y424102D01*\nX197501Y423244D01*\nX197562Y422937D01*\nX192663Y418037D01*\nX192375Y417607D01*\nX192274Y417100D01*\nY414044D01*\nY409330D01*\nX192175Y409209D01*\nX191811Y409098D01*\nX191621Y409225D01*\nX191114Y409326D01*\nX190472D01*\nX190237Y409766D01*\nX190316Y409886D01*\nX190388Y410244D01*\nX189744D01*\nY409326D01*\nX189374D01*\nX188867Y409225D01*\nX188437Y408937D01*\nX187207Y407707D01*\nX186919Y407277D01*\nX186819Y406770D01*\nY405030D01*\nX186919Y404523D01*\nX187207Y404093D01*\nX189474Y401825D01*\nY399060D01*\nX189214Y398886D01*\nX188728Y398158D01*\nX188557Y397300D01*\nX188728Y396442D01*\nX189214Y395714D01*\nX189744Y395360D01*\nX189942Y395228D01*\nX190800Y395057D01*\nX190929Y394952D01*\nX190941Y390222D01*\nX190479Y390031D01*\nX189282Y391227D01*\nD01*\nX188735Y391774D01*\nX188305Y392062D01*\nX187798Y392162D01*\nX180867D01*\nX180360Y392062D01*\nX179930Y391774D01*\nX175500Y387344D01*\nX172225Y384070D01*\nX160847D01*\nX160673Y384330D01*\nX159945Y384816D01*\nX159087Y384987D01*\nX158228Y384816D01*\nX157501Y384330D01*\nX157014Y383602D01*\nX156843Y382744D01*\nX157014Y381886D01*\nX157501Y381158D01*\nX157761Y380984D01*\nY380016D01*\nX157110D01*\nY374473D01*\nX157761D01*\nY372113D01*\nX157862Y371606D01*\nX158149Y371176D01*\nX158963Y370363D01*\nX159393Y370075D01*\nX159900Y369974D01*\nX171340D01*\nX171514Y369714D01*\nX172242Y369228D01*\nX173100Y369057D01*\nX173958Y369228D01*\nX174686Y369714D01*\nX174906Y370043D01*\nX175403Y370092D01*\nX183089Y362407D01*\nX183519Y362120D01*\nX184026Y362019D01*\nX184761D01*\nX185078Y361632D01*\nX185001Y361244D01*\nX185172Y360386D01*\nX185658Y359658D01*\nX185958Y359457D01*\nY350819D01*\nX184610D01*\nY350819D01*\nX184326Y350585D01*\nX183987Y350653D01*\nX183128Y350482D01*\nX182401Y349995D01*\nX182116Y349570D01*\nX175731D01*\nX175223Y349469D01*\nX174793Y349181D01*\nX171374Y345762D01*\nX170912Y345953D01*\nY346576D01*\nX170811Y347083D01*\nX170524Y347513D01*\nX165356Y352681D01*\nX164926Y352969D01*\nX164744Y353005D01*\nY354744D01*\nX158744D01*\nY354556D01*\nX158296Y354335D01*\nX158257Y354364D01*\nX157527Y354667D01*\nX157244Y354704D01*\nY351744D01*\nX156244D01*\nY354704D01*\nX155961Y354667D01*\nX155231Y354364D01*\nX154604Y353884D01*\nX154494Y353740D01*\nX153994D01*\nX153884Y353884D01*\nX153257Y354364D01*\nX152527Y354667D01*\nX152244Y354704D01*\nY351744D01*\nX151244D01*\nY354704D01*\nX150961Y354667D01*\nX150231Y354364D01*\nX149604Y353884D01*\nX149494Y353740D01*\nX148994D01*\nX148884Y353884D01*\nX148257Y354364D01*\nX147527Y354667D01*\nX146744Y354770D01*\nX145961Y354667D01*\nX145231Y354364D01*\nX144604Y353884D01*\nX144494Y353740D01*\nX143994D01*\nX143884Y353884D01*\nX143257Y354364D01*\nX142527Y354667D01*\nX141744Y354770D01*\nX140961Y354667D01*\nX140598Y354517D01*\nX140315Y354941D01*\nX151181Y365807D01*\nX151469Y366237D01*\nX151569Y366744D01*\nY385984D01*\nX151830Y386158D01*\nX152316Y386886D01*\nX152487Y387744D01*\nX152316Y388602D01*\nX151830Y389330D01*\nX151102Y389816D01*\nX150244Y389987D01*\nX149386Y389816D01*\nX148658Y389330D01*\nX148172Y388602D01*\nX148001Y387744D01*\nX148172Y386886D01*\nX148658Y386158D01*\nX148918Y385984D01*\nY367293D01*\nX147426Y365801D01*\nX146926Y366008D01*\nY366492D01*\nX146828Y367241D01*\nX146538Y367939D01*\nX146078Y368539D01*\nX145479Y368999D01*\nX144781Y369288D01*\nX144531Y369321D01*\nY365901D01*\nX144031D01*\nY365401D01*\nX141137D01*\nY365311D01*\nX141235Y364562D01*\nX141524Y363863D01*\nX141984Y363264D01*\nX142584Y362804D01*\nX143282Y362515D01*\nX143415Y362497D01*\nX143595Y361969D01*\nX137463Y355837D01*\nX137175Y355407D01*\nX137074Y354900D01*\nY350088D01*\nX137175Y349581D01*\nX137463Y349151D01*\nX138899Y347715D01*\nX138821Y347527D01*\nX138718Y346744D01*\nX138821Y345961D01*\nX139123Y345231D01*\nX139604Y344604D01*\nX140231Y344124D01*\nX140961Y343821D01*\nX141744Y343718D01*\nX142527Y343821D01*\nX143257Y344124D01*\nX143884Y344604D01*\nX143994Y344748D01*\nX144494D01*\nX144604Y344604D01*\nX145231Y344124D01*\nX145961Y343821D01*\nX146744Y343718D01*\nX147527Y343821D01*\nX148257Y344124D01*\nX148884Y344604D01*\nX148994Y344748D01*\nX149494D01*\nX149604Y344604D01*\nX150231Y344124D01*\nX150418Y344046D01*\nY343244D01*\nX150519Y342737D01*\nX150807Y342307D01*\nX159151Y333963D01*\nX179807Y313307D01*\nX180237Y313019D01*\nX180744Y312919D01*\nX256984D01*\nX257158Y312658D01*\nX257886Y312172D01*\nX258744Y312001D01*\nX259602Y312172D01*\nX260330Y312658D01*\nX260816Y313386D01*\nX260987Y314244D01*\nX260816Y315103D01*\nX260330Y315830D01*\nX259602Y316316D01*\nX258744Y316487D01*\nX257886Y316316D01*\nX257158Y315830D01*\nX256984Y315570D01*\nX181293D01*\nX177250Y319613D01*\nX177441Y320075D01*\nX192939D01*\nX193114Y319814D01*\nX193841Y319328D01*\nX194700Y319157D01*\nX195558Y319328D01*\nX196286Y319814D01*\nX196505Y320143D01*\nX197003Y320192D01*\nX199188Y318007D01*\nX199618Y317720D01*\nX200125Y317619D01*\nX238642D01*\nX239149Y317720D01*\nX239579Y318007D01*\nX244530Y322958D01*\nX255991Y334419D01*\nX256744D01*\nX257251Y334520D01*\nX257681Y334807D01*\nX258182Y335308D01*\nX258386Y335172D01*\nX259244Y335001D01*\nX260103Y335172D01*\nX260830Y335658D01*\nX261316Y336386D01*\nX261487Y337244D01*\nX261316Y338103D01*\nX260830Y338830D01*\nX260103Y339316D01*\nX259244Y339487D01*\nX258386Y339316D01*\nX257658Y338830D01*\nX257172Y338103D01*\nX257158Y338032D01*\nX256195Y337070D01*\nX255442D01*\nX254935Y336969D01*\nX254505Y336681D01*\nX242655Y324832D01*\nX238093Y320270D01*\nX218267D01*\nX218076Y320731D01*\nX220121Y322777D01*\nX220408Y323207D01*\nX220509Y323714D01*\nY325195D01*\nX227356Y332041D01*\nX227643Y332471D01*\nX227744Y332979D01*\nY337671D01*\nX228244Y337987D01*\nX228900Y337857D01*\nX229758Y338028D01*\nX230486Y338514D01*\nX230972Y339242D01*\nX231143Y340100D01*\nX230972Y340958D01*\nX230964Y340971D01*\nX231264Y341421D01*\nX231500Y341374D01*\nX250440D01*\nX250614Y341114D01*\nX251342Y340628D01*\nX252200Y340457D01*\nX253058Y340628D01*\nX253786Y341114D01*\nX254272Y341842D01*\nX254443Y342700D01*\nX254272Y343558D01*\nX253786Y344286D01*\nX253058Y344772D01*\nX252200Y344943D01*\nX251342Y344772D01*\nX250614Y344286D01*\nX250440Y344025D01*\nX235084D01*\nX234729Y344526D01*\nX234843Y345100D01*\nX234672Y345958D01*\nX234186Y346686D01*\nX233926Y346860D01*\nY364847D01*\nX234387Y365038D01*\nX237317Y362109D01*\nX237747Y361821D01*\nX238254Y361720D01*\nX238254Y361720D01*\nX244446D01*\nX244953Y361821D01*\nX245383Y362109D01*\nX247885Y364610D01*\nX250675D01*\nY357878D01*\nX246972D01*\nY355385D01*\nX246472Y355029D01*\nX245900Y355143D01*\nX245042Y354972D01*\nX244314Y354486D01*\nX243828Y353758D01*\nX243657Y352900D01*\nX243828Y352042D01*\nX244314Y351314D01*\nX245042Y350828D01*\nX245900Y350657D01*\nX246472Y350771D01*\nX246972Y350415D01*\nY347610D01*\nX252516D01*\nY352425D01*\nX252516Y352563D01*\nX252516D01*\nY352925D01*\nX252516D01*\nY354183D01*\nX252937Y354464D01*\nX253225Y354894D01*\nX253326Y355402D01*\nY368338D01*\nX253825Y368606D01*\nX254242Y368328D01*\nX255100Y368157D01*\nX255472Y368231D01*\nX255972Y367821D01*\nY367610D01*\nX261310D01*\nX261671Y367193D01*\nX261663Y367137D01*\nX258307Y363781D01*\nX258019Y363351D01*\nX257919Y362844D01*\nY360378D01*\nX256472D01*\nY355563D01*\nX256472Y355425D01*\nY355063D01*\nX256472Y354925D01*\nY350110D01*\nX262016D01*\nY351261D01*\nX262300D01*\nX262807Y351362D01*\nX263237Y351649D01*\nX267637Y356049D01*\nX267925Y356479D01*\nX268025Y356987D01*\nY360040D01*\nX268286Y360214D01*\nX268772Y360942D01*\nX268943Y361800D01*\nX268772Y362658D01*\nX268286Y363386D01*\nX267558Y363872D01*\nX266700Y364043D01*\nX265842Y363872D01*\nX265114Y363386D01*\nX264628Y362658D01*\nX264457Y361800D01*\nX264628Y360942D01*\nX265114Y360214D01*\nX265374Y360040D01*\nY357536D01*\nX262478Y354639D01*\nX262016Y354830D01*\nX262016Y355063D01*\nY355425D01*\nX262016Y355563D01*\nY360378D01*\nX260570D01*\nY362295D01*\nX263149Y364875D01*\nX280133D01*\nX280219Y364622D01*\nX280264Y364374D01*\nX279569Y363469D01*\nX279116Y362375D01*\nX278961Y361200D01*\nX279116Y360025D01*\nX279569Y358931D01*\nX280291Y357991D01*\nX281231Y357269D01*\nX282325Y356816D01*\nX283500Y356661D01*\nX284675Y356816D01*\nX285769Y357269D01*\nX286709Y357991D01*\nX287431Y358931D01*\nX287884Y360025D01*\nX288039Y361200D01*\nX287884Y362375D01*\nX287431Y363469D01*\nX286709Y364409D01*\nX286671Y364439D01*\nX286796Y364973D01*\nX286807Y364975D01*\nX287237Y365263D01*\nX288825Y366850D01*\nX289325Y366643D01*\nY314888D01*\nX280467Y306029D01*\nX151936D01*\nX151887Y306529D01*\nX152073Y306566D01*\nX152603Y306672D01*\nX153330Y307158D01*\nX153816Y307886D01*\nX153888Y308244D01*\nX149601D01*\nX149672Y307886D01*\nX150158Y307158D01*\nX150886Y306672D01*\nX151415Y306566D01*\nX151601Y306529D01*\nX151552Y306029D01*\nX135334D01*\nX127029Y314334D01*\nY387344D01*\nY402127D01*\nX127529Y402160D01*\nD01*\nX127536Y402110D01*\nX127544Y402045D01*\nX127660Y401169D01*\nX128113Y400075D01*\nX128835Y399135D01*\nX129775Y398413D01*\nX130869Y397960D01*\nX132044Y397805D01*\nX133219Y397960D01*\nX134313Y398413D01*\nX135253Y399135D01*\nX135975Y400075D01*\nX136428Y401169D01*\nX136583Y402344D01*\nX136428Y403519D01*\nX135975Y404613D01*\nX135253Y405553D01*\nX134313Y406275D01*\nX133219Y406728D01*\nX132044Y406883D01*\nX130869Y406728D01*\nX129775Y406275D01*\nX128835Y405553D01*\nX128113Y404613D01*\nX127660Y403519D01*\nX127544Y402643D01*\nX127529Y402528D01*\nX127029Y402561D01*\nD01*\nY412127D01*\nX127529Y412160D01*\nX127660Y411169D01*\nX128113Y410075D01*\nX128835Y409135D01*\nX129775Y408413D01*\nX130869Y407960D01*\nX132044Y407805D01*\nX133219Y407960D01*\nX134313Y408413D01*\nX135253Y409135D01*\nX135975Y410075D01*\nX136428Y411169D01*\nX136583Y412344D01*\nX136428Y413519D01*\nX135975Y414613D01*\nX135253Y415553D01*\nX134970Y415771D01*\nX135131Y416244D01*\nX163010D01*\nY415722D01*\nX162747Y415088D01*\nX162610Y414044D01*\nX162747Y413000D01*\nX163150Y412027D01*\nX163791Y411191D01*\nX164627Y410550D01*\nX165600Y410147D01*\nX166644Y410009D01*\nX172444D01*\nX173488Y410147D01*\nX174461Y410550D01*\nX175297Y411191D01*\nX175938Y412027D01*\nX176069Y412344D01*\nD01*\nX176082Y412375D01*\nX176336Y412988D01*\nX176341Y413000D01*\nX176479Y414044D01*\nX176341Y415088D01*\nX175938Y416061D01*\nX175297Y416897D01*\nX174461Y417538D01*\nX173488Y417941D01*\nX172444Y418079D01*\nX171079D01*\nY444944D01*\nY448444D01*\nX170941Y449488D01*\nX170538Y450461D01*\nX169897Y451297D01*\nX169061Y451938D01*\nX168088Y452341D01*\nX167044Y452479D01*\nX166000Y452341D01*\nX165027Y451938D01*\nX164191Y451297D01*\nX163550Y450461D01*\nX163147Y449488D01*\nX163010Y448444D01*\nY444944D01*\nY418744D01*\nX135501D01*\nX135337Y419244D01*\nX135975Y420075D01*\nX136428Y421170D01*\nX136583Y422344D01*\nX136428Y423519D01*\nX135975Y424614D01*\nX135253Y425554D01*\nX134313Y426275D01*\nX133219Y426728D01*\nX132044Y426883D01*\nX130869Y426728D01*\nX129775Y426275D01*\nX128835Y425554D01*\nX128113Y424614D01*\nX127660Y423519D01*\nX127529Y422528D01*\nX127029Y422561D01*\nY459566D01*\nX135788Y468325D01*\nX280112D01*\nX289325Y459112D01*\nD02*\nG37*\nG36*\nX439974Y418351D02*\nY414378D01*\nX436319D01*\nY414878D01*\nX431169D01*\nY413280D01*\nX430963Y413142D01*\nX429707Y411887D01*\nX429400Y411948D01*\nX428542Y411777D01*\nX427814Y411291D01*\nX427319Y411450D01*\nY412378D01*\nX425244D01*\nY409705D01*\nX424744D01*\nY409205D01*\nX422169D01*\nY406958D01*\nX421755Y406681D01*\nX421319Y406862D01*\nY409705D01*\nX416169D01*\nY406989D01*\nX416089Y406914D01*\nX415527Y406870D01*\nX414799Y407356D01*\nX413941Y407526D01*\nX413082Y407356D01*\nX412355Y406870D01*\nX412181Y406609D01*\nX411200D01*\nX410693Y406508D01*\nX410263Y406221D01*\nX407563Y403521D01*\nX407275Y403091D01*\nX407174Y402583D01*\nY373812D01*\nX406744Y373459D01*\nY371244D01*\nX405744D01*\nY373388D01*\nX405386Y373316D01*\nX404658Y372830D01*\nX404426Y372483D01*\nX403929Y372434D01*\nX403400Y372963D01*\nY404711D01*\nX403900Y405100D01*\nY406744D01*\nX402009D01*\nX401891Y406600D01*\nX395878D01*\nY406744D01*\nX393205D01*\nY407744D01*\nX395878D01*\nY408819D01*\nX398705D01*\nX399212Y408919D01*\nX399642Y409207D01*\nX402854Y412419D01*\nX410744D01*\nX411251Y412520D01*\nX411681Y412807D01*\nX413181Y414307D01*\nX413469Y414737D01*\nX413570Y415244D01*\nY416484D01*\nX413830Y416658D01*\nX414316Y417386D01*\nX414487Y418244D01*\nX414316Y419102D01*\nX414105Y419419D01*\nX414372Y419919D01*\nX419307D01*\nX421718Y417507D01*\nX421657Y417200D01*\nX421828Y416342D01*\nX422314Y415614D01*\nX423042Y415128D01*\nX423900Y414957D01*\nX424758Y415128D01*\nX425486Y415614D01*\nX425972Y416342D01*\nX426143Y417200D01*\nX425972Y418058D01*\nX425486Y418786D01*\nX424758Y419272D01*\nX423900Y419443D01*\nX423593Y419382D01*\nX421518Y421457D01*\nX421709Y421918D01*\nX436407D01*\nX439974Y418351D01*\nD02*\nG37*\nG36*\nX259975D02*\nY414378D01*\nX256319D01*\nY414878D01*\nX251169D01*\nY413280D01*\nX250963Y413142D01*\nX249707Y411887D01*\nX249400Y411948D01*\nX248542Y411777D01*\nX247814Y411291D01*\nX247319Y411450D01*\nY412378D01*\nX245244D01*\nY409705D01*\nX244744D01*\nY409205D01*\nX242169D01*\nY406958D01*\nX241755Y406681D01*\nX241319Y406862D01*\nY409705D01*\nX236169D01*\nY406989D01*\nX236089Y406914D01*\nX235527Y406870D01*\nX234799Y407356D01*\nX233941Y407526D01*\nX233082Y407356D01*\nX232355Y406870D01*\nX232181Y406609D01*\nX231200D01*\nX230693Y406508D01*\nX230263Y406221D01*\nX227563Y403521D01*\nX227275Y403091D01*\nX227174Y402583D01*\nY373812D01*\nX226744Y373459D01*\nY371244D01*\nX225744D01*\nY373388D01*\nX225386Y373316D01*\nX224658Y372830D01*\nX224426Y372483D01*\nX223928Y372434D01*\nX223400Y372963D01*\nY404711D01*\nX223900Y405100D01*\nY406744D01*\nX222009D01*\nX221891Y406600D01*\nX215878D01*\nY406744D01*\nX213205D01*\nY407744D01*\nX215878D01*\nY408819D01*\nX218705D01*\nX219212Y408919D01*\nX219642Y409207D01*\nX222854Y412419D01*\nX230744D01*\nX231251Y412520D01*\nX231681Y412807D01*\nX233181Y414307D01*\nX233469Y414737D01*\nX233570Y415244D01*\nY416484D01*\nX233830Y416658D01*\nX234316Y417386D01*\nX234487Y418244D01*\nX234316Y419102D01*\nX234105Y419419D01*\nX234372Y419919D01*\nX239307D01*\nX241718Y417507D01*\nX241657Y417200D01*\nX241828Y416342D01*\nX242314Y415614D01*\nX243042Y415128D01*\nX243900Y414957D01*\nX244758Y415128D01*\nX245486Y415614D01*\nX245972Y416342D01*\nX246143Y417200D01*\nX245972Y418058D01*\nX245486Y418786D01*\nX244758Y419272D01*\nX243900Y419443D01*\nX243593Y419382D01*\nX241518Y421457D01*\nX241709Y421918D01*\nX256407D01*\nX259975Y418351D01*\nD02*\nG37*\nG36*\nX428542Y407632D02*\nX429400Y407462D01*\nX430258Y407632D01*\nX430669Y407907D01*\nX430900Y407783D01*\nX433744D01*\nY407283D01*\nX434244D01*\nY404610D01*\nX436169D01*\nY404110D01*\nX438244D01*\nY406783D01*\nX439244D01*\nY404110D01*\nX439974D01*\nY403449D01*\nX435551Y399026D01*\nX421028D01*\nX420761Y399525D01*\nX420972Y399842D01*\nX421044Y400200D01*\nX416756D01*\nX416828Y399842D01*\nX417314Y399114D01*\nX418042Y398628D01*\nX418365Y398563D01*\nX418510Y398085D01*\nX412935Y392510D01*\nX412438Y392559D01*\nX412286Y392786D01*\nX411558Y393272D01*\nX410700Y393443D01*\nX410325Y393369D01*\nX409826Y393779D01*\nY402034D01*\nX411716Y403925D01*\nX412223Y403895D01*\nX412355Y403697D01*\nX413082Y403211D01*\nX413941Y403040D01*\nX414799Y403211D01*\nX415527Y403697D01*\nX416089Y403653D01*\nX416169Y403578D01*\nY402610D01*\nX416967D01*\nX417196Y402110D01*\nX416828Y401558D01*\nX416756Y401200D01*\nX421044D01*\nX420972Y401558D01*\nX420604Y402110D01*\nX420833Y402610D01*\nX421319D01*\nY403048D01*\nX421706Y403336D01*\nX422169Y403150D01*\nY402110D01*\nX427319D01*\nY407960D01*\nX427814Y408118D01*\nX428542Y407632D01*\nD02*\nG37*\nG36*\nX248542D02*\nX249400Y407462D01*\nX250258Y407632D01*\nX250669Y407907D01*\nX250900Y407783D01*\nX253744D01*\nY407283D01*\nX254244D01*\nY404610D01*\nX256169D01*\nY404110D01*\nX258244D01*\nY406783D01*\nX259244D01*\nY404110D01*\nX259975D01*\nY403449D01*\nX255551Y399026D01*\nX241028D01*\nX240761Y399525D01*\nX240972Y399842D01*\nX241044Y400200D01*\nX236756D01*\nX236828Y399842D01*\nX237314Y399114D01*\nX238042Y398628D01*\nX238365Y398563D01*\nX238510Y398085D01*\nX232936Y392510D01*\nX232438Y392559D01*\nX232286Y392786D01*\nX231558Y393272D01*\nX230700Y393443D01*\nX230326Y393369D01*\nX229825Y393779D01*\nY402034D01*\nX231716Y403925D01*\nX232223Y403895D01*\nX232355Y403697D01*\nX233082Y403211D01*\nX233941Y403040D01*\nX234799Y403211D01*\nX235527Y403697D01*\nX236089Y403653D01*\nX236169Y403578D01*\nY402610D01*\nX236967D01*\nX237196Y402110D01*\nX236828Y401558D01*\nX236756Y401200D01*\nX241044D01*\nX240972Y401558D01*\nX240604Y402110D01*\nX240833Y402610D01*\nX241319D01*\nY403048D01*\nX241706Y403336D01*\nX242169Y403150D01*\nY402110D01*\nX247319D01*\nY407960D01*\nX247814Y408118D01*\nX248542Y407632D01*\nD02*\nG37*\nG36*\nX359280Y378476D02*\nX359787Y378375D01*\nX360323D01*\nY375551D01*\nX361110D01*\nY370669D01*\nX368205D01*\nY373244D01*\nX369205D01*\nY370669D01*\nX370990D01*\nX370992Y369924D01*\nX370639Y369570D01*\nX369144D01*\nX368637Y369469D01*\nX368207Y369181D01*\nX367595Y368570D01*\nX365004D01*\nX364830Y368830D01*\nX364103Y369316D01*\nX363244Y369487D01*\nX362386Y369316D01*\nX361658Y368830D01*\nX361443Y368509D01*\nX360799Y368445D01*\nX355234Y374011D01*\nX355425Y374473D01*\nX357878D01*\nY376744D01*\nX355401D01*\nY377744D01*\nX357878D01*\nY378164D01*\nX358378Y378574D01*\nX358744Y378501D01*\nX359129Y378577D01*\nX359280Y378476D01*\nD02*\nG37*\nG36*\nX179280D02*\nX179787Y378375D01*\nX180323D01*\nY375551D01*\nX181110D01*\nY370669D01*\nX188205D01*\nY373244D01*\nX189205D01*\nY370669D01*\nX190990D01*\nX190992Y369924D01*\nX190639Y369570D01*\nX189144D01*\nX188637Y369469D01*\nX188207Y369181D01*\nX187595Y368570D01*\nX185004D01*\nX184830Y368830D01*\nX184102Y369316D01*\nX183244Y369487D01*\nX182386Y369316D01*\nX181658Y368830D01*\nX181443Y368509D01*\nX180799Y368445D01*\nX175234Y374011D01*\nX175425Y374473D01*\nX177878D01*\nY376744D01*\nX175401D01*\nY377744D01*\nX177878D01*\nY378164D01*\nX178378Y378574D01*\nX178744Y378501D01*\nX179129Y378577D01*\nX179280Y378476D01*\nD02*\nG37*\nG36*\nX390555Y366014D02*\nX390501Y365744D01*\nX390672Y364886D01*\nX390996Y364401D01*\nX386048Y359452D01*\nX385550Y359501D01*\nX385330Y359830D01*\nX384602Y360316D01*\nX384244Y360388D01*\nY358244D01*\nX383744D01*\nY357744D01*\nX381486D01*\nX381261Y357470D01*\nX375293D01*\nX370670Y362093D01*\nY362114D01*\nX370569Y362621D01*\nX370549Y362651D01*\nX370602Y363172D01*\nX371330Y363658D01*\nX371504Y363919D01*\nX381695D01*\nX382307Y363307D01*\nX382737Y363019D01*\nX383244Y362919D01*\nX383751Y363019D01*\nX384181Y363307D01*\nX387275Y366400D01*\nX390237D01*\nX390555Y366014D01*\nD02*\nG37*\nG36*\nX210555D02*\nX210501Y365744D01*\nX210672Y364886D01*\nX210996Y364401D01*\nX206048Y359452D01*\nX205550Y359501D01*\nX205330Y359830D01*\nX204603Y360316D01*\nX204244Y360388D01*\nY358244D01*\nX203744D01*\nY357744D01*\nX201486D01*\nX201261Y357470D01*\nX195293D01*\nX190670Y362093D01*\nY362114D01*\nX190569Y362621D01*\nX190549Y362651D01*\nX190603Y363172D01*\nX191330Y363658D01*\nX191504Y363919D01*\nX201695D01*\nX202307Y363307D01*\nX202737Y363019D01*\nX203244Y362919D01*\nX203751Y363019D01*\nX204181Y363307D01*\nX207275Y366400D01*\nX210237D01*\nX210555Y366014D01*\nD02*\nG37*\nG36*\nX395377Y364207D02*\nX395807Y363919D01*\nX396314Y363819D01*\nX400051D01*\nX400158Y363658D01*\nX400886Y363172D01*\nX401744Y363001D01*\nX402132Y363078D01*\nX402519Y362761D01*\nY360727D01*\nX402132Y360410D01*\nX401744Y360487D01*\nX400886Y360316D01*\nX400158Y359830D01*\nX399984Y359570D01*\nX399244D01*\nX398737Y359469D01*\nX398307Y359181D01*\nX395267Y356142D01*\nX395052Y355819D01*\nX391783D01*\nY353244D01*\nY350669D01*\nX394879D01*\nY344319D01*\nX388284D01*\nY341744D01*\nX387284D01*\nY344319D01*\nX385110D01*\nY341819D01*\nX383705D01*\nY339244D01*\nX382705D01*\nY341819D01*\nX375610D01*\nY340384D01*\nX375307Y340181D01*\nX373307Y338181D01*\nX373020Y337751D01*\nX372919Y337244D01*\nY335789D01*\nX372600Y335343D01*\nX371742Y335172D01*\nX371014Y334686D01*\nX370784Y334342D01*\nX370486Y333986D01*\nX370143Y334215D01*\nX369758Y334472D01*\nX368900Y334643D01*\nX368764Y334616D01*\nX368378Y334933D01*\nY335516D01*\nX364826D01*\nY345669D01*\nX371705D01*\nY348244D01*\nY350819D01*\nX368609D01*\nY359510D01*\nX368830Y359658D01*\nX369309Y359705D01*\nX373807Y355207D01*\nX374237Y354920D01*\nX374744Y354819D01*\nX384614D01*\nX385121Y354920D01*\nX385551Y355207D01*\nX393681Y363337D01*\nX393969Y363767D01*\nX394003Y363939D01*\nX394330Y364158D01*\nX394550Y364487D01*\nX395048Y364536D01*\nX395377Y364207D01*\nD02*\nG37*\nG36*\nX215377D02*\nX215807Y363919D01*\nX216314Y363819D01*\nX220051D01*\nX220158Y363658D01*\nX220886Y363172D01*\nX221744Y363001D01*\nX222132Y363078D01*\nX222519Y362761D01*\nY360727D01*\nX222132Y360410D01*\nX221744Y360487D01*\nX220886Y360316D01*\nX220158Y359830D01*\nX219984Y359570D01*\nX219244D01*\nX218737Y359469D01*\nX218307Y359181D01*\nX215267Y356142D01*\nX215052Y355819D01*\nX211783D01*\nY353244D01*\nY350669D01*\nX214879D01*\nY344319D01*\nX208284D01*\nY341744D01*\nX207284D01*\nY344319D01*\nX205110D01*\nY341819D01*\nX203705D01*\nY339244D01*\nX202705D01*\nY341819D01*\nX195610D01*\nY340384D01*\nX195307Y340181D01*\nX193307Y338181D01*\nX193019Y337751D01*\nX192919Y337244D01*\nY335789D01*\nX192600Y335343D01*\nX191742Y335172D01*\nX191014Y334686D01*\nX190784Y334342D01*\nX190486Y333986D01*\nX190143Y334215D01*\nX189758Y334472D01*\nX188900Y334643D01*\nX188764Y334616D01*\nX188378Y334933D01*\nY335516D01*\nX184826D01*\nY345669D01*\nX191705D01*\nY348244D01*\nY350819D01*\nX188609D01*\nY359510D01*\nX188830Y359658D01*\nX189309Y359705D01*\nX193807Y355207D01*\nX194237Y354920D01*\nX194744Y354819D01*\nX204614D01*\nX205121Y354920D01*\nX205551Y355207D01*\nX213681Y363337D01*\nX213969Y363767D01*\nX214003Y363939D01*\nX214330Y364158D01*\nX214550Y364487D01*\nX215048Y364536D01*\nX215377Y364207D01*\nD02*\nG37*\nG36*\nX469325Y279112D02*\nY234044D01*\nY195657D01*\nX468825Y195449D01*\nX467337Y196937D01*\nX466907Y197225D01*\nX466610Y197284D01*\nX466476Y197812D01*\nX466709Y197991D01*\nX467431Y198931D01*\nX467884Y200025D01*\nX468039Y201200D01*\nX467884Y202375D01*\nX467431Y203469D01*\nX466709Y204409D01*\nX465769Y205131D01*\nX464675Y205584D01*\nX463500Y205739D01*\nX462325Y205584D01*\nX461231Y205131D01*\nX460291Y204409D01*\nX459569Y203469D01*\nX459116Y202375D01*\nX458961Y201200D01*\nX459116Y200025D01*\nX459569Y198931D01*\nX460291Y197991D01*\nX460540Y197799D01*\nX460380Y197326D01*\nX459300D01*\nX458793Y197225D01*\nX458363Y196937D01*\nX458153Y196727D01*\nX441516D01*\nY197878D01*\nX440069D01*\nY198551D01*\nX442437Y200919D01*\nX442725Y201349D01*\nX442826Y201856D01*\nY210602D01*\nX442725Y211109D01*\nX442437Y211539D01*\nX441637Y212339D01*\nX441516Y212420D01*\nY213878D01*\nX440069D01*\nY215851D01*\nX443437Y219219D01*\nX443725Y219649D01*\nX443825Y220156D01*\nY234044D01*\nY239397D01*\nX443725Y239904D01*\nX443437Y240335D01*\nX442624Y241148D01*\nX441025Y242746D01*\nY246532D01*\nX444819D01*\nY247879D01*\nX451800D01*\nX452307Y247980D01*\nX452737Y248268D01*\nX454344Y249874D01*\nX459178D01*\nX459569Y248931D01*\nX460291Y247991D01*\nX461231Y247269D01*\nX462325Y246816D01*\nX463500Y246661D01*\nX464675Y246816D01*\nX465769Y247269D01*\nX466709Y247991D01*\nX467431Y248931D01*\nX467884Y250025D01*\nX468039Y251200D01*\nX467884Y252375D01*\nX467431Y253469D01*\nX466709Y254409D01*\nX465769Y255131D01*\nX464675Y255584D01*\nX463500Y255739D01*\nX462325Y255584D01*\nX461231Y255131D01*\nX460291Y254409D01*\nX459569Y253469D01*\nX459178Y252525D01*\nX453795D01*\nX453288Y252425D01*\nX452858Y252137D01*\nX451251Y250530D01*\nX444819D01*\nY251878D01*\nX439669D01*\nY250524D01*\nX439193Y250429D01*\nX438763Y250142D01*\nX438475Y249712D01*\nX438375Y249205D01*\nY244353D01*\nX438094Y244237D01*\nX437875Y244194D01*\nX437463Y244469D01*\nX436956Y244569D01*\nX407378D01*\nY246016D01*\nX405533D01*\nX405266Y246516D01*\nX405335Y246619D01*\nX407232D01*\nX407739Y246719D01*\nX408170Y247007D01*\nX408581Y247419D01*\nX411244D01*\nX411751Y247519D01*\nX412181Y247807D01*\nX413125Y248751D01*\nX414069Y248360D01*\nX415244Y248205D01*\nX416419Y248360D01*\nX417513Y248813D01*\nX418453Y249535D01*\nX419175Y250475D01*\nX419628Y251569D01*\nX419783Y252744D01*\nX419628Y253919D01*\nX419175Y255013D01*\nX418453Y255953D01*\nX417513Y256675D01*\nX416419Y257128D01*\nX415244Y257283D01*\nX414069Y257128D01*\nX412975Y256675D01*\nX412035Y255953D01*\nX411313Y255013D01*\nX410860Y253919D01*\nX410705Y252744D01*\nX410860Y251569D01*\nX411251Y250625D01*\nX410695Y250070D01*\nX409423D01*\nX409214Y250570D01*\nX409628Y251569D01*\nX409783Y252744D01*\nX409628Y253919D01*\nX409175Y255013D01*\nX408453Y255953D01*\nX407513Y256675D01*\nX406419Y257128D01*\nX405244Y257283D01*\nX404069Y257128D01*\nX402975Y256675D01*\nX402035Y255953D01*\nX401313Y255013D01*\nX400860Y253919D01*\nX400705Y252744D01*\nX400860Y251569D01*\nX401313Y250475D01*\nX402035Y249535D01*\nX402837Y248919D01*\nX402963Y248338D01*\nX401026Y246400D01*\nX400769Y246016D01*\nX397110D01*\nY245243D01*\nX396610Y244977D01*\nX396102Y245316D01*\nX395244Y245487D01*\nX394386Y245316D01*\nX394319Y245272D01*\nX393878Y245508D01*\nY245819D01*\nX388532D01*\nY240669D01*\nX393878D01*\nY240981D01*\nX394319Y241216D01*\nX394386Y241172D01*\nX395244Y241001D01*\nX396102Y241172D01*\nX396610Y241511D01*\nX397110Y241246D01*\nY240472D01*\nX397110D01*\nY240016D01*\nX397110D01*\nY238569D01*\nX393878D01*\nY239819D01*\nX388532D01*\nY236445D01*\nX387656Y235570D01*\nX384793D01*\nX384426Y235937D01*\nX384487Y236244D01*\nX384316Y237103D01*\nX383830Y237830D01*\nX383403Y238116D01*\nX383233Y238761D01*\nX383316Y238886D01*\nX383487Y239744D01*\nX383316Y240602D01*\nX382830Y241330D01*\nX382102Y241816D01*\nX381956Y241846D01*\nX381764Y242308D01*\nX381816Y242386D01*\nX381987Y243244D01*\nX381816Y244103D01*\nX381330Y244830D01*\nX380603Y245316D01*\nX379744Y245487D01*\nX378886Y245316D01*\nX378158Y244830D01*\nX377672Y244103D01*\nX377501Y243244D01*\nX377562Y242937D01*\nX372663Y238037D01*\nX372375Y237607D01*\nX372274Y237100D01*\nY234044D01*\nY229330D01*\nX372176Y229209D01*\nX371811Y229098D01*\nX371621Y229225D01*\nX371114Y229326D01*\nX370473D01*\nX370237Y229766D01*\nX370316Y229886D01*\nX370388Y230244D01*\nX369744D01*\nY229326D01*\nX369374D01*\nX368867Y229225D01*\nX368437Y228937D01*\nX367207Y227707D01*\nX366919Y227277D01*\nX366819Y226770D01*\nY225030D01*\nX366919Y224523D01*\nX367207Y224093D01*\nX369475Y221825D01*\nY219060D01*\nX369214Y218886D01*\nX368728Y218158D01*\nX368557Y217300D01*\nX368728Y216442D01*\nX369214Y215714D01*\nX369744Y215360D01*\nX369942Y215228D01*\nX370800Y215057D01*\nX370929Y214952D01*\nX370941Y210222D01*\nX370479Y210031D01*\nX369282Y211227D01*\nX368735Y211774D01*\nX368305Y212062D01*\nX367798Y212162D01*\nX360867D01*\nX360360Y212062D01*\nX359930Y211774D01*\nX355500Y207344D01*\nX352225Y204070D01*\nX340847D01*\nX340673Y204330D01*\nX339945Y204816D01*\nX339087Y204987D01*\nX338228Y204816D01*\nX337501Y204330D01*\nX337014Y203603D01*\nX336843Y202744D01*\nX337014Y201886D01*\nX337501Y201158D01*\nX337761Y200984D01*\nY200016D01*\nX337110D01*\nY194473D01*\nX337761D01*\nY192113D01*\nX337862Y191606D01*\nX338149Y191176D01*\nX338963Y190363D01*\nX339393Y190075D01*\nX339900Y189974D01*\nX351340D01*\nX351514Y189714D01*\nX352242Y189228D01*\nX353100Y189057D01*\nX353958Y189228D01*\nX354686Y189714D01*\nX354906Y190043D01*\nX355403Y190092D01*\nX363088Y182407D01*\nX363519Y182120D01*\nX364026Y182019D01*\nX364761D01*\nX365078Y181632D01*\nX365001Y181244D01*\nX365172Y180386D01*\nX365658Y179658D01*\nX365958Y179457D01*\nY170819D01*\nX364610D01*\nY170819D01*\nX364326Y170585D01*\nX363987Y170652D01*\nX363128Y170482D01*\nX362401Y169995D01*\nX362116Y169570D01*\nX355731D01*\nX355223Y169469D01*\nX354793Y169181D01*\nX351374Y165762D01*\nX350912Y165953D01*\nY166576D01*\nX350811Y167083D01*\nX350524Y167513D01*\nX345356Y172681D01*\nX344926Y172969D01*\nX344744Y173005D01*\nY174744D01*\nX338744D01*\nY174556D01*\nX338296Y174335D01*\nX338257Y174364D01*\nX337527Y174667D01*\nX337244Y174704D01*\nY171744D01*\nX336244D01*\nY174704D01*\nX335961Y174667D01*\nX335231Y174364D01*\nX334604Y173884D01*\nX334494Y173740D01*\nX333994D01*\nX333884Y173884D01*\nX333257Y174364D01*\nX332527Y174667D01*\nX332244Y174704D01*\nY171744D01*\nX331244D01*\nY174704D01*\nX330961Y174667D01*\nX330231Y174364D01*\nX329604Y173884D01*\nX329494Y173740D01*\nX328994D01*\nX328884Y173884D01*\nX328257Y174364D01*\nX327527Y174667D01*\nX326744Y174770D01*\nX325961Y174667D01*\nX325231Y174364D01*\nX324604Y173884D01*\nX324494Y173740D01*\nX323994D01*\nX323884Y173884D01*\nX323257Y174364D01*\nX322527Y174667D01*\nX321744Y174770D01*\nX320961Y174667D01*\nX320598Y174517D01*\nX320315Y174941D01*\nX331181Y185807D01*\nX331469Y186237D01*\nX331570Y186744D01*\nY205984D01*\nX331830Y206158D01*\nX332316Y206886D01*\nX332487Y207744D01*\nX332316Y208602D01*\nX331830Y209330D01*\nX331102Y209816D01*\nX330244Y209987D01*\nX329386Y209816D01*\nX328658Y209330D01*\nX328172Y208602D01*\nX328001Y207744D01*\nX328172Y206886D01*\nX328658Y206158D01*\nX328919Y205984D01*\nY187293D01*\nX327426Y185801D01*\nX326926Y186008D01*\nY186492D01*\nX326828Y187241D01*\nX326538Y187939D01*\nX326078Y188539D01*\nX325479Y188999D01*\nX324781Y189288D01*\nX324531Y189321D01*\nY185901D01*\nX324031D01*\nY185401D01*\nX321136D01*\nY185311D01*\nX321235Y184562D01*\nX321524Y183863D01*\nX321984Y183264D01*\nX322584Y182804D01*\nX323282Y182515D01*\nX323415Y182497D01*\nX323595Y181969D01*\nX317463Y175837D01*\nX317175Y175407D01*\nX317074Y174900D01*\nY170088D01*\nX317175Y169581D01*\nX317463Y169151D01*\nX318899Y167715D01*\nX318821Y167527D01*\nX318718Y166744D01*\nX318821Y165961D01*\nX319124Y165231D01*\nX319604Y164604D01*\nX320231Y164123D01*\nX320961Y163821D01*\nX321744Y163718D01*\nX322527Y163821D01*\nX323257Y164123D01*\nX323884Y164604D01*\nX323994Y164748D01*\nX324494D01*\nX324604Y164604D01*\nX325231Y164123D01*\nX325961Y163821D01*\nX326744Y163718D01*\nX327527Y163821D01*\nX328257Y164123D01*\nX328884Y164604D01*\nX328994Y164748D01*\nX329494D01*\nX329604Y164604D01*\nX330231Y164123D01*\nX330418Y164046D01*\nY163244D01*\nX330519Y162737D01*\nX330807Y162307D01*\nX339151Y153963D01*\nX359807Y133307D01*\nX360237Y133019D01*\nX360744Y132919D01*\nX436984D01*\nX437158Y132658D01*\nX437886Y132172D01*\nX438744Y132001D01*\nX439603Y132172D01*\nX440330Y132658D01*\nX440816Y133386D01*\nX440987Y134244D01*\nX440816Y135102D01*\nX440330Y135830D01*\nX439603Y136316D01*\nX438744Y136487D01*\nX437886Y136316D01*\nX437158Y135830D01*\nX436984Y135570D01*\nX361293D01*\nX357250Y139613D01*\nX357441Y140075D01*\nX372939D01*\nX373113Y139814D01*\nX373841Y139328D01*\nX374700Y139157D01*\nX375558Y139328D01*\nX376286Y139814D01*\nX376505Y140143D01*\nX377003Y140192D01*\nX379188Y138007D01*\nX379618Y137720D01*\nX380125Y137619D01*\nX418642D01*\nX419149Y137720D01*\nX419579Y138007D01*\nX424530Y142958D01*\nX435991Y154419D01*\nX436744D01*\nX437251Y154519D01*\nX437681Y154807D01*\nX438182Y155308D01*\nX438386Y155172D01*\nX439244Y155001D01*\nX440102Y155172D01*\nX440830Y155658D01*\nX441316Y156386D01*\nX441487Y157244D01*\nX441316Y158103D01*\nX440830Y158830D01*\nX440102Y159316D01*\nX439244Y159487D01*\nX438386Y159316D01*\nX437658Y158830D01*\nX437172Y158103D01*\nX437158Y158032D01*\nX436195Y157070D01*\nX435442D01*\nX434935Y156969D01*\nX434505Y156681D01*\nX422656Y144832D01*\nX418093Y140270D01*\nX398267D01*\nX398076Y140732D01*\nX400121Y142777D01*\nX400408Y143207D01*\nX400509Y143714D01*\nY145195D01*\nX407355Y152041D01*\nX407643Y152471D01*\nX407744Y152979D01*\nY157671D01*\nX408244Y157987D01*\nX408900Y157857D01*\nX409758Y158028D01*\nX410486Y158514D01*\nX410972Y159242D01*\nX411143Y160100D01*\nX410972Y160958D01*\nX410964Y160971D01*\nX411264Y161421D01*\nX411500Y161374D01*\nX430440D01*\nX430614Y161114D01*\nX431342Y160628D01*\nX432200Y160457D01*\nX433058Y160628D01*\nX433786Y161114D01*\nX434272Y161842D01*\nX434443Y162700D01*\nX434272Y163558D01*\nX433786Y164286D01*\nX433058Y164772D01*\nX432200Y164943D01*\nX431342Y164772D01*\nX430614Y164286D01*\nX430440Y164025D01*\nX415084D01*\nX414729Y164525D01*\nX414843Y165100D01*\nX414672Y165958D01*\nX414186Y166686D01*\nX413926Y166860D01*\nY184847D01*\nX414387Y185038D01*\nX417317Y182109D01*\nX417747Y181821D01*\nX418254Y181720D01*\nX418254Y181720D01*\nX424446D01*\nX424953Y181821D01*\nX425383Y182109D01*\nX427885Y184610D01*\nX430675D01*\nY177878D01*\nX426972D01*\nY175385D01*\nX426472Y175029D01*\nX425900Y175143D01*\nX425042Y174972D01*\nX424314Y174486D01*\nX423828Y173758D01*\nX423657Y172900D01*\nX423828Y172042D01*\nX424314Y171314D01*\nX425042Y170828D01*\nX425900Y170657D01*\nX426472Y170771D01*\nX426972Y170415D01*\nY167610D01*\nX432516D01*\nY172425D01*\nX432516Y172563D01*\nX432516D01*\nY172925D01*\nX432516D01*\nY174183D01*\nX432937Y174464D01*\nX433225Y174894D01*\nX433325Y175402D01*\nY188338D01*\nX433825Y188606D01*\nX434242Y188328D01*\nX435100Y188157D01*\nX435472Y188231D01*\nX435972Y187821D01*\nY187610D01*\nX441310D01*\nX441671Y187193D01*\nX441663Y187137D01*\nX438307Y183781D01*\nX438019Y183351D01*\nX437919Y182844D01*\nY180378D01*\nX436472D01*\nY175563D01*\nX436472Y175425D01*\nY175063D01*\nX436472Y174925D01*\nY170110D01*\nX442016D01*\nY171261D01*\nX442300D01*\nX442807Y171362D01*\nX443237Y171649D01*\nX447637Y176049D01*\nX447925Y176479D01*\nX448026Y176987D01*\nY180040D01*\nX448286Y180214D01*\nX448772Y180942D01*\nX448943Y181800D01*\nX448772Y182658D01*\nX448286Y183386D01*\nX447558Y183872D01*\nX446700Y184043D01*\nX445842Y183872D01*\nX445114Y183386D01*\nX444628Y182658D01*\nX444457Y181800D01*\nX444628Y180942D01*\nX445114Y180214D01*\nX445374Y180040D01*\nY177536D01*\nX442478Y174639D01*\nX442016Y174830D01*\nX442016Y175063D01*\nY175425D01*\nX442016Y175563D01*\nY180378D01*\nX440569D01*\nY182295D01*\nX443149Y184874D01*\nX460133D01*\nX460218Y184622D01*\nX460264Y184374D01*\nX459569Y183469D01*\nX459116Y182375D01*\nX458961Y181200D01*\nX459116Y180025D01*\nX459569Y178931D01*\nX460291Y177991D01*\nX461231Y177269D01*\nX462325Y176816D01*\nX463500Y176661D01*\nX464675Y176816D01*\nX465769Y177269D01*\nX466709Y177991D01*\nX467431Y178931D01*\nX467884Y180025D01*\nX468039Y181200D01*\nX467884Y182375D01*\nX467431Y183469D01*\nX466709Y184409D01*\nX466671Y184439D01*\nX466796Y184973D01*\nX466807Y184975D01*\nX467237Y185263D01*\nX468825Y186851D01*\nX469325Y186643D01*\nY134888D01*\nX460466Y126029D01*\nX331936D01*\nX331887Y126529D01*\nX332073Y126566D01*\nX332603Y126672D01*\nX333330Y127158D01*\nX333816Y127886D01*\nX333888Y128244D01*\nX329601D01*\nX329672Y127886D01*\nX330158Y127158D01*\nX330886Y126672D01*\nX331415Y126566D01*\nX331601Y126529D01*\nX331552Y126029D01*\nX315334D01*\nX307029Y134334D01*\nY207344D01*\nY222127D01*\nX307529Y222160D01*\nX307536Y222110D01*\nX307544Y222045D01*\nX307660Y221169D01*\nX308113Y220075D01*\nX308835Y219135D01*\nX309775Y218413D01*\nX310869Y217960D01*\nX312044Y217805D01*\nX313219Y217960D01*\nX314313Y218413D01*\nX315253Y219135D01*\nX315975Y220075D01*\nX316428Y221169D01*\nX316583Y222344D01*\nX316428Y223519D01*\nX315975Y224613D01*\nX315253Y225553D01*\nX314313Y226275D01*\nX313219Y226728D01*\nX312044Y226883D01*\nX310869Y226728D01*\nX309775Y226275D01*\nX308835Y225553D01*\nX308113Y224613D01*\nX307660Y223519D01*\nX307544Y222643D01*\nX307529Y222528D01*\nX307029Y222561D01*\nD01*\nY232127D01*\nX307529Y232160D01*\nX307660Y231169D01*\nX308113Y230075D01*\nX308835Y229135D01*\nX309775Y228413D01*\nX310869Y227960D01*\nX312044Y227805D01*\nX313219Y227960D01*\nX314313Y228413D01*\nX315253Y229135D01*\nX315975Y230075D01*\nX316428Y231169D01*\nX316583Y232344D01*\nX316428Y233519D01*\nX315975Y234613D01*\nX315253Y235553D01*\nX314970Y235771D01*\nX315131Y236244D01*\nX343009D01*\nY235722D01*\nX342747Y235088D01*\nX342610Y234044D01*\nX342747Y233000D01*\nX343150Y232027D01*\nX343791Y231191D01*\nX344627Y230550D01*\nX345600Y230147D01*\nX346644Y230010D01*\nX352444D01*\nX353488Y230147D01*\nX354461Y230550D01*\nX355297Y231191D01*\nX355938Y232027D01*\nX356069Y232344D01*\nX356082Y232375D01*\nX356336Y232988D01*\nX356341Y233000D01*\nX356479Y234044D01*\nX356341Y235088D01*\nX355938Y236061D01*\nX355297Y236897D01*\nX354461Y237538D01*\nX353488Y237941D01*\nX352444Y238078D01*\nX351079D01*\nY264944D01*\nY268444D01*\nX350941Y269488D01*\nX350538Y270461D01*\nX349897Y271297D01*\nX349061Y271938D01*\nX348088Y272341D01*\nX347044Y272479D01*\nX346000Y272341D01*\nX345027Y271938D01*\nX344191Y271297D01*\nX343550Y270461D01*\nX343147Y269488D01*\nX343009Y268444D01*\nY264944D01*\nY238744D01*\nX315501D01*\nX315337Y239244D01*\nX315975Y240075D01*\nX316428Y241170D01*\nX316583Y242344D01*\nX316428Y243519D01*\nX315975Y244614D01*\nX315253Y245554D01*\nX314313Y246275D01*\nX313219Y246728D01*\nX312044Y246883D01*\nX310869Y246728D01*\nX309775Y246275D01*\nX308835Y245554D01*\nX308113Y244614D01*\nX307660Y243519D01*\nX307529Y242528D01*\nX307029Y242561D01*\nY279567D01*\nX315788Y288325D01*\nX460112D01*\nX469325Y279112D01*\nD02*\nG37*\nG36*\nX289325D02*\nY234044D01*\nY195657D01*\nX288825Y195449D01*\nX287337Y196937D01*\nX286907Y197225D01*\nX286610Y197284D01*\nX286476Y197812D01*\nX286709Y197991D01*\nX287431Y198931D01*\nX287884Y200025D01*\nX288039Y201200D01*\nX287884Y202375D01*\nX287431Y203469D01*\nX286709Y204409D01*\nX285769Y205131D01*\nX284675Y205584D01*\nX283500Y205739D01*\nX282325Y205584D01*\nX281231Y205131D01*\nX280291Y204409D01*\nX279569Y203469D01*\nX279116Y202375D01*\nX278961Y201200D01*\nX279116Y200025D01*\nX279569Y198931D01*\nX280291Y197991D01*\nX280540Y197799D01*\nX280380Y197326D01*\nX279300D01*\nX278793Y197225D01*\nX278363Y196937D01*\nX278153Y196727D01*\nX261516D01*\nY197878D01*\nX260069D01*\nY198551D01*\nX262437Y200919D01*\nX262725Y201349D01*\nX262825Y201856D01*\nY210602D01*\nX262725Y211109D01*\nX262437Y211539D01*\nX261637Y212339D01*\nX261516Y212420D01*\nY213878D01*\nX260069D01*\nY215851D01*\nX263437Y219219D01*\nX263725Y219649D01*\nX263825Y220156D01*\nY234044D01*\nY239397D01*\nX263725Y239904D01*\nX263437Y240335D01*\nX262624Y241148D01*\nX261026Y242746D01*\nY246532D01*\nX264819D01*\nY247879D01*\nX271800D01*\nX272307Y247980D01*\nX272737Y248268D01*\nX274344Y249874D01*\nX279178D01*\nX279569Y248931D01*\nX280291Y247991D01*\nX281231Y247269D01*\nX282325Y246816D01*\nX283500Y246661D01*\nX284675Y246816D01*\nX285769Y247269D01*\nX286709Y247991D01*\nX287431Y248931D01*\nX287884Y250025D01*\nX288039Y251200D01*\nX287884Y252375D01*\nX287431Y253469D01*\nX286709Y254409D01*\nX285769Y255131D01*\nX284675Y255584D01*\nX283500Y255739D01*\nX282325Y255584D01*\nX281231Y255131D01*\nX280291Y254409D01*\nX279569Y253469D01*\nX279178Y252525D01*\nX273795D01*\nX273288Y252425D01*\nX272858Y252137D01*\nX271251Y250530D01*\nX264819D01*\nY251878D01*\nX259669D01*\nY250524D01*\nX259193Y250429D01*\nX258763Y250142D01*\nX258475Y249712D01*\nX258375Y249205D01*\nY244353D01*\nX258094Y244237D01*\nX257874Y244194D01*\nX257463Y244469D01*\nX256956Y244569D01*\nX227378D01*\nY246016D01*\nX225533D01*\nX225266Y246516D01*\nX225335Y246619D01*\nX227232D01*\nX227740Y246719D01*\nX228169Y247007D01*\nX228581Y247419D01*\nX231244D01*\nX231751Y247519D01*\nX232181Y247807D01*\nX233125Y248751D01*\nX234069Y248360D01*\nX235244Y248205D01*\nX236419Y248360D01*\nX237513Y248813D01*\nX238453Y249535D01*\nX239175Y250475D01*\nX239628Y251569D01*\nX239783Y252744D01*\nX239628Y253919D01*\nX239175Y255013D01*\nX238453Y255953D01*\nX237513Y256675D01*\nX236419Y257128D01*\nX235244Y257283D01*\nX234069Y257128D01*\nX232975Y256675D01*\nX232035Y255953D01*\nX231313Y255013D01*\nX230860Y253919D01*\nX230705Y252744D01*\nX230860Y251569D01*\nX231251Y250625D01*\nX230695Y250070D01*\nX229423D01*\nX229214Y250570D01*\nX229628Y251569D01*\nX229783Y252744D01*\nX229628Y253919D01*\nX229175Y255013D01*\nX228453Y255953D01*\nX227513Y256675D01*\nX226419Y257128D01*\nX225244Y257283D01*\nX224069Y257128D01*\nX222975Y256675D01*\nX222035Y255953D01*\nX221313Y255013D01*\nX220860Y253919D01*\nX220705Y252744D01*\nX220860Y251569D01*\nX221313Y250475D01*\nX222035Y249535D01*\nX222837Y248919D01*\nX222964Y248338D01*\nX221026Y246400D01*\nX220769Y246016D01*\nX217110D01*\nY245243D01*\nX216610Y244977D01*\nX216103Y245316D01*\nX215244Y245487D01*\nX214386Y245316D01*\nX214319Y245272D01*\nX213878Y245508D01*\nY245819D01*\nX208532D01*\nY240669D01*\nX213878D01*\nY240981D01*\nX214319Y241216D01*\nX214386Y241172D01*\nX215244Y241001D01*\nX216103Y241172D01*\nX216610Y241511D01*\nX217110Y241246D01*\nY240472D01*\nX217110D01*\nY240016D01*\nX217110D01*\nY238569D01*\nX213878D01*\nY239819D01*\nX208532D01*\nY236445D01*\nX207656Y235570D01*\nX204793D01*\nX204426Y235937D01*\nX204487Y236244D01*\nX204316Y237103D01*\nX203830Y237830D01*\nX203403Y238116D01*\nX203233Y238761D01*\nX203316Y238886D01*\nX203487Y239744D01*\nX203316Y240602D01*\nX202830Y241330D01*\nX202102Y241816D01*\nX201956Y241846D01*\nX201764Y242308D01*\nX201816Y242386D01*\nX201987Y243244D01*\nX201816Y244103D01*\nX201330Y244830D01*\nX200603Y245316D01*\nX199744Y245487D01*\nX198886Y245316D01*\nX198158Y244830D01*\nX197672Y244103D01*\nX197501Y243244D01*\nX197562Y242937D01*\nX192663Y238037D01*\nX192375Y237607D01*\nX192274Y237100D01*\nY234044D01*\nY229330D01*\nX192175Y229209D01*\nX191811Y229098D01*\nX191621Y229225D01*\nX191114Y229326D01*\nX190472D01*\nX190237Y229766D01*\nX190316Y229886D01*\nX190388Y230244D01*\nX189744D01*\nY229326D01*\nX189374D01*\nX188867Y229225D01*\nX188437Y228937D01*\nX187207Y227707D01*\nX186919Y227277D01*\nX186819Y226770D01*\nY225030D01*\nX186919Y224523D01*\nX187207Y224093D01*\nX189474Y221825D01*\nY219060D01*\nX189214Y218886D01*\nX188728Y218158D01*\nX188557Y217300D01*\nX188728Y216442D01*\nX189214Y215714D01*\nX189744Y215360D01*\nX189942Y215228D01*\nX190800Y215057D01*\nX190929Y214952D01*\nX190941Y210222D01*\nX190479Y210031D01*\nX189282Y211227D01*\nD01*\nX188735Y211774D01*\nX188305Y212062D01*\nX187798Y212162D01*\nX180867D01*\nX180360Y212062D01*\nX179930Y211774D01*\nX175500Y207344D01*\nX172225Y204070D01*\nX160847D01*\nX160673Y204330D01*\nX159945Y204816D01*\nX159087Y204987D01*\nX158228Y204816D01*\nX157501Y204330D01*\nX157014Y203603D01*\nX156843Y202744D01*\nX157014Y201886D01*\nX157501Y201158D01*\nX157761Y200984D01*\nY200016D01*\nX157110D01*\nY194473D01*\nX157761D01*\nY192113D01*\nX157862Y191606D01*\nX158149Y191176D01*\nX158963Y190363D01*\nX159393Y190075D01*\nX159900Y189974D01*\nX171340D01*\nX171514Y189714D01*\nX172242Y189228D01*\nX173100Y189057D01*\nX173958Y189228D01*\nX174686Y189714D01*\nX174906Y190043D01*\nX175403Y190092D01*\nX183089Y182407D01*\nX183519Y182120D01*\nX184026Y182019D01*\nX184761D01*\nX185078Y181632D01*\nX185001Y181244D01*\nX185172Y180386D01*\nX185658Y179658D01*\nX185958Y179457D01*\nY170819D01*\nX184610D01*\nY170819D01*\nX184326Y170585D01*\nX183987Y170652D01*\nX183128Y170482D01*\nX182401Y169995D01*\nX182116Y169570D01*\nX175731D01*\nX175223Y169469D01*\nX174793Y169181D01*\nX171374Y165762D01*\nX170912Y165953D01*\nY166576D01*\nX170811Y167083D01*\nX170524Y167513D01*\nX165356Y172681D01*\nX164926Y172969D01*\nX164744Y173005D01*\nY174744D01*\nX158744D01*\nY174556D01*\nX158296Y174335D01*\nX158257Y174364D01*\nX157527Y174667D01*\nX157244Y174704D01*\nY171744D01*\nX156244D01*\nY174704D01*\nX155961Y174667D01*\nX155231Y174364D01*\nX154604Y173884D01*\nX154494Y173740D01*\nX153994D01*\nX153884Y173884D01*\nX153257Y174364D01*\nX152527Y174667D01*\nX152244Y174704D01*\nY171744D01*\nX151244D01*\nY174704D01*\nX150961Y174667D01*\nX150231Y174364D01*\nX149604Y173884D01*\nX149494Y173740D01*\nX148994D01*\nX148884Y173884D01*\nX148257Y174364D01*\nX147527Y174667D01*\nX146744Y174770D01*\nX145961Y174667D01*\nX145231Y174364D01*\nX144604Y173884D01*\nX144494Y173740D01*\nX143994D01*\nX143884Y173884D01*\nX143257Y174364D01*\nX142527Y174667D01*\nX141744Y174770D01*\nX140961Y174667D01*\nX140598Y174517D01*\nX140315Y174941D01*\nX151181Y185807D01*\nX151469Y186237D01*\nX151569Y186744D01*\nY205984D01*\nX151830Y206158D01*\nX152316Y206886D01*\nX152487Y207744D01*\nX152316Y208602D01*\nX151830Y209330D01*\nX151102Y209816D01*\nX150244Y209987D01*\nX149386Y209816D01*\nX148658Y209330D01*\nX148172Y208602D01*\nX148001Y207744D01*\nX148172Y206886D01*\nX148658Y206158D01*\nX148918Y205984D01*\nY187293D01*\nX147426Y185801D01*\nX146926Y186008D01*\nY186492D01*\nX146828Y187241D01*\nX146538Y187939D01*\nX146078Y188539D01*\nX145479Y188999D01*\nX144781Y189288D01*\nX144531Y189321D01*\nY185901D01*\nX144031D01*\nY185401D01*\nX141137D01*\nY185311D01*\nX141235Y184562D01*\nX141524Y183863D01*\nX141984Y183264D01*\nX142584Y182804D01*\nX143282Y182515D01*\nX143415Y182497D01*\nX143595Y181969D01*\nX137463Y175837D01*\nX137175Y175407D01*\nX137074Y174900D01*\nY170088D01*\nX137175Y169581D01*\nX137463Y169151D01*\nX138899Y167715D01*\nX138821Y167527D01*\nX138718Y166744D01*\nX138821Y165961D01*\nX139123Y165231D01*\nX139604Y164604D01*\nX140231Y164123D01*\nX140961Y163821D01*\nX141744Y163718D01*\nX142527Y163821D01*\nX143257Y164123D01*\nX143884Y164604D01*\nX143994Y164748D01*\nX144494D01*\nX144604Y164604D01*\nX145231Y164123D01*\nX145961Y163821D01*\nX146744Y163718D01*\nX147527Y163821D01*\nX148257Y164123D01*\nX148884Y164604D01*\nX148994Y164748D01*\nX149494D01*\nX149604Y164604D01*\nX150231Y164123D01*\nX150418Y164046D01*\nY163244D01*\nX150519Y162737D01*\nX150807Y162307D01*\nX159151Y153963D01*\nX179807Y133307D01*\nX180237Y133019D01*\nX180744Y132919D01*\nX256984D01*\nX257158Y132658D01*\nX257886Y132172D01*\nX258744Y132001D01*\nX259602Y132172D01*\nX260330Y132658D01*\nX260816Y133386D01*\nX260987Y134244D01*\nX260816Y135102D01*\nX260330Y135830D01*\nX259602Y136316D01*\nX258744Y136487D01*\nX257886Y136316D01*\nX257158Y135830D01*\nX256984Y135570D01*\nX181293D01*\nX177250Y139613D01*\nX177441Y140075D01*\nX192939D01*\nX193114Y139814D01*\nX193841Y139328D01*\nX194700Y139157D01*\nX195558Y139328D01*\nX196286Y139814D01*\nX196505Y140143D01*\nX197003Y140192D01*\nX199188Y138007D01*\nX199618Y137720D01*\nX200125Y137619D01*\nX238642D01*\nX239149Y137720D01*\nX239579Y138007D01*\nX244530Y142958D01*\nX255991Y154419D01*\nX256744D01*\nX257251Y154519D01*\nX257681Y154807D01*\nX258182Y155308D01*\nX258386Y155172D01*\nX259244Y155001D01*\nX260103Y155172D01*\nX260830Y155658D01*\nX261316Y156386D01*\nX261487Y157244D01*\nX261316Y158103D01*\nX260830Y158830D01*\nX260103Y159316D01*\nX259244Y159487D01*\nX258386Y159316D01*\nX257658Y158830D01*\nX257172Y158103D01*\nX257158Y158032D01*\nX256195Y157070D01*\nX255442D01*\nX254935Y156969D01*\nX254505Y156681D01*\nX242655Y144832D01*\nX238093Y140270D01*\nX218267D01*\nX218076Y140732D01*\nX220121Y142777D01*\nX220408Y143207D01*\nX220509Y143714D01*\nY145195D01*\nX227356Y152041D01*\nX227643Y152471D01*\nX227744Y152979D01*\nY157671D01*\nX228244Y157987D01*\nX228900Y157857D01*\nX229758Y158028D01*\nX230486Y158514D01*\nX230972Y159242D01*\nX231143Y160100D01*\nX230972Y160958D01*\nX230964Y160971D01*\nX231264Y161421D01*\nX231500Y161374D01*\nX250440D01*\nX250614Y161114D01*\nX251342Y160628D01*\nX252200Y160457D01*\nX253058Y160628D01*\nX253786Y161114D01*\nX254272Y161842D01*\nX254443Y162700D01*\nX254272Y163558D01*\nX253786Y164286D01*\nX253058Y164772D01*\nX252200Y164943D01*\nX251342Y164772D01*\nX250614Y164286D01*\nX250440Y164025D01*\nX235084D01*\nX234729Y164525D01*\nX234843Y165100D01*\nX234672Y165958D01*\nX234186Y166686D01*\nX233926Y166860D01*\nY184847D01*\nX234387Y185038D01*\nX237317Y182109D01*\nX237747Y181821D01*\nX238254Y181720D01*\nX238254Y181720D01*\nX244446D01*\nX244953Y181821D01*\nX245383Y182109D01*\nX247885Y184610D01*\nX250675D01*\nY177878D01*\nX246972D01*\nY175385D01*\nX246472Y175029D01*\nX245900Y175143D01*\nX245042Y174972D01*\nX244314Y174486D01*\nX243828Y173758D01*\nX243657Y172900D01*\nX243828Y172042D01*\nX244314Y171314D01*\nX245042Y170828D01*\nX245900Y170657D01*\nX246472Y170771D01*\nX246972Y170415D01*\nY167610D01*\nX252516D01*\nY172425D01*\nX252516Y172563D01*\nX252516D01*\nY172925D01*\nX252516D01*\nY174183D01*\nX252937Y174464D01*\nX253225Y174894D01*\nX253326Y175402D01*\nY188338D01*\nX253825Y188606D01*\nX254242Y188328D01*\nX255100Y188157D01*\nX255472Y188231D01*\nX255972Y187821D01*\nY187610D01*\nX261310D01*\nX261671Y187193D01*\nX261663Y187137D01*\nX258307Y183781D01*\nX258019Y183351D01*\nX257919Y182844D01*\nY180378D01*\nX256472D01*\nY175563D01*\nX256472Y175425D01*\nY175063D01*\nX256472Y174925D01*\nY170110D01*\nX262016D01*\nY171261D01*\nX262300D01*\nX262807Y171362D01*\nX263237Y171649D01*\nX267637Y176049D01*\nX267925Y176479D01*\nX268025Y176987D01*\nY180040D01*\nX268286Y180214D01*\nX268772Y180942D01*\nX268943Y181800D01*\nX268772Y182658D01*\nX268286Y183386D01*\nX267558Y183872D01*\nX266700Y184043D01*\nX265842Y183872D01*\nX265114Y183386D01*\nX264628Y182658D01*\nX264457Y181800D01*\nX264628Y180942D01*\nX265114Y180214D01*\nX265374Y180040D01*\nY177536D01*\nX262478Y174639D01*\nX262016Y174830D01*\nX262016Y175063D01*\nY175425D01*\nX262016Y175563D01*\nY180378D01*\nX260570D01*\nY182295D01*\nX263149Y184874D01*\nX280133D01*\nX280219Y184622D01*\nX280264Y184374D01*\nX279569Y183469D01*\nX279116Y182375D01*\nX278961Y181200D01*\nX279116Y180025D01*\nX279569Y178931D01*\nX280291Y177991D01*\nX281231Y177269D01*\nX282325Y176816D01*\nX283500Y176661D01*\nX284675Y176816D01*\nX285769Y177269D01*\nX286709Y177991D01*\nX287431Y178931D01*\nX287884Y180025D01*\nX288039Y181200D01*\nX287884Y182375D01*\nX287431Y183469D01*\nX286709Y184409D01*\nX286671Y184439D01*\nX286796Y184973D01*\nX286807Y184975D01*\nX287237Y185263D01*\nX288825Y186851D01*\nX289325Y186643D01*\nY134888D01*\nX280467Y126029D01*\nX151936D01*\nX151887Y126529D01*\nX152073Y126566D01*\nX152603Y126672D01*\nX153330Y127158D01*\nX153816Y127886D01*\nX153888Y128244D01*\nX149601D01*\nX149672Y127886D01*\nX150158Y127158D01*\nX150886Y126672D01*\nX151415Y126566D01*\nX151601Y126529D01*\nX151552Y126029D01*\nX135334D01*\nX127029Y134334D01*\nY207344D01*\nY222127D01*\nX127529Y222160D01*\nD01*\nX127536Y222110D01*\nX127544Y222045D01*\nX127660Y221169D01*\nX128113Y220075D01*\nX128835Y219135D01*\nX129775Y218413D01*\nX130869Y217960D01*\nX132044Y217805D01*\nX133219Y217960D01*\nX134313Y218413D01*\nX135253Y219135D01*\nX135975Y220075D01*\nX136428Y221169D01*\nX136583Y222344D01*\nX136428Y223519D01*\nX135975Y224613D01*\nX135253Y225553D01*\nX134313Y226275D01*\nX133219Y226728D01*\nX132044Y226883D01*\nX130869Y226728D01*\nX129775Y226275D01*\nX128835Y225553D01*\nX128113Y224613D01*\nX127660Y223519D01*\nX127544Y222643D01*\nX127529Y222528D01*\nX127029Y222561D01*\nD01*\nY232127D01*\nX127529Y232160D01*\nX127660Y231169D01*\nX128113Y230075D01*\nX128835Y229135D01*\nX129775Y228413D01*\nX130869Y227960D01*\nX132044Y227805D01*\nX133219Y227960D01*\nX134313Y228413D01*\nX135253Y229135D01*\nX135975Y230075D01*\nX136428Y231169D01*\nX136583Y232344D01*\nX136428Y233519D01*\nX135975Y234613D01*\nX135253Y235553D01*\nX134970Y235771D01*\nX135131Y236244D01*\nX163010D01*\nY235722D01*\nX162747Y235088D01*\nX162610Y234044D01*\nX162747Y233000D01*\nX163150Y232027D01*\nX163791Y231191D01*\nX164627Y230550D01*\nX165600Y230147D01*\nX166644Y230010D01*\nX172444D01*\nX173488Y230147D01*\nX174461Y230550D01*\nX175297Y231191D01*\nX175938Y232027D01*\nX176069Y232344D01*\nD01*\nX176082Y232375D01*\nX176336Y232988D01*\nX176341Y233000D01*\nX176479Y234044D01*\nX176341Y235088D01*\nX175938Y236061D01*\nX175297Y236897D01*\nX174461Y237538D01*\nX173488Y237941D01*\nX172444Y238078D01*\nX171079D01*\nY264944D01*\nY268444D01*\nX170941Y269488D01*\nX170538Y270461D01*\nX169897Y271297D01*\nX169061Y271938D01*\nX168088Y272341D01*\nX167044Y272479D01*\nX166000Y272341D01*\nX165027Y271938D01*\nX164191Y271297D01*\nX163550Y270461D01*\nX163147Y269488D01*\nX163010Y268444D01*\nY264944D01*\nY238744D01*\nX135501D01*\nX135337Y239244D01*\nX135975Y240075D01*\nX136428Y241170D01*\nX136583Y242344D01*\nX136428Y243519D01*\nX135975Y244614D01*\nX135253Y245554D01*\nX134313Y246275D01*\nX133219Y246728D01*\nX132044Y246883D01*\nX130869Y246728D01*\nX129775Y246275D01*\nX128835Y245554D01*\nX128113Y244614D01*\nX127660Y243519D01*\nX127529Y242528D01*\nX127029Y242561D01*\nY279567D01*\nX135788Y288325D01*\nX280112D01*\nX289325Y279112D01*\nD02*\nG37*\nG36*\nX439974Y238351D02*\nY234378D01*\nX436319D01*\nY234878D01*\nX431169D01*\nY233280D01*\nX430963Y233142D01*\nX429707Y231887D01*\nX429400Y231948D01*\nX428542Y231777D01*\nX427814Y231291D01*\nX427319Y231450D01*\nY232378D01*\nX425244D01*\nY229705D01*\nX424744D01*\nY229205D01*\nX422169D01*\nY226958D01*\nX421755Y226681D01*\nX421319Y226862D01*\nY229705D01*\nX416169D01*\nY226989D01*\nX416089Y226914D01*\nX415527Y226870D01*\nX414799Y227356D01*\nX413941Y227526D01*\nX413082Y227356D01*\nX412355Y226870D01*\nX412181Y226609D01*\nX411200D01*\nX410693Y226508D01*\nX410263Y226221D01*\nX407563Y223521D01*\nX407275Y223091D01*\nX407174Y222583D01*\nY193812D01*\nX406744Y193459D01*\nY191244D01*\nX405744D01*\nY193388D01*\nX405386Y193316D01*\nX404658Y192830D01*\nX404426Y192483D01*\nX403929Y192434D01*\nX403400Y192963D01*\nY224711D01*\nX403900Y225100D01*\nY226744D01*\nX402009D01*\nX401891Y226600D01*\nX395878D01*\nY226744D01*\nX393205D01*\nY227744D01*\nX395878D01*\nY228819D01*\nX398705D01*\nX399212Y228920D01*\nX399642Y229207D01*\nX402854Y232419D01*\nX410744D01*\nX411251Y232520D01*\nX411681Y232807D01*\nX413181Y234307D01*\nX413469Y234737D01*\nX413570Y235244D01*\nY236484D01*\nX413830Y236658D01*\nX414316Y237386D01*\nX414487Y238244D01*\nX414316Y239103D01*\nX414105Y239419D01*\nX414372Y239919D01*\nX419307D01*\nX421718Y237507D01*\nX421657Y237200D01*\nX421828Y236342D01*\nX422314Y235614D01*\nX423042Y235128D01*\nX423900Y234957D01*\nX424758Y235128D01*\nX425486Y235614D01*\nX425972Y236342D01*\nX426143Y237200D01*\nX425972Y238058D01*\nX425486Y238786D01*\nX424758Y239272D01*\nX423900Y239443D01*\nX423593Y239382D01*\nX421518Y241457D01*\nX421709Y241918D01*\nX436407D01*\nX439974Y238351D01*\nD02*\nG37*\nG36*\nX259975D02*\nY234378D01*\nX256319D01*\nY234878D01*\nX251169D01*\nY233280D01*\nX250963Y233142D01*\nX249707Y231887D01*\nX249400Y231948D01*\nX248542Y231777D01*\nX247814Y231291D01*\nX247319Y231450D01*\nY232378D01*\nX245244D01*\nY229705D01*\nX244744D01*\nY229205D01*\nX242169D01*\nY226958D01*\nX241755Y226681D01*\nX241319Y226862D01*\nY229705D01*\nX236169D01*\nY226989D01*\nX236089Y226914D01*\nX235527Y226870D01*\nX234799Y227356D01*\nX233941Y227526D01*\nX233082Y227356D01*\nX232355Y226870D01*\nX232181Y226609D01*\nX231200D01*\nX230693Y226508D01*\nX230263Y226221D01*\nX227563Y223521D01*\nX227275Y223091D01*\nX227174Y222583D01*\nY193812D01*\nX226744Y193459D01*\nY191244D01*\nX225744D01*\nY193388D01*\nX225386Y193316D01*\nX224658Y192830D01*\nX224426Y192483D01*\nX223928Y192434D01*\nX223400Y192963D01*\nY224711D01*\nX223900Y225100D01*\nY226744D01*\nX222009D01*\nX221891Y226600D01*\nX215878D01*\nY226744D01*\nX213205D01*\nY227744D01*\nX215878D01*\nY228819D01*\nX218705D01*\nX219212Y228920D01*\nX219642Y229207D01*\nX222854Y232419D01*\nX230744D01*\nX231251Y232520D01*\nX231681Y232807D01*\nX233181Y234307D01*\nX233469Y234737D01*\nX233570Y235244D01*\nY236484D01*\nX233830Y236658D01*\nX234316Y237386D01*\nX234487Y238244D01*\nX234316Y239103D01*\nX234105Y239419D01*\nX234372Y239919D01*\nX239307D01*\nX241718Y237507D01*\nX241657Y237200D01*\nX241828Y236342D01*\nX242314Y235614D01*\nX243042Y235128D01*\nX243900Y234957D01*\nX244758Y235128D01*\nX245486Y235614D01*\nX245972Y236342D01*\nX246143Y237200D01*\nX245972Y238058D01*\nX245486Y238786D01*\nX244758Y239272D01*\nX243900Y239443D01*\nX243593Y239382D01*\nX241518Y241457D01*\nX241709Y241918D01*\nX256407D01*\nX259975Y238351D01*\nD02*\nG37*\nG36*\nX428542Y227632D02*\nX429400Y227462D01*\nX430258Y227632D01*\nX430669Y227907D01*\nX430900Y227783D01*\nX433744D01*\nY227283D01*\nX434244D01*\nY224610D01*\nX436169D01*\nY224110D01*\nX438244D01*\nY226783D01*\nX439244D01*\nY224110D01*\nX439974D01*\nY223449D01*\nX435551Y219025D01*\nX421028D01*\nX420761Y219526D01*\nX420972Y219842D01*\nX421044Y220200D01*\nX416756D01*\nX416828Y219842D01*\nX417314Y219114D01*\nX418042Y218628D01*\nX418365Y218563D01*\nX418510Y218085D01*\nX412935Y212510D01*\nX412438Y212559D01*\nX412286Y212786D01*\nX411558Y213272D01*\nX410700Y213443D01*\nX410325Y213369D01*\nX409826Y213779D01*\nY222034D01*\nX411716Y223925D01*\nX412223Y223895D01*\nX412355Y223697D01*\nX413082Y223211D01*\nX413941Y223040D01*\nX414799Y223211D01*\nX415527Y223697D01*\nX416089Y223653D01*\nX416169Y223578D01*\nY222610D01*\nX416967D01*\nX417196Y222110D01*\nX416828Y221558D01*\nX416756Y221200D01*\nX421044D01*\nX420972Y221558D01*\nX420604Y222110D01*\nX420833Y222610D01*\nX421319D01*\nY223048D01*\nX421706Y223337D01*\nX422169Y223150D01*\nY222110D01*\nX427319D01*\nY227959D01*\nX427814Y228118D01*\nX428542Y227632D01*\nD02*\nG37*\nG36*\nX248542D02*\nX249400Y227462D01*\nX250258Y227632D01*\nX250669Y227907D01*\nX250900Y227783D01*\nX253744D01*\nY227283D01*\nX254244D01*\nY224610D01*\nX256169D01*\nY224110D01*\nX258244D01*\nY226783D01*\nX259244D01*\nY224110D01*\nX259975D01*\nY223449D01*\nX255551Y219025D01*\nX241028D01*\nX240761Y219526D01*\nX240972Y219842D01*\nX241044Y220200D01*\nX236756D01*\nX236828Y219842D01*\nX237314Y219114D01*\nX238042Y218628D01*\nX238365Y218563D01*\nX238510Y218085D01*\nX232936Y212510D01*\nX232438Y212559D01*\nX232286Y212786D01*\nX231558Y213272D01*\nX230700Y213443D01*\nX230326Y213369D01*\nX229825Y213779D01*\nY222034D01*\nX231716Y223925D01*\nX232223Y223895D01*\nX232355Y223697D01*\nX233082Y223211D01*\nX233941Y223040D01*\nX234799Y223211D01*\nX235527Y223697D01*\nX236089Y223653D01*\nX236169Y223578D01*\nY222610D01*\nX236967D01*\nX237196Y222110D01*\nX236828Y221558D01*\nX236756Y221200D01*\nX241044D01*\nX240972Y221558D01*\nX240604Y222110D01*\nX240833Y222610D01*\nX241319D01*\nY223048D01*\nX241706Y223337D01*\nX242169Y223150D01*\nY222110D01*\nX247319D01*\nY227959D01*\nX247814Y228118D01*\nX248542Y227632D01*\nD02*\nG37*\nG36*\nX359280Y198476D02*\nX359787Y198375D01*\nX360323D01*\nY195551D01*\nX361110D01*\nY190669D01*\nX368205D01*\nY193244D01*\nX369205D01*\nY190669D01*\nX370990D01*\nX370992Y189924D01*\nX370639Y189570D01*\nX369144D01*\nX368637Y189469D01*\nX368207Y189181D01*\nX367595Y188570D01*\nX365004D01*\nX364830Y188830D01*\nX364103Y189316D01*\nX363244Y189487D01*\nX362386Y189316D01*\nX361658Y188830D01*\nX361443Y188508D01*\nX360799Y188445D01*\nX355234Y194011D01*\nX355425Y194473D01*\nX357878D01*\nY196744D01*\nX355401D01*\nY197744D01*\nX357878D01*\nY198163D01*\nX358378Y198574D01*\nX358744Y198501D01*\nX359129Y198577D01*\nX359280Y198476D01*\nD02*\nG37*\nG36*\nX179280D02*\nX179787Y198375D01*\nX180323D01*\nY195551D01*\nX181110D01*\nY190669D01*\nX188205D01*\nY193244D01*\nX189205D01*\nY190669D01*\nX190990D01*\nX190992Y189924D01*\nX190639Y189570D01*\nX189144D01*\nX188637Y189469D01*\nX188207Y189181D01*\nX187595Y188570D01*\nX185004D01*\nX184830Y188830D01*\nX184102Y189316D01*\nX183244Y189487D01*\nX182386Y189316D01*\nX181658Y188830D01*\nX181443Y188508D01*\nX180799Y188445D01*\nX175234Y194011D01*\nX175425Y194473D01*\nX177878D01*\nY196744D01*\nX175401D01*\nY197744D01*\nX177878D01*\nY198163D01*\nX178378Y198574D01*\nX178744Y198501D01*\nX179129Y198577D01*\nX179280Y198476D01*\nD02*\nG37*\nG36*\nX390555Y186013D02*\nX390501Y185744D01*\nX390672Y184886D01*\nX390996Y184401D01*\nX386048Y179452D01*\nX385550Y179501D01*\nX385330Y179830D01*\nX384602Y180316D01*\nX384244Y180388D01*\nY178244D01*\nX383744D01*\nY177744D01*\nX381486D01*\nX381261Y177470D01*\nX375293D01*\nX370670Y182093D01*\nY182114D01*\nX370569Y182621D01*\nX370549Y182651D01*\nX370602Y183172D01*\nX371330Y183658D01*\nX371504Y183919D01*\nX381695D01*\nX382307Y183307D01*\nX382737Y183019D01*\nX383244Y182919D01*\nX383751Y183019D01*\nX384181Y183307D01*\nX387275Y186400D01*\nX390237D01*\nX390555Y186013D01*\nD02*\nG37*\nG36*\nX210555D02*\nX210501Y185744D01*\nX210672Y184886D01*\nX210996Y184401D01*\nX206048Y179452D01*\nX205550Y179501D01*\nX205330Y179830D01*\nX204603Y180316D01*\nX204244Y180388D01*\nY178244D01*\nX203744D01*\nY177744D01*\nX201486D01*\nX201261Y177470D01*\nX195293D01*\nX190670Y182093D01*\nY182114D01*\nX190569Y182621D01*\nX190549Y182651D01*\nX190603Y183172D01*\nX191330Y183658D01*\nX191504Y183919D01*\nX201695D01*\nX202307Y183307D01*\nX202737Y183019D01*\nX203244Y182919D01*\nX203751Y183019D01*\nX204181Y183307D01*\nX207275Y186400D01*\nX210237D01*\nX210555Y186013D01*\nD02*\nG37*\nG36*\nX395377Y184207D02*\nX395807Y183920D01*\nX396314Y183819D01*\nX400051D01*\nX400158Y183658D01*\nX400886Y183172D01*\nX401744Y183001D01*\nX402132Y183078D01*\nX402519Y182761D01*\nY180727D01*\nX402132Y180410D01*\nX401744Y180487D01*\nX400886Y180316D01*\nX400158Y179830D01*\nX399984Y179570D01*\nX399244D01*\nX398737Y179469D01*\nX398307Y179181D01*\nX395267Y176142D01*\nX395052Y175819D01*\nX391783D01*\nY173244D01*\nY170669D01*\nX394879D01*\nY164319D01*\nX388284D01*\nY161744D01*\nX387284D01*\nY164319D01*\nX385110D01*\nY161819D01*\nX383705D01*\nY159244D01*\nX382705D01*\nY161819D01*\nX375610D01*\nY160384D01*\nX375307Y160181D01*\nX373307Y158181D01*\nX373020Y157751D01*\nX372919Y157244D01*\nY155789D01*\nX372600Y155343D01*\nX371742Y155172D01*\nX371014Y154686D01*\nX370784Y154342D01*\nX370486Y153986D01*\nX370143Y154215D01*\nX369758Y154472D01*\nX368900Y154643D01*\nX368764Y154616D01*\nX368378Y154933D01*\nY155516D01*\nX364826D01*\nY165669D01*\nX371705D01*\nY168244D01*\nY170819D01*\nX368609D01*\nY179510D01*\nX368830Y179658D01*\nX369309Y179705D01*\nX373807Y175207D01*\nX374237Y174919D01*\nX374744Y174819D01*\nX384614D01*\nX385121Y174919D01*\nX385551Y175207D01*\nX393681Y183337D01*\nX393969Y183767D01*\nX394003Y183939D01*\nX394330Y184158D01*\nX394550Y184487D01*\nX395048Y184536D01*\nX395377Y184207D01*\nD02*\nG37*\nG36*\nX215377D02*\nX215807Y183920D01*\nX216314Y183819D01*\nX220051D01*\nX220158Y183658D01*\nX220886Y183172D01*\nX221744Y183001D01*\nX222132Y183078D01*\nX222519Y182761D01*\nY180727D01*\nX222132Y180410D01*\nX221744Y180487D01*\nX220886Y180316D01*\nX220158Y179830D01*\nX219984Y179570D01*\nX219244D01*\nX218737Y179469D01*\nX218307Y179181D01*\nX215267Y176142D01*\nX215052Y175819D01*\nX211783D01*\nY173244D01*\nY170669D01*\nX214879D01*\nY164319D01*\nX208284D01*\nY161744D01*\nX207284D01*\nY164319D01*\nX205110D01*\nY161819D01*\nX203705D01*\nY159244D01*\nX202705D01*\nY161819D01*\nX195610D01*\nY160384D01*\nX195307Y160181D01*\nX193307Y158181D01*\nX193019Y157751D01*\nX192919Y157244D01*\nY155789D01*\nX192600Y155343D01*\nX191742Y155172D01*\nX191014Y154686D01*\nX190784Y154342D01*\nX190486Y153986D01*\nX190143Y154215D01*\nX189758Y154472D01*\nX188900Y154643D01*\nX188764Y154616D01*\nX188378Y154933D01*\nY155516D01*\nX184826D01*\nY165669D01*\nX191705D01*\nY168244D01*\nY170819D01*\nX188609D01*\nY179510D01*\nX188830Y179658D01*\nX189309Y179705D01*\nX193807Y175207D01*\nX194237Y174919D01*\nX194744Y174819D01*\nX204614D01*\nX205121Y174919D01*\nX205551Y175207D01*\nX213681Y183337D01*\nX213969Y183767D01*\nX214003Y183939D01*\nX214330Y184158D01*\nX214550Y184487D01*\nX215048Y184536D01*\nX215377Y184207D01*\nD02*\nG37*\n%LPC*%\nG36*\nX400244Y460744D02*\nX391244D01*\nY451744D01*\nX400244D01*\nY454207D01*\nY458281D01*\nY460744D01*\nD02*\nG37*\nG36*\nX415744Y461224D02*\nX414455Y461054D01*\nX413254Y460557D01*\nX412223Y459765D01*\nX411432Y458734D01*\nX410934Y457533D01*\nX410764Y456244D01*\nX410934Y454955D01*\nX411432Y453754D01*\nX412223Y452723D01*\nX413254Y451931D01*\nX414455Y451434D01*\nX415744Y451264D01*\nX417033Y451434D01*\nX418234Y451931D01*\nX419265Y452723D01*\nX420056Y453754D01*\nX420554Y454955D01*\nX420724Y456244D01*\nX420554Y457533D01*\nX420056Y458734D01*\nX419265Y459765D01*\nX418234Y460557D01*\nX417033Y461054D01*\nX415744Y461224D01*\nD02*\nG37*\nG36*\nX449791Y456719D02*\nX448245Y456567D01*\nX446758Y456116D01*\nX445387Y455383D01*\nX444185Y454397D01*\nX443200Y453196D01*\nX442467Y451825D01*\nX442016Y450338D01*\nX441863Y448791D01*\nX442016Y447245D01*\nX442467Y445757D01*\nX443200Y444387D01*\nX444185Y443186D01*\nX445387Y442200D01*\nX446758Y441467D01*\nX448245Y441016D01*\nX449791Y440864D01*\nX451338Y441016D01*\nX452825Y441467D01*\nX454196Y442200D01*\nX455397Y443186D01*\nX456383Y444387D01*\nX457116Y445757D01*\nX457567Y447245D01*\nX457719Y448791D01*\nX457567Y450338D01*\nX457116Y451825D01*\nX456383Y453196D01*\nX455397Y454397D01*\nX454196Y455383D01*\nX452825Y456116D01*\nX451338Y456567D01*\nX449791Y456719D01*\nD02*\nG37*\nG36*\nX327744D02*\nX326197Y456567D01*\nX324710Y456116D01*\nX323340Y455383D01*\nX322138Y454397D01*\nX321152Y453196D01*\nX320420Y451825D01*\nX319968Y450338D01*\nX319816Y448791D01*\nX319968Y447245D01*\nX320420Y445757D01*\nX321152Y444387D01*\nX322138Y443186D01*\nX323340Y442200D01*\nX324710Y441467D01*\nX326197Y441016D01*\nX327744Y440864D01*\nX329291Y441016D01*\nX330778Y441467D01*\nX332149Y442200D01*\nX333350Y443186D01*\nX334336Y444387D01*\nX335068Y445757D01*\nX335520Y447245D01*\nX335672Y448791D01*\nX335520Y450338D01*\nX335068Y451825D01*\nX334336Y453196D01*\nX333350Y454397D01*\nX332149Y455383D01*\nX330778Y456116D01*\nX329291Y456567D01*\nX327744Y456719D01*\nD02*\nG37*\nG36*\nX389744Y437244D02*\nX380744D01*\nY428244D01*\nX380744Y428244D01*\nX390100D01*\nY436888D01*\nX389744Y437244D01*\nD02*\nG37*\nG36*\nX395244Y437283D02*\nX394069Y437128D01*\nX392975Y436675D01*\nX392035Y435953D01*\nX391313Y435013D01*\nX390860Y433919D01*\nX390705Y432744D01*\nX390860Y431569D01*\nX391313Y430475D01*\nX392035Y429535D01*\nX392975Y428813D01*\nX394069Y428360D01*\nX395244Y428205D01*\nX396419Y428360D01*\nX397513Y428813D01*\nX398453Y429535D01*\nX399175Y430475D01*\nX399628Y431569D01*\nX399783Y432744D01*\nX399628Y433919D01*\nX399175Y435013D01*\nX398453Y435953D01*\nX397513Y436675D01*\nX396419Y437128D01*\nX395244Y437283D01*\nD02*\nG37*\nG36*\nX316544Y436844D02*\nX307544D01*\nY427844D01*\nX316544D01*\nY436844D01*\nD02*\nG37*\nG36*\nX463500Y425739D02*\nX462325Y425584D01*\nX461231Y425131D01*\nX460291Y424409D01*\nX459569Y423469D01*\nX459116Y422375D01*\nX458961Y421200D01*\nX459116Y420025D01*\nX459569Y418931D01*\nX460291Y417991D01*\nX461231Y417269D01*\nX462325Y416816D01*\nX463500Y416661D01*\nX464675Y416816D01*\nX465769Y417269D01*\nX466709Y417991D01*\nX467431Y418931D01*\nX467884Y420025D01*\nX468039Y421200D01*\nX467884Y422375D01*\nX467431Y423469D01*\nX466709Y424409D01*\nX465769Y425131D01*\nX464675Y425584D01*\nX463500Y425739D01*\nD02*\nG37*\nG36*\nX370388Y413744D02*\nX369744D01*\nY411244D01*\nX370388D01*\nX370316Y411602D01*\nX369957Y412141D01*\nX369870Y412494D01*\nX369957Y412847D01*\nX370316Y413386D01*\nX370388Y413744D01*\nD02*\nG37*\nG36*\nX463500Y415739D02*\nX462325Y415584D01*\nX461231Y415131D01*\nX460291Y414409D01*\nX460212Y414307D01*\nX459569Y413469D01*\nX459116Y412375D01*\nX458961Y411200D01*\nX459116Y410025D01*\nX459569Y408931D01*\nX460291Y407991D01*\nX461231Y407269D01*\nX462325Y406816D01*\nX463500Y406661D01*\nX464675Y406816D01*\nX465769Y407269D01*\nX466709Y407991D01*\nX467431Y408931D01*\nX467884Y410025D01*\nX468039Y411200D01*\nX467884Y412375D01*\nX467431Y413469D01*\nX466788Y414307D01*\nX466709Y414409D01*\nX465769Y415131D01*\nX464675Y415584D01*\nX463500Y415739D01*\nD02*\nG37*\nG36*\nY405739D02*\nX462325Y405584D01*\nX461231Y405131D01*\nX460291Y404409D01*\nX459569Y403469D01*\nX459116Y402375D01*\nX458961Y401200D01*\nX459116Y400025D01*\nX459569Y398931D01*\nX460291Y397991D01*\nX461231Y397269D01*\nX462325Y396816D01*\nX463500Y396661D01*\nX464675Y396816D01*\nX465769Y397269D01*\nX466709Y397991D01*\nX467431Y398931D01*\nX467884Y400025D01*\nX468039Y401200D01*\nX467884Y402375D01*\nX467431Y403469D01*\nX466709Y404409D01*\nX465769Y405131D01*\nX464675Y405584D01*\nX463500Y405739D01*\nD02*\nG37*\nG36*\nX464000Y395673D02*\nY391700D01*\nX467973D01*\nX467884Y392375D01*\nX467431Y393469D01*\nX466709Y394409D01*\nX465769Y395131D01*\nX464675Y395584D01*\nX464000Y395673D01*\nD02*\nG37*\nG36*\nX463000D02*\nX462325Y395584D01*\nX461231Y395131D01*\nX460291Y394409D01*\nX459569Y393469D01*\nX459116Y392375D01*\nX459027Y391700D01*\nX463000D01*\nY395673D01*\nD02*\nG37*\nG36*\nX316000Y387344D02*\nX313508D01*\nY386728D01*\nX314287D01*\nX315011Y386823D01*\nX315685Y387103D01*\nX316000Y387344D01*\nD02*\nG37*\nG36*\nX312508D02*\nX310016D01*\nX310331Y387103D01*\nX311005Y386823D01*\nX311728Y386728D01*\nX312508D01*\nY387344D01*\nD02*\nG37*\nG36*\nX467973Y390700D02*\nX464000D01*\nY386727D01*\nX464675Y386816D01*\nX465769Y387269D01*\nX466709Y387991D01*\nX467431Y388931D01*\nX467884Y390025D01*\nX467973Y390700D01*\nD02*\nG37*\nG36*\nX463000D02*\nX459027D01*\nX459116Y390025D01*\nX459569Y388931D01*\nX460291Y387991D01*\nX461231Y387269D01*\nX462325Y386816D01*\nX463000Y386727D01*\nY390700D01*\nD02*\nG37*\nG36*\nX326655Y387344D02*\nX324531D01*\nY386087D01*\nX326926D01*\nY386177D01*\nX326828Y386926D01*\nX326655Y387344D01*\nD02*\nG37*\nG36*\nX323531D02*\nX321408D01*\nX321235Y386926D01*\nX321136Y386177D01*\nY386087D01*\nX323531D01*\nY387344D01*\nD02*\nG37*\nG36*\nX453400Y387344D02*\nY385700D01*\nX455044D01*\nX454972Y386058D01*\nX454486Y386786D01*\nX453758Y387272D01*\nX453400Y387344D01*\nD02*\nG37*\nG36*\nX452400D02*\nX452042Y387272D01*\nX451314Y386786D01*\nX450828Y386058D01*\nX450756Y385700D01*\nX452400D01*\nY387344D01*\nD02*\nG37*\nG36*\nX455044Y384700D02*\nX453400D01*\nY383056D01*\nX453758Y383128D01*\nX454486Y383614D01*\nX454972Y384342D01*\nX455044Y384700D01*\nD02*\nG37*\nG36*\nX452400D02*\nX450756D01*\nX450828Y384342D01*\nX451314Y383614D01*\nX452042Y383128D01*\nX452400Y383056D01*\nY384700D01*\nD02*\nG37*\nG36*\nX326926Y385087D02*\nX324531D01*\nY382167D01*\nX324781Y382200D01*\nX325479Y382489D01*\nX326078Y382949D01*\nX326538Y383549D01*\nX326828Y384247D01*\nX326926Y384996D01*\nY385087D01*\nD02*\nG37*\nG36*\nX323531D02*\nX321136D01*\nY384996D01*\nX321235Y384247D01*\nX321524Y383549D01*\nX321984Y382949D01*\nX322584Y382489D01*\nX323282Y382200D01*\nX323531Y382167D01*\nY385087D01*\nD02*\nG37*\nG36*\nY369321D02*\nX323282Y369288D01*\nX322584Y368999D01*\nX321984Y368539D01*\nX321524Y367939D01*\nX321235Y367241D01*\nX321136Y366492D01*\nY366401D01*\nX323531D01*\nY369321D01*\nD02*\nG37*\nG36*\nX342425Y364016D02*\nX342063D01*\nX341925Y364016D01*\nX337110D01*\nY362569D01*\nX336360D01*\nX336186Y362830D01*\nX335458Y363316D01*\nX334600Y363487D01*\nX333742Y363316D01*\nX333014Y362830D01*\nX332528Y362102D01*\nX332357Y361244D01*\nX332528Y360386D01*\nX333014Y359658D01*\nX333742Y359172D01*\nX334600Y359001D01*\nX335458Y359172D01*\nX336186Y359658D01*\nX336360Y359918D01*\nX337110D01*\nY358472D01*\nX341925D01*\nX342063Y358472D01*\nX342425D01*\nX342563Y358472D01*\nX344402D01*\nY361244D01*\nY364016D01*\nX342563D01*\nX342425Y364016D01*\nD02*\nG37*\nG36*\nX314287Y364760D02*\nX313508D01*\nY362464D01*\nX317017D01*\nX316988Y362688D01*\nX316708Y363362D01*\nX316264Y363941D01*\nX315685Y364385D01*\nX315011Y364665D01*\nX314287Y364760D01*\nD02*\nG37*\nG36*\nX312508D02*\nX311728D01*\nX311005Y364665D01*\nX310331Y364385D01*\nX309752Y363941D01*\nX309307Y363362D01*\nX309028Y362688D01*\nX308998Y362464D01*\nX312508D01*\nY364760D01*\nD02*\nG37*\nG36*\nX345402Y364016D02*\nY361744D01*\nX347378D01*\nY364016D01*\nX345402D01*\nD02*\nG37*\nG36*\nX317017Y361464D02*\nX313508D01*\nY359169D01*\nX314287D01*\nX315011Y359264D01*\nX315685Y359543D01*\nX316264Y359988D01*\nX316708Y360567D01*\nX316988Y361241D01*\nX317017Y361464D01*\nD02*\nG37*\nG36*\nX312508D02*\nX308998D01*\nX309028Y361241D01*\nX309307Y360567D01*\nX309752Y359988D01*\nX310331Y359543D01*\nX311005Y359264D01*\nX311728Y359169D01*\nX312508D01*\nY361464D01*\nD02*\nG37*\nG36*\nX347378Y360744D02*\nX345402D01*\nY358472D01*\nX347378D01*\nY360744D01*\nD02*\nG37*\nG36*\nX449244Y352488D02*\nY350844D01*\nX450888D01*\nX450816Y351203D01*\nX450330Y351930D01*\nX449603Y352416D01*\nX449244Y352488D01*\nD02*\nG37*\nG36*\nX448244D02*\nX447886Y352416D01*\nX447158Y351930D01*\nX446672Y351203D01*\nX446600Y350844D01*\nX448244D01*\nY352488D01*\nD02*\nG37*\nG36*\nX450888Y349844D02*\nX449244D01*\nY348200D01*\nX449603Y348272D01*\nX450330Y348758D01*\nX450816Y349486D01*\nX450888Y349844D01*\nD02*\nG37*\nG36*\nX448244D02*\nX446600D01*\nX446672Y349486D01*\nX447158Y348758D01*\nX447886Y348272D01*\nX448244Y348200D01*\nY349844D01*\nD02*\nG37*\nG36*\nX463500Y355739D02*\nX462325Y355584D01*\nX461231Y355131D01*\nX460291Y354409D01*\nX459569Y353469D01*\nX459116Y352375D01*\nX458961Y351200D01*\nX459116Y350025D01*\nX459569Y348931D01*\nX460291Y347991D01*\nX461231Y347269D01*\nX462325Y346816D01*\nX463500Y346661D01*\nX464675Y346816D01*\nX465769Y347269D01*\nX466709Y347991D01*\nX467431Y348931D01*\nX467884Y350025D01*\nX468039Y351200D01*\nX467884Y352375D01*\nX467431Y353469D01*\nX466709Y354409D01*\nX465769Y355131D01*\nX464675Y355584D01*\nX463500Y355739D01*\nD02*\nG37*\nG36*\nX468000Y345700D02*\nX464000D01*\nY341700D01*\nX468000D01*\nY345700D01*\nD02*\nG37*\nG36*\nX463000D02*\nX459000D01*\nY341700D01*\nX463000D01*\nY345700D01*\nD02*\nG37*\nG36*\nX468000Y340700D02*\nX464000D01*\nY336700D01*\nX468000D01*\nY340700D01*\nD02*\nG37*\nG36*\nX463000D02*\nX459000D01*\nY336700D01*\nX463000D01*\nY340700D01*\nD02*\nG37*\nG36*\nX423118Y330888D02*\nY329244D01*\nX424762D01*\nX424690Y329603D01*\nX424204Y330330D01*\nX423476Y330816D01*\nX423118Y330888D01*\nD02*\nG37*\nG36*\nX422118D02*\nX421760Y330816D01*\nX421032Y330330D01*\nX420546Y329603D01*\nX420474Y329244D01*\nX422118D01*\nY330888D01*\nD02*\nG37*\nG36*\nX424762Y328244D02*\nX423118D01*\nY326601D01*\nX423476Y326672D01*\nX424204Y327158D01*\nX424690Y327886D01*\nX424762Y328244D01*\nD02*\nG37*\nG36*\nX422118D02*\nX420474D01*\nX420546Y327886D01*\nX421032Y327158D01*\nX421760Y326672D01*\nX422118Y326601D01*\nY328244D01*\nD02*\nG37*\nG36*\nX449791Y334672D02*\nX448245Y334520D01*\nX446758Y334068D01*\nX445387Y333336D01*\nX444185Y332350D01*\nX443200Y331149D01*\nX442467Y329778D01*\nX442016Y328291D01*\nX441863Y326744D01*\nX442016Y325197D01*\nX442467Y323710D01*\nX443200Y322340D01*\nX444185Y321138D01*\nX445387Y320152D01*\nX446758Y319420D01*\nX448245Y318968D01*\nX449791Y318816D01*\nX451338Y318968D01*\nX452825Y319420D01*\nX454196Y320152D01*\nX455397Y321138D01*\nX456383Y322340D01*\nX457116Y323710D01*\nX457567Y325197D01*\nX457719Y326744D01*\nX457567Y328291D01*\nX457116Y329778D01*\nX456383Y331149D01*\nX455397Y332350D01*\nX454196Y333336D01*\nX452825Y334068D01*\nX451338Y334520D01*\nX449791Y334672D01*\nD02*\nG37*\nG36*\nX327744D02*\nX326197Y334520D01*\nX324710Y334068D01*\nX323340Y333336D01*\nX322138Y332350D01*\nX321152Y331149D01*\nX320420Y329778D01*\nX319968Y328291D01*\nX319816Y326744D01*\nX319968Y325197D01*\nX320420Y323710D01*\nX321152Y322340D01*\nX322138Y321138D01*\nX323340Y320152D01*\nX324710Y319420D01*\nX326197Y318968D01*\nX327744Y318816D01*\nX329291Y318968D01*\nX330778Y319420D01*\nX332149Y320152D01*\nX333350Y321138D01*\nX334336Y322340D01*\nX335068Y323710D01*\nX335520Y325197D01*\nX335672Y326744D01*\nX335520Y328291D01*\nX335068Y329778D01*\nX334336Y331149D01*\nX333350Y332350D01*\nX332149Y333336D01*\nX330778Y334068D01*\nX329291Y334520D01*\nX327744Y334672D01*\nD02*\nG37*\nG36*\nX423244Y311088D02*\nY309445D01*\nX424888D01*\nX424816Y309803D01*\nX424330Y310531D01*\nX423602Y311017D01*\nX423244Y311088D01*\nD02*\nG37*\nG36*\nX422244D02*\nX421886Y311017D01*\nX421158Y310531D01*\nX420672Y309803D01*\nX420600Y309445D01*\nX422244D01*\nY311088D01*\nD02*\nG37*\nG36*\nX387244D02*\nY309445D01*\nX388888D01*\nX388816Y309803D01*\nX388330Y310531D01*\nX387602Y311017D01*\nX387244Y311088D01*\nD02*\nG37*\nG36*\nX386244D02*\nX385886Y311017D01*\nX385158Y310531D01*\nX384672Y309803D01*\nX384600Y309445D01*\nX386244D01*\nY311088D01*\nD02*\nG37*\nG36*\nX332244Y310888D02*\nY309244D01*\nX333888D01*\nX333816Y309602D01*\nX333330Y310330D01*\nX332603Y310816D01*\nX332244Y310888D01*\nD02*\nG37*\nG36*\nX331244D02*\nX330886Y310816D01*\nX330158Y310330D01*\nX329672Y309602D01*\nX329601Y309244D01*\nX331244D01*\nY310888D01*\nD02*\nG37*\nG36*\nX424888Y308445D02*\nX423244D01*\nY306801D01*\nX423602Y306872D01*\nX424330Y307359D01*\nX424816Y308086D01*\nX424888Y308445D01*\nD02*\nG37*\nG36*\nX422244D02*\nX420600D01*\nX420672Y308086D01*\nX421158Y307359D01*\nX421886Y306872D01*\nX422244Y306801D01*\nY308445D01*\nD02*\nG37*\nG36*\nX388888D02*\nX387244D01*\nY306801D01*\nX387602Y306872D01*\nX388330Y307359D01*\nX388816Y308086D01*\nX388888Y308445D01*\nD02*\nG37*\nG36*\nX386244D02*\nX384600D01*\nX384672Y308086D01*\nX385158Y307359D01*\nX385886Y306872D01*\nX386244Y306801D01*\nY308445D01*\nD02*\nG37*\nG36*\nX220244Y460744D02*\nX211244D01*\nY451744D01*\nX220244D01*\nY454207D01*\nY458281D01*\nY460744D01*\nD02*\nG37*\nG36*\nX235744Y461224D02*\nX234455Y461054D01*\nX233254Y460557D01*\nX232223Y459765D01*\nX231432Y458734D01*\nX230934Y457533D01*\nX230764Y456244D01*\nX230934Y454955D01*\nX231432Y453754D01*\nX232223Y452723D01*\nX233254Y451931D01*\nX234455Y451434D01*\nX235744Y451264D01*\nX237033Y451434D01*\nX238234Y451931D01*\nX239265Y452723D01*\nX240056Y453754D01*\nX240554Y454955D01*\nX240724Y456244D01*\nX240554Y457533D01*\nX240056Y458734D01*\nX239265Y459765D01*\nX238234Y460557D01*\nX237033Y461054D01*\nX235744Y461224D01*\nD02*\nG37*\nG36*\nX269791Y456719D02*\nX268245Y456567D01*\nX266757Y456116D01*\nX265387Y455383D01*\nX264186Y454397D01*\nX263200Y453196D01*\nX262467Y451825D01*\nX262016Y450338D01*\nX261863Y448791D01*\nX262016Y447245D01*\nX262467Y445757D01*\nX263200Y444387D01*\nX264186Y443186D01*\nX265387Y442200D01*\nX266757Y441467D01*\nX268245Y441016D01*\nX269791Y440864D01*\nX271338Y441016D01*\nX272825Y441467D01*\nX274196Y442200D01*\nX275397Y443186D01*\nX276383Y444387D01*\nX277116Y445757D01*\nX277567Y447245D01*\nX277719Y448791D01*\nX277567Y450338D01*\nX277116Y451825D01*\nX276383Y453196D01*\nX275397Y454397D01*\nX274196Y455383D01*\nX272825Y456116D01*\nX271338Y456567D01*\nX269791Y456719D01*\nD02*\nG37*\nG36*\nX147744D02*\nX146197Y456567D01*\nX144710Y456116D01*\nX143340Y455383D01*\nX142138Y454397D01*\nX141152Y453196D01*\nX140419Y451825D01*\nX139968Y450338D01*\nX139816Y448791D01*\nX139968Y447245D01*\nX140419Y445757D01*\nX141152Y444387D01*\nX142138Y443186D01*\nX143340Y442200D01*\nX144710Y441467D01*\nX146197Y441016D01*\nX147744Y440864D01*\nX149291Y441016D01*\nX150778Y441467D01*\nX152148Y442200D01*\nX153350Y443186D01*\nX154336Y444387D01*\nX155069Y445757D01*\nX155520Y447245D01*\nX155672Y448791D01*\nX155520Y450338D01*\nX155069Y451825D01*\nX154336Y453196D01*\nX153350Y454397D01*\nX152148Y455383D01*\nX150778Y456116D01*\nX149291Y456567D01*\nX147744Y456719D01*\nD02*\nG37*\nG36*\nX209744Y437244D02*\nX200744D01*\nY428244D01*\nX200744Y428244D01*\nX210100D01*\nY436888D01*\nX209744Y437244D01*\nD02*\nG37*\nG36*\nX215244Y437283D02*\nX214069Y437128D01*\nX212975Y436675D01*\nX212035Y435953D01*\nX211313Y435013D01*\nX210860Y433919D01*\nX210705Y432744D01*\nX210860Y431569D01*\nX211313Y430475D01*\nX212035Y429535D01*\nX212975Y428813D01*\nX214069Y428360D01*\nX215244Y428205D01*\nX216419Y428360D01*\nX217513Y428813D01*\nX218453Y429535D01*\nX219175Y430475D01*\nX219628Y431569D01*\nX219783Y432744D01*\nX219628Y433919D01*\nX219175Y435013D01*\nX218453Y435953D01*\nX217513Y436675D01*\nX216419Y437128D01*\nX215244Y437283D01*\nD02*\nG37*\nG36*\nX136544Y436844D02*\nX127544D01*\nY427844D01*\nX136544D01*\nY436844D01*\nD02*\nG37*\nG36*\nX283500Y425739D02*\nX282325Y425584D01*\nX281231Y425131D01*\nX280291Y424409D01*\nX279569Y423469D01*\nX279116Y422375D01*\nX278961Y421200D01*\nX279116Y420025D01*\nX279569Y418931D01*\nX280291Y417991D01*\nX281231Y417269D01*\nX282325Y416816D01*\nX283500Y416661D01*\nX284675Y416816D01*\nX285769Y417269D01*\nX286709Y417991D01*\nX287431Y418931D01*\nX287884Y420025D01*\nX288039Y421200D01*\nX287884Y422375D01*\nX287431Y423469D01*\nX286709Y424409D01*\nX285769Y425131D01*\nX284675Y425584D01*\nX283500Y425739D01*\nD02*\nG37*\nG36*\nX190388Y413744D02*\nX189744D01*\nY411244D01*\nX190388D01*\nX190316Y411602D01*\nX189957Y412141D01*\nX189870Y412494D01*\nX189957Y412847D01*\nX190316Y413386D01*\nX190388Y413744D01*\nD02*\nG37*\nG36*\nX283500Y415739D02*\nX282325Y415584D01*\nX281231Y415131D01*\nX280291Y414409D01*\nX280212Y414307D01*\nX279569Y413469D01*\nX279116Y412375D01*\nX278961Y411200D01*\nX279116Y410025D01*\nX279569Y408931D01*\nX280291Y407991D01*\nX281231Y407269D01*\nX282325Y406816D01*\nX283500Y406661D01*\nX284675Y406816D01*\nX285769Y407269D01*\nX286709Y407991D01*\nX287431Y408931D01*\nX287884Y410025D01*\nX288039Y411200D01*\nX287884Y412375D01*\nX287431Y413469D01*\nX286788Y414307D01*\nX286709Y414409D01*\nX285769Y415131D01*\nX284675Y415584D01*\nX283500Y415739D01*\nD02*\nG37*\nG36*\nY405739D02*\nX282325Y405584D01*\nX281231Y405131D01*\nX280291Y404409D01*\nX279569Y403469D01*\nX279116Y402375D01*\nX278961Y401200D01*\nX279116Y400025D01*\nX279569Y398931D01*\nX280291Y397991D01*\nX281231Y397269D01*\nX282325Y396816D01*\nX283500Y396661D01*\nX284675Y396816D01*\nX285769Y397269D01*\nX286709Y397991D01*\nX287431Y398931D01*\nX287884Y400025D01*\nX288039Y401200D01*\nX287884Y402375D01*\nX287431Y403469D01*\nX286709Y404409D01*\nX285769Y405131D01*\nX284675Y405584D01*\nX283500Y405739D01*\nD02*\nG37*\nG36*\nX284000Y395673D02*\nY391700D01*\nX287973D01*\nX287884Y392375D01*\nX287431Y393469D01*\nX286709Y394409D01*\nX285769Y395131D01*\nX284675Y395584D01*\nX284000Y395673D01*\nD02*\nG37*\nG36*\nX283000D02*\nX282325Y395584D01*\nX281231Y395131D01*\nX280291Y394409D01*\nX279569Y393469D01*\nX279116Y392375D01*\nX279027Y391700D01*\nX283000D01*\nY395673D01*\nD02*\nG37*\nG36*\nX136000Y387344D02*\nX133508D01*\nY386728D01*\nX134287D01*\nX135011Y386823D01*\nX135685Y387103D01*\nX136000Y387344D01*\nD02*\nG37*\nG36*\nX132508D02*\nX130016D01*\nX130331Y387103D01*\nX131005Y386823D01*\nX131728Y386728D01*\nX132508D01*\nY387344D01*\nD02*\nG37*\nG36*\nX287973Y390700D02*\nX284000D01*\nY386727D01*\nX284675Y386816D01*\nX285769Y387269D01*\nX286709Y387991D01*\nX287431Y388931D01*\nX287884Y390025D01*\nX287973Y390700D01*\nD02*\nG37*\nG36*\nX283000D02*\nX279027D01*\nX279116Y390025D01*\nX279569Y388931D01*\nX280291Y387991D01*\nX281231Y387269D01*\nX282325Y386816D01*\nX283000Y386727D01*\nY390700D01*\nD02*\nG37*\nG36*\nX146655Y387344D02*\nX144531D01*\nY386087D01*\nX146926D01*\nY386177D01*\nX146828Y386926D01*\nX146655Y387344D01*\nD02*\nG37*\nG36*\nX143531D02*\nX141408D01*\nX141235Y386926D01*\nX141137Y386177D01*\nY386087D01*\nX143531D01*\nY387344D01*\nD02*\nG37*\nG36*\nX273400Y387344D02*\nY385700D01*\nX275044D01*\nX274972Y386058D01*\nX274486Y386786D01*\nX273758Y387272D01*\nX273400Y387344D01*\nD02*\nG37*\nG36*\nX272400D02*\nX272042Y387272D01*\nX271314Y386786D01*\nX270828Y386058D01*\nX270756Y385700D01*\nX272400D01*\nY387344D01*\nD02*\nG37*\nG36*\nX275044Y384700D02*\nX273400D01*\nY383056D01*\nX273758Y383128D01*\nX274486Y383614D01*\nX274972Y384342D01*\nX275044Y384700D01*\nD02*\nG37*\nG36*\nX272400D02*\nX270756D01*\nX270828Y384342D01*\nX271314Y383614D01*\nX272042Y383128D01*\nX272400Y383056D01*\nY384700D01*\nD02*\nG37*\nG36*\nX146926Y385087D02*\nX144531D01*\nY382167D01*\nX144781Y382200D01*\nX145479Y382489D01*\nX146078Y382949D01*\nX146538Y383549D01*\nX146828Y384247D01*\nX146926Y384996D01*\nY385087D01*\nD02*\nG37*\nG36*\nX143531D02*\nX141137D01*\nY384996D01*\nX141235Y384247D01*\nX141524Y383549D01*\nX141984Y382949D01*\nX142584Y382489D01*\nX143282Y382200D01*\nX143531Y382167D01*\nY385087D01*\nD02*\nG37*\nG36*\nY369321D02*\nX143282Y369288D01*\nX142584Y368999D01*\nX141984Y368539D01*\nX141524Y367939D01*\nX141235Y367241D01*\nX141137Y366492D01*\nY366401D01*\nX143531D01*\nY369321D01*\nD02*\nG37*\nG36*\nX162425Y364016D02*\nX162063D01*\nX161925Y364016D01*\nX157110D01*\nY362569D01*\nX156360D01*\nX156186Y362830D01*\nX155458Y363316D01*\nX154600Y363487D01*\nX153742Y363316D01*\nX153014Y362830D01*\nX152528Y362102D01*\nX152357Y361244D01*\nX152528Y360386D01*\nX153014Y359658D01*\nX153742Y359172D01*\nX154600Y359001D01*\nX155458Y359172D01*\nX156186Y359658D01*\nX156360Y359918D01*\nX157110D01*\nY358472D01*\nX161925D01*\nX162063Y358472D01*\nX162425D01*\nX162563Y358472D01*\nX164402D01*\nY361244D01*\nY364016D01*\nX162563D01*\nX162425Y364016D01*\nD02*\nG37*\nG36*\nX134287Y364760D02*\nX133508D01*\nY362464D01*\nX137017D01*\nX136988Y362688D01*\nX136708Y363362D01*\nX136264Y363941D01*\nX135685Y364385D01*\nX135011Y364665D01*\nX134287Y364760D01*\nD02*\nG37*\nG36*\nX132508D02*\nX131728D01*\nX131005Y364665D01*\nX130331Y364385D01*\nX129752Y363941D01*\nX129307Y363362D01*\nX129028Y362688D01*\nX128998Y362464D01*\nX132508D01*\nY364760D01*\nD02*\nG37*\nG36*\nX165402Y364016D02*\nY361744D01*\nX167378D01*\nY364016D01*\nX165402D01*\nD02*\nG37*\nG36*\nX137017Y361464D02*\nX133508D01*\nY359169D01*\nX134287D01*\nX135011Y359264D01*\nX135685Y359543D01*\nX136264Y359988D01*\nX136708Y360567D01*\nX136988Y361241D01*\nX137017Y361464D01*\nD02*\nG37*\nG36*\nX132508D02*\nX128998D01*\nX129028Y361241D01*\nX129307Y360567D01*\nX129752Y359988D01*\nX130331Y359543D01*\nX131005Y359264D01*\nX131728Y359169D01*\nX132508D01*\nY361464D01*\nD02*\nG37*\nG36*\nX167378Y360744D02*\nX165402D01*\nY358472D01*\nX167378D01*\nY360744D01*\nD02*\nG37*\nG36*\nX269244Y352488D02*\nY350844D01*\nX270888D01*\nX270816Y351203D01*\nX270330Y351930D01*\nX269602Y352416D01*\nX269244Y352488D01*\nD02*\nG37*\nG36*\nX268244D02*\nX267886Y352416D01*\nX267158Y351930D01*\nX266672Y351203D01*\nX266600Y350844D01*\nX268244D01*\nY352488D01*\nD02*\nG37*\nG36*\nX270888Y349844D02*\nX269244D01*\nY348200D01*\nX269602Y348272D01*\nX270330Y348758D01*\nX270816Y349486D01*\nX270888Y349844D01*\nD02*\nG37*\nG36*\nX268244D02*\nX266600D01*\nX266672Y349486D01*\nX267158Y348758D01*\nX267886Y348272D01*\nX268244Y348200D01*\nY349844D01*\nD02*\nG37*\nG36*\nX283500Y355739D02*\nX282325Y355584D01*\nX281231Y355131D01*\nX280291Y354409D01*\nX279569Y353469D01*\nX279116Y352375D01*\nX278961Y351200D01*\nX279116Y350025D01*\nX279569Y348931D01*\nX280291Y347991D01*\nX281231Y347269D01*\nX282325Y346816D01*\nX283500Y346661D01*\nX284675Y346816D01*\nX285769Y347269D01*\nX286709Y347991D01*\nX287431Y348931D01*\nX287884Y350025D01*\nX288039Y351200D01*\nX287884Y352375D01*\nX287431Y353469D01*\nX286709Y354409D01*\nX285769Y355131D01*\nX284675Y355584D01*\nX283500Y355739D01*\nD02*\nG37*\nG36*\nX288000Y345700D02*\nX284000D01*\nY341700D01*\nX288000D01*\nY345700D01*\nD02*\nG37*\nG36*\nX283000D02*\nX279000D01*\nY341700D01*\nX283000D01*\nY345700D01*\nD02*\nG37*\nG36*\nX288000Y340700D02*\nX284000D01*\nY336700D01*\nX288000D01*\nY340700D01*\nD02*\nG37*\nG36*\nX283000D02*\nX279000D01*\nY336700D01*\nX283000D01*\nY340700D01*\nD02*\nG37*\nG36*\nX243118Y330888D02*\nY329244D01*\nX244762D01*\nX244690Y329603D01*\nX244204Y330330D01*\nX243476Y330816D01*\nX243118Y330888D01*\nD02*\nG37*\nG36*\nX242118D02*\nX241760Y330816D01*\nX241032Y330330D01*\nX240546Y329603D01*\nX240474Y329244D01*\nX242118D01*\nY330888D01*\nD02*\nG37*\nG36*\nX244762Y328244D02*\nX243118D01*\nY326601D01*\nX243476Y326672D01*\nX244204Y327158D01*\nX244690Y327886D01*\nX244762Y328244D01*\nD02*\nG37*\nG36*\nX242118D02*\nX240474D01*\nX240546Y327886D01*\nX241032Y327158D01*\nX241760Y326672D01*\nX242118Y326601D01*\nY328244D01*\nD02*\nG37*\nG36*\nX269791Y334672D02*\nX268245Y334520D01*\nX266757Y334068D01*\nX265387Y333336D01*\nX264186Y332350D01*\nX263200Y331149D01*\nX262467Y329778D01*\nX262016Y328291D01*\nX261863Y326744D01*\nX262016Y325197D01*\nX262467Y323710D01*\nX263200Y322340D01*\nX264186Y321138D01*\nX265387Y320152D01*\nX266757Y319420D01*\nX268245Y318968D01*\nX269791Y318816D01*\nX271338Y318968D01*\nX272825Y319420D01*\nX274196Y320152D01*\nX275397Y321138D01*\nX276383Y322340D01*\nX277116Y323710D01*\nX277567Y325197D01*\nX277719Y326744D01*\nX277567Y328291D01*\nX277116Y329778D01*\nX276383Y331149D01*\nX275397Y332350D01*\nX274196Y333336D01*\nX272825Y334068D01*\nX271338Y334520D01*\nX269791Y334672D01*\nD02*\nG37*\nG36*\nX147744D02*\nX146197Y334520D01*\nX144710Y334068D01*\nX143340Y333336D01*\nX142138Y332350D01*\nX141152Y331149D01*\nX140419Y329778D01*\nX139968Y328291D01*\nX139816Y326744D01*\nX139968Y325197D01*\nX140419Y323710D01*\nX141152Y322340D01*\nX142138Y321138D01*\nX143340Y320152D01*\nX144710Y319420D01*\nX146197Y318968D01*\nX147744Y318816D01*\nX149291Y318968D01*\nX150778Y319420D01*\nX152148Y320152D01*\nX153350Y321138D01*\nX154336Y322340D01*\nX155069Y323710D01*\nX155520Y325197D01*\nX155672Y326744D01*\nX155520Y328291D01*\nX155069Y329778D01*\nX154336Y331149D01*\nX153350Y332350D01*\nX152148Y333336D01*\nX150778Y334068D01*\nX149291Y334520D01*\nX147744Y334672D01*\nD02*\nG37*\nG36*\nX243244Y311088D02*\nY309445D01*\nX244888D01*\nX244816Y309803D01*\nX244330Y310531D01*\nX243602Y311017D01*\nX243244Y311088D01*\nD02*\nG37*\nG36*\nX242244D02*\nX241886Y311017D01*\nX241158Y310531D01*\nX240672Y309803D01*\nX240600Y309445D01*\nX242244D01*\nY311088D01*\nD02*\nG37*\nG36*\nX207244D02*\nY309445D01*\nX208888D01*\nX208816Y309803D01*\nX208330Y310531D01*\nX207603Y311017D01*\nX207244Y311088D01*\nD02*\nG37*\nG36*\nX206244D02*\nX205886Y311017D01*\nX205158Y310531D01*\nX204672Y309803D01*\nX204601Y309445D01*\nX206244D01*\nY311088D01*\nD02*\nG37*\nG36*\nX152244Y310888D02*\nY309244D01*\nX153888D01*\nX153816Y309602D01*\nX153330Y310330D01*\nX152603Y310816D01*\nX152244Y310888D01*\nD02*\nG37*\nG36*\nX151244D02*\nX150886Y310816D01*\nX150158Y310330D01*\nX149672Y309602D01*\nX149601Y309244D01*\nX151244D01*\nY310888D01*\nD02*\nG37*\nG36*\nX244888Y308445D02*\nX243244D01*\nY306801D01*\nX243602Y306872D01*\nX244330Y307359D01*\nX244816Y308086D01*\nX244888Y308445D01*\nD02*\nG37*\nG36*\nX242244D02*\nX240600D01*\nX240672Y308086D01*\nX241158Y307359D01*\nX241886Y306872D01*\nX242244Y306801D01*\nY308445D01*\nD02*\nG37*\nG36*\nX208888D02*\nX207244D01*\nY306801D01*\nX207603Y306872D01*\nX208330Y307359D01*\nX208816Y308086D01*\nX208888Y308445D01*\nD02*\nG37*\nG36*\nX206244D02*\nX204601D01*\nX204672Y308086D01*\nX205158Y307359D01*\nX205886Y306872D01*\nX206244Y306801D01*\nY308445D01*\nD02*\nG37*\nG36*\nX421319Y412878D02*\nX419244D01*\nY410705D01*\nX421319D01*\nY412878D01*\nD02*\nG37*\nG36*\nX418244D02*\nX416169D01*\nY410705D01*\nX418244D01*\nY412878D01*\nD02*\nG37*\nG36*\nX424244Y412378D02*\nX422169D01*\nY410205D01*\nX424244D01*\nY412378D01*\nD02*\nG37*\nG36*\nX404900Y409388D02*\nY407744D01*\nX406544D01*\nX406472Y408102D01*\nX405986Y408830D01*\nX405258Y409316D01*\nX404900Y409388D01*\nD02*\nG37*\nG36*\nX403900D02*\nX403542Y409316D01*\nX402814Y408830D01*\nX402328Y408102D01*\nX402256Y407744D01*\nX403900D01*\nY409388D01*\nD02*\nG37*\nG36*\nX406544Y406744D02*\nX404900D01*\nY405100D01*\nX405258Y405172D01*\nX405986Y405658D01*\nX406472Y406386D01*\nX406544Y406744D01*\nD02*\nG37*\nG36*\nX241319Y412878D02*\nX239244D01*\nY410705D01*\nX241319D01*\nY412878D01*\nD02*\nG37*\nG36*\nX238244D02*\nX236169D01*\nY410705D01*\nX238244D01*\nY412878D01*\nD02*\nG37*\nG36*\nX244244Y412378D02*\nX242169D01*\nY410205D01*\nX244244D01*\nY412378D01*\nD02*\nG37*\nG36*\nX224900Y409388D02*\nY407744D01*\nX226544D01*\nX226472Y408102D01*\nX225986Y408830D01*\nX225258Y409316D01*\nX224900Y409388D01*\nD02*\nG37*\nG36*\nX223900D02*\nX223542Y409316D01*\nX222814Y408830D01*\nX222328Y408102D01*\nX222256Y407744D01*\nX223900D01*\nY409388D01*\nD02*\nG37*\nG36*\nX226544Y406744D02*\nX224900D01*\nY405100D01*\nX225258Y405172D01*\nX225986Y405658D01*\nX226472Y406386D01*\nX226544Y406744D01*\nD02*\nG37*\nG36*\nX433244Y406783D02*\nX431169D01*\nY404610D01*\nX433244D01*\nY406783D01*\nD02*\nG37*\nG36*\nX253244D02*\nX251169D01*\nY404610D01*\nX253244D01*\nY406783D01*\nD02*\nG37*\nG36*\nX383244Y360388D02*\nX382886Y360316D01*\nX382158Y359830D01*\nX381672Y359103D01*\nX381600Y358744D01*\nX383244D01*\nY360388D01*\nD02*\nG37*\nG36*\nX203244D02*\nX202886Y360316D01*\nX202158Y359830D01*\nX201672Y359103D01*\nX201601Y358744D01*\nX203244D01*\nY360388D01*\nD02*\nG37*\nG36*\nX390783Y355819D02*\nX388610D01*\nY353744D01*\nX390783D01*\nY355819D01*\nD02*\nG37*\nG36*\nY352744D02*\nX388610D01*\nY350669D01*\nX390783D01*\nY352744D01*\nD02*\nG37*\nG36*\nX374878Y350819D02*\nX372705D01*\nY348744D01*\nX374878D01*\nY350819D01*\nD02*\nG37*\nG36*\nX382900Y347388D02*\nY345744D01*\nX384544D01*\nX384472Y346102D01*\nX383986Y346830D01*\nX383258Y347316D01*\nX382900Y347388D01*\nD02*\nG37*\nG36*\nX381900D02*\nX381541Y347316D01*\nX380814Y346830D01*\nX380328Y346102D01*\nX380256Y345744D01*\nX381900D01*\nY347388D01*\nD02*\nG37*\nG36*\nX374878Y347744D02*\nX372705D01*\nY345669D01*\nX374878D01*\nY347744D01*\nD02*\nG37*\nG36*\nX384544Y344744D02*\nX382900D01*\nY343101D01*\nX383258Y343172D01*\nX383986Y343658D01*\nX384472Y344386D01*\nX384544Y344744D01*\nD02*\nG37*\nG36*\nX381900D02*\nX380256D01*\nX380328Y344386D01*\nX380814Y343658D01*\nX381541Y343172D01*\nX381900Y343101D01*\nY344744D01*\nD02*\nG37*\nG36*\nX210783Y355819D02*\nX208610D01*\nY353744D01*\nX210783D01*\nY355819D01*\nD02*\nG37*\nG36*\nY352744D02*\nX208610D01*\nY350669D01*\nX210783D01*\nY352744D01*\nD02*\nG37*\nG36*\nX194878Y350819D02*\nX192705D01*\nY348744D01*\nX194878D01*\nY350819D01*\nD02*\nG37*\nG36*\nX202900Y347388D02*\nY345744D01*\nX204544D01*\nX204472Y346102D01*\nX203986Y346830D01*\nX203258Y347316D01*\nX202900Y347388D01*\nD02*\nG37*\nG36*\nX201900D02*\nX201541Y347316D01*\nX200814Y346830D01*\nX200328Y346102D01*\nX200256Y345744D01*\nX201900D01*\nY347388D01*\nD02*\nG37*\nG36*\nX194878Y347744D02*\nX192705D01*\nY345669D01*\nX194878D01*\nY347744D01*\nD02*\nG37*\nG36*\nX204544Y344744D02*\nX202900D01*\nY343101D01*\nX203258Y343172D01*\nX203986Y343658D01*\nX204472Y344386D01*\nX204544Y344744D01*\nD02*\nG37*\nG36*\nX201900D02*\nX200256D01*\nX200328Y344386D01*\nX200814Y343658D01*\nX201541Y343172D01*\nX201900Y343101D01*\nY344744D01*\nD02*\nG37*\nG36*\nX400244Y280744D02*\nX391244D01*\nY271744D01*\nX400244D01*\nY274207D01*\nY278281D01*\nY280744D01*\nD02*\nG37*\nG36*\nX415744Y281224D02*\nX414455Y281054D01*\nX413254Y280557D01*\nX412223Y279765D01*\nX411432Y278734D01*\nX410934Y277533D01*\nX410764Y276244D01*\nX410934Y274955D01*\nX411432Y273754D01*\nX412223Y272723D01*\nX413254Y271932D01*\nX414455Y271434D01*\nX415744Y271264D01*\nX417033Y271434D01*\nX418234Y271932D01*\nX419265Y272723D01*\nX420056Y273754D01*\nX420554Y274955D01*\nX420724Y276244D01*\nX420554Y277533D01*\nX420056Y278734D01*\nX419265Y279765D01*\nX418234Y280557D01*\nX417033Y281054D01*\nX415744Y281224D01*\nD02*\nG37*\nG36*\nX449791Y276719D02*\nX448245Y276567D01*\nX446758Y276116D01*\nX445387Y275383D01*\nX444185Y274397D01*\nX443200Y273196D01*\nX442467Y271825D01*\nX442016Y270338D01*\nX441863Y268791D01*\nX442016Y267245D01*\nX442467Y265757D01*\nX443200Y264387D01*\nX444185Y263186D01*\nX445387Y262200D01*\nX446758Y261467D01*\nX448245Y261016D01*\nX449791Y260863D01*\nX451338Y261016D01*\nX452825Y261467D01*\nX454196Y262200D01*\nX455397Y263186D01*\nX456383Y264387D01*\nX457116Y265757D01*\nX457567Y267245D01*\nX457719Y268791D01*\nX457567Y270338D01*\nX457116Y271825D01*\nX456383Y273196D01*\nX455397Y274397D01*\nX454196Y275383D01*\nX452825Y276116D01*\nX451338Y276567D01*\nX449791Y276719D01*\nD02*\nG37*\nG36*\nX327744D02*\nX326197Y276567D01*\nX324710Y276116D01*\nX323340Y275383D01*\nX322138Y274397D01*\nX321152Y273196D01*\nX320420Y271825D01*\nX319968Y270338D01*\nX319816Y268791D01*\nX319968Y267245D01*\nX320420Y265757D01*\nX321152Y264387D01*\nX322138Y263186D01*\nX323340Y262200D01*\nX324710Y261467D01*\nX326197Y261016D01*\nX327744Y260863D01*\nX329291Y261016D01*\nX330778Y261467D01*\nX332149Y262200D01*\nX333350Y263186D01*\nX334336Y264387D01*\nX335068Y265757D01*\nX335520Y267245D01*\nX335672Y268791D01*\nX335520Y270338D01*\nX335068Y271825D01*\nX334336Y273196D01*\nX333350Y274397D01*\nX332149Y275383D01*\nX330778Y276116D01*\nX329291Y276567D01*\nX327744Y276719D01*\nD02*\nG37*\nG36*\nX389744Y257244D02*\nX380744D01*\nY248244D01*\nX380744Y248244D01*\nX390100D01*\nY256888D01*\nX389744Y257244D01*\nD02*\nG37*\nG36*\nX395244Y257283D02*\nX394069Y257128D01*\nX392975Y256675D01*\nX392035Y255953D01*\nX391313Y255013D01*\nX390860Y253919D01*\nX390705Y252744D01*\nX390860Y251569D01*\nX391313Y250475D01*\nX392035Y249535D01*\nX392975Y248813D01*\nX394069Y248360D01*\nX395244Y248205D01*\nX396419Y248360D01*\nX397513Y248813D01*\nX398453Y249535D01*\nX399175Y250475D01*\nX399628Y251569D01*\nX399783Y252744D01*\nX399628Y253919D01*\nX399175Y255013D01*\nX398453Y255953D01*\nX397513Y256675D01*\nX396419Y257128D01*\nX395244Y257283D01*\nD02*\nG37*\nG36*\nX316544Y256844D02*\nX307544D01*\nY247844D01*\nX316544D01*\nY256844D01*\nD02*\nG37*\nG36*\nX463500Y245739D02*\nX462325Y245584D01*\nX461231Y245131D01*\nX460291Y244409D01*\nX459569Y243469D01*\nX459116Y242375D01*\nX458961Y241200D01*\nX459116Y240025D01*\nX459569Y238931D01*\nX460291Y237991D01*\nX461231Y237269D01*\nX462325Y236816D01*\nX463500Y236661D01*\nX464675Y236816D01*\nX465769Y237269D01*\nX466709Y237991D01*\nX467431Y238931D01*\nX467884Y240025D01*\nX468039Y241200D01*\nX467884Y242375D01*\nX467431Y243469D01*\nX466709Y244409D01*\nX465769Y245131D01*\nX464675Y245584D01*\nX463500Y245739D01*\nD02*\nG37*\nG36*\nX370388Y233744D02*\nX369744D01*\nY231244D01*\nX370388D01*\nX370316Y231603D01*\nX369957Y232141D01*\nX369870Y232494D01*\nX369957Y232847D01*\nX370316Y233386D01*\nX370388Y233744D01*\nD02*\nG37*\nG36*\nX463500Y235739D02*\nX462325Y235584D01*\nX461231Y235131D01*\nX460291Y234409D01*\nX460212Y234307D01*\nX459569Y233469D01*\nX459116Y232375D01*\nX458961Y231200D01*\nX459116Y230025D01*\nX459569Y228931D01*\nX460291Y227991D01*\nX461231Y227269D01*\nX462325Y226816D01*\nX463500Y226661D01*\nX464675Y226816D01*\nX465769Y227269D01*\nX466709Y227991D01*\nX467431Y228931D01*\nX467884Y230025D01*\nX468039Y231200D01*\nX467884Y232375D01*\nX467431Y233469D01*\nX466788Y234307D01*\nX466709Y234409D01*\nX465769Y235131D01*\nX464675Y235584D01*\nX463500Y235739D01*\nD02*\nG37*\nG36*\nY225739D02*\nX462325Y225584D01*\nX461231Y225131D01*\nX460291Y224409D01*\nX459569Y223469D01*\nX459116Y222375D01*\nX458961Y221200D01*\nX459116Y220025D01*\nX459569Y218931D01*\nX460291Y217991D01*\nX461231Y217269D01*\nX462325Y216816D01*\nX463500Y216661D01*\nX464675Y216816D01*\nX465769Y217269D01*\nX466709Y217991D01*\nX467431Y218931D01*\nX467884Y220025D01*\nX468039Y221200D01*\nX467884Y222375D01*\nX467431Y223469D01*\nX466709Y224409D01*\nX465769Y225131D01*\nX464675Y225584D01*\nX463500Y225739D01*\nD02*\nG37*\nG36*\nX464000Y215673D02*\nY211700D01*\nX467973D01*\nX467884Y212375D01*\nX467431Y213469D01*\nX466709Y214409D01*\nX465769Y215131D01*\nX464675Y215584D01*\nX464000Y215673D01*\nD02*\nG37*\nG36*\nX463000D02*\nX462325Y215584D01*\nX461231Y215131D01*\nX460291Y214409D01*\nX459569Y213469D01*\nX459116Y212375D01*\nX459027Y211700D01*\nX463000D01*\nY215673D01*\nD02*\nG37*\nG36*\nX316000Y207344D02*\nX313508D01*\nY206728D01*\nX314287D01*\nX315011Y206823D01*\nX315685Y207103D01*\nX316000Y207344D01*\nD02*\nG37*\nG36*\nX312508D02*\nX310016D01*\nX310331Y207103D01*\nX311005Y206823D01*\nX311728Y206728D01*\nX312508D01*\nY207344D01*\nD02*\nG37*\nG36*\nX467973Y210700D02*\nX464000D01*\nY206727D01*\nX464675Y206816D01*\nX465769Y207269D01*\nX466709Y207991D01*\nX467431Y208931D01*\nX467884Y210025D01*\nX467973Y210700D01*\nD02*\nG37*\nG36*\nX463000D02*\nX459027D01*\nX459116Y210025D01*\nX459569Y208931D01*\nX460291Y207991D01*\nX461231Y207269D01*\nX462325Y206816D01*\nX463000Y206727D01*\nY210700D01*\nD02*\nG37*\nG36*\nX326655Y207344D02*\nX324531D01*\nY206087D01*\nX326926D01*\nY206177D01*\nX326828Y206926D01*\nX326655Y207344D01*\nD02*\nG37*\nG36*\nX323531D02*\nX321408D01*\nX321235Y206926D01*\nX321136Y206177D01*\nY206087D01*\nX323531D01*\nY207344D01*\nD02*\nG37*\nG36*\nX453400Y207344D02*\nY205700D01*\nX455044D01*\nX454972Y206058D01*\nX454486Y206786D01*\nX453758Y207272D01*\nX453400Y207344D01*\nD02*\nG37*\nG36*\nX452400D02*\nX452042Y207272D01*\nX451314Y206786D01*\nX450828Y206058D01*\nX450756Y205700D01*\nX452400D01*\nY207344D01*\nD02*\nG37*\nG36*\nX455044Y204700D02*\nX453400D01*\nY203056D01*\nX453758Y203128D01*\nX454486Y203614D01*\nX454972Y204342D01*\nX455044Y204700D01*\nD02*\nG37*\nG36*\nX452400D02*\nX450756D01*\nX450828Y204342D01*\nX451314Y203614D01*\nX452042Y203128D01*\nX452400Y203056D01*\nY204700D01*\nD02*\nG37*\nG36*\nX326926Y205087D02*\nX324531D01*\nY202167D01*\nX324781Y202200D01*\nX325479Y202489D01*\nX326078Y202949D01*\nX326538Y203549D01*\nX326828Y204247D01*\nX326926Y204996D01*\nY205087D01*\nD02*\nG37*\nG36*\nX323531D02*\nX321136D01*\nY204996D01*\nX321235Y204247D01*\nX321524Y203549D01*\nX321984Y202949D01*\nX322584Y202489D01*\nX323282Y202200D01*\nX323531Y202167D01*\nY205087D01*\nD02*\nG37*\nG36*\nY189321D02*\nX323282Y189288D01*\nX322584Y188999D01*\nX321984Y188539D01*\nX321524Y187939D01*\nX321235Y187241D01*\nX321136Y186492D01*\nY186401D01*\nX323531D01*\nY189321D01*\nD02*\nG37*\nG36*\nX342425Y184016D02*\nX342063D01*\nX341925Y184016D01*\nX337110D01*\nY182570D01*\nX336360D01*\nX336186Y182830D01*\nX335458Y183316D01*\nX334600Y183487D01*\nX333742Y183316D01*\nX333014Y182830D01*\nX332528Y182102D01*\nX332357Y181244D01*\nX332528Y180386D01*\nX333014Y179658D01*\nX333742Y179172D01*\nX334600Y179001D01*\nX335458Y179172D01*\nX336186Y179658D01*\nX336360Y179919D01*\nX337110D01*\nY178472D01*\nX341925D01*\nX342063Y178472D01*\nX342425D01*\nX342563Y178472D01*\nX344402D01*\nY181244D01*\nY184016D01*\nX342563D01*\nX342425Y184016D01*\nD02*\nG37*\nG36*\nX314287Y184760D02*\nX313508D01*\nY182464D01*\nX317017D01*\nX316988Y182688D01*\nX316708Y183362D01*\nX316264Y183941D01*\nX315685Y184385D01*\nX315011Y184665D01*\nX314287Y184760D01*\nD02*\nG37*\nG36*\nX312508D02*\nX311728D01*\nX311005Y184665D01*\nX310331Y184385D01*\nX309752Y183941D01*\nX309307Y183362D01*\nX309028Y182688D01*\nX308998Y182464D01*\nX312508D01*\nY184760D01*\nD02*\nG37*\nG36*\nX345402Y184016D02*\nY181744D01*\nX347378D01*\nY184016D01*\nX345402D01*\nD02*\nG37*\nG36*\nX317017Y181464D02*\nX313508D01*\nY179169D01*\nX314287D01*\nX315011Y179264D01*\nX315685Y179543D01*\nX316264Y179988D01*\nX316708Y180567D01*\nX316988Y181241D01*\nX317017Y181464D01*\nD02*\nG37*\nG36*\nX312508D02*\nX308998D01*\nX309028Y181241D01*\nX309307Y180567D01*\nX309752Y179988D01*\nX310331Y179543D01*\nX311005Y179264D01*\nX311728Y179169D01*\nX312508D01*\nY181464D01*\nD02*\nG37*\nG36*\nX347378Y180744D02*\nX345402D01*\nY178472D01*\nX347378D01*\nY180744D01*\nD02*\nG37*\nG36*\nX449244Y172488D02*\nY170844D01*\nX450888D01*\nX450816Y171203D01*\nX450330Y171930D01*\nX449603Y172416D01*\nX449244Y172488D01*\nD02*\nG37*\nG36*\nX448244D02*\nX447886Y172416D01*\nX447158Y171930D01*\nX446672Y171203D01*\nX446600Y170844D01*\nX448244D01*\nY172488D01*\nD02*\nG37*\nG36*\nX450888Y169844D02*\nX449244D01*\nY168201D01*\nX449603Y168272D01*\nX450330Y168758D01*\nX450816Y169486D01*\nX450888Y169844D01*\nD02*\nG37*\nG36*\nX448244D02*\nX446600D01*\nX446672Y169486D01*\nX447158Y168758D01*\nX447886Y168272D01*\nX448244Y168201D01*\nY169844D01*\nD02*\nG37*\nG36*\nX463500Y175739D02*\nX462325Y175584D01*\nX461231Y175131D01*\nX460291Y174409D01*\nX459569Y173469D01*\nX459116Y172375D01*\nX458961Y171200D01*\nX459116Y170025D01*\nX459569Y168931D01*\nX460291Y167991D01*\nX461231Y167269D01*\nX462325Y166816D01*\nX463500Y166661D01*\nX464675Y166816D01*\nX465769Y167269D01*\nX466709Y167991D01*\nX467431Y168931D01*\nX467884Y170025D01*\nX468039Y171200D01*\nX467884Y172375D01*\nX467431Y173469D01*\nX466709Y174409D01*\nX465769Y175131D01*\nX464675Y175584D01*\nX463500Y175739D01*\nD02*\nG37*\nG36*\nX468000Y165700D02*\nX464000D01*\nY161700D01*\nX468000D01*\nY165700D01*\nD02*\nG37*\nG36*\nX463000D02*\nX459000D01*\nY161700D01*\nX463000D01*\nY165700D01*\nD02*\nG37*\nG36*\nX468000Y160700D02*\nX464000D01*\nY156700D01*\nX468000D01*\nY160700D01*\nD02*\nG37*\nG36*\nX463000D02*\nX459000D01*\nY156700D01*\nX463000D01*\nY160700D01*\nD02*\nG37*\nG36*\nX423118Y150888D02*\nY149244D01*\nX424762D01*\nX424690Y149602D01*\nX424204Y150330D01*\nX423476Y150816D01*\nX423118Y150888D01*\nD02*\nG37*\nG36*\nX422118D02*\nX421760Y150816D01*\nX421032Y150330D01*\nX420546Y149602D01*\nX420474Y149244D01*\nX422118D01*\nY150888D01*\nD02*\nG37*\nG36*\nX424762Y148244D02*\nX423118D01*\nY146600D01*\nX423476Y146672D01*\nX424204Y147158D01*\nX424690Y147886D01*\nX424762Y148244D01*\nD02*\nG37*\nG36*\nX422118D02*\nX420474D01*\nX420546Y147886D01*\nX421032Y147158D01*\nX421760Y146672D01*\nX422118Y146600D01*\nY148244D01*\nD02*\nG37*\nG36*\nX449791Y154672D02*\nX448245Y154520D01*\nX446758Y154069D01*\nX445387Y153336D01*\nX444185Y152350D01*\nX443200Y151148D01*\nX442467Y149778D01*\nX442016Y148291D01*\nX441863Y146744D01*\nX442016Y145197D01*\nX442467Y143710D01*\nX443200Y142340D01*\nX444185Y141138D01*\nX445387Y140152D01*\nX446758Y139419D01*\nX448245Y138968D01*\nX449791Y138816D01*\nX451338Y138968D01*\nX452825Y139419D01*\nX454196Y140152D01*\nX455397Y141138D01*\nX456383Y142340D01*\nX457116Y143710D01*\nX457567Y145197D01*\nX457719Y146744D01*\nX457567Y148291D01*\nX457116Y149778D01*\nX456383Y151148D01*\nX455397Y152350D01*\nX454196Y153336D01*\nX452825Y154069D01*\nX451338Y154520D01*\nX449791Y154672D01*\nD02*\nG37*\nG36*\nX327744D02*\nX326197Y154520D01*\nX324710Y154069D01*\nX323340Y153336D01*\nX322138Y152350D01*\nX321152Y151148D01*\nX320420Y149778D01*\nX319968Y148291D01*\nX319816Y146744D01*\nX319968Y145197D01*\nX320420Y143710D01*\nX321152Y142340D01*\nX322138Y141138D01*\nX323340Y140152D01*\nX324710Y139419D01*\nX326197Y138968D01*\nX327744Y138816D01*\nX329291Y138968D01*\nX330778Y139419D01*\nX332149Y140152D01*\nX333350Y141138D01*\nX334336Y142340D01*\nX335068Y143710D01*\nX335520Y145197D01*\nX335672Y146744D01*\nX335520Y148291D01*\nX335068Y149778D01*\nX334336Y151148D01*\nX333350Y152350D01*\nX332149Y153336D01*\nX330778Y154069D01*\nX329291Y154520D01*\nX327744Y154672D01*\nD02*\nG37*\nG36*\nX423244Y131088D02*\nY129445D01*\nX424888D01*\nX424816Y129803D01*\nX424330Y130531D01*\nX423602Y131017D01*\nX423244Y131088D01*\nD02*\nG37*\nG36*\nX422244D02*\nX421886Y131017D01*\nX421158Y130531D01*\nX420672Y129803D01*\nX420600Y129445D01*\nX422244D01*\nY131088D01*\nD02*\nG37*\nG36*\nX387244D02*\nY129445D01*\nX388888D01*\nX388816Y129803D01*\nX388330Y130531D01*\nX387602Y131017D01*\nX387244Y131088D01*\nD02*\nG37*\nG36*\nX386244D02*\nX385886Y131017D01*\nX385158Y130531D01*\nX384672Y129803D01*\nX384600Y129445D01*\nX386244D01*\nY131088D01*\nD02*\nG37*\nG36*\nX332244Y130888D02*\nY129244D01*\nX333888D01*\nX333816Y129603D01*\nX333330Y130330D01*\nX332603Y130816D01*\nX332244Y130888D01*\nD02*\nG37*\nG36*\nX331244D02*\nX330886Y130816D01*\nX330158Y130330D01*\nX329672Y129603D01*\nX329601Y129244D01*\nX331244D01*\nY130888D01*\nD02*\nG37*\nG36*\nX424888Y128445D02*\nX423244D01*\nY126801D01*\nX423602Y126873D01*\nX424330Y127359D01*\nX424816Y128086D01*\nX424888Y128445D01*\nD02*\nG37*\nG36*\nX422244D02*\nX420600D01*\nX420672Y128086D01*\nX421158Y127359D01*\nX421886Y126873D01*\nX422244Y126801D01*\nY128445D01*\nD02*\nG37*\nG36*\nX388888D02*\nX387244D01*\nY126801D01*\nX387602Y126873D01*\nX388330Y127359D01*\nX388816Y128086D01*\nX388888Y128445D01*\nD02*\nG37*\nG36*\nX386244D02*\nX384600D01*\nX384672Y128086D01*\nX385158Y127359D01*\nX385886Y126873D01*\nX386244Y126801D01*\nY128445D01*\nD02*\nG37*\nG36*\nX220244Y280744D02*\nX211244D01*\nY271744D01*\nX220244D01*\nY274207D01*\nY278281D01*\nY280744D01*\nD02*\nG37*\nG36*\nX235744Y281224D02*\nX234455Y281054D01*\nX233254Y280557D01*\nX232223Y279765D01*\nX231432Y278734D01*\nX230934Y277533D01*\nX230764Y276244D01*\nX230934Y274955D01*\nX231432Y273754D01*\nX232223Y272723D01*\nX233254Y271932D01*\nX234455Y271434D01*\nX235744Y271264D01*\nX237033Y271434D01*\nX238234Y271932D01*\nX239265Y272723D01*\nX240056Y273754D01*\nX240554Y274955D01*\nX240724Y276244D01*\nX240554Y277533D01*\nX240056Y278734D01*\nX239265Y279765D01*\nX238234Y280557D01*\nX237033Y281054D01*\nX235744Y281224D01*\nD02*\nG37*\nG36*\nX269791Y276719D02*\nX268245Y276567D01*\nX266757Y276116D01*\nX265387Y275383D01*\nX264186Y274397D01*\nX263200Y273196D01*\nX262467Y271825D01*\nX262016Y270338D01*\nX261863Y268791D01*\nX262016Y267245D01*\nX262467Y265757D01*\nX263200Y264387D01*\nX264186Y263186D01*\nX265387Y262200D01*\nX266757Y261467D01*\nX268245Y261016D01*\nX269791Y260863D01*\nX271338Y261016D01*\nX272825Y261467D01*\nX274196Y262200D01*\nX275397Y263186D01*\nX276383Y264387D01*\nX277116Y265757D01*\nX277567Y267245D01*\nX277719Y268791D01*\nX277567Y270338D01*\nX277116Y271825D01*\nX276383Y273196D01*\nX275397Y274397D01*\nX274196Y275383D01*\nX272825Y276116D01*\nX271338Y276567D01*\nX269791Y276719D01*\nD02*\nG37*\nG36*\nX147744D02*\nX146197Y276567D01*\nX144710Y276116D01*\nX143340Y275383D01*\nX142138Y274397D01*\nX141152Y273196D01*\nX140419Y271825D01*\nX139968Y270338D01*\nX139816Y268791D01*\nX139968Y267245D01*\nX140419Y265757D01*\nX141152Y264387D01*\nX142138Y263186D01*\nX143340Y262200D01*\nX144710Y261467D01*\nX146197Y261016D01*\nX147744Y260863D01*\nX149291Y261016D01*\nX150778Y261467D01*\nX152148Y262200D01*\nX153350Y263186D01*\nX154336Y264387D01*\nX155069Y265757D01*\nX155520Y267245D01*\nX155672Y268791D01*\nX155520Y270338D01*\nX155069Y271825D01*\nX154336Y273196D01*\nX153350Y274397D01*\nX152148Y275383D01*\nX150778Y276116D01*\nX149291Y276567D01*\nX147744Y276719D01*\nD02*\nG37*\nG36*\nX209744Y257244D02*\nX200744D01*\nY248244D01*\nX200744Y248244D01*\nX210100D01*\nY256888D01*\nX209744Y257244D01*\nD02*\nG37*\nG36*\nX215244Y257283D02*\nX214069Y257128D01*\nX212975Y256675D01*\nX212035Y255953D01*\nX211313Y255013D01*\nX210860Y253919D01*\nX210705Y252744D01*\nX210860Y251569D01*\nX211313Y250475D01*\nX212035Y249535D01*\nX212975Y248813D01*\nX214069Y248360D01*\nX215244Y248205D01*\nX216419Y248360D01*\nX217513Y248813D01*\nX218453Y249535D01*\nX219175Y250475D01*\nX219628Y251569D01*\nX219783Y252744D01*\nX219628Y253919D01*\nX219175Y255013D01*\nX218453Y255953D01*\nX217513Y256675D01*\nX216419Y257128D01*\nX215244Y257283D01*\nD02*\nG37*\nG36*\nX136544Y256844D02*\nX127544D01*\nY247844D01*\nX136544D01*\nY256844D01*\nD02*\nG37*\nG36*\nX283500Y245739D02*\nX282325Y245584D01*\nX281231Y245131D01*\nX280291Y244409D01*\nX279569Y243469D01*\nX279116Y242375D01*\nX278961Y241200D01*\nX279116Y240025D01*\nX279569Y238931D01*\nX280291Y237991D01*\nX281231Y237269D01*\nX282325Y236816D01*\nX283500Y236661D01*\nX284675Y236816D01*\nX285769Y237269D01*\nX286709Y237991D01*\nX287431Y238931D01*\nX287884Y240025D01*\nX288039Y241200D01*\nX287884Y242375D01*\nX287431Y243469D01*\nX286709Y244409D01*\nX285769Y245131D01*\nX284675Y245584D01*\nX283500Y245739D01*\nD02*\nG37*\nG36*\nX190388Y233744D02*\nX189744D01*\nY231244D01*\nX190388D01*\nX190316Y231603D01*\nX189957Y232141D01*\nX189870Y232494D01*\nX189957Y232847D01*\nX190316Y233386D01*\nX190388Y233744D01*\nD02*\nG37*\nG36*\nX283500Y235739D02*\nX282325Y235584D01*\nX281231Y235131D01*\nX280291Y234409D01*\nX280212Y234307D01*\nX279569Y233469D01*\nX279116Y232375D01*\nX278961Y231200D01*\nX279116Y230025D01*\nX279569Y228931D01*\nX280291Y227991D01*\nX281231Y227269D01*\nX282325Y226816D01*\nX283500Y226661D01*\nX284675Y226816D01*\nX285769Y227269D01*\nX286709Y227991D01*\nX287431Y228931D01*\nX287884Y230025D01*\nX288039Y231200D01*\nX287884Y232375D01*\nX287431Y233469D01*\nX286788Y234307D01*\nX286709Y234409D01*\nX285769Y235131D01*\nX284675Y235584D01*\nX283500Y235739D01*\nD02*\nG37*\nG36*\nY225739D02*\nX282325Y225584D01*\nX281231Y225131D01*\nX280291Y224409D01*\nX279569Y223469D01*\nX279116Y222375D01*\nX278961Y221200D01*\nX279116Y220025D01*\nX279569Y218931D01*\nX280291Y217991D01*\nX281231Y217269D01*\nX282325Y216816D01*\nX283500Y216661D01*\nX284675Y216816D01*\nX285769Y217269D01*\nX286709Y217991D01*\nX287431Y218931D01*\nX287884Y220025D01*\nX288039Y221200D01*\nX287884Y222375D01*\nX287431Y223469D01*\nX286709Y224409D01*\nX285769Y225131D01*\nX284675Y225584D01*\nX283500Y225739D01*\nD02*\nG37*\nG36*\nX284000Y215673D02*\nY211700D01*\nX287973D01*\nX287884Y212375D01*\nX287431Y213469D01*\nX286709Y214409D01*\nX285769Y215131D01*\nX284675Y215584D01*\nX284000Y215673D01*\nD02*\nG37*\nG36*\nX283000D02*\nX282325Y215584D01*\nX281231Y215131D01*\nX280291Y214409D01*\nX279569Y213469D01*\nX279116Y212375D01*\nX279027Y211700D01*\nX283000D01*\nY215673D01*\nD02*\nG37*\nG36*\nX136000Y207344D02*\nX133508D01*\nY206728D01*\nX134287D01*\nX135011Y206823D01*\nX135685Y207103D01*\nX136000Y207344D01*\nD02*\nG37*\nG36*\nX132508D02*\nX130016D01*\nX130331Y207103D01*\nX131005Y206823D01*\nX131728Y206728D01*\nX132508D01*\nY207344D01*\nD02*\nG37*\nG36*\nX287973Y210700D02*\nX284000D01*\nY206727D01*\nX284675Y206816D01*\nX285769Y207269D01*\nX286709Y207991D01*\nX287431Y208931D01*\nX287884Y210025D01*\nX287973Y210700D01*\nD02*\nG37*\nG36*\nX283000D02*\nX279027D01*\nX279116Y210025D01*\nX279569Y208931D01*\nX280291Y207991D01*\nX281231Y207269D01*\nX282325Y206816D01*\nX283000Y206727D01*\nY210700D01*\nD02*\nG37*\nG36*\nX146655Y207344D02*\nX144531D01*\nY206087D01*\nX146926D01*\nY206177D01*\nX146828Y206926D01*\nX146655Y207344D01*\nD02*\nG37*\nG36*\nX143531D02*\nX141408D01*\nX141235Y206926D01*\nX141137Y206177D01*\nY206087D01*\nX143531D01*\nY207344D01*\nD02*\nG37*\nG36*\nX273400Y207344D02*\nY205700D01*\nX275044D01*\nX274972Y206058D01*\nX274486Y206786D01*\nX273758Y207272D01*\nX273400Y207344D01*\nD02*\nG37*\nG36*\nX272400D02*\nX272042Y207272D01*\nX271314Y206786D01*\nX270828Y206058D01*\nX270756Y205700D01*\nX272400D01*\nY207344D01*\nD02*\nG37*\nG36*\nX275044Y204700D02*\nX273400D01*\nY203056D01*\nX273758Y203128D01*\nX274486Y203614D01*\nX274972Y204342D01*\nX275044Y204700D01*\nD02*\nG37*\nG36*\nX272400D02*\nX270756D01*\nX270828Y204342D01*\nX271314Y203614D01*\nX272042Y203128D01*\nX272400Y203056D01*\nY204700D01*\nD02*\nG37*\nG36*\nX146926Y205087D02*\nX144531D01*\nY202167D01*\nX144781Y202200D01*\nX145479Y202489D01*\nX146078Y202949D01*\nX146538Y203549D01*\nX146828Y204247D01*\nX146926Y204996D01*\nY205087D01*\nD02*\nG37*\nG36*\nX143531D02*\nX141137D01*\nY204996D01*\nX141235Y204247D01*\nX141524Y203549D01*\nX141984Y202949D01*\nX142584Y202489D01*\nX143282Y202200D01*\nX143531Y202167D01*\nY205087D01*\nD02*\nG37*\nG36*\nY189321D02*\nX143282Y189288D01*\nX142584Y188999D01*\nX141984Y188539D01*\nX141524Y187939D01*\nX141235Y187241D01*\nX141137Y186492D01*\nY186401D01*\nX143531D01*\nY189321D01*\nD02*\nG37*\nG36*\nX162425Y184016D02*\nX162063D01*\nX161925Y184016D01*\nX157110D01*\nY182570D01*\nX156360D01*\nX156186Y182830D01*\nX155458Y183316D01*\nX154600Y183487D01*\nX153742Y183316D01*\nX153014Y182830D01*\nX152528Y182102D01*\nX152357Y181244D01*\nX152528Y180386D01*\nX153014Y179658D01*\nX153742Y179172D01*\nX154600Y179001D01*\nX155458Y179172D01*\nX156186Y179658D01*\nX156360Y179919D01*\nX157110D01*\nY178472D01*\nX161925D01*\nX162063Y178472D01*\nX162425D01*\nX162563Y178472D01*\nX164402D01*\nY181244D01*\nY184016D01*\nX162563D01*\nX162425Y184016D01*\nD02*\nG37*\nG36*\nX134287Y184760D02*\nX133508D01*\nY182464D01*\nX137017D01*\nX136988Y182688D01*\nX136708Y183362D01*\nX136264Y183941D01*\nX135685Y184385D01*\nX135011Y184665D01*\nX134287Y184760D01*\nD02*\nG37*\nG36*\nX132508D02*\nX131728D01*\nX131005Y184665D01*\nX130331Y184385D01*\nX129752Y183941D01*\nX129307Y183362D01*\nX129028Y182688D01*\nX128998Y182464D01*\nX132508D01*\nY184760D01*\nD02*\nG37*\nG36*\nX165402Y184016D02*\nY181744D01*\nX167378D01*\nY184016D01*\nX165402D01*\nD02*\nG37*\nG36*\nX137017Y181464D02*\nX133508D01*\nY179169D01*\nX134287D01*\nX135011Y179264D01*\nX135685Y179543D01*\nX136264Y179988D01*\nX136708Y180567D01*\nX136988Y181241D01*\nX137017Y181464D01*\nD02*\nG37*\nG36*\nX132508D02*\nX128998D01*\nX129028Y181241D01*\nX129307Y180567D01*\nX129752Y179988D01*\nX130331Y179543D01*\nX131005Y179264D01*\nX131728Y179169D01*\nX132508D01*\nY181464D01*\nD02*\nG37*\nG36*\nX167378Y180744D02*\nX165402D01*\nY178472D01*\nX167378D01*\nY180744D01*\nD02*\nG37*\nG36*\nX269244Y172488D02*\nY170844D01*\nX270888D01*\nX270816Y171203D01*\nX270330Y171930D01*\nX269602Y172416D01*\nX269244Y172488D01*\nD02*\nG37*\nG36*\nX268244D02*\nX267886Y172416D01*\nX267158Y171930D01*\nX266672Y171203D01*\nX266600Y170844D01*\nX268244D01*\nY172488D01*\nD02*\nG37*\nG36*\nX270888Y169844D02*\nX269244D01*\nY168201D01*\nX269602Y168272D01*\nX270330Y168758D01*\nX270816Y169486D01*\nX270888Y169844D01*\nD02*\nG37*\nG36*\nX268244D02*\nX266600D01*\nX266672Y169486D01*\nX267158Y168758D01*\nX267886Y168272D01*\nX268244Y168201D01*\nY169844D01*\nD02*\nG37*\nG36*\nX283500Y175739D02*\nX282325Y175584D01*\nX281231Y175131D01*\nX280291Y174409D01*\nX279569Y173469D01*\nX279116Y172375D01*\nX278961Y171200D01*\nX279116Y170025D01*\nX279569Y168931D01*\nX280291Y167991D01*\nX281231Y167269D01*\nX282325Y166816D01*\nX283500Y166661D01*\nX284675Y166816D01*\nX285769Y167269D01*\nX286709Y167991D01*\nX287431Y168931D01*\nX287884Y170025D01*\nX288039Y171200D01*\nX287884Y172375D01*\nX287431Y173469D01*\nX286709Y174409D01*\nX285769Y175131D01*\nX284675Y175584D01*\nX283500Y175739D01*\nD02*\nG37*\nG36*\nX288000Y165700D02*\nX284000D01*\nY161700D01*\nX288000D01*\nY165700D01*\nD02*\nG37*\nG36*\nX283000D02*\nX279000D01*\nY161700D01*\nX283000D01*\nY165700D01*\nD02*\nG37*\nG36*\nX288000Y160700D02*\nX284000D01*\nY156700D01*\nX288000D01*\nY160700D01*\nD02*\nG37*\nG36*\nX283000D02*\nX279000D01*\nY156700D01*\nX283000D01*\nY160700D01*\nD02*\nG37*\nG36*\nX243118Y150888D02*\nY149244D01*\nX244762D01*\nX244690Y149602D01*\nX244204Y150330D01*\nX243476Y150816D01*\nX243118Y150888D01*\nD02*\nG37*\nG36*\nX242118D02*\nX241760Y150816D01*\nX241032Y150330D01*\nX240546Y149602D01*\nX240474Y149244D01*\nX242118D01*\nY150888D01*\nD02*\nG37*\nG36*\nX244762Y148244D02*\nX243118D01*\nY146600D01*\nX243476Y146672D01*\nX244204Y147158D01*\nX244690Y147886D01*\nX244762Y148244D01*\nD02*\nG37*\nG36*\nX242118D02*\nX240474D01*\nX240546Y147886D01*\nX241032Y147158D01*\nX241760Y146672D01*\nX242118Y146600D01*\nY148244D01*\nD02*\nG37*\nG36*\nX269791Y154672D02*\nX268245Y154520D01*\nX266757Y154069D01*\nX265387Y153336D01*\nX264186Y152350D01*\nX263200Y151148D01*\nX262467Y149778D01*\nX262016Y148291D01*\nX261863Y146744D01*\nX262016Y145197D01*\nX262467Y143710D01*\nX263200Y142340D01*\nX264186Y141138D01*\nX265387Y140152D01*\nX266757Y139419D01*\nX268245Y138968D01*\nX269791Y138816D01*\nX271338Y138968D01*\nX272825Y139419D01*\nX274196Y140152D01*\nX275397Y141138D01*\nX276383Y142340D01*\nX277116Y143710D01*\nX277567Y145197D01*\nX277719Y146744D01*\nX277567Y148291D01*\nX277116Y149778D01*\nX276383Y151148D01*\nX275397Y152350D01*\nX274196Y153336D01*\nX272825Y154069D01*\nX271338Y154520D01*\nX269791Y154672D01*\nD02*\nG37*\nG36*\nX147744D02*\nX146197Y154520D01*\nX144710Y154069D01*\nX143340Y153336D01*\nX142138Y152350D01*\nX141152Y151148D01*\nX140419Y149778D01*\nX139968Y148291D01*\nX139816Y146744D01*\nX139968Y145197D01*\nX140419Y143710D01*\nX141152Y142340D01*\nX142138Y141138D01*\nX143340Y140152D01*\nX144710Y139419D01*\nX146197Y138968D01*\nX147744Y138816D01*\nX149291Y138968D01*\nX150778Y139419D01*\nX152148Y140152D01*\nX153350Y141138D01*\nX154336Y142340D01*\nX155069Y143710D01*\nX155520Y145197D01*\nX155672Y146744D01*\nX155520Y148291D01*\nX155069Y149778D01*\nX154336Y151148D01*\nX153350Y152350D01*\nX152148Y153336D01*\nX150778Y154069D01*\nX149291Y154520D01*\nX147744Y154672D01*\nD02*\nG37*\nG36*\nX243244Y131088D02*\nY129445D01*\nX244888D01*\nX244816Y129803D01*\nX244330Y130531D01*\nX243602Y131017D01*\nX243244Y131088D01*\nD02*\nG37*\nG36*\nX242244D02*\nX241886Y131017D01*\nX241158Y130531D01*\nX240672Y129803D01*\nX240600Y129445D01*\nX242244D01*\nY131088D01*\nD02*\nG37*\nG36*\nX207244D02*\nY129445D01*\nX208888D01*\nX208816Y129803D01*\nX208330Y130531D01*\nX207603Y131017D01*\nX207244Y131088D01*\nD02*\nG37*\nG36*\nX206244D02*\nX205886Y131017D01*\nX205158Y130531D01*\nX204672Y129803D01*\nX204601Y129445D01*\nX206244D01*\nY131088D01*\nD02*\nG37*\nG36*\nX152244Y130888D02*\nY129244D01*\nX153888D01*\nX153816Y129603D01*\nX153330Y130330D01*\nX152603Y130816D01*\nX152244Y130888D01*\nD02*\nG37*\nG36*\nX151244D02*\nX150886Y130816D01*\nX150158Y130330D01*\nX149672Y129603D01*\nX149601Y129244D01*\nX151244D01*\nY130888D01*\nD02*\nG37*\nG36*\nX244888Y128445D02*\nX243244D01*\nY126801D01*\nX243602Y126873D01*\nX244330Y127359D01*\nX244816Y128086D01*\nX244888Y128445D01*\nD02*\nG37*\nG36*\nX242244D02*\nX240600D01*\nX240672Y128086D01*\nX241158Y127359D01*\nX241886Y126873D01*\nX242244Y126801D01*\nY128445D01*\nD02*\nG37*\nG36*\nX208888D02*\nX207244D01*\nY126801D01*\nX207603Y126873D01*\nX208330Y127359D01*\nX208816Y128086D01*\nX208888Y128445D01*\nD02*\nG37*\nG36*\nX206244D02*\nX204601D01*\nX204672Y128086D01*\nX205158Y127359D01*\nX205886Y126873D01*\nX206244Y126801D01*\nY128445D01*\nD02*\nG37*\nG36*\nX421319Y232878D02*\nX419244D01*\nY230705D01*\nX421319D01*\nY232878D01*\nD02*\nG37*\nG36*\nX418244D02*\nX416169D01*\nY230705D01*\nX418244D01*\nY232878D01*\nD02*\nG37*\nG36*\nX424244Y232378D02*\nX422169D01*\nY230205D01*\nX424244D01*\nY232378D01*\nD02*\nG37*\nG36*\nX404900Y229388D02*\nY227744D01*\nX406544D01*\nX406472Y228102D01*\nX405986Y228830D01*\nX405258Y229316D01*\nX404900Y229388D01*\nD02*\nG37*\nG36*\nX403900D02*\nX403542Y229316D01*\nX402814Y228830D01*\nX402328Y228102D01*\nX402256Y227744D01*\nX403900D01*\nY229388D01*\nD02*\nG37*\nG36*\nX406544Y226744D02*\nX404900D01*\nY225100D01*\nX405258Y225172D01*\nX405986Y225658D01*\nX406472Y226386D01*\nX406544Y226744D01*\nD02*\nG37*\nG36*\nX241319Y232878D02*\nX239244D01*\nY230705D01*\nX241319D01*\nY232878D01*\nD02*\nG37*\nG36*\nX238244D02*\nX236169D01*\nY230705D01*\nX238244D01*\nY232878D01*\nD02*\nG37*\nG36*\nX244244Y232378D02*\nX242169D01*\nY230205D01*\nX244244D01*\nY232378D01*\nD02*\nG37*\nG36*\nX224900Y229388D02*\nY227744D01*\nX226544D01*\nX226472Y228102D01*\nX225986Y228830D01*\nX225258Y229316D01*\nX224900Y229388D01*\nD02*\nG37*\nG36*\nX223900D02*\nX223542Y229316D01*\nX222814Y228830D01*\nX222328Y228102D01*\nX222256Y227744D01*\nX223900D01*\nY229388D01*\nD02*\nG37*\nG36*\nX226544Y226744D02*\nX224900D01*\nY225100D01*\nX225258Y225172D01*\nX225986Y225658D01*\nX226472Y226386D01*\nX226544Y226744D01*\nD02*\nG37*\nG36*\nX433244Y226783D02*\nX431169D01*\nY224610D01*\nX433244D01*\nY226783D01*\nD02*\nG37*\nG36*\nX253244D02*\nX251169D01*\nY224610D01*\nX253244D01*\nY226783D01*\nD02*\nG37*\nG36*\nX383244Y180388D02*\nX382886Y180316D01*\nX382158Y179830D01*\nX381672Y179103D01*\nX381600Y178744D01*\nX383244D01*\nY180388D01*\nD02*\nG37*\nG36*\nX203244D02*\nX202886Y180316D01*\nX202158Y179830D01*\nX201672Y179103D01*\nX201601Y178744D01*\nX203244D01*\nY180388D01*\nD02*\nG37*\nG36*\nX390783Y175819D02*\nX388610D01*\nY173744D01*\nX390783D01*\nY175819D01*\nD02*\nG37*\nG36*\nY172744D02*\nX388610D01*\nY170669D01*\nX390783D01*\nY172744D01*\nD02*\nG37*\nG36*\nX374878Y170819D02*\nX372705D01*\nY168744D01*\nX374878D01*\nY170819D01*\nD02*\nG37*\nG36*\nX382900Y167388D02*\nY165744D01*\nX384544D01*\nX384472Y166103D01*\nX383986Y166830D01*\nX383258Y167316D01*\nX382900Y167388D01*\nD02*\nG37*\nG36*\nX381900D02*\nX381541Y167316D01*\nX380814Y166830D01*\nX380328Y166103D01*\nX380256Y165744D01*\nX381900D01*\nY167388D01*\nD02*\nG37*\nG36*\nX374878Y167744D02*\nX372705D01*\nY165669D01*\nX374878D01*\nY167744D01*\nD02*\nG37*\nG36*\nX384544Y164744D02*\nX382900D01*\nY163101D01*\nX383258Y163172D01*\nX383986Y163658D01*\nX384472Y164386D01*\nX384544Y164744D01*\nD02*\nG37*\nG36*\nX381900D02*\nX380256D01*\nX380328Y164386D01*\nX380814Y163658D01*\nX381541Y163172D01*\nX381900Y163101D01*\nY164744D01*\nD02*\nG37*\nG36*\nX210783Y175819D02*\nX208610D01*\nY173744D01*\nX210783D01*\nY175819D01*\nD02*\nG37*\nG36*\nY172744D02*\nX208610D01*\nY170669D01*\nX210783D01*\nY172744D01*\nD02*\nG37*\nG36*\nX194878Y170819D02*\nX192705D01*\nY168744D01*\nX194878D01*\nY170819D01*\nD02*\nG37*\nG36*\nX202900Y167388D02*\nY165744D01*\nX204544D01*\nX204472Y166103D01*\nX203986Y166830D01*\nX203258Y167316D01*\nX202900Y167388D01*\nD02*\nG37*\nG36*\nX201900D02*\nX201541Y167316D01*\nX200814Y166830D01*\nX200328Y166103D01*\nX200256Y165744D01*\nX201900D01*\nY167388D01*\nD02*\nG37*\nG36*\nX194878Y167744D02*\nX192705D01*\nY165669D01*\nX194878D01*\nY167744D01*\nD02*\nG37*\nG36*\nX204544Y164744D02*\nX202900D01*\nY163101D01*\nX203258Y163172D01*\nX203986Y163658D01*\nX204472Y164386D01*\nX204544Y164744D01*\nD02*\nG37*\nG36*\nX201900D02*\nX200256D01*\nX200328Y164386D01*\nX200814Y163658D01*\nX201541Y163172D01*\nX201900Y163101D01*\nY164744D01*\nD02*\nG37*\n%LPD*%\nD13*\nX211283Y173244D02*\nD03*\nX216205D02*\nD03*\nX207784Y161744D02*\nD03*\nX212705D02*\nD03*\nX207784Y156744D02*\nD03*\nX212705D02*\nD03*\nX188705Y193244D02*\nD03*\nX183783D02*\nD03*\nX213205Y227244D02*\nD03*\nX208283D02*\nD03*\nX211205Y237244D02*\nD03*\nX206283D02*\nD03*\nX211205Y243244D02*\nD03*\nX206283D02*\nD03*\nX203705Y153744D02*\nD03*\nX198783D02*\nD03*\nX198283Y159244D02*\nD03*\nX203205D02*\nD03*\nX192205Y168244D02*\nD03*\nX187284D02*\nD03*\nX391283Y173244D02*\nD03*\nX396205D02*\nD03*\nX387784Y161744D02*\nD03*\nX392705D02*\nD03*\nX387784Y156744D02*\nD03*\nX392705D02*\nD03*\nX368705Y193244D02*\nD03*\nX363783D02*\nD03*\nX393205Y227244D02*\nD03*\nX388283D02*\nD03*\nX391205Y237244D02*\nD03*\nX386283D02*\nD03*\nX391205Y243244D02*\nD03*\nX386283D02*\nD03*\nX383705Y153744D02*\nD03*\nX378783D02*\nD03*\nX378283Y159244D02*\nD03*\nX383205D02*\nD03*\nX372205Y168244D02*\nD03*\nX367284D02*\nD03*\nX211283Y353244D02*\nD03*\nX216205D02*\nD03*\nX207784Y341744D02*\nD03*\nX212705D02*\nD03*\nX207784Y336744D02*\nD03*\nX212705D02*\nD03*\nX188705Y373244D02*\nD03*\nX183783D02*\nD03*\nX213205Y407244D02*\nD03*\nX208283D02*\nD03*\nX211205Y417244D02*\nD03*\nX206283D02*\nD03*\nX211205Y423244D02*\nD03*\nX206283D02*\nD03*\nX203705Y333744D02*\nD03*\nX198783D02*\nD03*\nX198283Y339244D02*\nD03*\nX203205D02*\nD03*\nX192205Y348244D02*\nD03*\nX187284D02*\nD03*\nX391283Y353244D02*\nD03*\nX396205D02*\nD03*\nX387784Y341744D02*\nD03*\nX392705D02*\nD03*\nX387784Y336744D02*\nD03*\nX392705D02*\nD03*\nX368705Y373244D02*\nD03*\nX363783D02*\nD03*\nX393205Y407244D02*\nD03*\nX388283D02*\nD03*\nX391205Y417244D02*\nD03*\nX386283D02*\nD03*\nX391205Y423244D02*\nD03*\nX386283D02*\nD03*\nX383705Y333744D02*\nD03*\nX378783D02*\nD03*\nX378283Y339244D02*\nD03*\nX383205D02*\nD03*\nX372205Y348244D02*\nD03*\nX367284D02*\nD03*\nD24*\nX249244Y203587D02*\nD03*\nY208902D02*\nD03*\nX258744Y206087D02*\nD03*\nY211402D02*\nD03*\nX249744Y170087D02*\nD03*\nY175402D02*\nD03*\nX259244Y172587D02*\nD03*\nY177902D02*\nD03*\nX258744Y190087D02*\nD03*\nY195402D02*\nD03*\nX249244Y187087D02*\nD03*\nY192402D02*\nD03*\nX429244Y203587D02*\nD03*\nY208902D02*\nD03*\nX438744Y206087D02*\nD03*\nY211402D02*\nD03*\nX429744Y170087D02*\nD03*\nY175402D02*\nD03*\nX439244Y172587D02*\nD03*\nY177902D02*\nD03*\nX438744Y190087D02*\nD03*\nY195402D02*\nD03*\nX429244Y187087D02*\nD03*\nY192402D02*\nD03*\nX249244Y383587D02*\nD03*\nY388902D02*\nD03*\nX258744Y386087D02*\nD03*\nY391402D02*\nD03*\nX249744Y350087D02*\nD03*\nY355402D02*\nD03*\nX259244Y352587D02*\nD03*\nY357902D02*\nD03*\nX258744Y370087D02*\nD03*\nY375402D02*\nD03*\nX249244Y367087D02*\nD03*\nY372402D02*\nD03*\nX429244Y383587D02*\nD03*\nY388902D02*\nD03*\nX438744Y386087D02*\nD03*\nY391402D02*\nD03*\nX429744Y350087D02*\nD03*\nY355402D02*\nD03*\nX439244Y352587D02*\nD03*\nY357902D02*\nD03*\nX438744Y370087D02*\nD03*\nY375402D02*\nD03*\nX429244Y367087D02*\nD03*\nY372402D02*\nD03*\nD38*\nX231244Y248744D02*\nX235244Y252744D01*\nX228032Y248744D02*\nX231244D01*\nX227232Y247944D02*\nX228032Y248744D01*\nX224444Y247944D02*\nX227232D01*\nX221963Y245463D02*\nX224444Y247944D01*\nX221963Y235100D02*\nY245463D01*\nX218208Y231344D02*\nX221963Y235100D01*\nX216688Y243244D02*\nX217087D01*\nX205900Y161744D02*\nX206700D01*\nX176244Y268744D02*\nX192244D01*\nX233941Y225283D02*\nX238744D01*\nX231200D02*\nX233941D01*\nX184152Y168244D02*\nX185500D01*\nX183500Y150072D02*\nY166244D01*\nX169587Y162100D02*\nX175731Y168244D01*\nX169587Y162100D02*\nY166576D01*\nX183500Y150000D02*\nX183572D01*\nX183500D02*\nY150072D01*\nX183572Y150000D02*\nX184172Y149400D01*\nX183500Y150072D02*\nX183572Y150000D01*\nX159087Y195244D02*\nY202744D01*\nX138400Y170088D02*\nX141744Y166744D01*\nX138400Y170088D02*\nY174900D01*\nX150244Y186744D01*\nY207744D01*\nX180244Y260744D02*\nX188244D01*\nX141044Y226544D02*\nX141144Y226644D01*\nX149644D01*\nX248517Y227283D02*\nX253744D01*\nX247300Y228500D02*\nX248517Y227283D01*\nX247300Y228500D02*\nY229705D01*\nX249400D02*\nX251900Y232205D01*\nX253744D01*\nX164418Y171744D02*\nX169587Y166576D01*\nX161744Y171744D02*\nX164418D01*\nX183987Y168409D02*\nX184152Y168244D01*\nX261300Y222900D02*\nY238900D01*\nX256100Y217700D02*\nX261300Y222900D01*\nX240000Y217700D02*\nX256100D01*\nX186244Y200656D02*\nX186300Y200600D01*\nX186244Y200656D02*\nY206787D01*\nX222300Y172300D02*\nX228500Y178500D01*\nY222583D01*\nX231200Y225283D01*\nX190500Y147400D02*\nX194100D01*\nX189900Y148000D02*\nX190500Y147400D01*\nX198783Y151100D02*\nY153744D01*\nX159087Y192113D02*\nY195244D01*\nY192113D02*\nX159900Y191300D01*\nX173100D01*\nX185901Y152400D02*\nY152744D01*\nX188715Y146771D02*\nX189300Y146186D01*\nX197900D01*\nX192100Y150000D02*\nX192600Y149500D01*\nX185500Y168244D02*\nX187284D01*\nX192205D02*\nX199400D01*\nX205900Y161744D01*\nX174901Y156600D02*\nY157244D01*\nX154600Y181244D02*\nX159587D01*\nX181344Y250875D02*\nX185675D01*\nX164902Y179403D02*\nY181244D01*\nX163900Y178402D02*\nX164902Y179403D01*\nX160246Y178402D02*\nX163900D01*\nX156744Y171744D02*\nY174900D01*\nX169587Y157244D02*\nY162100D01*\nX196244Y264744D02*\nX200244D01*\nX141244Y246244D02*\nX149144D01*\nX149244Y246344D01*\nX211205Y237244D02*\nX216587D01*\nX212705Y156744D02*\nY161744D01*\nX256400Y226783D02*\nX258744D01*\nX255900Y227283D02*\nX256400Y226783D01*\nX253744Y227283D02*\nX255900D01*\nX241400Y230205D02*\nX241900Y229705D01*\nX238744Y230205D02*\nX241400D01*\nX207784Y156744D02*\nY161744D01*\nX206700D02*\nX207784D01*\nX204200Y159244D02*\nX206700Y161744D01*\nX203205Y159244D02*\nX204200D01*\nX203205Y156700D02*\nY159244D01*\nY156700D02*\nX203705Y156200D01*\nY153744D02*\nY156200D01*\nX227361Y230205D02*\nX238744D01*\nX213205Y223558D02*\nY227244D01*\nY223558D02*\nX213862Y222900D01*\nY219406D02*\nY222900D01*\nX256400Y231705D02*\nX258744D01*\nX255900Y232205D02*\nX256400Y231705D01*\nX253744Y232205D02*\nX255900D01*\nX182504Y197079D02*\nY199701D01*\nY197079D02*\nX183783Y195800D01*\nY193244D02*\nY195800D01*\nX241900Y224783D02*\nX244744D01*\nX241400Y225283D02*\nX241900Y224783D01*\nX238744Y225283D02*\nX241400D01*\nX182244Y238744D02*\nY238783D01*\nX185675Y242213D01*\nY246544D02*\nX185700Y246519D01*\nX253700Y192402D02*\nX254198Y192900D01*\nX270200D01*\nX271900Y191200D01*\nX283500D01*\nX262244Y249205D02*\nX271800D01*\nX273795Y251200D01*\nX283500D01*\nX249244Y197100D02*\nX252000Y199856D01*\nY208002D01*\nX251100Y208902D02*\nX252000Y208002D01*\nX249244Y208902D02*\nX251100D01*\nX258744Y195402D02*\nX278702D01*\nX279300Y196000D01*\nX286400D01*\nX288300Y194100D01*\nY188200D02*\nY194100D01*\nX286300Y186200D02*\nX288300Y188200D01*\nX262600Y186200D02*\nX286300D01*\nX259244Y182844D02*\nX262600Y186200D01*\nX259244Y177902D02*\nY182844D01*\nX249244Y192402D02*\nX251100D01*\nX252000Y191502D01*\nY175402D02*\nY191502D01*\nX249744Y175402D02*\nX252000D01*\nX259700Y249205D02*\nX262244D01*\nX259700Y242197D02*\nY249205D01*\nY242197D02*\nX262500Y239397D01*\nY220156D02*\nY239397D01*\nX258744Y216400D02*\nX262500Y220156D01*\nX258744Y211402D02*\nY216400D01*\nX230500Y163700D02*\nY168409D01*\nY163700D02*\nX231500Y162700D01*\nX252200D01*\nX258744Y202700D02*\nY206087D01*\nY195402D02*\nY199100D01*\nX261500Y201856D01*\nY210602D01*\nX260700Y211402D02*\nX261500Y210602D01*\nX258744Y211402D02*\nX260700D01*\nX255413Y190087D02*\nX258744D01*\nX255100Y190400D02*\nX255413Y190087D01*\nX249100Y192402D02*\nX249244D01*\nX208000Y269800D02*\nX210100Y267700D01*\nX248500Y222900D02*\nY225900D01*\nX246300Y220700D02*\nX248500Y222900D01*\nX238900Y220700D02*\nX246300D01*\nX238900Y186044D02*\nX239744Y186888D01*\nY189283D01*\nX234700Y186600D02*\nY188100D01*\nY186600D02*\nX238254Y183046D01*\nX244446D01*\nX248487Y187087D01*\nX272900Y205200D02*\nY238483D01*\nX267100Y244283D02*\nX272900Y238483D01*\nX262244Y244283D02*\nX267100D01*\nX249744Y170087D02*\nY171856D01*\nX248700Y172900D02*\nX249744Y171856D01*\nX245900Y172900D02*\nX248700D01*\nX245500Y186600D02*\nX245987Y187087D01*\nX246100Y200700D02*\nY202587D01*\nX247100Y203587D01*\nX239744Y194205D02*\nX243500D01*\nX245303Y192402D01*\nX228900Y160100D02*\nY166300D01*\nX227900Y167300D02*\nX228900Y166300D01*\nX227900Y167300D02*\nY168900D01*\nX230700Y171700D01*\nY211200D01*\nX234700Y192200D02*\nY198387D01*\nX239900Y203587D01*\nX207200Y244600D02*\nX210100Y247500D01*\nX259244Y172587D02*\nX262300D01*\nX266700Y176987D01*\nY181800D01*\nX239900Y203587D02*\nX247100D01*\nX249244D01*\nX245987Y187087D02*\nX248487D01*\nX249244D01*\nX244695Y229705D02*\nX248500Y225900D01*\nX185700Y242213D02*\nY246519D01*\nX193800Y264500D02*\nX199100Y269800D01*\nX244695Y229705D02*\nX244744D01*\nX247300D01*\nX207200Y235700D02*\nY244600D01*\nX241900Y229705D02*\nX244744D01*\nX199100Y269800D02*\nX208000D01*\nX210100Y247500D02*\nY267700D01*\nX174901Y156600D02*\nX178000D01*\nX185901Y152400D02*\nX188900D01*\nX183500Y166244D02*\nX185500Y168244D01*\nX175731D02*\nX184152D01*\nX249100Y192402D02*\nY196900D01*\nX245303Y192402D02*\nX249100D01*\nX251100D02*\nX253700D01*\nX249244D02*\nY197100D01*\nX175244Y202244D02*\nX175401Y202087D01*\nX164901Y197244D02*\nX170087D01*\nX213862Y192630D02*\nY196177D01*\nY192630D02*\nX216748Y189744D01*\nX220244D01*\nX211303Y192630D02*\nY196177D01*\nY192630D02*\nX216689Y187244D01*\nX217744D01*\nX216314Y185144D02*\nX221644D01*\nX221744Y185244D01*\nX208744Y192714D02*\nX216314Y185144D01*\nX208744Y192714D02*\nY196177D01*\nX216421D02*\nX218311D01*\nX223844Y190644D01*\nX212705Y154100D02*\nY156744D01*\nX216561Y150244D02*\nX217744D01*\nX216874Y148144D02*\nX218614D01*\nX212705Y154100D02*\nX216561Y150244D01*\nX198783Y151100D02*\nX213918D01*\nX216874Y148144D01*\nX218614D02*\nX222300Y151830D01*\nY172300D01*\nX226418Y152979D02*\nY163000D01*\nX206185Y192803D02*\nY196177D01*\nY192803D02*\nX208144Y190844D01*\nX208614D01*\nX209844Y189614D01*\nY184344D02*\nY189614D01*\nX203744Y178244D02*\nX209844Y184344D01*\nX204614Y176144D02*\nX212744Y184274D01*\nY185744D01*\nX208744Y219406D02*\nY226783D01*\nX211303Y219406D02*\nY224224D01*\nX208283Y227244D02*\nX208744Y226783D01*\nX211303Y224224D01*\nX213205Y227244D02*\nX224400D01*\nX227361Y230205D01*\nX203214Y190244D02*\nX203744D01*\nX189144Y188244D02*\nX199744D01*\nX189984Y199701D02*\nX198441Y191244D01*\nX202214D01*\nX203214Y190244D01*\nX188705Y191205D02*\nY193244D01*\nX187283Y189783D02*\nX188705Y191205D01*\nX180862Y189783D02*\nX187283D01*\nX175401Y195244D02*\nX180862Y189783D01*\nX175401Y195244D02*\nY197244D01*\nY202087D01*\nX188144Y187244D02*\nX189144Y188244D01*\nX183244Y187244D02*\nX188144D01*\nX187284Y168244D02*\nY181205D01*\nX187244Y181244D02*\nX187284Y181205D01*\nX170087Y197244D02*\nX170126D01*\nX184026Y183344D01*\nX189344Y181544D02*\nY182114D01*\nY181544D02*\nX194744Y176144D01*\nX204614D01*\nX179787Y199701D02*\nX182504D01*\nX178744Y200744D02*\nX179787Y199701D01*\nX211283Y165244D02*\nY173244D01*\nX207784Y161744D02*\nX211283Y165244D01*\nX216205Y173244D02*\nY175205D01*\nY157926D02*\nY173244D01*\nY157926D02*\nX222300Y151830D01*\nX189744Y185244D02*\nX202244D01*\nX203244Y184244D02*\nX207744Y188744D01*\nX184026Y183344D02*\nX188114D01*\nX189344Y182114D01*\nX202244Y185244D02*\nX203244Y184244D01*\nX197030Y148286D02*\nX198770D01*\nX194100Y147400D02*\nX196144D01*\nX197030Y148286D01*\nX198770D02*\nX201312Y145744D01*\nX219184D02*\nX226418Y152979D01*\nX213244Y143744D02*\nY148744D01*\nY143744D02*\nX214744Y142244D01*\nX201312Y145744D02*\nX208274D01*\nX213874Y140144D01*\nX215614D01*\nX219184Y143714D01*\nY145744D01*\nX238642Y138944D02*\nX243593Y143895D01*\nX200125Y138944D02*\nX238642D01*\nX195569Y143500D02*\nX200125Y138944D01*\nX184895Y143500D02*\nX195569D01*\nX184500Y143895D02*\nX184895Y143500D01*\nX151744Y171744D02*\nX152994D01*\nX155494D02*\nX156744D01*\nX151744D02*\nY176744D01*\nX152744Y177744D01*\nX157402D01*\nX158495Y176651D01*\nX156744Y174900D02*\nX160246Y178402D01*\nX196214Y153744D02*\nX198783D01*\nX184172Y149400D02*\nX191870D01*\nX196214Y153744D01*\nX192600Y153100D02*\nX194244Y154744D01*\nX196244Y159244D02*\nX198283D01*\nX194244Y157244D02*\nX196244Y159244D01*\nX194244Y154744D02*\nY157244D01*\nX224744Y243244D02*\nX256956D01*\nX261300Y238900D01*\nX216587Y237244D02*\nX219587D01*\nX217087Y243244D02*\nX219587D01*\nX211205D02*\nX216688D01*\nX232600Y165100D02*\nY210130D01*\nX232800Y210330D01*\nY210500D01*\nX240000Y217700D01*\nX202244Y236244D02*\nX204244Y234244D01*\nX208205D01*\nX211205Y237244D01*\nX199744Y242714D02*\nY243244D01*\nX198744Y234244D02*\nY237244D01*\nX201244Y239744D01*\nX197714Y229244D02*\nX201244D01*\nX196570Y228100D02*\nX197714Y229244D01*\nX194830Y228100D02*\nX196570D01*\nX193600Y229330D02*\nX194830Y228100D01*\nX193600Y229330D02*\nY237100D01*\nX199744Y243244D01*\nX195700Y230200D02*\nX196973D01*\nX198117Y231344D01*\nX218208D01*\nX190800Y217300D02*\nY222374D01*\nX188144Y225030D02*\nX190800Y222374D01*\nX188144Y225030D02*\nY226770D01*\nX189374Y228000D01*\nX191114D01*\nX191370Y227744D01*\nX193489D01*\nX190244Y225900D02*\nX191400Y224744D01*\nX204244D01*\nX206744Y227244D01*\nX208283D01*\nX193489Y227744D02*\nX194333Y226900D01*\nX203000D01*\nX206244Y230144D01*\nX218705D01*\nX222305Y233744D01*\nX225156Y237244D02*\nX229156Y241244D01*\nX239856D01*\nX243900Y237200D01*\nX222305Y233744D02*\nX230744D01*\nX232244Y235244D01*\nY238244D01*\nX247244Y215244D02*\nX255244D01*\nX234744Y202744D02*\nX247244Y215244D01*\nX198544Y199889D02*\nY200091D01*\nX187798Y210837D02*\nX198544Y200091D01*\nX180867Y210837D02*\nX187798D01*\nX172774Y202744D02*\nX180867Y210837D01*\nX159087Y202744D02*\nX172774D01*\nX243593Y143895D02*\nX255442Y155744D01*\nX182244Y238744D02*\nX183744Y237244D01*\nY234244D02*\nY237244D01*\nX216205Y175205D02*\nX219244Y178244D01*\nX221744D01*\nX220200Y157244D02*\nY173730D01*\nX223844Y177374D01*\nY190644D01*\nX255442Y155744D02*\nX256744D01*\nX258244Y157244D01*\nX259244D01*\nX180487Y152844D02*\nX180587Y152744D01*\nX166000Y156310D02*\nY165300D01*\nY156310D02*\nX169466Y152844D01*\nX180487D01*\nX171744Y150744D02*\nX174488Y148000D01*\nX189900D01*\nX163538Y153951D02*\nX176088Y141400D01*\nX194700D01*\nX172414Y146771D02*\nX188715D01*\nX161744Y157441D02*\nY166744D01*\nY157441D02*\nX172414Y146771D01*\nX156744Y160744D02*\nY166744D01*\nY160744D02*\nX163538Y153951D01*\nX160088Y154900D02*\nX180744Y134244D01*\nX258744D01*\nX151744Y163244D02*\nY166744D01*\nY163244D02*\nX160088Y154900D01*\nX411244Y248744D02*\nX415244Y252744D01*\nX408032Y248744D02*\nX411244D01*\nX407232Y247944D02*\nX408032Y248744D01*\nX404444Y247944D02*\nX407232D01*\nX401963Y245463D02*\nX404444Y247944D01*\nX401963Y235100D02*\nY245463D01*\nX398207Y231344D02*\nX401963Y235100D01*\nX396688Y243244D02*\nX397087D01*\nX385900Y161744D02*\nX386700D01*\nX356244Y268744D02*\nX372244D01*\nX413941Y225283D02*\nX418744D01*\nX411200D02*\nX413941D01*\nX364152Y168244D02*\nX365500D01*\nX363500Y150072D02*\nY166244D01*\nX349587Y162100D02*\nX355731Y168244D01*\nX349587Y162100D02*\nY166576D01*\nX363500Y150000D02*\nX363572D01*\nX363500D02*\nY150072D01*\nX363572Y150000D02*\nX364172Y149400D01*\nX363500Y150072D02*\nX363572Y150000D01*\nX339087Y195244D02*\nY202744D01*\nX318400Y170088D02*\nX321744Y166744D01*\nX318400Y170088D02*\nY174900D01*\nX330244Y186744D01*\nY207744D01*\nX360244Y260744D02*\nX368244D01*\nX321044Y226544D02*\nX321144Y226644D01*\nX329644D01*\nX428517Y227283D02*\nX433744D01*\nX427300Y228500D02*\nX428517Y227283D01*\nX427300Y228500D02*\nY229705D01*\nX429400D02*\nX431900Y232205D01*\nX433744D01*\nX344418Y171744D02*\nX349587Y166576D01*\nX341744Y171744D02*\nX344418D01*\nX363987Y168409D02*\nX364152Y168244D01*\nX441300Y222900D02*\nY238900D01*\nX436100Y217700D02*\nX441300Y222900D01*\nX420000Y217700D02*\nX436100D01*\nX366244Y200656D02*\nX366300Y200600D01*\nX366244Y200656D02*\nY206787D01*\nX402300Y172300D02*\nX408500Y178500D01*\nY222583D01*\nX411200Y225283D01*\nX370500Y147400D02*\nX374100D01*\nX369900Y148000D02*\nX370500Y147400D01*\nX378783Y151100D02*\nY153744D01*\nX339087Y192113D02*\nY195244D01*\nY192113D02*\nX339900Y191300D01*\nX353100D01*\nX365901Y152400D02*\nY152744D01*\nX368715Y146771D02*\nX369300Y146186D01*\nX377900D01*\nX372100Y150000D02*\nX372600Y149500D01*\nX365500Y168244D02*\nX367284D01*\nX372205D02*\nX379400D01*\nX385900Y161744D01*\nX354901Y156600D02*\nY157244D01*\nX334600Y181244D02*\nX339587D01*\nX361344Y250875D02*\nX365675D01*\nX344902Y179403D02*\nY181244D01*\nX343900Y178402D02*\nX344902Y179403D01*\nX340246Y178402D02*\nX343900D01*\nX336744Y171744D02*\nY174900D01*\nX349587Y157244D02*\nY162100D01*\nX376244Y264744D02*\nX380244D01*\nX321244Y246244D02*\nX329144D01*\nX329244Y246344D01*\nX391205Y237244D02*\nX396587D01*\nX392705Y156744D02*\nY161744D01*\nX436400Y226783D02*\nX438744D01*\nX435900Y227283D02*\nX436400Y226783D01*\nX433744Y227283D02*\nX435900D01*\nX421400Y230205D02*\nX421900Y229705D01*\nX418744Y230205D02*\nX421400D01*\nX387784Y156744D02*\nY161744D01*\nX386700D02*\nX387784D01*\nX384200Y159244D02*\nX386700Y161744D01*\nX383205Y159244D02*\nX384200D01*\nX383205Y156700D02*\nY159244D01*\nY156700D02*\nX383705Y156200D01*\nY153744D02*\nY156200D01*\nX407361Y230205D02*\nX418744D01*\nX393205Y223558D02*\nY227244D01*\nY223558D02*\nX393862Y222900D01*\nY219406D02*\nY222900D01*\nX436400Y231705D02*\nX438744D01*\nX435900Y232205D02*\nX436400Y231705D01*\nX433744Y232205D02*\nX435900D01*\nX362504Y197079D02*\nY199701D01*\nY197079D02*\nX363783Y195800D01*\nY193244D02*\nY195800D01*\nX421900Y224783D02*\nX424744D01*\nX421400Y225283D02*\nX421900Y224783D01*\nX418744Y225283D02*\nX421400D01*\nX362244Y238744D02*\nY238783D01*\nX365675Y242213D01*\nY246544D02*\nX365700Y246519D01*\nX433700Y192402D02*\nX434198Y192900D01*\nX450200D01*\nX451900Y191200D01*\nX463500D01*\nX442244Y249205D02*\nX451800D01*\nX453795Y251200D01*\nX463500D01*\nX429244Y197100D02*\nX432000Y199856D01*\nY208002D01*\nX431100Y208902D02*\nX432000Y208002D01*\nX429244Y208902D02*\nX431100D01*\nX438744Y195402D02*\nX458702D01*\nX459300Y196000D01*\nX466400D01*\nX468300Y194100D01*\nY188200D02*\nY194100D01*\nX466300Y186200D02*\nX468300Y188200D01*\nX442600Y186200D02*\nX466300D01*\nX439244Y182844D02*\nX442600Y186200D01*\nX439244Y177902D02*\nY182844D01*\nX429244Y192402D02*\nX431100D01*\nX432000Y191502D01*\nY175402D02*\nY191502D01*\nX429744Y175402D02*\nX432000D01*\nX439700Y249205D02*\nX442244D01*\nX439700Y242197D02*\nY249205D01*\nY242197D02*\nX442500Y239397D01*\nY220156D02*\nY239397D01*\nX438744Y216400D02*\nX442500Y220156D01*\nX438744Y211402D02*\nY216400D01*\nX410500Y163700D02*\nY168409D01*\nY163700D02*\nX411500Y162700D01*\nX432200D01*\nX438744Y202700D02*\nY206087D01*\nY195402D02*\nY199100D01*\nX441500Y201856D01*\nY210602D01*\nX440700Y211402D02*\nX441500Y210602D01*\nX438744Y211402D02*\nX440700D01*\nX435413Y190087D02*\nX438744D01*\nX435100Y190400D02*\nX435413Y190087D01*\nX429100Y192402D02*\nX429244D01*\nX388000Y269800D02*\nX390100Y267700D01*\nX428500Y222900D02*\nY225900D01*\nX426300Y220700D02*\nX428500Y222900D01*\nX418900Y220700D02*\nX426300D01*\nX418900Y186044D02*\nX419744Y186888D01*\nY189283D01*\nX414700Y186600D02*\nY188100D01*\nY186600D02*\nX418254Y183046D01*\nX424446D01*\nX428487Y187087D01*\nX452900Y205200D02*\nY238483D01*\nX447100Y244283D02*\nX452900Y238483D01*\nX442244Y244283D02*\nX447100D01*\nX429744Y170087D02*\nY171856D01*\nX428700Y172900D02*\nX429744Y171856D01*\nX425900Y172900D02*\nX428700D01*\nX425500Y186600D02*\nX425987Y187087D01*\nX426100Y200700D02*\nY202587D01*\nX427100Y203587D01*\nX419744Y194205D02*\nX423500D01*\nX425303Y192402D01*\nX408900Y160100D02*\nY166300D01*\nX407900Y167300D02*\nX408900Y166300D01*\nX407900Y167300D02*\nY168900D01*\nX410700Y171700D01*\nY211200D01*\nX414700Y192200D02*\nY198387D01*\nX419900Y203587D01*\nX387200Y244600D02*\nX390100Y247500D01*\nX439244Y172587D02*\nX442300D01*\nX446700Y176987D01*\nY181800D01*\nX419900Y203587D02*\nX427100D01*\nX429244D01*\nX425987Y187087D02*\nX428487D01*\nX429244D01*\nX424695Y229705D02*\nX428500Y225900D01*\nX365700Y242213D02*\nY246519D01*\nX373800Y264500D02*\nX379100Y269800D01*\nX424695Y229705D02*\nX424744D01*\nX427300D01*\nX387200Y235700D02*\nY244600D01*\nX421900Y229705D02*\nX424744D01*\nX379100Y269800D02*\nX388000D01*\nX390100Y247500D02*\nY267700D01*\nX354901Y156600D02*\nX358000D01*\nX365901Y152400D02*\nX368900D01*\nX363500Y166244D02*\nX365500Y168244D01*\nX355731D02*\nX364152D01*\nX429100Y192402D02*\nY196900D01*\nX425303Y192402D02*\nX429100D01*\nX431100D02*\nX433700D01*\nX429244D02*\nY197100D01*\nX355244Y202244D02*\nX355401Y202087D01*\nX344901Y197244D02*\nX350087D01*\nX393862Y192630D02*\nY196177D01*\nY192630D02*\nX396748Y189744D01*\nX400244D01*\nX391303Y192630D02*\nY196177D01*\nY192630D02*\nX396689Y187244D01*\nX397744D01*\nX396314Y185144D02*\nX401644D01*\nX401744Y185244D01*\nX388744Y192714D02*\nX396314Y185144D01*\nX388744Y192714D02*\nY196177D01*\nX396421D02*\nX398311D01*\nX403844Y190644D01*\nX392705Y154100D02*\nY156744D01*\nX396561Y150244D02*\nX397744D01*\nX396874Y148144D02*\nX398614D01*\nX392705Y154100D02*\nX396561Y150244D01*\nX378783Y151100D02*\nX393918D01*\nX396874Y148144D01*\nX398614D02*\nX402300Y151830D01*\nY172300D01*\nX406418Y152979D02*\nY163000D01*\nX386185Y192803D02*\nY196177D01*\nY192803D02*\nX388144Y190844D01*\nX388614D01*\nX389844Y189614D01*\nY184344D02*\nY189614D01*\nX383744Y178244D02*\nX389844Y184344D01*\nX384614Y176144D02*\nX392744Y184274D01*\nY185744D01*\nX388744Y219406D02*\nY226783D01*\nX391303Y219406D02*\nY224224D01*\nX388283Y227244D02*\nX388744Y226783D01*\nX391303Y224224D01*\nX393205Y227244D02*\nX404400D01*\nX407361Y230205D01*\nX383214Y190244D02*\nX383744D01*\nX369144Y188244D02*\nX379744D01*\nX369984Y199701D02*\nX378441Y191244D01*\nX382214D01*\nX383214Y190244D01*\nX368705Y191205D02*\nY193244D01*\nX367283Y189783D02*\nX368705Y191205D01*\nX360862Y189783D02*\nX367283D01*\nX355401Y195244D02*\nX360862Y189783D01*\nX355401Y195244D02*\nY197244D01*\nY202087D01*\nX368144Y187244D02*\nX369144Y188244D01*\nX363244Y187244D02*\nX368144D01*\nX367284Y168244D02*\nY181205D01*\nX367244Y181244D02*\nX367284Y181205D01*\nX350087Y197244D02*\nX350126D01*\nX364026Y183344D01*\nX369344Y181544D02*\nY182114D01*\nY181544D02*\nX374744Y176144D01*\nX384614D01*\nX359787Y199701D02*\nX362504D01*\nX358744Y200744D02*\nX359787Y199701D01*\nX391283Y165244D02*\nY173244D01*\nX387784Y161744D02*\nX391283Y165244D01*\nX396205Y173244D02*\nY175205D01*\nY157926D02*\nY173244D01*\nY157926D02*\nX402300Y151830D01*\nX369744Y185244D02*\nX382244D01*\nX383244Y184244D02*\nX387744Y188744D01*\nX364026Y183344D02*\nX368114D01*\nX369344Y182114D01*\nX382244Y185244D02*\nX383244Y184244D01*\nX377030Y148286D02*\nX378770D01*\nX374100Y147400D02*\nX376144D01*\nX377030Y148286D01*\nX378770D02*\nX381312Y145744D01*\nX399184D02*\nX406418Y152979D01*\nX393244Y143744D02*\nY148744D01*\nY143744D02*\nX394744Y142244D01*\nX381312Y145744D02*\nX388274D01*\nX393874Y140144D01*\nX395614D01*\nX399184Y143714D01*\nY145744D01*\nX418642Y138944D02*\nX423593Y143895D01*\nX380125Y138944D02*\nX418642D01*\nX375569Y143500D02*\nX380125Y138944D01*\nX364895Y143500D02*\nX375569D01*\nX364500Y143895D02*\nX364895Y143500D01*\nX331744Y171744D02*\nX332994D01*\nX335494D02*\nX336744D01*\nX331744D02*\nY176744D01*\nX332744Y177744D01*\nX337402D01*\nX338495Y176651D01*\nX336744Y174900D02*\nX340246Y178402D01*\nX376214Y153744D02*\nX378783D01*\nX364172Y149400D02*\nX371870D01*\nX376214Y153744D01*\nX372600Y153100D02*\nX374244Y154744D01*\nX376244Y159244D02*\nX378283D01*\nX374244Y157244D02*\nX376244Y159244D01*\nX374244Y154744D02*\nY157244D01*\nX404744Y243244D02*\nX436956D01*\nX441300Y238900D01*\nX396587Y237244D02*\nX399587D01*\nX397087Y243244D02*\nX399587D01*\nX391205D02*\nX396688D01*\nX412600Y165100D02*\nY210130D01*\nX412800Y210330D01*\nY210500D01*\nX420000Y217700D01*\nX382244Y236244D02*\nX384244Y234244D01*\nX388205D01*\nX391205Y237244D01*\nX379744Y242714D02*\nY243244D01*\nX378744Y234244D02*\nY237244D01*\nX381244Y239744D01*\nX377714Y229244D02*\nX381244D01*\nX376570Y228100D02*\nX377714Y229244D01*\nX374830Y228100D02*\nX376570D01*\nX373600Y229330D02*\nX374830Y228100D01*\nX373600Y229330D02*\nY237100D01*\nX379744Y243244D01*\nX375700Y230200D02*\nX376973D01*\nX378117Y231344D01*\nX398207D01*\nX370800Y217300D02*\nY222374D01*\nX368144Y225030D02*\nX370800Y222374D01*\nX368144Y225030D02*\nY226770D01*\nX369374Y228000D01*\nX371114D01*\nX371370Y227744D01*\nX373489D01*\nX370244Y225900D02*\nX371400Y224744D01*\nX384244D01*\nX386744Y227244D01*\nX388283D01*\nX373489Y227744D02*\nX374333Y226900D01*\nX383000D01*\nX386244Y230144D01*\nX398705D01*\nX402305Y233744D01*\nX405156Y237244D02*\nX409156Y241244D01*\nX419856D01*\nX423900Y237200D01*\nX402305Y233744D02*\nX410744D01*\nX412244Y235244D01*\nY238244D01*\nX427244Y215244D02*\nX435244D01*\nX414744Y202744D02*\nX427244Y215244D01*\nX378544Y199889D02*\nY200091D01*\nX367798Y210837D02*\nX378544Y200091D01*\nX360867Y210837D02*\nX367798D01*\nX352774Y202744D02*\nX360867Y210837D01*\nX339087Y202744D02*\nX352774D01*\nX423593Y143895D02*\nX435442Y155744D01*\nX362244Y238744D02*\nX363744Y237244D01*\nY234244D02*\nY237244D01*\nX396205Y175205D02*\nX399244Y178244D01*\nX401744D01*\nX400200Y157244D02*\nY173730D01*\nX403844Y177374D01*\nY190644D01*\nX435442Y155744D02*\nX436744D01*\nX438244Y157244D01*\nX439244D01*\nX360487Y152844D02*\nX360587Y152744D01*\nX346000Y156310D02*\nY165300D01*\nY156310D02*\nX349466Y152844D01*\nX360487D01*\nX351744Y150744D02*\nX354488Y148000D01*\nX369900D01*\nX343538Y153951D02*\nX356088Y141400D01*\nX374700D01*\nX352414Y146771D02*\nX368715D01*\nX341744Y157441D02*\nY166744D01*\nY157441D02*\nX352414Y146771D01*\nX336744Y160744D02*\nY166744D01*\nY160744D02*\nX343538Y153951D01*\nX340088Y154900D02*\nX360744Y134244D01*\nX438744D01*\nX331744Y163244D02*\nY166744D01*\nY163244D02*\nX340088Y154900D01*\nX231244Y428744D02*\nX235244Y432744D01*\nX228032Y428744D02*\nX231244D01*\nX227232Y427944D02*\nX228032Y428744D01*\nX224444Y427944D02*\nX227232D01*\nX221963Y425463D02*\nX224444Y427944D01*\nX221963Y415099D02*\nY425463D01*\nX218208Y411344D02*\nX221963Y415099D01*\nX216688Y423244D02*\nX217087D01*\nX205900Y341744D02*\nX206700D01*\nX176244Y448744D02*\nX192244D01*\nX233941Y405283D02*\nX238744D01*\nX231200D02*\nX233941D01*\nX184152Y348244D02*\nX185500D01*\nX183500Y330072D02*\nY346244D01*\nX169587Y342100D02*\nX175731Y348244D01*\nX169587Y342100D02*\nY346576D01*\nX183500Y330000D02*\nX183572D01*\nX183500D02*\nY330072D01*\nX183572Y330000D02*\nX184172Y329400D01*\nX183500Y330072D02*\nX183572Y330000D01*\nX159087Y375244D02*\nY382744D01*\nX138400Y350088D02*\nX141744Y346744D01*\nX138400Y350088D02*\nY354900D01*\nX150244Y366744D01*\nY387744D01*\nX180244Y440744D02*\nX188244D01*\nX141044Y406544D02*\nX141144Y406644D01*\nX149644D01*\nX248517Y407283D02*\nX253744D01*\nX247300Y408500D02*\nX248517Y407283D01*\nX247300Y408500D02*\nY409705D01*\nX249400D02*\nX251900Y412205D01*\nX253744D01*\nX164418Y351744D02*\nX169587Y346576D01*\nX161744Y351744D02*\nX164418D01*\nX183987Y348409D02*\nX184152Y348244D01*\nX261300Y402900D02*\nY418900D01*\nX256100Y397700D02*\nX261300Y402900D01*\nX240000Y397700D02*\nX256100D01*\nX186244Y380656D02*\nX186300Y380600D01*\nX186244Y380656D02*\nY386787D01*\nX222300Y352300D02*\nX228500Y358500D01*\nY402583D01*\nX231200Y405283D01*\nX190500Y327400D02*\nX194100D01*\nX189900Y328000D02*\nX190500Y327400D01*\nX198783Y331100D02*\nY333744D01*\nX159087Y372113D02*\nY375244D01*\nY372113D02*\nX159900Y371300D01*\nX173100D01*\nX185901Y332400D02*\nY332744D01*\nX188715Y326771D02*\nX189300Y326186D01*\nX197900D01*\nX192100Y330000D02*\nX192600Y329500D01*\nX185500Y348244D02*\nX187284D01*\nX192205D02*\nX199400D01*\nX205900Y341744D01*\nX174901Y336600D02*\nY337244D01*\nX154600Y361244D02*\nX159587D01*\nX181344Y430875D02*\nX185675D01*\nX164902Y359403D02*\nY361244D01*\nX163900Y358402D02*\nX164902Y359403D01*\nX160246Y358402D02*\nX163900D01*\nX156744Y351744D02*\nY354900D01*\nX169587Y337244D02*\nY342100D01*\nX196244Y444744D02*\nX200244D01*\nX141244Y426244D02*\nX149144D01*\nX149244Y426344D01*\nX211205Y417244D02*\nX216587D01*\nX212705Y336744D02*\nY341744D01*\nX256400Y406783D02*\nX258744D01*\nX255900Y407283D02*\nX256400Y406783D01*\nX253744Y407283D02*\nX255900D01*\nX241400Y410205D02*\nX241900Y409705D01*\nX238744Y410205D02*\nX241400D01*\nX207784Y336744D02*\nY341744D01*\nX206700D02*\nX207784D01*\nX204200Y339244D02*\nX206700Y341744D01*\nX203205Y339244D02*\nX204200D01*\nX203205Y336700D02*\nY339244D01*\nY336700D02*\nX203705Y336200D01*\nY333744D02*\nY336200D01*\nX227361Y410205D02*\nX238744D01*\nX213205Y403558D02*\nY407244D01*\nY403558D02*\nX213862Y402900D01*\nY399406D02*\nY402900D01*\nX256400Y411705D02*\nX258744D01*\nX255900Y412205D02*\nX256400Y411705D01*\nX253744Y412205D02*\nX255900D01*\nX182504Y377079D02*\nY379701D01*\nY377079D02*\nX183783Y375800D01*\nY373244D02*\nY375800D01*\nX241900Y404783D02*\nX244744D01*\nX241400Y405283D02*\nX241900Y404783D01*\nX238744Y405283D02*\nX241400D01*\nX182244Y418744D02*\nY418783D01*\nX185675Y422213D01*\nY426544D02*\nX185700Y426519D01*\nX253700Y372402D02*\nX254198Y372900D01*\nX270200D01*\nX271900Y371200D01*\nX283500D01*\nX262244Y429205D02*\nX271800D01*\nX273795Y431200D01*\nX283500D01*\nX249244Y377100D02*\nX252000Y379856D01*\nY388002D01*\nX251100Y388902D02*\nX252000Y388002D01*\nX249244Y388902D02*\nX251100D01*\nX258744Y375402D02*\nX278702D01*\nX279300Y376000D01*\nX286400D01*\nX288300Y374100D01*\nY368200D02*\nY374100D01*\nX286300Y366200D02*\nX288300Y368200D01*\nX262600Y366200D02*\nX286300D01*\nX259244Y362844D02*\nX262600Y366200D01*\nX259244Y357902D02*\nY362844D01*\nX249244Y372402D02*\nX251100D01*\nX252000Y371502D01*\nY355402D02*\nY371502D01*\nX249744Y355402D02*\nX252000D01*\nX259700Y429205D02*\nX262244D01*\nX259700Y422197D02*\nY429205D01*\nY422197D02*\nX262500Y419397D01*\nY400156D02*\nY419397D01*\nX258744Y396400D02*\nX262500Y400156D01*\nX258744Y391402D02*\nY396400D01*\nX230500Y343700D02*\nY348409D01*\nY343700D02*\nX231500Y342700D01*\nX252200D01*\nX258744Y382700D02*\nY386087D01*\nY375402D02*\nY379100D01*\nX261500Y381856D01*\nY390602D01*\nX260700Y391402D02*\nX261500Y390602D01*\nX258744Y391402D02*\nX260700D01*\nX255413Y370087D02*\nX258744D01*\nX255100Y370400D02*\nX255413Y370087D01*\nX249100Y372402D02*\nX249244D01*\nX208000Y449800D02*\nX210100Y447700D01*\nX248500Y402900D02*\nY405900D01*\nX246300Y400700D02*\nX248500Y402900D01*\nX238900Y400700D02*\nX246300D01*\nX238900Y366044D02*\nX239744Y366888D01*\nY369283D01*\nX234700Y366600D02*\nY368100D01*\nY366600D02*\nX238254Y363046D01*\nX244446D01*\nX248487Y367087D01*\nX272900Y385200D02*\nY418483D01*\nX267100Y424283D02*\nX272900Y418483D01*\nX262244Y424283D02*\nX267100D01*\nX249744Y350087D02*\nY351856D01*\nX248700Y352900D02*\nX249744Y351856D01*\nX245900Y352900D02*\nX248700D01*\nX245500Y366600D02*\nX245987Y367087D01*\nX246100Y380700D02*\nY382587D01*\nX247100Y383587D01*\nX239744Y374205D02*\nX243500D01*\nX245303Y372402D01*\nX228900Y340100D02*\nY346300D01*\nX227900Y347300D02*\nX228900Y346300D01*\nX227900Y347300D02*\nY348900D01*\nX230700Y351700D01*\nY391200D01*\nX234700Y372200D02*\nY378387D01*\nX239900Y383587D01*\nX207200Y424600D02*\nX210100Y427500D01*\nX259244Y352587D02*\nX262300D01*\nX266700Y356987D01*\nY361800D01*\nX239900Y383587D02*\nX247100D01*\nX249244D01*\nX245987Y367087D02*\nX248487D01*\nX249244D01*\nX244695Y409705D02*\nX248500Y405900D01*\nX185700Y422213D02*\nY426519D01*\nX193800Y444500D02*\nX199100Y449800D01*\nX244695Y409705D02*\nX244744D01*\nX247300D01*\nX207200Y415700D02*\nY424600D01*\nX241900Y409705D02*\nX244744D01*\nX199100Y449800D02*\nX208000D01*\nX210100Y427500D02*\nY447700D01*\nX174901Y336600D02*\nX178000D01*\nX185901Y332400D02*\nX188900D01*\nX183500Y346244D02*\nX185500Y348244D01*\nX175731D02*\nX184152D01*\nX249100Y372402D02*\nY376900D01*\nX245303Y372402D02*\nX249100D01*\nX251100D02*\nX253700D01*\nX249244D02*\nY377100D01*\nX175244Y382244D02*\nX175401Y382087D01*\nX164901Y377244D02*\nX170087D01*\nX213862Y372630D02*\nY376177D01*\nY372630D02*\nX216748Y369744D01*\nX220244D01*\nX211303Y372630D02*\nY376177D01*\nY372630D02*\nX216689Y367244D01*\nX217744D01*\nX216314Y365144D02*\nX221644D01*\nX221744Y365244D01*\nX208744Y372714D02*\nX216314Y365144D01*\nX208744Y372714D02*\nY376177D01*\nX216421D02*\nX218311D01*\nX223844Y370644D01*\nX212705Y334100D02*\nY336744D01*\nX216561Y330244D02*\nX217744D01*\nX216874Y328144D02*\nX218614D01*\nX212705Y334100D02*\nX216561Y330244D01*\nX198783Y331100D02*\nX213918D01*\nX216874Y328144D01*\nX218614D02*\nX222300Y331830D01*\nY352300D01*\nX226418Y332979D02*\nY343000D01*\nX206185Y372803D02*\nY376177D01*\nY372803D02*\nX208144Y370844D01*\nX208614D01*\nX209844Y369614D01*\nY364344D02*\nY369614D01*\nX203744Y358244D02*\nX209844Y364344D01*\nX204614Y356144D02*\nX212744Y364274D01*\nY365744D01*\nX208744Y399406D02*\nY406783D01*\nX211303Y399406D02*\nY404224D01*\nX208283Y407244D02*\nX208744Y406783D01*\nX211303Y404224D01*\nX213205Y407244D02*\nX224400D01*\nX227361Y410205D01*\nX203214Y370244D02*\nX203744D01*\nX189144Y368244D02*\nX199744D01*\nX189984Y379701D02*\nX198441Y371244D01*\nX202214D01*\nX203214Y370244D01*\nX188705Y371205D02*\nY373244D01*\nX187283Y369783D02*\nX188705Y371205D01*\nX180862Y369783D02*\nX187283D01*\nX175401Y375244D02*\nX180862Y369783D01*\nX175401Y375244D02*\nY377244D01*\nY382087D01*\nX188144Y367244D02*\nX189144Y368244D01*\nX183244Y367244D02*\nX188144D01*\nX187284Y348244D02*\nY361205D01*\nX187244Y361244D02*\nX187284Y361205D01*\nX170087Y377244D02*\nX170126D01*\nX184026Y363344D01*\nX189344Y361544D02*\nY362114D01*\nY361544D02*\nX194744Y356144D01*\nX204614D01*\nX179787Y379701D02*\nX182504D01*\nX178744Y380744D02*\nX179787Y379701D01*\nX211283Y345244D02*\nY353244D01*\nX207784Y341744D02*\nX211283Y345244D01*\nX216205Y353244D02*\nY355205D01*\nY337926D02*\nY353244D01*\nY337926D02*\nX222300Y331830D01*\nX189744Y365244D02*\nX202244D01*\nX203244Y364244D02*\nX207744Y368744D01*\nX184026Y363344D02*\nX188114D01*\nX189344Y362114D01*\nX202244Y365244D02*\nX203244Y364244D01*\nX197030Y328286D02*\nX198770D01*\nX194100Y327400D02*\nX196144D01*\nX197030Y328286D01*\nX198770D02*\nX201312Y325744D01*\nX219184D02*\nX226418Y332979D01*\nX213244Y323744D02*\nY328744D01*\nY323744D02*\nX214744Y322244D01*\nX201312Y325744D02*\nX208274D01*\nX213874Y320144D01*\nX215614D01*\nX219184Y323714D01*\nY325744D01*\nX238642Y318944D02*\nX243593Y323895D01*\nX200125Y318944D02*\nX238642D01*\nX195569Y323500D02*\nX200125Y318944D01*\nX184895Y323500D02*\nX195569D01*\nX184500Y323895D02*\nX184895Y323500D01*\nX151744Y351744D02*\nX152994D01*\nX155494D02*\nX156744D01*\nX151744D02*\nY356744D01*\nX152744Y357744D01*\nX157402D01*\nX158495Y356651D01*\nX156744Y354900D02*\nX160246Y358402D01*\nX196214Y333744D02*\nX198783D01*\nX184172Y329400D02*\nX191870D01*\nX196214Y333744D01*\nX192600Y333100D02*\nX194244Y334744D01*\nX196244Y339244D02*\nX198283D01*\nX194244Y337244D02*\nX196244Y339244D01*\nX194244Y334744D02*\nY337244D01*\nX224744Y423244D02*\nX256956D01*\nX261300Y418900D01*\nX216587Y417244D02*\nX219587D01*\nX217087Y423244D02*\nX219587D01*\nX211205D02*\nX216688D01*\nX232600Y345100D02*\nY390130D01*\nX232800Y390330D01*\nY390500D01*\nX240000Y397700D01*\nX202244Y416244D02*\nX204244Y414244D01*\nX208205D01*\nX211205Y417244D01*\nX199744Y422714D02*\nY423244D01*\nX198744Y414244D02*\nY417244D01*\nX201244Y419744D01*\nX197714Y409244D02*\nX201244D01*\nX196570Y408100D02*\nX197714Y409244D01*\nX194830Y408100D02*\nX196570D01*\nX193600Y409330D02*\nX194830Y408100D01*\nX193600Y409330D02*\nY417100D01*\nX199744Y423244D01*\nX195700Y410200D02*\nX196973D01*\nX198117Y411344D01*\nX218208D01*\nX190800Y397300D02*\nY402374D01*\nX188144Y405030D02*\nX190800Y402374D01*\nX188144Y405030D02*\nY406770D01*\nX189374Y408000D01*\nX191114D01*\nX191370Y407744D01*\nX193489D01*\nX190244Y405900D02*\nX191400Y404744D01*\nX204244D01*\nX206744Y407244D01*\nX208283D01*\nX193489Y407744D02*\nX194333Y406900D01*\nX203000D01*\nX206244Y410144D01*\nX218705D01*\nX222305Y413744D01*\nX225156Y417244D02*\nX229156Y421244D01*\nX239856D01*\nX243900Y417200D01*\nX222305Y413744D02*\nX230744D01*\nX232244Y415244D01*\nY418244D01*\nX247244Y395244D02*\nX255244D01*\nX234744Y382744D02*\nX247244Y395244D01*\nX198544Y379889D02*\nY380091D01*\nX187798Y390837D02*\nX198544Y380091D01*\nX180867Y390837D02*\nX187798D01*\nX172774Y382744D02*\nX180867Y390837D01*\nX159087Y382744D02*\nX172774D01*\nX243593Y323895D02*\nX255442Y335744D01*\nX182244Y418744D02*\nX183744Y417244D01*\nY414244D02*\nY417244D01*\nX216205Y355205D02*\nX219244Y358244D01*\nX221744D01*\nX220200Y337244D02*\nY353730D01*\nX223844Y357374D01*\nY370644D01*\nX255442Y335744D02*\nX256744D01*\nX258244Y337244D01*\nX259244D01*\nX180487Y332844D02*\nX180587Y332744D01*\nX166000Y336310D02*\nY345300D01*\nY336310D02*\nX169466Y332844D01*\nX180487D01*\nX171744Y330744D02*\nX174488Y328000D01*\nX189900D01*\nX163538Y333950D02*\nX176088Y321400D01*\nX194700D01*\nX172414Y326771D02*\nX188715D01*\nX161744Y337441D02*\nY346744D01*\nY337441D02*\nX172414Y326771D01*\nX156744Y340744D02*\nY346744D01*\nY340744D02*\nX163538Y333950D01*\nX160088Y334900D02*\nX180744Y314244D01*\nX258744D01*\nX151744Y343244D02*\nY346744D01*\nY343244D02*\nX160088Y334900D01*\nX411244Y428744D02*\nX415244Y432744D01*\nX408032Y428744D02*\nX411244D01*\nX407232Y427944D02*\nX408032Y428744D01*\nX404444Y427944D02*\nX407232D01*\nX401963Y425463D02*\nX404444Y427944D01*\nX401963Y415099D02*\nY425463D01*\nX398207Y411344D02*\nX401963Y415099D01*\nX396688Y423244D02*\nX397087D01*\nX385900Y341744D02*\nX386700D01*\nX356244Y448744D02*\nX372244D01*\nX413941Y405283D02*\nX418744D01*\nX411200D02*\nX413941D01*\nX364152Y348244D02*\nX365500D01*\nX363500Y330072D02*\nY346244D01*\nX349587Y342100D02*\nX355731Y348244D01*\nX349587Y342100D02*\nY346576D01*\nX363500Y330000D02*\nX363572D01*\nX363500D02*\nY330072D01*\nX363572Y330000D02*\nX364172Y329400D01*\nX363500Y330072D02*\nX363572Y330000D01*\nX339087Y375244D02*\nY382744D01*\nX318400Y350088D02*\nX321744Y346744D01*\nX318400Y350088D02*\nY354900D01*\nX330244Y366744D01*\nY387744D01*\nX360244Y440744D02*\nX368244D01*\nX321044Y406544D02*\nX321144Y406644D01*\nX329644D01*\nX428517Y407283D02*\nX433744D01*\nX427300Y408500D02*\nX428517Y407283D01*\nX427300Y408500D02*\nY409705D01*\nX429400D02*\nX431900Y412205D01*\nX433744D01*\nX344418Y351744D02*\nX349587Y346576D01*\nX341744Y351744D02*\nX344418D01*\nX363987Y348409D02*\nX364152Y348244D01*\nX441300Y402900D02*\nY418900D01*\nX436100Y397700D02*\nX441300Y402900D01*\nX420000Y397700D02*\nX436100D01*\nX366244Y380656D02*\nX366300Y380600D01*\nX366244Y380656D02*\nY386787D01*\nX402300Y352300D02*\nX408500Y358500D01*\nY402583D01*\nX411200Y405283D01*\nX370500Y327400D02*\nX374100D01*\nX369900Y328000D02*\nX370500Y327400D01*\nX378783Y331100D02*\nY333744D01*\nX339087Y372113D02*\nY375244D01*\nY372113D02*\nX339900Y371300D01*\nX353100D01*\nX365901Y332400D02*\nY332744D01*\nX368715Y326771D02*\nX369300Y326186D01*\nX377900D01*\nX372100Y330000D02*\nX372600Y329500D01*\nX365500Y348244D02*\nX367284D01*\nX372205D02*\nX379400D01*\nX385900Y341744D01*\nX354901Y336600D02*\nY337244D01*\nX334600Y361244D02*\nX339587D01*\nX361344Y430875D02*\nX365675D01*\nX344902Y359403D02*\nY361244D01*\nX343900Y358402D02*\nX344902Y359403D01*\nX340246Y358402D02*\nX343900D01*\nX336744Y351744D02*\nY354900D01*\nX349587Y337244D02*\nY342100D01*\nX376244Y444744D02*\nX380244D01*\nX321244Y426244D02*\nX329144D01*\nX329244Y426344D01*\nX391205Y417244D02*\nX396587D01*\nX392705Y336744D02*\nY341744D01*\nX436400Y406783D02*\nX438744D01*\nX435900Y407283D02*\nX436400Y406783D01*\nX433744Y407283D02*\nX435900D01*\nX421400Y410205D02*\nX421900Y409705D01*\nX418744Y410205D02*\nX421400D01*\nX387784Y336744D02*\nY341744D01*\nX386700D02*\nX387784D01*\nX384200Y339244D02*\nX386700Y341744D01*\nX383205Y339244D02*\nX384200D01*\nX383205Y336700D02*\nY339244D01*\nY336700D02*\nX383705Y336200D01*\nY333744D02*\nY336200D01*\nX407361Y410205D02*\nX418744D01*\nX393205Y403558D02*\nY407244D01*\nY403558D02*\nX393862Y402900D01*\nY399406D02*\nY402900D01*\nX436400Y411705D02*\nX438744D01*\nX435900Y412205D02*\nX436400Y411705D01*\nX433744Y412205D02*\nX435900D01*\nX362504Y377079D02*\nY379701D01*\nY377079D02*\nX363783Y375800D01*\nY373244D02*\nY375800D01*\nX421900Y404783D02*\nX424744D01*\nX421400Y405283D02*\nX421900Y404783D01*\nX418744Y405283D02*\nX421400D01*\nX362244Y418744D02*\nY418783D01*\nX365675Y422213D01*\nY426544D02*\nX365700Y426519D01*\nX433700Y372402D02*\nX434198Y372900D01*\nX450200D01*\nX451900Y371200D01*\nX463500D01*\nX442244Y429205D02*\nX451800D01*\nX453795Y431200D01*\nX463500D01*\nX429244Y377100D02*\nX432000Y379856D01*\nY388002D01*\nX431100Y388902D02*\nX432000Y388002D01*\nX429244Y388902D02*\nX431100D01*\nX438744Y375402D02*\nX458702D01*\nX459300Y376000D01*\nX466400D01*\nX468300Y374100D01*\nY368200D02*\nY374100D01*\nX466300Y366200D02*\nX468300Y368200D01*\nX442600Y366200D02*\nX466300D01*\nX439244Y362844D02*\nX442600Y366200D01*\nX439244Y357902D02*\nY362844D01*\nX429244Y372402D02*\nX431100D01*\nX432000Y371502D01*\nY355402D02*\nY371502D01*\nX429744Y355402D02*\nX432000D01*\nX439700Y429205D02*\nX442244D01*\nX439700Y422197D02*\nY429205D01*\nY422197D02*\nX442500Y419397D01*\nY400156D02*\nY419397D01*\nX438744Y396400D02*\nX442500Y400156D01*\nX438744Y391402D02*\nY396400D01*\nX410500Y343700D02*\nY348409D01*\nY343700D02*\nX411500Y342700D01*\nX432200D01*\nX438744Y382700D02*\nY386087D01*\nY375402D02*\nY379100D01*\nX441500Y381856D01*\nY390602D01*\nX440700Y391402D02*\nX441500Y390602D01*\nX438744Y391402D02*\nX440700D01*\nX435413Y370087D02*\nX438744D01*\nX435100Y370400D02*\nX435413Y370087D01*\nX429100Y372402D02*\nX429244D01*\nX388000Y449800D02*\nX390100Y447700D01*\nX428500Y402900D02*\nY405900D01*\nX426300Y400700D02*\nX428500Y402900D01*\nX418900Y400700D02*\nX426300D01*\nX418900Y366044D02*\nX419744Y366888D01*\nY369283D01*\nX414700Y366600D02*\nY368100D01*\nY366600D02*\nX418254Y363046D01*\nX424446D01*\nX428487Y367087D01*\nX452900Y385200D02*\nY418483D01*\nX447100Y424283D02*\nX452900Y418483D01*\nX442244Y424283D02*\nX447100D01*\nX429744Y350087D02*\nY351856D01*\nX428700Y352900D02*\nX429744Y351856D01*\nX425900Y352900D02*\nX428700D01*\nX425500Y366600D02*\nX425987Y367087D01*\nX426100Y380700D02*\nY382587D01*\nX427100Y383587D01*\nX419744Y374205D02*\nX423500D01*\nX425303Y372402D01*\nX408900Y340100D02*\nY346300D01*\nX407900Y347300D02*\nX408900Y346300D01*\nX407900Y347300D02*\nY348900D01*\nX410700Y351700D01*\nY391200D01*\nX414700Y372200D02*\nY378387D01*\nX419900Y383587D01*\nX387200Y424600D02*\nX390100Y427500D01*\nX439244Y352587D02*\nX442300D01*\nX446700Y356987D01*\nY361800D01*\nX419900Y383587D02*\nX427100D01*\nX429244D01*\nX425987Y367087D02*\nX428487D01*\nX429244D01*\nX424695Y409705D02*\nX428500Y405900D01*\nX365700Y422213D02*\nY426519D01*\nX373800Y444500D02*\nX379100Y449800D01*\nX424695Y409705D02*\nX424744D01*\nX427300D01*\nX387200Y415700D02*\nY424600D01*\nX421900Y409705D02*\nX424744D01*\nX379100Y449800D02*\nX388000D01*\nX390100Y427500D02*\nY447700D01*\nX354901Y336600D02*\nX358000D01*\nX365901Y332400D02*\nX368900D01*\nX363500Y346244D02*\nX365500Y348244D01*\nX355731D02*\nX364152D01*\nX429100Y372402D02*\nY376900D01*\nX425303Y372402D02*\nX429100D01*\nX431100D02*\nX433700D01*\nX429244D02*\nY377100D01*\nX355244Y382244D02*\nX355401Y382087D01*\nX344901Y377244D02*\nX350087D01*\nX393862Y372630D02*\nY376177D01*\nY372630D02*\nX396748Y369744D01*\nX400244D01*\nX391303Y372630D02*\nY376177D01*\nY372630D02*\nX396689Y367244D01*\nX397744D01*\nX396314Y365144D02*\nX401644D01*\nX401744Y365244D01*\nX388744Y372714D02*\nX396314Y365144D01*\nX388744Y372714D02*\nY376177D01*\nX396421D02*\nX398311D01*\nX403844Y370644D01*\nX392705Y334100D02*\nY336744D01*\nX396561Y330244D02*\nX397744D01*\nX396874Y328144D02*\nX398614D01*\nX392705Y334100D02*\nX396561Y330244D01*\nX378783Y331100D02*\nX393918D01*\nX396874Y328144D01*\nX398614D02*\nX402300Y331830D01*\nY352300D01*\nX406418Y332979D02*\nY343000D01*\nX386185Y372803D02*\nY376177D01*\nY372803D02*\nX388144Y370844D01*\nX388614D01*\nX389844Y369614D01*\nY364344D02*\nY369614D01*\nX383744Y358244D02*\nX389844Y364344D01*\nX384614Y356144D02*\nX392744Y364274D01*\nY365744D01*\nX388744Y399406D02*\nY406783D01*\nX391303Y399406D02*\nY404224D01*\nX388283Y407244D02*\nX388744Y406783D01*\nX391303Y404224D01*\nX393205Y407244D02*\nX404400D01*\nX407361Y410205D01*\nX383214Y370244D02*\nX383744D01*\nX369144Y368244D02*\nX379744D01*\nX369984Y379701D02*\nX378441Y371244D01*\nX382214D01*\nX383214Y370244D01*\nX368705Y371205D02*\nY373244D01*\nX367283Y369783D02*\nX368705Y371205D01*\nX360862Y369783D02*\nX367283D01*\nX355401Y375244D02*\nX360862Y369783D01*\nX355401Y375244D02*\nY377244D01*\nY382087D01*\nX368144Y367244D02*\nX369144Y368244D01*\nX363244Y367244D02*\nX368144D01*\nX367284Y348244D02*\nY361205D01*\nX367244Y361244D02*\nX367284Y361205D01*\nX350087Y377244D02*\nX350126D01*\nX364026Y363344D01*\nX369344Y361544D02*\nY362114D01*\nY361544D02*\nX374744Y356144D01*\nX384614D01*\nX359787Y379701D02*\nX362504D01*\nX358744Y380744D02*\nX359787Y379701D01*\nX391283Y345244D02*\nY353244D01*\nX387784Y341744D02*\nX391283Y345244D01*\nX396205Y353244D02*\nY355205D01*\nY337926D02*\nY353244D01*\nY337926D02*\nX402300Y331830D01*\nX369744Y365244D02*\nX382244D01*\nX383244Y364244D02*\nX387744Y368744D01*\nX364026Y363344D02*\nX368114D01*\nX369344Y362114D01*\nX382244Y365244D02*\nX383244Y364244D01*\nX377030Y328286D02*\nX378770D01*\nX374100Y327400D02*\nX376144D01*\nX377030Y328286D01*\nX378770D02*\nX381312Y325744D01*\nX399184D02*\nX406418Y332979D01*\nX393244Y323744D02*\nY328744D01*\nY323744D02*\nX394744Y322244D01*\nX381312Y325744D02*\nX388274D01*\nX393874Y320144D01*\nX395614D01*\nX399184Y323714D01*\nY325744D01*\nX418642Y318944D02*\nX423593Y323895D01*\nX380125Y318944D02*\nX418642D01*\nX375569Y323500D02*\nX380125Y318944D01*\nX364895Y323500D02*\nX375569D01*\nX364500Y323895D02*\nX364895Y323500D01*\nX331744Y351744D02*\nX332994D01*\nX335494D02*\nX336744D01*\nX331744D02*\nY356744D01*\nX332744Y357744D01*\nX337402D01*\nX338495Y356651D01*\nX336744Y354900D02*\nX340246Y358402D01*\nX376214Y333744D02*\nX378783D01*\nX364172Y329400D02*\nX371870D01*\nX376214Y333744D01*\nX372600Y333100D02*\nX374244Y334744D01*\nX376244Y339244D02*\nX378283D01*\nX374244Y337244D02*\nX376244Y339244D01*\nX374244Y334744D02*\nY337244D01*\nX404744Y423244D02*\nX436956D01*\nX441300Y418900D01*\nX396587Y417244D02*\nX399587D01*\nX397087Y423244D02*\nX399587D01*\nX391205D02*\nX396688D01*\nX412600Y345100D02*\nY390130D01*\nX412800Y390330D01*\nY390500D01*\nX420000Y397700D01*\nX382244Y416244D02*\nX384244Y414244D01*\nX388205D01*\nX391205Y417244D01*\nX379744Y422714D02*\nY423244D01*\nX378744Y414244D02*\nY417244D01*\nX381244Y419744D01*\nX377714Y409244D02*\nX381244D01*\nX376570Y408100D02*\nX377714Y409244D01*\nX374830Y408100D02*\nX376570D01*\nX373600Y409330D02*\nX374830Y408100D01*\nX373600Y409330D02*\nY417100D01*\nX379744Y423244D01*\nX375700Y410200D02*\nX376973D01*\nX378117Y411344D01*\nX398207D01*\nX370800Y397300D02*\nY402374D01*\nX368144Y405030D02*\nX370800Y402374D01*\nX368144Y405030D02*\nY406770D01*\nX369374Y408000D01*\nX371114D01*\nX371370Y407744D01*\nX373489D01*\nX370244Y405900D02*\nX371400Y404744D01*\nX384244D01*\nX386744Y407244D01*\nX388283D01*\nX373489Y407744D02*\nX374333Y406900D01*\nX383000D01*\nX386244Y410144D01*\nX398705D01*\nX402305Y413744D01*\nX405156Y417244D02*\nX409156Y421244D01*\nX419856D01*\nX423900Y417200D01*\nX402305Y413744D02*\nX410744D01*\nX412244Y415244D01*\nY418244D01*\nX427244Y395244D02*\nX435244D01*\nX414744Y382744D02*\nX427244Y395244D01*\nX378544Y379889D02*\nY380091D01*\nX367798Y390837D02*\nX378544Y380091D01*\nX360867Y390837D02*\nX367798D01*\nX352774Y382744D02*\nX360867Y390837D01*\nX339087Y382744D02*\nX352774D01*\nX423593Y323895D02*\nX435442Y335744D01*\nX362244Y418744D02*\nX363744Y417244D01*\nY414244D02*\nY417244D01*\nX396205Y355205D02*\nX399244Y358244D01*\nX401744D01*\nX400200Y337244D02*\nY353730D01*\nX403844Y357374D01*\nY370644D01*\nX435442Y335744D02*\nX436744D01*\nX438244Y337244D01*\nX439244D01*\nX360487Y332844D02*\nX360587Y332744D01*\nX346000Y336310D02*\nY345300D01*\nY336310D02*\nX349466Y332844D01*\nX360487D01*\nX351744Y330744D02*\nX354488Y328000D01*\nX369900D01*\nX343538Y333950D02*\nX356088Y321400D01*\nX374700D01*\nX352414Y326771D02*\nX368715D01*\nX341744Y337441D02*\nY346744D01*\nY337441D02*\nX352414Y326771D01*\nX336744Y340744D02*\nY346744D01*\nY340744D02*\nX343538Y333950D01*\nX340088Y334900D02*\nX360744Y314244D01*\nX438744D01*\nX331744Y343244D02*\nY346744D01*\nY343244D02*\nX340088Y334900D01*\nD40*\nX205244Y262244D02*\nX205244Y262244D01*\nX205244Y252744D02*\nY262244D01*\nX215744Y276244D02*\nX223744D01*\nX207744D02*\nX215744D01*\nX385244Y262244D02*\nX385244Y262244D01*\nX385244Y252744D02*\nY262244D01*\nX395744Y276244D02*\nX403744D01*\nX387744D02*\nX395744D01*\nX205244Y442244D02*\nX205244Y442244D01*\nX205244Y432744D02*\nY442244D01*\nX215744Y456244D02*\nX223744D01*\nX207744D02*\nX215744D01*\nX385244Y442244D02*\nX385244Y442244D01*\nX385244Y432744D02*\nY442244D01*\nX395744Y456244D02*\nX403744D01*\nX387744D02*\nX395744D01*\nD41*\nX223744Y276244D02*\nX223744Y276244D01*\nX206744Y277244D02*\nX207744Y276244D01*\nX403744D02*\nX403744Y276244D01*\nX386744Y277244D02*\nX387744Y276244D01*\nX223744Y456244D02*\nX223744Y456244D01*\nX206744Y457244D02*\nX207744Y456244D01*\nX403744D02*\nX403744Y456244D01*\nX386744Y457244D02*\nX387744Y456244D01*\nD43*\nX166520Y330658D02*\nY325660D01*\nX169019D01*\nX169852Y326493D01*\nY327326D01*\nX169019Y328159D01*\nX166520D01*\nX169019D01*\nX169852Y328992D01*\nY329825D01*\nX169019Y330658D01*\nX166520D01*\nX172351Y325660D02*\nX174017D01*\nX174850Y326493D01*\nY328159D01*\nX174017Y328992D01*\nX172351D01*\nX171518Y328159D01*\nY326493D01*\nX172351Y325660D01*\nX177349Y329825D02*\nY328992D01*\nX176516D01*\nX178183D01*\nX177349D01*\nY326493D01*\nX178183Y325660D01*\nX181515Y329825D02*\nY328992D01*\nX180682D01*\nX182348D01*\nX181515D01*\nY326493D01*\nX182348Y325660D01*\nX185680D02*\nX187346D01*\nX188179Y326493D01*\nY328159D01*\nX187346Y328992D01*\nX185680D01*\nX184847Y328159D01*\nY326493D01*\nX185680Y325660D01*\nX189846D02*\nY328992D01*\nX190679D01*\nX191512Y328159D01*\nY325660D01*\nY328159D01*\nX192345Y328992D01*\nX193178Y328159D01*\nY325660D01*\nX203174Y329825D02*\nX202341Y330658D01*\nX200675D01*\nX199842Y329825D01*\nY326493D01*\nX200675Y325660D01*\nX202341D01*\nX203174Y326493D01*\nX205674Y325660D02*\nX207340D01*\nX208173Y326493D01*\nY328159D01*\nX207340Y328992D01*\nX205674D01*\nX204841Y328159D01*\nY326493D01*\nX205674Y325660D01*\nX209839Y323994D02*\nY328992D01*\nX212338D01*\nX213171Y328159D01*\nY326493D01*\nX212338Y325660D01*\nX209839D01*\nX214837Y323994D02*\nY328992D01*\nX217337D01*\nX218170Y328159D01*\nY326493D01*\nX217337Y325660D01*\nX214837D01*\nX222335D02*\nX220669D01*\nX219836Y326493D01*\nY328159D01*\nX220669Y328992D01*\nX222335D01*\nX223168Y328159D01*\nY327326D01*\nX219836D01*\nX224834Y328992D02*\nY325660D01*\nY327326D01*\nX225667Y328159D01*\nX226500Y328992D01*\nX227333D01*\nX346520Y330658D02*\nY325660D01*\nX349019D01*\nX349852Y326493D01*\nY327326D01*\nX349019Y328159D01*\nX346520D01*\nX349019D01*\nX349852Y328992D01*\nY329825D01*\nX349019Y330658D01*\nX346520D01*\nX352351Y325660D02*\nX354017D01*\nX354850Y326493D01*\nY328159D01*\nX354017Y328992D01*\nX352351D01*\nX351518Y328159D01*\nY326493D01*\nX352351Y325660D01*\nX357349Y329825D02*\nY328992D01*\nX356516D01*\nX358183D01*\nX357349D01*\nY326493D01*\nX358183Y325660D01*\nX361515Y329825D02*\nY328992D01*\nX360682D01*\nX362348D01*\nX361515D01*\nY326493D01*\nX362348Y325660D01*\nX365680D02*\nX367346D01*\nX368179Y326493D01*\nY328159D01*\nX367346Y328992D01*\nX365680D01*\nX364847Y328159D01*\nY326493D01*\nX365680Y325660D01*\nX369846D02*\nY328992D01*\nX370678D01*\nX371512Y328159D01*\nY325660D01*\nY328159D01*\nX372345Y328992D01*\nX373178Y328159D01*\nY325660D01*\nX383174Y329825D02*\nX382341Y330658D01*\nX380675D01*\nX379842Y329825D01*\nY326493D01*\nX380675Y325660D01*\nX382341D01*\nX383174Y326493D01*\nX385674Y325660D02*\nX387340D01*\nX388173Y326493D01*\nY328159D01*\nX387340Y328992D01*\nX385674D01*\nX384841Y328159D01*\nY326493D01*\nX385674Y325660D01*\nX389839Y323994D02*\nY328992D01*\nX392338D01*\nX393171Y328159D01*\nY326493D01*\nX392338Y325660D01*\nX389839D01*\nX394837Y323994D02*\nY328992D01*\nX397337D01*\nX398170Y328159D01*\nY326493D01*\nX397337Y325660D01*\nX394837D01*\nX402335D02*\nX400669D01*\nX399836Y326493D01*\nY328159D01*\nX400669Y328992D01*\nX402335D01*\nX403168Y328159D01*\nY327326D01*\nX399836D01*\nX404834Y328992D02*\nY325660D01*\nY327326D01*\nX405667Y328159D01*\nX406500Y328992D01*\nX407333D01*\nX166520Y510658D02*\nY505660D01*\nX169019D01*\nX169852Y506493D01*\nY507326D01*\nX169019Y508159D01*\nX166520D01*\nX169019D01*\nX169852Y508992D01*\nY509825D01*\nX169019Y510658D01*\nX166520D01*\nX172351Y505660D02*\nX174017D01*\nX174850Y506493D01*\nY508159D01*\nX174017Y508992D01*\nX172351D01*\nX171518Y508159D01*\nY506493D01*\nX172351Y505660D01*\nX177349Y509825D02*\nY508992D01*\nX176516D01*\nX178183D01*\nX177349D01*\nY506493D01*\nX178183Y505660D01*\nX181515Y509825D02*\nY508992D01*\nX180682D01*\nX182348D01*\nX181515D01*\nY506493D01*\nX182348Y505660D01*\nX185680D02*\nX187346D01*\nX188179Y506493D01*\nY508159D01*\nX187346Y508992D01*\nX185680D01*\nX184847Y508159D01*\nY506493D01*\nX185680Y505660D01*\nX189846D02*\nY508992D01*\nX190679D01*\nX191512Y508159D01*\nY505660D01*\nY508159D01*\nX192345Y508992D01*\nX193178Y508159D01*\nY505660D01*\nX203174Y509825D02*\nX202341Y510658D01*\nX200675D01*\nX199842Y509825D01*\nY506493D01*\nX200675Y505660D01*\nX202341D01*\nX203174Y506493D01*\nX205674Y505660D02*\nX207340D01*\nX208173Y506493D01*\nY508159D01*\nX207340Y508992D01*\nX205674D01*\nX204841Y508159D01*\nY506493D01*\nX205674Y505660D01*\nX209839Y503994D02*\nY508992D01*\nX212338D01*\nX213171Y508159D01*\nY506493D01*\nX212338Y505660D01*\nX209839D01*\nX214837Y503994D02*\nY508992D01*\nX217337D01*\nX218170Y508159D01*\nY506493D01*\nX217337Y505660D01*\nX214837D01*\nX222335D02*\nX220669D01*\nX219836Y506493D01*\nY508159D01*\nX220669Y508992D01*\nX222335D01*\nX223168Y508159D01*\nY507326D01*\nX219836D01*\nX224834Y508992D02*\nY505660D01*\nY507326D01*\nX225667Y508159D01*\nX226500Y508992D01*\nX227333D01*\nX346520Y510658D02*\nY505660D01*\nX349019D01*\nX349852Y506493D01*\nY507326D01*\nX349019Y508159D01*\nX346520D01*\nX349019D01*\nX349852Y508992D01*\nY509825D01*\nX349019Y510658D01*\nX346520D01*\nX352351Y505660D02*\nX354017D01*\nX354850Y506493D01*\nY508159D01*\nX354017Y508992D01*\nX352351D01*\nX351518Y508159D01*\nY506493D01*\nX352351Y505660D01*\nX357349Y509825D02*\nY508992D01*\nX356516D01*\nX358183D01*\nX357349D01*\nY506493D01*\nX358183Y505660D01*\nX361515Y509825D02*\nY508992D01*\nX360682D01*\nX362348D01*\nX361515D01*\nY506493D01*\nX362348Y505660D01*\nX365680D02*\nX367346D01*\nX368179Y506493D01*\nY508159D01*\nX367346Y508992D01*\nX365680D01*\nX364847Y508159D01*\nY506493D01*\nX365680Y505660D01*\nX369846D02*\nY508992D01*\nX370678D01*\nX371512Y508159D01*\nY505660D01*\nY508159D01*\nX372345Y508992D01*\nX373178Y508159D01*\nY505660D01*\nX383174Y509825D02*\nX382341Y510658D01*\nX380675D01*\nX379842Y509825D01*\nY506493D01*\nX380675Y505660D01*\nX382341D01*\nX383174Y506493D01*\nX385674Y505660D02*\nX387340D01*\nX388173Y506493D01*\nY508159D01*\nX387340Y508992D01*\nX385674D01*\nX384841Y508159D01*\nY506493D01*\nX385674Y505660D01*\nX389839Y503994D02*\nY508992D01*\nX392338D01*\nX393171Y508159D01*\nY506493D01*\nX392338Y505660D01*\nX389839D01*\nX394837Y503994D02*\nY508992D01*\nX397337D01*\nX398170Y508159D01*\nY506493D01*\nX397337Y505660D01*\nX394837D01*\nX402335D02*\nX400669D01*\nX399836Y506493D01*\nY508159D01*\nX400669Y508992D01*\nX402335D01*\nX403168Y508159D01*\nY507326D01*\nX399836D01*\nX404834Y508992D02*\nY505660D01*\nY507326D01*\nX405667Y508159D01*\nX406500Y508992D01*\nX407333D01*\nD48*\nX169544Y234044D02*\nX172444D01*\nX166644D02*\nX169544D01*\nX167044Y234444D02*\nY264944D01*\nY268444D01*\nX349544Y234044D02*\nX352444D01*\nX346644D02*\nX349544D01*\nX347044Y234444D02*\nY264944D01*\nY268444D01*\nX169544Y414044D02*\nX172444D01*\nX166644D02*\nX169544D01*\nX167044Y414444D02*\nY444944D01*\nY448444D01*\nX349544Y414044D02*\nX352444D01*\nX346644D02*\nX349544D01*\nX347044Y414444D02*\nY444944D01*\nY448444D01*\nD49*\nX125000Y260000D02*\nD03*\nY265000D02*\nD03*\nY255000D02*\nD03*\nY250000D02*\nD03*\nY245000D02*\nD03*\nY240000D02*\nD03*\nX124600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX290600Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX305100Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX291400Y229800D02*\nD03*\nY234800D02*\nD03*\nY239800D02*\nD03*\nY244800D02*\nD03*\nY254800D02*\nD03*\nY249800D02*\nD03*\nX304800Y229300D02*\nD03*\nY234300D02*\nD03*\nY239300D02*\nD03*\nY244300D02*\nD03*\nY254300D02*\nD03*\nY249300D02*\nD03*\nX125200Y409200D02*\nD03*\nY414200D02*\nD03*\nY419200D02*\nD03*\nY424200D02*\nD03*\nY434200D02*\nD03*\nY429200D02*\nD03*\nX291200Y338300D02*\nD03*\nY343300D02*\nD03*\nY348300D02*\nD03*\nY353300D02*\nD03*\nY363300D02*\nD03*\nY358300D02*\nD03*\nX291000Y404100D02*\nD03*\nY409100D02*\nD03*\nY414100D02*\nD03*\nY419100D02*\nD03*\nY429100D02*\nD03*\nY424100D02*\nD03*\nX304900Y404500D02*\nD03*\nY409500D02*\nD03*\nY414500D02*\nD03*\nY419500D02*\nD03*\nY429500D02*\nD03*\nY424500D02*\nD03*\nX304700Y338200D02*\nD03*\nY343200D02*\nD03*\nY348200D02*\nD03*\nY353200D02*\nD03*\nY363200D02*\nD03*\nY358200D02*\nD03*\nX471200Y401400D02*\nD03*\nY406400D02*\nD03*\nY411400D02*\nD03*\nY416400D02*\nD03*\nY426400D02*\nD03*\nY421400D02*\nD03*\nX471600Y339500D02*\nD03*\nY344500D02*\nD03*\nY349500D02*\nD03*\nY354500D02*\nD03*\nY364500D02*\nD03*\nY359500D02*\nD03*\nY216100D02*\nD03*\nY221100D02*\nD03*\nY226100D02*\nD03*\nY231100D02*\nD03*\nY241100D02*\nD03*\nY236100D02*\nD03*\nX470600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX443700Y124400D02*\nD03*\nX438700D02*\nD03*\nX433700D02*\nD03*\nX428700D02*\nD03*\nX418700D02*\nD03*\nX423700D02*\nD03*\nX357000Y124000D02*\nD03*\nX352000D02*\nD03*\nX347000D02*\nD03*\nX342000D02*\nD03*\nX332000D02*\nD03*\nX337000D02*\nD03*\nX360500Y289900D02*\nD03*\nX355500D02*\nD03*\nX350500D02*\nD03*\nX345500D02*\nD03*\nX335500D02*\nD03*\nX340500D02*\nD03*\nX432500Y290100D02*\nD03*\nX427500D02*\nD03*\nX422500D02*\nD03*\nX417500D02*\nD03*\nX407500D02*\nD03*\nX412500D02*\nD03*\nX431400Y303700D02*\nD03*\nX426400D02*\nD03*\nX421400D02*\nD03*\nX416400D02*\nD03*\nX406400D02*\nD03*\nX411400D02*\nD03*\nX360600Y304500D02*\nD03*\nX355600D02*\nD03*\nX350600D02*\nD03*\nX345600D02*\nD03*\nX335600D02*\nD03*\nX340600D02*\nD03*\nX365000Y469600D02*\nD03*\nX360000D02*\nD03*\nX355000D02*\nD03*\nX350000D02*\nD03*\nX340000D02*\nD03*\nX345000D02*\nD03*\nX435000D02*\nD03*\nX430000D02*\nD03*\nX425000D02*\nD03*\nX420000D02*\nD03*\nX410000D02*\nD03*\nX415000D02*\nD03*\nX252600D02*\nD03*\nX247600D02*\nD03*\nX242600D02*\nD03*\nX237600D02*\nD03*\nX227600D02*\nD03*\nX232600D02*\nD03*\nX183200Y469800D02*\nD03*\nX178200D02*\nD03*\nX173200D02*\nD03*\nX168200D02*\nD03*\nX158200D02*\nD03*\nX163200D02*\nD03*\nX175500Y303900D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX160500D02*\nD03*\nX150500D02*\nD03*\nX155500D02*\nD03*\nX175700Y290100D02*\nD03*\nX170700D02*\nD03*\nX165700D02*\nD03*\nX160700D02*\nD03*\nX150700D02*\nD03*\nX155700D02*\nD03*\nX260900Y303300D02*\nD03*\nX255900D02*\nD03*\nX250900D02*\nD03*\nX245900D02*\nD03*\nX235900D02*\nD03*\nX240900D02*\nD03*\nX261100Y290100D02*\nD03*\nX256100D02*\nD03*\nX251100D02*\nD03*\nX246100D02*\nD03*\nX236100D02*\nD03*\nX241100D02*\nD03*\nX261300Y123800D02*\nD03*\nX256300D02*\nD03*\nX251300D02*\nD03*\nX246300D02*\nD03*\nX236300D02*\nD03*\nX241300D02*\nD03*\nX180500Y124000D02*\nD03*\nX175500D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX155500D02*\nD03*\nX160500D02*\nD03*\nX125100Y351700D02*\nD03*\nY356700D02*\nD03*\nY346700D02*\nD03*\nY341700D02*\nD03*\nY336700D02*\nD03*\nY331700D02*\nD03*\nD50*\nX147744Y146744D02*\nD03*\nX269791D02*\nD03*\nY268791D02*\nD03*\nX147744D02*\nD03*\nX327744Y146744D02*\nD03*\nX449791D02*\nD03*\nY268791D02*\nD03*\nX327744D02*\nD03*\nX147744Y326744D02*\nD03*\nX269791D02*\nD03*\nY448791D02*\nD03*\nX147744D02*\nD03*\nX327744Y326744D02*\nD03*\nX449791D02*\nD03*\nY448791D02*\nD03*\nX327744D02*\nD03*\nD51*\nX133008Y181964D02*\nD03*\nY209524D02*\nD03*\nX313008Y181964D02*\nD03*\nY209524D02*\nD03*\nX133008Y361964D02*\nD03*\nY389524D02*\nD03*\nX313008Y361964D02*\nD03*\nY389524D02*\nD03*\nD52*\nX144031Y185901D02*\nD03*\nY205587D02*\nD03*\nX324031Y185901D02*\nD03*\nY205587D02*\nD03*\nX144031Y365901D02*\nD03*\nY385587D02*\nD03*\nX324031Y365901D02*\nD03*\nY385587D02*\nD03*\nD53*\nX132044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX235244Y252744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX312044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX415244Y252744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX132044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX235244Y432744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nX312044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX415244Y432744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nD54*\nX132044Y252344D02*\nD03*\nX312044D02*\nD03*\nX132044Y432344D02*\nD03*\nX312044D02*\nD03*\nD55*\nX141744Y166744D02*\nD03*\nY171744D02*\nD03*\nX146744Y166744D02*\nD03*\nY171744D02*\nD03*\nX151744Y166744D02*\nD03*\nY171744D02*\nD03*\nX156744Y166744D02*\nD03*\nY171744D02*\nD03*\nX161744Y166744D02*\nD03*\nX321744D02*\nD03*\nY171744D02*\nD03*\nX326744Y166744D02*\nD03*\nY171744D02*\nD03*\nX331744Y166744D02*\nD03*\nY171744D02*\nD03*\nX336744Y166744D02*\nD03*\nY171744D02*\nD03*\nX341744Y166744D02*\nD03*\nX141744Y346744D02*\nD03*\nY351744D02*\nD03*\nX146744Y346744D02*\nD03*\nY351744D02*\nD03*\nX151744Y346744D02*\nD03*\nY351744D02*\nD03*\nX156744Y346744D02*\nD03*\nY351744D02*\nD03*\nX161744Y346744D02*\nD03*\nX321744D02*\nD03*\nY351744D02*\nD03*\nX326744Y346744D02*\nD03*\nY351744D02*\nD03*\nX331744Y346744D02*\nD03*\nY351744D02*\nD03*\nX336744Y346744D02*\nD03*\nY351744D02*\nD03*\nX341744Y346744D02*\nD03*\nD56*\nX161744Y171744D02*\nD03*\nX341744D02*\nD03*\nX161744Y351744D02*\nD03*\nX341744D02*\nD03*\nD57*\nX205244Y252744D02*\nD03*\nX283500Y161200D02*\nD03*\nX385244Y252744D02*\nD03*\nX463500Y161200D02*\nD03*\nX205244Y432744D02*\nD03*\nX283500Y341200D02*\nD03*\nX385244Y432744D02*\nD03*\nX463500Y341200D02*\nD03*\nD58*\nX235744Y276244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nX235744Y456244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nD59*\nX150244Y207744D02*\nD03*\nX249400Y229705D02*\nD03*\nX184500Y143895D02*\nD03*\nX190800Y217300D02*\nD03*\nX183987Y168409D02*\nD03*\nX233941Y225283D02*\nD03*\nX232600Y165100D02*\nD03*\nX195700Y230200D02*\nD03*\nX186300Y200600D02*\nD03*\nX226418Y163000D02*\nD03*\nX173100Y191300D02*\nD03*\nX194700Y141400D02*\nD03*\nX166000Y165300D02*\nD03*\nX192600Y153100D02*\nD03*\nX188900Y152400D02*\nD03*\nX197900Y146186D02*\nD03*\nX192600Y149500D02*\nD03*\nX178000Y156600D02*\nD03*\nX154600Y181244D02*\nD03*\nX141244Y246244D02*\nD03*\nX141044Y226544D02*\nD03*\nX149244Y246344D02*\nD03*\nX149644Y226644D02*\nD03*\nX172444Y234044D02*\nD03*\nX166644D02*\nD03*\nX166744Y261644D02*\nD03*\nX167044Y268444D02*\nD03*\nX166644Y264944D02*\nD03*\nX169544Y234044D02*\nD03*\nX180244Y260744D02*\nD03*\nX188244D02*\nD03*\nX196244Y264744D02*\nD03*\nX176244Y268744D02*\nD03*\nX192244D02*\nD03*\nX196244D02*\nD03*\nX200244Y264744D02*\nD03*\nX230500Y168409D02*\nD03*\nX252200Y162700D02*\nD03*\nX243900Y237200D02*\nD03*\nX258744Y202700D02*\nD03*\nX255100Y190400D02*\nD03*\nX249100Y196900D02*\nD03*\nX238900Y220700D02*\nD03*\nY186044D02*\nD03*\nX234700Y188100D02*\nD03*\nX272900Y205200D02*\nD03*\nX245900Y172900D02*\nD03*\nX245500Y186600D02*\nD03*\nX246100Y200700D02*\nD03*\nX228900Y160100D02*\nD03*\nX230700Y211200D02*\nD03*\nX234700Y192200D02*\nD03*\nX266700Y181800D02*\nD03*\nX175244Y202244D02*\nD03*\nX159087Y202744D02*\nD03*\nX212744Y185744D02*\nD03*\nX220244Y189744D02*\nD03*\nX221744Y185244D02*\nD03*\nX217744Y187244D02*\nD03*\nY150244D02*\nD03*\nX222300Y151830D02*\nD03*\nX220200Y157244D02*\nD03*\nX207744Y188744D02*\nD03*\nX203744Y178244D02*\nD03*\nX224400Y227244D02*\nD03*\nX203744Y190244D02*\nD03*\nX199744Y188244D02*\nD03*\nX183244Y187244D02*\nD03*\nX187244Y181244D02*\nD03*\nX178744Y200744D02*\nD03*\nX202400Y165244D02*\nD03*\nX189744Y185244D02*\nD03*\nX213244Y148744D02*\nD03*\nX214744Y142244D02*\nD03*\nX242618Y148744D02*\nD03*\nX215244Y243244D02*\nD03*\nX201244Y239744D02*\nD03*\nX202244Y236244D02*\nD03*\nX199744Y243244D02*\nD03*\nX201244Y229244D02*\nD03*\nX198744Y234244D02*\nD03*\nX190244Y225900D02*\nD03*\nX232244Y238244D02*\nD03*\nX255244Y215244D02*\nD03*\nX234744Y202744D02*\nD03*\nX198544Y199889D02*\nD03*\nX141244Y232244D02*\nD03*\nX150244D02*\nD03*\nX141244Y251244D02*\nD03*\nX182744Y256744D02*\nD03*\nX180244Y268744D02*\nD03*\nX184244Y264744D02*\nD03*\nX176744Y236744D02*\nD03*\nX186244Y236650D02*\nD03*\nX188244Y234244D02*\nD03*\nY230744D02*\nD03*\nX183744D02*\nD03*\nY225244D02*\nD03*\nX192244Y260744D02*\nD03*\nX178744Y234244D02*\nD03*\nX183744D02*\nD03*\nX185744Y227744D02*\nD03*\nX172744Y225244D02*\nD03*\nX168744D02*\nD03*\nX181744Y221244D02*\nD03*\nX140744Y217244D02*\nD03*\nX136244Y260244D02*\nD03*\nY269244D02*\nD03*\nX135744Y277244D02*\nD03*\nX143744Y283744D02*\nD03*\nX150744D02*\nD03*\nX158744Y283244D02*\nD03*\nX159744Y262244D02*\nD03*\nX147744Y217244D02*\nD03*\nX151744Y128744D02*\nD03*\nX206744Y128945D02*\nD03*\nX268744Y170344D02*\nD03*\nX242744Y128945D02*\nD03*\nX221744Y178244D02*\nD03*\nX226244Y191244D02*\nD03*\nX258744Y134244D02*\nD03*\nX259244Y157244D02*\nD03*\nX171744Y150744D02*\nD03*\nX330244Y207744D02*\nD03*\nX429400Y229705D02*\nD03*\nX364500Y143895D02*\nD03*\nX370800Y217300D02*\nD03*\nX363987Y168409D02*\nD03*\nX413941Y225283D02*\nD03*\nX412600Y165100D02*\nD03*\nX375700Y230200D02*\nD03*\nX366300Y200600D02*\nD03*\nX406418Y163000D02*\nD03*\nX353100Y191300D02*\nD03*\nX374700Y141400D02*\nD03*\nX346000Y165300D02*\nD03*\nX372600Y153100D02*\nD03*\nX368900Y152400D02*\nD03*\nX377900Y146186D02*\nD03*\nX372600Y149500D02*\nD03*\nX358000Y156600D02*\nD03*\nX334600Y181244D02*\nD03*\nX321244Y246244D02*\nD03*\nX321044Y226544D02*\nD03*\nX329244Y246344D02*\nD03*\nX329644Y226644D02*\nD03*\nX352444Y234044D02*\nD03*\nX346644D02*\nD03*\nX346744Y261644D02*\nD03*\nX347044Y268444D02*\nD03*\nX346644Y264944D02*\nD03*\nX349544Y234044D02*\nD03*\nX360244Y260744D02*\nD03*\nX368244D02*\nD03*\nX376244Y264744D02*\nD03*\nX356244Y268744D02*\nD03*\nX372244D02*\nD03*\nX376244D02*\nD03*\nX380244Y264744D02*\nD03*\nX410500Y168409D02*\nD03*\nX432200Y162700D02*\nD03*\nX423900Y237200D02*\nD03*\nX438744Y202700D02*\nD03*\nX435100Y190400D02*\nD03*\nX429100Y196900D02*\nD03*\nX418900Y220700D02*\nD03*\nY186044D02*\nD03*\nX414700Y188100D02*\nD03*\nX452900Y205200D02*\nD03*\nX425900Y172900D02*\nD03*\nX425500Y186600D02*\nD03*\nX426100Y200700D02*\nD03*\nX408900Y160100D02*\nD03*\nX410700Y211200D02*\nD03*\nX414700Y192200D02*\nD03*\nX446700Y181800D02*\nD03*\nX355244Y202244D02*\nD03*\nX339087Y202744D02*\nD03*\nX392744Y185744D02*\nD03*\nX400244Y189744D02*\nD03*\nX401744Y185244D02*\nD03*\nX397744Y187244D02*\nD03*\nY150244D02*\nD03*\nX402300Y151830D02*\nD03*\nX400200Y157244D02*\nD03*\nX387744Y188744D02*\nD03*\nX383744Y178244D02*\nD03*\nX404400Y227244D02*\nD03*\nX383744Y190244D02*\nD03*\nX379744Y188244D02*\nD03*\nX363244Y187244D02*\nD03*\nX367244Y181244D02*\nD03*\nX358744Y200744D02*\nD03*\nX382400Y165244D02*\nD03*\nX369744Y185244D02*\nD03*\nX393244Y148744D02*\nD03*\nX394744Y142244D02*\nD03*\nX422618Y148744D02*\nD03*\nX395244Y243244D02*\nD03*\nX381244Y239744D02*\nD03*\nX382244Y236244D02*\nD03*\nX379744Y243244D02*\nD03*\nX381244Y229244D02*\nD03*\nX378744Y234244D02*\nD03*\nX370244Y225900D02*\nD03*\nX412244Y238244D02*\nD03*\nX435244Y215244D02*\nD03*\nX414744Y202744D02*\nD03*\nX378544Y199889D02*\nD03*\nX321244Y232244D02*\nD03*\nX330244D02*\nD03*\nX321244Y251244D02*\nD03*\nX362744Y256744D02*\nD03*\nX360244Y268744D02*\nD03*\nX364244Y264744D02*\nD03*\nX356744Y236744D02*\nD03*\nX366244Y236650D02*\nD03*\nX368244Y234244D02*\nD03*\nY230744D02*\nD03*\nX363744D02*\nD03*\nY225244D02*\nD03*\nX372244Y260744D02*\nD03*\nX358744Y234244D02*\nD03*\nX363744D02*\nD03*\nX365744Y227744D02*\nD03*\nX352744Y225244D02*\nD03*\nX348744D02*\nD03*\nX361744Y221244D02*\nD03*\nX320744Y217244D02*\nD03*\nX316244Y260244D02*\nD03*\nY269244D02*\nD03*\nX315744Y277244D02*\nD03*\nX323744Y283744D02*\nD03*\nX330744D02*\nD03*\nX338744Y283244D02*\nD03*\nX339744Y262244D02*\nD03*\nX327744Y217244D02*\nD03*\nX331744Y128744D02*\nD03*\nX386744Y128945D02*\nD03*\nX448744Y170344D02*\nD03*\nX422744Y128945D02*\nD03*\nX401744Y178244D02*\nD03*\nX406244Y191244D02*\nD03*\nX438744Y134244D02*\nD03*\nX439244Y157244D02*\nD03*\nX351744Y150744D02*\nD03*\nX150244Y387744D02*\nD03*\nX249400Y409705D02*\nD03*\nX184500Y323895D02*\nD03*\nX190800Y397300D02*\nD03*\nX183987Y348409D02*\nD03*\nX233941Y405283D02*\nD03*\nX232600Y345100D02*\nD03*\nX195700Y410200D02*\nD03*\nX186300Y380600D02*\nD03*\nX226418Y343000D02*\nD03*\nX173100Y371300D02*\nD03*\nX194700Y321400D02*\nD03*\nX166000Y345300D02*\nD03*\nX192600Y333100D02*\nD03*\nX188900Y332400D02*\nD03*\nX197900Y326186D02*\nD03*\nX192600Y329500D02*\nD03*\nX178000Y336600D02*\nD03*\nX154600Y361244D02*\nD03*\nX141244Y426244D02*\nD03*\nX141044Y406544D02*\nD03*\nX149244Y426344D02*\nD03*\nX149644Y406644D02*\nD03*\nX172444Y414044D02*\nD03*\nX166644D02*\nD03*\nX166744Y441644D02*\nD03*\nX167044Y448444D02*\nD03*\nX166644Y444944D02*\nD03*\nX169544Y414044D02*\nD03*\nX180244Y440744D02*\nD03*\nX188244D02*\nD03*\nX196244Y444744D02*\nD03*\nX176244Y448744D02*\nD03*\nX192244D02*\nD03*\nX196244D02*\nD03*\nX200244Y444744D02*\nD03*\nX230500Y348409D02*\nD03*\nX252200Y342700D02*\nD03*\nX243900Y417200D02*\nD03*\nX258744Y382700D02*\nD03*\nX255100Y370400D02*\nD03*\nX249100Y376900D02*\nD03*\nX238900Y400700D02*\nD03*\nY366044D02*\nD03*\nX234700Y368100D02*\nD03*\nX272900Y385200D02*\nD03*\nX245900Y352900D02*\nD03*\nX245500Y366600D02*\nD03*\nX246100Y380700D02*\nD03*\nX228900Y340100D02*\nD03*\nX230700Y391200D02*\nD03*\nX234700Y372200D02*\nD03*\nX266700Y361800D02*\nD03*\nX175244Y382244D02*\nD03*\nX159087Y382744D02*\nD03*\nX212744Y365744D02*\nD03*\nX220244Y369744D02*\nD03*\nX221744Y365244D02*\nD03*\nX217744Y367244D02*\nD03*\nY330244D02*\nD03*\nX222300Y331830D02*\nD03*\nX220200Y337244D02*\nD03*\nX207744Y368744D02*\nD03*\nX203744Y358244D02*\nD03*\nX224400Y407244D02*\nD03*\nX203744Y370244D02*\nD03*\nX199744Y368244D02*\nD03*\nX183244Y367244D02*\nD03*\nX187244Y361244D02*\nD03*\nX178744Y380744D02*\nD03*\nX202400Y345244D02*\nD03*\nX189744Y365244D02*\nD03*\nX213244Y328744D02*\nD03*\nX214744Y322244D02*\nD03*\nX242618Y328744D02*\nD03*\nX215244Y423244D02*\nD03*\nX201244Y419744D02*\nD03*\nX202244Y416244D02*\nD03*\nX199744Y423244D02*\nD03*\nX201244Y409244D02*\nD03*\nX198744Y414244D02*\nD03*\nX190244Y405900D02*\nD03*\nX232244Y418244D02*\nD03*\nX255244Y395244D02*\nD03*\nX234744Y382744D02*\nD03*\nX198544Y379889D02*\nD03*\nX141244Y412244D02*\nD03*\nX150244D02*\nD03*\nX141244Y431244D02*\nD03*\nX182744Y436744D02*\nD03*\nX180244Y448744D02*\nD03*\nX184244Y444744D02*\nD03*\nX176744Y416744D02*\nD03*\nX186244Y416650D02*\nD03*\nX188244Y414244D02*\nD03*\nY410744D02*\nD03*\nX183744D02*\nD03*\nY405244D02*\nD03*\nX192244Y440744D02*\nD03*\nX178744Y414244D02*\nD03*\nX183744D02*\nD03*\nX185744Y407744D02*\nD03*\nX172744Y405244D02*\nD03*\nX168744D02*\nD03*\nX181744Y401244D02*\nD03*\nX140744Y397244D02*\nD03*\nX136244Y440244D02*\nD03*\nY449244D02*\nD03*\nX135744Y457244D02*\nD03*\nX143744Y463744D02*\nD03*\nX150744D02*\nD03*\nX158744Y463244D02*\nD03*\nX159744Y442244D02*\nD03*\nX147744Y397244D02*\nD03*\nX151744Y308744D02*\nD03*\nX206744Y308945D02*\nD03*\nX268744Y350344D02*\nD03*\nX242744Y308945D02*\nD03*\nX221744Y358244D02*\nD03*\nX226244Y371244D02*\nD03*\nX258744Y314244D02*\nD03*\nX259244Y337244D02*\nD03*\nX171744Y330744D02*\nD03*\nX330244Y387744D02*\nD03*\nX429400Y409705D02*\nD03*\nX364500Y323895D02*\nD03*\nX370800Y397300D02*\nD03*\nX363987Y348409D02*\nD03*\nX413941Y405283D02*\nD03*\nX412600Y345100D02*\nD03*\nX375700Y410200D02*\nD03*\nX366300Y380600D02*\nD03*\nX406418Y343000D02*\nD03*\nX353100Y371300D02*\nD03*\nX374700Y321400D02*\nD03*\nX346000Y345300D02*\nD03*\nX372600Y333100D02*\nD03*\nX368900Y332400D02*\nD03*\nX377900Y326186D02*\nD03*\nX372600Y329500D02*\nD03*\nX358000Y336600D02*\nD03*\nX334600Y361244D02*\nD03*\nX321244Y426244D02*\nD03*\nX321044Y406544D02*\nD03*\nX329244Y426344D02*\nD03*\nX329644Y406644D02*\nD03*\nX352444Y414044D02*\nD03*\nX346644D02*\nD03*\nX346744Y441644D02*\nD03*\nX347044Y448444D02*\nD03*\nX346644Y444944D02*\nD03*\nX349544Y414044D02*\nD03*\nX360244Y440744D02*\nD03*\nX368244D02*\nD03*\nX376244Y444744D02*\nD03*\nX356244Y448744D02*\nD03*\nX372244D02*\nD03*\nX376244D02*\nD03*\nX380244Y444744D02*\nD03*\nX410500Y348409D02*\nD03*\nX432200Y342700D02*\nD03*\nX423900Y417200D02*\nD03*\nX438744Y382700D02*\nD03*\nX435100Y370400D02*\nD03*\nX429100Y376900D02*\nD03*\nX418900Y400700D02*\nD03*\nY366044D02*\nD03*\nX414700Y368100D02*\nD03*\nX452900Y385200D02*\nD03*\nX425900Y352900D02*\nD03*\nX425500Y366600D02*\nD03*\nX426100Y380700D02*\nD03*\nX408900Y340100D02*\nD03*\nX410700Y391200D02*\nD03*\nX414700Y372200D02*\nD03*\nX446700Y361800D02*\nD03*\nX355244Y382244D02*\nD03*\nX339087Y382744D02*\nD03*\nX392744Y365744D02*\nD03*\nX400244Y369744D02*\nD03*\nX401744Y365244D02*\nD03*\nX397744Y367244D02*\nD03*\nY330244D02*\nD03*\nX402300Y331830D02*\nD03*\nX400200Y337244D02*\nD03*\nX387744Y368744D02*\nD03*\nX383744Y358244D02*\nD03*\nX404400Y407244D02*\nD03*\nX383744Y370244D02*\nD03*\nX379744Y368244D02*\nD03*\nX363244Y367244D02*\nD03*\nX367244Y361244D02*\nD03*\nX358744Y380744D02*\nD03*\nX382400Y345244D02*\nD03*\nX369744Y365244D02*\nD03*\nX393244Y328744D02*\nD03*\nX394744Y322244D02*\nD03*\nX422618Y328744D02*\nD03*\nX395244Y423244D02*\nD03*\nX381244Y419744D02*\nD03*\nX382244Y416244D02*\nD03*\nX379744Y423244D02*\nD03*\nX381244Y409244D02*\nD03*\nX378744Y414244D02*\nD03*\nX370244Y405900D02*\nD03*\nX412244Y418244D02*\nD03*\nX435244Y395244D02*\nD03*\nX414744Y382744D02*\nD03*\nX378544Y379889D02*\nD03*\nX321244Y412244D02*\nD03*\nX330244D02*\nD03*\nX321244Y431244D02*\nD03*\nX362744Y436744D02*\nD03*\nX360244Y448744D02*\nD03*\nX364244Y444744D02*\nD03*\nX356744Y416744D02*\nD03*\nX366244Y416650D02*\nD03*\nX368244Y414244D02*\nD03*\nY410744D02*\nD03*\nX363744D02*\nD03*\nY405244D02*\nD03*\nX372244Y440744D02*\nD03*\nX358744Y414244D02*\nD03*\nX363744D02*\nD03*\nX365744Y407744D02*\nD03*\nX352744Y405244D02*\nD03*\nX348744D02*\nD03*\nX361744Y401244D02*\nD03*\nX320744Y397244D02*\nD03*\nX316244Y440244D02*\nD03*\nY449244D02*\nD03*\nX315744Y457244D02*\nD03*\nX323744Y463744D02*\nD03*\nX330744D02*\nD03*\nX338744Y463244D02*\nD03*\nX339744Y442244D02*\nD03*\nX327744Y397244D02*\nD03*\nX331744Y308744D02*\nD03*\nX386744Y308945D02*\nD03*\nX448744Y350344D02*\nD03*\nX422744Y308945D02*\nD03*\nX401744Y358244D02*\nD03*\nX406244Y371244D02*\nD03*\nX438744Y314244D02*\nD03*\nX439244Y337244D02*\nD03*\nX351744Y330744D02*\nD03*\nD60*\nX177013Y250875D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX177013Y246544D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX177013Y242213D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX357013Y250875D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nX357013Y246544D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nX357013Y242213D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nX177013Y430875D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX177013Y426544D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX177013Y422213D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX357013Y430875D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nX357013Y426544D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nX357013Y422213D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nD61*\nX258744Y226783D02*\nD03*\nY231705D02*\nD03*\nX253744Y227283D02*\nD03*\nY232205D02*\nD03*\nX238744Y230205D02*\nD03*\nY225283D02*\nD03*\nX244744Y229705D02*\nD03*\nY224783D02*\nD03*\nX262244Y249205D02*\nD03*\nY244283D02*\nD03*\nX239744Y194205D02*\nD03*\nY189283D02*\nD03*\nX438744Y226783D02*\nD03*\nY231705D02*\nD03*\nX433744Y227283D02*\nD03*\nY232205D02*\nD03*\nX418744Y230205D02*\nD03*\nY225283D02*\nD03*\nX424744Y229705D02*\nD03*\nY224783D02*\nD03*\nX442244Y249205D02*\nD03*\nY244283D02*\nD03*\nX419744Y194205D02*\nD03*\nY189283D02*\nD03*\nX258744Y406783D02*\nD03*\nY411705D02*\nD03*\nX253744Y407283D02*\nD03*\nY412205D02*\nD03*\nX238744Y410205D02*\nD03*\nY405283D02*\nD03*\nX244744Y409705D02*\nD03*\nY404783D02*\nD03*\nX262244Y429205D02*\nD03*\nY424283D02*\nD03*\nX239744Y374205D02*\nD03*\nY369283D02*\nD03*\nX438744Y406783D02*\nD03*\nY411705D02*\nD03*\nX433744Y407283D02*\nD03*\nY412205D02*\nD03*\nX418744Y410205D02*\nD03*\nY405283D02*\nD03*\nX424744Y409705D02*\nD03*\nY404783D02*\nD03*\nX442244Y429205D02*\nD03*\nY424283D02*\nD03*\nX419744Y374205D02*\nD03*\nY369283D02*\nD03*\nD62*\nX169587Y157244D02*\nD03*\nX174901D02*\nD03*\nX224902Y237244D02*\nD03*\nX219587D02*\nD03*\nX224902Y243244D02*\nD03*\nX219587D02*\nD03*\nX164902Y181244D02*\nD03*\nX159587D02*\nD03*\nX170087Y197244D02*\nD03*\nX175401D02*\nD03*\nX159587D02*\nD03*\nX164901D02*\nD03*\nX180587Y152744D02*\nD03*\nX185901D02*\nD03*\nX349587Y157244D02*\nD03*\nX354901D02*\nD03*\nX404902Y237244D02*\nD03*\nX399587D02*\nD03*\nX404902Y243244D02*\nD03*\nX399587D02*\nD03*\nX344902Y181244D02*\nD03*\nX339587D02*\nD03*\nX350087Y197244D02*\nD03*\nX355401D02*\nD03*\nX339587D02*\nD03*\nX344901D02*\nD03*\nX360587Y152744D02*\nD03*\nX365901D02*\nD03*\nX169587Y337244D02*\nD03*\nX174901D02*\nD03*\nX224902Y417244D02*\nD03*\nX219587D02*\nD03*\nX224902Y423244D02*\nD03*\nX219587D02*\nD03*\nX164902Y361244D02*\nD03*\nX159587D02*\nD03*\nX170087Y377244D02*\nD03*\nX175401D02*\nD03*\nX159587D02*\nD03*\nX164901D02*\nD03*\nX180587Y332744D02*\nD03*\nX185901D02*\nD03*\nX349587Y337244D02*\nD03*\nX354901D02*\nD03*\nX404902Y417244D02*\nD03*\nX399587D02*\nD03*\nX404902Y423244D02*\nD03*\nX399587D02*\nD03*\nX344902Y361244D02*\nD03*\nX339587D02*\nD03*\nX350087Y377244D02*\nD03*\nX355401D02*\nD03*\nX339587D02*\nD03*\nX344901D02*\nD03*\nX360587Y332744D02*\nD03*\nX365901D02*\nD03*\nD63*\nX189984Y199701D02*\nD03*\nX369984D02*\nD03*\nX189984Y379701D02*\nD03*\nX369984D02*\nD03*\nD64*\nX182504Y199701D02*\nD03*\nX186244Y206787D02*\nD03*\nX362504Y199701D02*\nD03*\nX366244Y206787D02*\nD03*\nX182504Y379701D02*\nD03*\nX186244Y386787D02*\nD03*\nX362504Y379701D02*\nD03*\nX366244Y386787D02*\nD03*\nD65*\nX216421Y196177D02*\nD03*\nX396421D02*\nD03*\nX216421Y376177D02*\nD03*\nX396421D02*\nD03*\nD66*\nX213862Y196177D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX216421Y219406D02*\nD03*\nX213862D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX393862Y196177D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX396421Y219406D02*\nD03*\nX393862D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX213862Y376177D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX216421Y399406D02*\nD03*\nX213862D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX393862Y376177D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX396421Y399406D02*\nD03*\nX393862D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nM02*\n"
  },
  {
    "path": "hardware/panel.GBO",
    "content": "G04 Layer_Color=65280*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD43C,0.00800*%\n%ADD67C,0.00984*%\n%ADD69C,0.00787*%\n%ADD116C,0.02362*%\nD43*\nX191501Y214400D02*\nY216399D01*\nX192000Y216899D01*\nX193000D01*\nX193500Y216399D01*\nY214400D01*\nX193000Y213900D01*\nX192000D01*\nX192500Y214900D02*\nX191501Y213900D01*\nX192000D02*\nX191501Y214400D01*\nX188502Y213900D02*\nX190501D01*\nX188502Y215899D01*\nY216399D01*\nX189001Y216899D01*\nX190001D01*\nX190501Y216399D01*\nX155744Y195244D02*\nY198243D01*\nX154245D01*\nX153745Y197743D01*\nY196744D01*\nX154245Y196244D01*\nX155744D01*\nX154744D02*\nX153745Y195244D01*\nX150746Y198243D02*\nX151745Y197743D01*\nX152745Y196744D01*\nY195744D01*\nX152245Y195244D01*\nX151245D01*\nX150746Y195744D01*\nY196244D01*\nX151245Y196744D01*\nX152745D01*\nX173244Y200744D02*\nY203743D01*\nX171745D01*\nX171245Y203243D01*\nY202244D01*\nX171745Y201744D01*\nX173244D01*\nX172244D02*\nX171245Y200744D01*\nX168246Y203743D02*\nX170245D01*\nY202244D01*\nX169245Y202743D01*\nX168746D01*\nX168246Y202244D01*\nY201244D01*\nX168746Y200744D01*\nX169745D01*\nX170245Y201244D01*\nX173344Y160444D02*\nY163443D01*\nX171845D01*\nX171345Y162943D01*\nY161944D01*\nX171845Y161444D01*\nX173344D01*\nX172344D02*\nX171345Y160444D01*\nX170345Y162943D02*\nX169845Y163443D01*\nX168845D01*\nX168346Y162943D01*\nY162443D01*\nX168845Y161944D01*\nX168346Y161444D01*\nY160944D01*\nX168845Y160444D01*\nX169845D01*\nX170345Y160944D01*\nY161444D01*\nX169845Y161944D01*\nX170345Y162443D01*\nY162943D01*\nX169845Y161944D02*\nX168845D01*\nX173544Y179644D02*\nY182643D01*\nX172045D01*\nX171545Y182143D01*\nY181144D01*\nX172045Y180644D01*\nX173544D01*\nX172544D02*\nX171545Y179644D01*\nX170545D02*\nX169545D01*\nX170045D01*\nY182643D01*\nX170545Y182143D01*\nX168046D02*\nX167546Y182643D01*\nX166546D01*\nX166047Y182143D01*\nY181643D01*\nX166546Y181144D01*\nX167046D01*\nX166546D01*\nX166047Y180644D01*\nY180144D01*\nX166546Y179644D01*\nX167546D01*\nX168046Y180144D01*\nX187244Y155244D02*\nY158243D01*\nX185745D01*\nX185245Y157743D01*\nY156744D01*\nX185745Y156244D01*\nX187244D01*\nX186244D02*\nX185245Y155244D01*\nX182746D02*\nY158243D01*\nX184245Y156744D01*\nX182246D01*\nX212245Y167243D02*\nX212745Y167743D01*\nX213744D01*\nX214244Y167243D01*\nY165244D01*\nX213744Y164744D01*\nX212745D01*\nX212245Y165244D01*\nX209246Y164744D02*\nX211245D01*\nX209246Y166743D01*\nY167243D01*\nX209746Y167743D01*\nX210745D01*\nX211245Y167243D01*\nX208246D02*\nX207746Y167743D01*\nX206747D01*\nX206247Y167243D01*\nY165244D01*\nX206747Y164744D01*\nX207746D01*\nX208246Y165244D01*\nY167243D01*\nX213561Y153743D02*\nX214061Y154243D01*\nX215061D01*\nX215561Y153743D01*\nY151744D01*\nX215061Y151244D01*\nX214061D01*\nX213561Y151744D01*\nX212562Y151244D02*\nX211562D01*\nX212062D01*\nY154243D01*\nX212562Y153743D01*\nX210063Y151744D02*\nX209563Y151244D01*\nX208563D01*\nX208063Y151744D01*\nY153743D01*\nX208563Y154243D01*\nX209563D01*\nX210063Y153743D01*\nY153243D01*\nX209563Y152744D01*\nX208063D01*\nX201945Y165443D02*\nX202445Y165943D01*\nX203444D01*\nX203944Y165443D01*\nY163444D01*\nX203444Y162944D01*\nX202445D01*\nX201945Y163444D01*\nX200945Y162944D02*\nX199945D01*\nX200445D01*\nY165943D01*\nX200945Y165443D01*\nX196946Y162944D02*\nY165943D01*\nX198446Y164444D01*\nX196447D01*\nX247243Y235743D02*\nX247743Y235244D01*\nY234244D01*\nX247243Y233744D01*\nX245244D01*\nX244744Y234244D01*\nY235244D01*\nX245244Y235743D01*\nY236743D02*\nX244744Y237243D01*\nY238243D01*\nX245244Y238742D01*\nX247243D01*\nX247743Y238243D01*\nY237243D01*\nX247243Y236743D01*\nX246743D01*\nX246244Y237243D01*\nY238742D01*\nX186145Y189743D02*\nX186645Y190243D01*\nX187644D01*\nX188144Y189743D01*\nY187744D01*\nX187644Y187244D01*\nX186645D01*\nX186145Y187744D01*\nX185145Y189743D02*\nX184645Y190243D01*\nX183645D01*\nX183146Y189743D01*\nY189243D01*\nX183645Y188744D01*\nX183146Y188244D01*\nY187744D01*\nX183645Y187244D01*\nX184645D01*\nX185145Y187744D01*\nY188244D01*\nX184645Y188744D01*\nX185145Y189243D01*\nY189743D01*\nX184645Y188744D02*\nX183645D01*\nX190245Y174243D02*\nX190745Y174743D01*\nX191744D01*\nX192244Y174243D01*\nY172244D01*\nX191744Y171744D01*\nX190745D01*\nX190245Y172244D01*\nX189245Y174743D02*\nX187246D01*\nY174243D01*\nX189245Y172244D01*\nY171744D01*\nX202245Y226243D02*\nX202745Y226743D01*\nX203744D01*\nX204244Y226243D01*\nY224244D01*\nX203744Y223744D01*\nX202745D01*\nX202245Y224244D01*\nX201245Y223744D02*\nX200245D01*\nX200745D01*\nY226743D01*\nX201245Y226243D01*\nX196747Y226743D02*\nX198746D01*\nY225244D01*\nX197746Y225743D01*\nX197246D01*\nX196747Y225244D01*\nY224244D01*\nX197246Y223744D01*\nX198246D01*\nX198746Y224244D01*\nX214205Y177704D02*\nX214705Y178204D01*\nX215705D01*\nX216205Y177704D01*\nY175704D01*\nX215705Y175205D01*\nX214705D01*\nX214205Y175704D01*\nX211206Y178204D02*\nX212206Y177704D01*\nX213206Y176704D01*\nY175704D01*\nX212706Y175205D01*\nX211706D01*\nX211206Y175704D01*\nY176204D01*\nX211706Y176704D01*\nX213206D01*\nX264243Y228243D02*\nX264743Y227744D01*\nY226744D01*\nX264243Y226244D01*\nX262244D01*\nX261744Y226744D01*\nY227744D01*\nX262244Y228243D01*\nX261744Y231242D02*\nY229243D01*\nX263743Y231242D01*\nX264243D01*\nX264743Y230743D01*\nY229743D01*\nX264243Y229243D01*\nX201845Y150043D02*\nX202345Y150543D01*\nX203344D01*\nX203844Y150043D01*\nY148044D01*\nX203344Y147544D01*\nX202345D01*\nX201845Y148044D01*\nX199346Y147544D02*\nY150543D01*\nX200845Y149044D01*\nX198846D01*\nX254743Y236243D02*\nX255243Y235744D01*\nY234744D01*\nX254743Y234244D01*\nX252744D01*\nX252244Y234744D01*\nY235744D01*\nX252744Y236243D01*\nX254743Y237243D02*\nX255243Y237743D01*\nY238743D01*\nX254743Y239243D01*\nX254243D01*\nX253744Y238743D01*\nY238243D01*\nY238743D01*\nX253244Y239243D01*\nX252744D01*\nX252244Y238743D01*\nY237743D01*\nX252744Y237243D01*\nX240099Y235987D02*\nX240599Y235488D01*\nY234488D01*\nX240099Y233988D01*\nX238100D01*\nX237600Y234488D01*\nY235488D01*\nX238100Y235987D01*\nX240599Y238987D02*\nY236987D01*\nX239100D01*\nX239599Y237987D01*\nY238487D01*\nX239100Y238987D01*\nX238100D01*\nX237600Y238487D01*\nY237487D01*\nX238100Y236987D01*\nX225744Y210743D02*\nY208244D01*\nX225244Y207744D01*\nX224245D01*\nX223745Y208244D01*\nY210743D01*\nX220746D02*\nX221745Y210243D01*\nX222745Y209244D01*\nY208244D01*\nX222245Y207744D01*\nX221246D01*\nX220746Y208244D01*\nY208744D01*\nX221246Y209244D01*\nX222745D01*\nX210245Y233743D02*\nX210745Y234243D01*\nX211744D01*\nX212244Y233743D01*\nY231744D01*\nX211744Y231244D01*\nX210745D01*\nX210245Y231744D01*\nX207246Y231244D02*\nX209245D01*\nX207246Y233243D01*\nY233743D01*\nX207746Y234243D01*\nX208745D01*\nX209245Y233743D01*\nX204247Y231244D02*\nX206246D01*\nX204247Y233243D01*\nY233743D01*\nX204747Y234243D01*\nX205746D01*\nX206246Y233743D01*\nX201245Y246743D02*\nX201745Y247243D01*\nX202744D01*\nX203244Y246743D01*\nY244744D01*\nX202744Y244244D01*\nX201745D01*\nX201245Y244744D01*\nX198246Y244244D02*\nX200245D01*\nX198246Y246243D01*\nY246743D01*\nX198746Y247243D01*\nX199745D01*\nX200245Y246743D01*\nX197246D02*\nX196746Y247243D01*\nX195747D01*\nX195247Y246743D01*\nY246243D01*\nX195747Y245744D01*\nX196246D01*\nX195747D01*\nX195247Y245244D01*\nY244744D01*\nX195747Y244244D01*\nX196746D01*\nX197246Y244744D01*\nX224744Y230744D02*\nY233743D01*\nX223245D01*\nX222745Y233243D01*\nY232244D01*\nX223245Y231744D01*\nX224744D01*\nX223744D02*\nX222745Y230744D01*\nX221745Y233743D02*\nX219746D01*\nY233243D01*\nX221745Y231244D01*\nY230744D01*\nX226303Y247372D02*\nY250371D01*\nX224803D01*\nX224303Y249871D01*\nY248871D01*\nX224803Y248371D01*\nX226303D01*\nX225303D02*\nX224303Y247372D01*\nX223304D02*\nX222304D01*\nX222804D01*\nY250371D01*\nX223304Y249871D01*\nX218805Y247372D02*\nX220804D01*\nX218805Y249371D01*\nY249871D01*\nX219305Y250371D01*\nX220304D01*\nX220804Y249871D01*\nX268243Y245743D02*\nX268743Y245244D01*\nY244244D01*\nX268243Y243744D01*\nX266244D01*\nX265744Y244244D01*\nY245244D01*\nX266244Y245743D01*\nX265744Y246743D02*\nY247743D01*\nY247243D01*\nX268743D01*\nX268243Y246743D01*\nX235245Y199743D02*\nX235745Y200243D01*\nX236744D01*\nX237244Y199743D01*\nY197744D01*\nX236744Y197244D01*\nX235745D01*\nX235245Y197744D01*\nX234245Y197244D02*\nX233245D01*\nX233745D01*\nY200243D01*\nX234245Y199743D01*\nX231746D02*\nX231246Y200243D01*\nX230246D01*\nX229747Y199743D01*\nY197744D01*\nX230246Y197244D01*\nX231246D01*\nX231746Y197744D01*\nY199743D01*\nX267244Y203744D02*\nY206743D01*\nX265745D01*\nX265245Y206243D01*\nY205244D01*\nX265745Y204744D01*\nX267244D01*\nX266244D02*\nX265245Y203744D01*\nX264245Y206243D02*\nX263745Y206743D01*\nX262745D01*\nX262246Y206243D01*\nY205743D01*\nX262745Y205244D01*\nX263245D01*\nX262745D01*\nX262246Y204744D01*\nY204244D01*\nX262745Y203744D01*\nX263745D01*\nX264245Y204244D01*\nX245744Y207744D02*\nY210743D01*\nX244245D01*\nX243745Y210243D01*\nY209244D01*\nX244245Y208744D01*\nX245744D01*\nX244744D02*\nX243745Y207744D01*\nX242745Y208244D02*\nX242245Y207744D01*\nX241246D01*\nX240746Y208244D01*\nY210243D01*\nX241246Y210743D01*\nX242245D01*\nX242745Y210243D01*\nY209743D01*\nX242245Y209244D01*\nX240746D01*\nX270244Y187744D02*\nY190743D01*\nX268745D01*\nX268245Y190243D01*\nY189244D01*\nX268745Y188744D01*\nX270244D01*\nX269244D02*\nX268245Y187744D01*\nX267245D02*\nX266245D01*\nX266745D01*\nY190743D01*\nX267245Y190243D01*\nX263246Y187744D02*\nY190743D01*\nX264746Y189244D01*\nX262747D01*\nX253244Y181244D02*\nY184243D01*\nX251745D01*\nX251245Y183743D01*\nY182744D01*\nX251745Y182244D01*\nX253244D01*\nX252244D02*\nX251245Y181244D01*\nX250245D02*\nX249245D01*\nX249745D01*\nY184243D01*\nX250245Y183743D01*\nX245746Y184243D02*\nX247746D01*\nY182744D01*\nX246746Y183243D01*\nX246246D01*\nX245746Y182744D01*\nY181744D01*\nX246246Y181244D01*\nX247246D01*\nX247746Y181744D01*\nX270244Y170244D02*\nY173243D01*\nX268745D01*\nX268245Y172743D01*\nY171744D01*\nX268745Y171244D01*\nX270244D01*\nX269244D02*\nX268245Y170244D01*\nX267245D02*\nX266245D01*\nX266745D01*\nY173243D01*\nX267245Y172743D01*\nX262747Y173243D02*\nX263746Y172743D01*\nX264746Y171744D01*\nY170744D01*\nX264246Y170244D01*\nX263246D01*\nX262747Y170744D01*\nY171244D01*\nX263246Y171744D01*\nX264746D01*\nX246744Y167244D02*\nY170243D01*\nX245245D01*\nX244745Y169743D01*\nY168744D01*\nX245245Y168244D01*\nX246744D01*\nX245744D02*\nX244745Y167244D01*\nX243745D02*\nX242745D01*\nX243245D01*\nY170243D01*\nX243745Y169743D01*\nX241246Y170243D02*\nX239247D01*\nY169743D01*\nX241246Y167744D01*\nY167244D01*\nX168120Y328992D02*\nY323994D01*\nX170619D01*\nX171452Y324827D01*\nY325660D01*\nX170619Y326493D01*\nX168120D01*\nX170619D01*\nX171452Y327326D01*\nY328159D01*\nX170619Y328992D01*\nX168120D01*\nX173951Y323994D02*\nX175617D01*\nX176450Y324827D01*\nY326493D01*\nX175617Y327326D01*\nX173951D01*\nX173118Y326493D01*\nY324827D01*\nX173951Y323994D01*\nX178949Y328159D02*\nY327326D01*\nX178117D01*\nX179783D01*\nX178949D01*\nY324827D01*\nX179783Y323994D01*\nX183115Y328159D02*\nY327326D01*\nX182282D01*\nX183948D01*\nX183115D01*\nY324827D01*\nX183948Y323994D01*\nX187280D02*\nX188946D01*\nX189779Y324827D01*\nY326493D01*\nX188946Y327326D01*\nX187280D01*\nX186447Y326493D01*\nY324827D01*\nX187280Y323994D01*\nX191446D02*\nY327326D01*\nX192279D01*\nX193112Y326493D01*\nY323994D01*\nY326493D01*\nX193945Y327326D01*\nX194778Y326493D01*\nY323994D01*\nX204774Y328159D02*\nX203941Y328992D01*\nX202275D01*\nX201442Y328159D01*\nY327326D01*\nX202275Y326493D01*\nX203941D01*\nX204774Y325660D01*\nY324827D01*\nX203941Y323994D01*\nX202275D01*\nX201442Y324827D01*\nX206441Y323994D02*\nX208107D01*\nX207274D01*\nY327326D01*\nX206441D01*\nX210606Y323994D02*\nX212272D01*\nX211439D01*\nY328992D01*\nX210606D01*\nX214771Y323994D02*\nY328992D01*\nY325660D02*\nX217270Y327326D01*\nX214771Y325660D02*\nX217270Y323994D01*\nX219770D02*\nX222269D01*\nX223102Y324827D01*\nX222269Y325660D01*\nX220603D01*\nX219770Y326493D01*\nX220603Y327326D01*\nX223102D01*\nX228100D02*\nX225601D01*\nX224768Y326493D01*\nY324827D01*\nX225601Y323994D01*\nX228100D01*\nX229766Y327326D02*\nY323994D01*\nY325660D01*\nX230599Y326493D01*\nX231433Y327326D01*\nX232266D01*\nX237264Y323994D02*\nX235598D01*\nX234765Y324827D01*\nY326493D01*\nX235598Y327326D01*\nX237264D01*\nX238097Y326493D01*\nY325660D01*\nX234765D01*\nX242262Y323994D02*\nX240596D01*\nX239763Y324827D01*\nY326493D01*\nX240596Y327326D01*\nX242262D01*\nX243095Y326493D01*\nY325660D01*\nX239763D01*\nX244761Y323994D02*\nY327326D01*\nX247261D01*\nX248094Y326493D01*\nY323994D01*\nX371501Y214400D02*\nY216399D01*\nX372001Y216899D01*\nX373000D01*\nX373500Y216399D01*\nY214400D01*\nX373000Y213900D01*\nX372001D01*\nX372500Y214900D02*\nX371501Y213900D01*\nX372001D02*\nX371501Y214400D01*\nX368502Y213900D02*\nX370501D01*\nX368502Y215899D01*\nY216399D01*\nX369002Y216899D01*\nX370001D01*\nX370501Y216399D01*\nX335744Y195244D02*\nY198243D01*\nX334245D01*\nX333745Y197743D01*\nY196744D01*\nX334245Y196244D01*\nX335744D01*\nX334744D02*\nX333745Y195244D01*\nX330746Y198243D02*\nX331745Y197743D01*\nX332745Y196744D01*\nY195744D01*\nX332245Y195244D01*\nX331245D01*\nX330746Y195744D01*\nY196244D01*\nX331245Y196744D01*\nX332745D01*\nX353244Y200744D02*\nY203743D01*\nX351745D01*\nX351245Y203243D01*\nY202244D01*\nX351745Y201744D01*\nX353244D01*\nX352244D02*\nX351245Y200744D01*\nX348246Y203743D02*\nX350245D01*\nY202244D01*\nX349245Y202743D01*\nX348745D01*\nX348246Y202244D01*\nY201244D01*\nX348745Y200744D01*\nX349745D01*\nX350245Y201244D01*\nX353344Y160444D02*\nY163443D01*\nX351845D01*\nX351345Y162943D01*\nY161944D01*\nX351845Y161444D01*\nX353344D01*\nX352344D02*\nX351345Y160444D01*\nX350345Y162943D02*\nX349845Y163443D01*\nX348846D01*\nX348346Y162943D01*\nY162443D01*\nX348846Y161944D01*\nX348346Y161444D01*\nY160944D01*\nX348846Y160444D01*\nX349845D01*\nX350345Y160944D01*\nY161444D01*\nX349845Y161944D01*\nX350345Y162443D01*\nY162943D01*\nX349845Y161944D02*\nX348846D01*\nX353544Y179644D02*\nY182643D01*\nX352045D01*\nX351545Y182143D01*\nY181144D01*\nX352045Y180644D01*\nX353544D01*\nX352544D02*\nX351545Y179644D01*\nX350545D02*\nX349545D01*\nX350045D01*\nY182643D01*\nX350545Y182143D01*\nX348046D02*\nX347546Y182643D01*\nX346546D01*\nX346046Y182143D01*\nY181643D01*\nX346546Y181144D01*\nX347046D01*\nX346546D01*\nX346046Y180644D01*\nY180144D01*\nX346546Y179644D01*\nX347546D01*\nX348046Y180144D01*\nX367244Y155244D02*\nY158243D01*\nX365745D01*\nX365245Y157743D01*\nY156744D01*\nX365745Y156244D01*\nX367244D01*\nX366244D02*\nX365245Y155244D01*\nX362745D02*\nY158243D01*\nX364245Y156744D01*\nX362246D01*\nX392245Y167243D02*\nX392745Y167743D01*\nX393744D01*\nX394244Y167243D01*\nY165244D01*\nX393744Y164744D01*\nX392745D01*\nX392245Y165244D01*\nX389246Y164744D02*\nX391245D01*\nX389246Y166743D01*\nY167243D01*\nX389745Y167743D01*\nX390745D01*\nX391245Y167243D01*\nX388246D02*\nX387746Y167743D01*\nX386747D01*\nX386247Y167243D01*\nY165244D01*\nX386747Y164744D01*\nX387746D01*\nX388246Y165244D01*\nY167243D01*\nX393561Y153743D02*\nX394061Y154243D01*\nX395061D01*\nX395561Y153743D01*\nY151744D01*\nX395061Y151244D01*\nX394061D01*\nX393561Y151744D01*\nX392562Y151244D02*\nX391562D01*\nX392062D01*\nY154243D01*\nX392562Y153743D01*\nX390062Y151744D02*\nX389563Y151244D01*\nX388563D01*\nX388063Y151744D01*\nY153743D01*\nX388563Y154243D01*\nX389563D01*\nX390062Y153743D01*\nY153243D01*\nX389563Y152744D01*\nX388063D01*\nX381945Y165443D02*\nX382445Y165943D01*\nX383444D01*\nX383944Y165443D01*\nY163444D01*\nX383444Y162944D01*\nX382445D01*\nX381945Y163444D01*\nX380945Y162944D02*\nX379945D01*\nX380445D01*\nY165943D01*\nX380945Y165443D01*\nX376946Y162944D02*\nY165943D01*\nX378446Y164444D01*\nX376447D01*\nX427243Y235743D02*\nX427743Y235244D01*\nY234244D01*\nX427243Y233744D01*\nX425244D01*\nX424744Y234244D01*\nY235244D01*\nX425244Y235743D01*\nY236743D02*\nX424744Y237243D01*\nY238243D01*\nX425244Y238742D01*\nX427243D01*\nX427743Y238243D01*\nY237243D01*\nX427243Y236743D01*\nX426743D01*\nX426244Y237243D01*\nY238742D01*\nX366145Y189743D02*\nX366645Y190243D01*\nX367644D01*\nX368144Y189743D01*\nY187744D01*\nX367644Y187244D01*\nX366645D01*\nX366145Y187744D01*\nX365145Y189743D02*\nX364645Y190243D01*\nX363646D01*\nX363146Y189743D01*\nY189243D01*\nX363646Y188744D01*\nX363146Y188244D01*\nY187744D01*\nX363646Y187244D01*\nX364645D01*\nX365145Y187744D01*\nY188244D01*\nX364645Y188744D01*\nX365145Y189243D01*\nY189743D01*\nX364645Y188744D02*\nX363646D01*\nX370245Y174243D02*\nX370745Y174743D01*\nX371744D01*\nX372244Y174243D01*\nY172244D01*\nX371744Y171744D01*\nX370745D01*\nX370245Y172244D01*\nX369245Y174743D02*\nX367246D01*\nY174243D01*\nX369245Y172244D01*\nY171744D01*\nX382245Y226243D02*\nX382745Y226743D01*\nX383744D01*\nX384244Y226243D01*\nY224244D01*\nX383744Y223744D01*\nX382745D01*\nX382245Y224244D01*\nX381245Y223744D02*\nX380245D01*\nX380745D01*\nY226743D01*\nX381245Y226243D01*\nX376747Y226743D02*\nX378746D01*\nY225244D01*\nX377746Y225743D01*\nX377246D01*\nX376747Y225244D01*\nY224244D01*\nX377246Y223744D01*\nX378246D01*\nX378746Y224244D01*\nX394205Y177704D02*\nX394705Y178204D01*\nX395705D01*\nX396205Y177704D01*\nY175704D01*\nX395705Y175205D01*\nX394705D01*\nX394205Y175704D01*\nX391206Y178204D02*\nX392206Y177704D01*\nX393206Y176704D01*\nY175704D01*\nX392706Y175205D01*\nX391706D01*\nX391206Y175704D01*\nY176204D01*\nX391706Y176704D01*\nX393206D01*\nX444243Y228243D02*\nX444743Y227744D01*\nY226744D01*\nX444243Y226244D01*\nX442244D01*\nX441744Y226744D01*\nY227744D01*\nX442244Y228243D01*\nX441744Y231242D02*\nY229243D01*\nX443743Y231242D01*\nX444243D01*\nX444743Y230743D01*\nY229743D01*\nX444243Y229243D01*\nX381845Y150043D02*\nX382345Y150543D01*\nX383344D01*\nX383844Y150043D01*\nY148044D01*\nX383344Y147544D01*\nX382345D01*\nX381845Y148044D01*\nX379345Y147544D02*\nY150543D01*\nX380845Y149044D01*\nX378846D01*\nX434743Y236243D02*\nX435243Y235744D01*\nY234744D01*\nX434743Y234244D01*\nX432744D01*\nX432244Y234744D01*\nY235744D01*\nX432744Y236243D01*\nX434743Y237243D02*\nX435243Y237743D01*\nY238743D01*\nX434743Y239243D01*\nX434243D01*\nX433744Y238743D01*\nY238243D01*\nY238743D01*\nX433244Y239243D01*\nX432744D01*\nX432244Y238743D01*\nY237743D01*\nX432744Y237243D01*\nX420099Y235987D02*\nX420599Y235488D01*\nY234488D01*\nX420099Y233988D01*\nX418100D01*\nX417600Y234488D01*\nY235488D01*\nX418100Y235987D01*\nX420599Y238987D02*\nY236987D01*\nX419100D01*\nX419599Y237987D01*\nY238487D01*\nX419100Y238987D01*\nX418100D01*\nX417600Y238487D01*\nY237487D01*\nX418100Y236987D01*\nX405744Y210743D02*\nY208244D01*\nX405244Y207744D01*\nX404245D01*\nX403745Y208244D01*\nY210743D01*\nX400746D02*\nX401745Y210243D01*\nX402745Y209244D01*\nY208244D01*\nX402245Y207744D01*\nX401245D01*\nX400746Y208244D01*\nY208744D01*\nX401245Y209244D01*\nX402745D01*\nX390245Y233743D02*\nX390745Y234243D01*\nX391744D01*\nX392244Y233743D01*\nY231744D01*\nX391744Y231244D01*\nX390745D01*\nX390245Y231744D01*\nX387246Y231244D02*\nX389245D01*\nX387246Y233243D01*\nY233743D01*\nX387745Y234243D01*\nX388745D01*\nX389245Y233743D01*\nX384247Y231244D02*\nX386246D01*\nX384247Y233243D01*\nY233743D01*\nX384747Y234243D01*\nX385746D01*\nX386246Y233743D01*\nX381245Y246743D02*\nX381745Y247243D01*\nX382744D01*\nX383244Y246743D01*\nY244744D01*\nX382744Y244244D01*\nX381745D01*\nX381245Y244744D01*\nX378246Y244244D02*\nX380245D01*\nX378246Y246243D01*\nY246743D01*\nX378746Y247243D01*\nX379745D01*\nX380245Y246743D01*\nX377246D02*\nX376746Y247243D01*\nX375746D01*\nX375247Y246743D01*\nY246243D01*\nX375746Y245744D01*\nX376246D01*\nX375746D01*\nX375247Y245244D01*\nY244744D01*\nX375746Y244244D01*\nX376746D01*\nX377246Y244744D01*\nX404744Y230744D02*\nY233743D01*\nX403245D01*\nX402745Y233243D01*\nY232244D01*\nX403245Y231744D01*\nX404744D01*\nX403744D02*\nX402745Y230744D01*\nX401745Y233743D02*\nX399746D01*\nY233243D01*\nX401745Y231244D01*\nY230744D01*\nX406302Y247372D02*\nY250371D01*\nX404803D01*\nX404303Y249871D01*\nY248871D01*\nX404803Y248371D01*\nX406302D01*\nX405303D02*\nX404303Y247372D01*\nX403303D02*\nX402304D01*\nX402804D01*\nY250371D01*\nX403303Y249871D01*\nX398805Y247372D02*\nX400804D01*\nX398805Y249371D01*\nY249871D01*\nX399305Y250371D01*\nX400304D01*\nX400804Y249871D01*\nX448243Y245743D02*\nX448743Y245244D01*\nY244244D01*\nX448243Y243744D01*\nX446244D01*\nX445744Y244244D01*\nY245244D01*\nX446244Y245743D01*\nX445744Y246743D02*\nY247743D01*\nY247243D01*\nX448743D01*\nX448243Y246743D01*\nX415245Y199743D02*\nX415745Y200243D01*\nX416744D01*\nX417244Y199743D01*\nY197744D01*\nX416744Y197244D01*\nX415745D01*\nX415245Y197744D01*\nX414245Y197244D02*\nX413245D01*\nX413745D01*\nY200243D01*\nX414245Y199743D01*\nX411746D02*\nX411246Y200243D01*\nX410246D01*\nX409747Y199743D01*\nY197744D01*\nX410246Y197244D01*\nX411246D01*\nX411746Y197744D01*\nY199743D01*\nX447244Y203744D02*\nY206743D01*\nX445745D01*\nX445245Y206243D01*\nY205244D01*\nX445745Y204744D01*\nX447244D01*\nX446244D02*\nX445245Y203744D01*\nX444245Y206243D02*\nX443745Y206743D01*\nX442745D01*\nX442246Y206243D01*\nY205743D01*\nX442745Y205244D01*\nX443245D01*\nX442745D01*\nX442246Y204744D01*\nY204244D01*\nX442745Y203744D01*\nX443745D01*\nX444245Y204244D01*\nX425744Y207744D02*\nY210743D01*\nX424245D01*\nX423745Y210243D01*\nY209244D01*\nX424245Y208744D01*\nX425744D01*\nX424744D02*\nX423745Y207744D01*\nX422745Y208244D02*\nX422245Y207744D01*\nX421245D01*\nX420746Y208244D01*\nY210243D01*\nX421245Y210743D01*\nX422245D01*\nX422745Y210243D01*\nY209743D01*\nX422245Y209244D01*\nX420746D01*\nX450244Y187744D02*\nY190743D01*\nX448745D01*\nX448245Y190243D01*\nY189244D01*\nX448745Y188744D01*\nX450244D01*\nX449244D02*\nX448245Y187744D01*\nX447245D02*\nX446245D01*\nX446745D01*\nY190743D01*\nX447245Y190243D01*\nX443246Y187744D02*\nY190743D01*\nX444746Y189244D01*\nX442746D01*\nX433244Y181244D02*\nY184243D01*\nX431745D01*\nX431245Y183743D01*\nY182744D01*\nX431745Y182244D01*\nX433244D01*\nX432244D02*\nX431245Y181244D01*\nX430245D02*\nX429245D01*\nX429745D01*\nY184243D01*\nX430245Y183743D01*\nX425746Y184243D02*\nX427746D01*\nY182744D01*\nX426746Y183243D01*\nX426246D01*\nX425746Y182744D01*\nY181744D01*\nX426246Y181244D01*\nX427246D01*\nX427746Y181744D01*\nX450244Y170244D02*\nY173243D01*\nX448745D01*\nX448245Y172743D01*\nY171744D01*\nX448745Y171244D01*\nX450244D01*\nX449244D02*\nX448245Y170244D01*\nX447245D02*\nX446245D01*\nX446745D01*\nY173243D01*\nX447245Y172743D01*\nX442746Y173243D02*\nX443746Y172743D01*\nX444746Y171744D01*\nY170744D01*\nX444246Y170244D01*\nX443246D01*\nX442746Y170744D01*\nY171244D01*\nX443246Y171744D01*\nX444746D01*\nX426744Y167244D02*\nY170243D01*\nX425245D01*\nX424745Y169743D01*\nY168744D01*\nX425245Y168244D01*\nX426744D01*\nX425744D02*\nX424745Y167244D01*\nX423745D02*\nX422745D01*\nX423245D01*\nY170243D01*\nX423745Y169743D01*\nX421246Y170243D02*\nX419246D01*\nY169743D01*\nX421246Y167744D01*\nY167244D01*\nX348120Y328992D02*\nY323994D01*\nX350619D01*\nX351452Y324827D01*\nY325660D01*\nX350619Y326493D01*\nX348120D01*\nX350619D01*\nX351452Y327326D01*\nY328159D01*\nX350619Y328992D01*\nX348120D01*\nX353951Y323994D02*\nX355617D01*\nX356450Y324827D01*\nY326493D01*\nX355617Y327326D01*\nX353951D01*\nX353118Y326493D01*\nY324827D01*\nX353951Y323994D01*\nX358949Y328159D02*\nY327326D01*\nX358116D01*\nX359783D01*\nX358949D01*\nY324827D01*\nX359783Y323994D01*\nX363115Y328159D02*\nY327326D01*\nX362282D01*\nX363948D01*\nX363115D01*\nY324827D01*\nX363948Y323994D01*\nX367280D02*\nX368946D01*\nX369779Y324827D01*\nY326493D01*\nX368946Y327326D01*\nX367280D01*\nX366447Y326493D01*\nY324827D01*\nX367280Y323994D01*\nX371445D02*\nY327326D01*\nX372278D01*\nX373112Y326493D01*\nY323994D01*\nY326493D01*\nX373945Y327326D01*\nX374778Y326493D01*\nY323994D01*\nX384774Y328159D02*\nX383941Y328992D01*\nX382275D01*\nX381442Y328159D01*\nY327326D01*\nX382275Y326493D01*\nX383941D01*\nX384774Y325660D01*\nY324827D01*\nX383941Y323994D01*\nX382275D01*\nX381442Y324827D01*\nX386441Y323994D02*\nX388107D01*\nX387274D01*\nY327326D01*\nX386441D01*\nX390606Y323994D02*\nX392272D01*\nX391439D01*\nY328992D01*\nX390606D01*\nX394771Y323994D02*\nY328992D01*\nY325660D02*\nX397270Y327326D01*\nX394771Y325660D02*\nX397270Y323994D01*\nX399770D02*\nX402269D01*\nX403102Y324827D01*\nX402269Y325660D01*\nX400603D01*\nX399770Y326493D01*\nX400603Y327326D01*\nX403102D01*\nX408100D02*\nX405601D01*\nX404768Y326493D01*\nY324827D01*\nX405601Y323994D01*\nX408100D01*\nX409766Y327326D02*\nY323994D01*\nY325660D01*\nX410599Y326493D01*\nX411433Y327326D01*\nX412266D01*\nX417264Y323994D02*\nX415598D01*\nX414765Y324827D01*\nY326493D01*\nX415598Y327326D01*\nX417264D01*\nX418097Y326493D01*\nY325660D01*\nX414765D01*\nX422262Y323994D02*\nX420596D01*\nX419763Y324827D01*\nY326493D01*\nX420596Y327326D01*\nX422262D01*\nX423095Y326493D01*\nY325660D01*\nX419763D01*\nX424761Y323994D02*\nY327326D01*\nX427261D01*\nX428094Y326493D01*\nY323994D01*\nX191501Y394400D02*\nY396399D01*\nX192000Y396899D01*\nX193000D01*\nX193500Y396399D01*\nY394400D01*\nX193000Y393900D01*\nX192000D01*\nX192500Y394900D02*\nX191501Y393900D01*\nX192000D02*\nX191501Y394400D01*\nX188502Y393900D02*\nX190501D01*\nX188502Y395899D01*\nY396399D01*\nX189001Y396899D01*\nX190001D01*\nX190501Y396399D01*\nX155744Y375244D02*\nY378243D01*\nX154245D01*\nX153745Y377743D01*\nY376744D01*\nX154245Y376244D01*\nX155744D01*\nX154744D02*\nX153745Y375244D01*\nX150746Y378243D02*\nX151745Y377743D01*\nX152745Y376744D01*\nY375744D01*\nX152245Y375244D01*\nX151245D01*\nX150746Y375744D01*\nY376244D01*\nX151245Y376744D01*\nX152745D01*\nX173244Y380744D02*\nY383743D01*\nX171745D01*\nX171245Y383243D01*\nY382244D01*\nX171745Y381744D01*\nX173244D01*\nX172244D02*\nX171245Y380744D01*\nX168246Y383743D02*\nX170245D01*\nY382244D01*\nX169245Y382743D01*\nX168746D01*\nX168246Y382244D01*\nY381244D01*\nX168746Y380744D01*\nX169745D01*\nX170245Y381244D01*\nX173344Y340444D02*\nY343443D01*\nX171845D01*\nX171345Y342943D01*\nY341944D01*\nX171845Y341444D01*\nX173344D01*\nX172344D02*\nX171345Y340444D01*\nX170345Y342943D02*\nX169845Y343443D01*\nX168845D01*\nX168346Y342943D01*\nY342443D01*\nX168845Y341944D01*\nX168346Y341444D01*\nY340944D01*\nX168845Y340444D01*\nX169845D01*\nX170345Y340944D01*\nY341444D01*\nX169845Y341944D01*\nX170345Y342443D01*\nY342943D01*\nX169845Y341944D02*\nX168845D01*\nX173544Y359644D02*\nY362643D01*\nX172045D01*\nX171545Y362143D01*\nY361144D01*\nX172045Y360644D01*\nX173544D01*\nX172544D02*\nX171545Y359644D01*\nX170545D02*\nX169545D01*\nX170045D01*\nY362643D01*\nX170545Y362143D01*\nX168046D02*\nX167546Y362643D01*\nX166546D01*\nX166047Y362143D01*\nY361643D01*\nX166546Y361144D01*\nX167046D01*\nX166546D01*\nX166047Y360644D01*\nY360144D01*\nX166546Y359644D01*\nX167546D01*\nX168046Y360144D01*\nX187244Y335244D02*\nY338243D01*\nX185745D01*\nX185245Y337743D01*\nY336744D01*\nX185745Y336244D01*\nX187244D01*\nX186244D02*\nX185245Y335244D01*\nX182746D02*\nY338243D01*\nX184245Y336744D01*\nX182246D01*\nX212245Y347243D02*\nX212745Y347743D01*\nX213744D01*\nX214244Y347243D01*\nY345244D01*\nX213744Y344744D01*\nX212745D01*\nX212245Y345244D01*\nX209246Y344744D02*\nX211245D01*\nX209246Y346743D01*\nY347243D01*\nX209746Y347743D01*\nX210745D01*\nX211245Y347243D01*\nX208246D02*\nX207746Y347743D01*\nX206747D01*\nX206247Y347243D01*\nY345244D01*\nX206747Y344744D01*\nX207746D01*\nX208246Y345244D01*\nY347243D01*\nX213561Y333743D02*\nX214061Y334243D01*\nX215061D01*\nX215561Y333743D01*\nY331744D01*\nX215061Y331244D01*\nX214061D01*\nX213561Y331744D01*\nX212562Y331244D02*\nX211562D01*\nX212062D01*\nY334243D01*\nX212562Y333743D01*\nX210063Y331744D02*\nX209563Y331244D01*\nX208563D01*\nX208063Y331744D01*\nY333743D01*\nX208563Y334243D01*\nX209563D01*\nX210063Y333743D01*\nY333243D01*\nX209563Y332744D01*\nX208063D01*\nX201945Y345443D02*\nX202445Y345943D01*\nX203444D01*\nX203944Y345443D01*\nY343444D01*\nX203444Y342944D01*\nX202445D01*\nX201945Y343444D01*\nX200945Y342944D02*\nX199945D01*\nX200445D01*\nY345943D01*\nX200945Y345443D01*\nX196946Y342944D02*\nY345943D01*\nX198446Y344444D01*\nX196447D01*\nX247243Y415743D02*\nX247743Y415244D01*\nY414244D01*\nX247243Y413744D01*\nX245244D01*\nX244744Y414244D01*\nY415244D01*\nX245244Y415743D01*\nY416743D02*\nX244744Y417243D01*\nY418243D01*\nX245244Y418743D01*\nX247243D01*\nX247743Y418243D01*\nY417243D01*\nX247243Y416743D01*\nX246743D01*\nX246244Y417243D01*\nY418743D01*\nX186145Y369743D02*\nX186645Y370243D01*\nX187644D01*\nX188144Y369743D01*\nY367744D01*\nX187644Y367244D01*\nX186645D01*\nX186145Y367744D01*\nX185145Y369743D02*\nX184645Y370243D01*\nX183645D01*\nX183146Y369743D01*\nY369243D01*\nX183645Y368744D01*\nX183146Y368244D01*\nY367744D01*\nX183645Y367244D01*\nX184645D01*\nX185145Y367744D01*\nY368244D01*\nX184645Y368744D01*\nX185145Y369243D01*\nY369743D01*\nX184645Y368744D02*\nX183645D01*\nX190245Y354243D02*\nX190745Y354743D01*\nX191744D01*\nX192244Y354243D01*\nY352244D01*\nX191744Y351744D01*\nX190745D01*\nX190245Y352244D01*\nX189245Y354743D02*\nX187246D01*\nY354243D01*\nX189245Y352244D01*\nY351744D01*\nX202245Y406243D02*\nX202745Y406743D01*\nX203744D01*\nX204244Y406243D01*\nY404244D01*\nX203744Y403744D01*\nX202745D01*\nX202245Y404244D01*\nX201245Y403744D02*\nX200245D01*\nX200745D01*\nY406743D01*\nX201245Y406243D01*\nX196747Y406743D02*\nX198746D01*\nY405244D01*\nX197746Y405743D01*\nX197246D01*\nX196747Y405244D01*\nY404244D01*\nX197246Y403744D01*\nX198246D01*\nX198746Y404244D01*\nX214205Y357704D02*\nX214705Y358204D01*\nX215705D01*\nX216205Y357704D01*\nY355704D01*\nX215705Y355205D01*\nX214705D01*\nX214205Y355704D01*\nX211206Y358204D02*\nX212206Y357704D01*\nX213206Y356704D01*\nY355704D01*\nX212706Y355205D01*\nX211706D01*\nX211206Y355704D01*\nY356204D01*\nX211706Y356704D01*\nX213206D01*\nX264243Y408243D02*\nX264743Y407744D01*\nY406744D01*\nX264243Y406244D01*\nX262244D01*\nX261744Y406744D01*\nY407744D01*\nX262244Y408243D01*\nX261744Y411242D02*\nY409243D01*\nX263743Y411242D01*\nX264243D01*\nX264743Y410743D01*\nY409743D01*\nX264243Y409243D01*\nX201845Y330043D02*\nX202345Y330543D01*\nX203344D01*\nX203844Y330043D01*\nY328044D01*\nX203344Y327544D01*\nX202345D01*\nX201845Y328044D01*\nX199346Y327544D02*\nY330543D01*\nX200845Y329044D01*\nX198846D01*\nX254743Y416243D02*\nX255243Y415744D01*\nY414744D01*\nX254743Y414244D01*\nX252744D01*\nX252244Y414744D01*\nY415744D01*\nX252744Y416243D01*\nX254743Y417243D02*\nX255243Y417743D01*\nY418743D01*\nX254743Y419242D01*\nX254243D01*\nX253744Y418743D01*\nY418243D01*\nY418743D01*\nX253244Y419242D01*\nX252744D01*\nX252244Y418743D01*\nY417743D01*\nX252744Y417243D01*\nX240099Y415987D02*\nX240599Y415488D01*\nY414488D01*\nX240099Y413988D01*\nX238100D01*\nX237600Y414488D01*\nY415488D01*\nX238100Y415987D01*\nX240599Y418987D02*\nY416987D01*\nX239100D01*\nX239599Y417987D01*\nY418487D01*\nX239100Y418987D01*\nX238100D01*\nX237600Y418487D01*\nY417487D01*\nX238100Y416987D01*\nX225744Y390743D02*\nY388244D01*\nX225244Y387744D01*\nX224245D01*\nX223745Y388244D01*\nY390743D01*\nX220746D02*\nX221745Y390243D01*\nX222745Y389244D01*\nY388244D01*\nX222245Y387744D01*\nX221246D01*\nX220746Y388244D01*\nY388744D01*\nX221246Y389244D01*\nX222745D01*\nX210245Y413743D02*\nX210745Y414243D01*\nX211744D01*\nX212244Y413743D01*\nY411744D01*\nX211744Y411244D01*\nX210745D01*\nX210245Y411744D01*\nX207246Y411244D02*\nX209245D01*\nX207246Y413243D01*\nY413743D01*\nX207746Y414243D01*\nX208745D01*\nX209245Y413743D01*\nX204247Y411244D02*\nX206246D01*\nX204247Y413243D01*\nY413743D01*\nX204747Y414243D01*\nX205746D01*\nX206246Y413743D01*\nX201245Y426743D02*\nX201745Y427243D01*\nX202744D01*\nX203244Y426743D01*\nY424744D01*\nX202744Y424244D01*\nX201745D01*\nX201245Y424744D01*\nX198246Y424244D02*\nX200245D01*\nX198246Y426243D01*\nY426743D01*\nX198746Y427243D01*\nX199745D01*\nX200245Y426743D01*\nX197246D02*\nX196746Y427243D01*\nX195747D01*\nX195247Y426743D01*\nY426243D01*\nX195747Y425744D01*\nX196246D01*\nX195747D01*\nX195247Y425244D01*\nY424744D01*\nX195747Y424244D01*\nX196746D01*\nX197246Y424744D01*\nX224744Y410744D02*\nY413743D01*\nX223245D01*\nX222745Y413243D01*\nY412244D01*\nX223245Y411744D01*\nX224744D01*\nX223744D02*\nX222745Y410744D01*\nX221745Y413743D02*\nX219746D01*\nY413243D01*\nX221745Y411244D01*\nY410744D01*\nX226303Y427372D02*\nY430371D01*\nX224803D01*\nX224303Y429871D01*\nY428871D01*\nX224803Y428371D01*\nX226303D01*\nX225303D02*\nX224303Y427372D01*\nX223304D02*\nX222304D01*\nX222804D01*\nY430371D01*\nX223304Y429871D01*\nX218805Y427372D02*\nX220804D01*\nX218805Y429371D01*\nY429871D01*\nX219305Y430371D01*\nX220304D01*\nX220804Y429871D01*\nX268243Y425743D02*\nX268743Y425244D01*\nY424244D01*\nX268243Y423744D01*\nX266244D01*\nX265744Y424244D01*\nY425244D01*\nX266244Y425743D01*\nX265744Y426743D02*\nY427743D01*\nY427243D01*\nX268743D01*\nX268243Y426743D01*\nX235245Y379743D02*\nX235745Y380243D01*\nX236744D01*\nX237244Y379743D01*\nY377744D01*\nX236744Y377244D01*\nX235745D01*\nX235245Y377744D01*\nX234245Y377244D02*\nX233245D01*\nX233745D01*\nY380243D01*\nX234245Y379743D01*\nX231746D02*\nX231246Y380243D01*\nX230246D01*\nX229747Y379743D01*\nY377744D01*\nX230246Y377244D01*\nX231246D01*\nX231746Y377744D01*\nY379743D01*\nX267244Y383744D02*\nY386743D01*\nX265745D01*\nX265245Y386243D01*\nY385244D01*\nX265745Y384744D01*\nX267244D01*\nX266244D02*\nX265245Y383744D01*\nX264245Y386243D02*\nX263745Y386743D01*\nX262745D01*\nX262246Y386243D01*\nY385743D01*\nX262745Y385244D01*\nX263245D01*\nX262745D01*\nX262246Y384744D01*\nY384244D01*\nX262745Y383744D01*\nX263745D01*\nX264245Y384244D01*\nX245744Y387744D02*\nY390743D01*\nX244245D01*\nX243745Y390243D01*\nY389244D01*\nX244245Y388744D01*\nX245744D01*\nX244744D02*\nX243745Y387744D01*\nX242745Y388244D02*\nX242245Y387744D01*\nX241246D01*\nX240746Y388244D01*\nY390243D01*\nX241246Y390743D01*\nX242245D01*\nX242745Y390243D01*\nY389743D01*\nX242245Y389244D01*\nX240746D01*\nX270244Y367744D02*\nY370743D01*\nX268745D01*\nX268245Y370243D01*\nY369244D01*\nX268745Y368744D01*\nX270244D01*\nX269244D02*\nX268245Y367744D01*\nX267245D02*\nX266245D01*\nX266745D01*\nY370743D01*\nX267245Y370243D01*\nX263246Y367744D02*\nY370743D01*\nX264746Y369244D01*\nX262747D01*\nX253244Y361244D02*\nY364243D01*\nX251745D01*\nX251245Y363743D01*\nY362744D01*\nX251745Y362244D01*\nX253244D01*\nX252244D02*\nX251245Y361244D01*\nX250245D02*\nX249245D01*\nX249745D01*\nY364243D01*\nX250245Y363743D01*\nX245746Y364243D02*\nX247746D01*\nY362744D01*\nX246746Y363243D01*\nX246246D01*\nX245746Y362744D01*\nY361744D01*\nX246246Y361244D01*\nX247246D01*\nX247746Y361744D01*\nX270244Y350244D02*\nY353243D01*\nX268745D01*\nX268245Y352743D01*\nY351744D01*\nX268745Y351244D01*\nX270244D01*\nX269244D02*\nX268245Y350244D01*\nX267245D02*\nX266245D01*\nX266745D01*\nY353243D01*\nX267245Y352743D01*\nX262747Y353243D02*\nX263746Y352743D01*\nX264746Y351744D01*\nY350744D01*\nX264246Y350244D01*\nX263246D01*\nX262747Y350744D01*\nY351244D01*\nX263246Y351744D01*\nX264746D01*\nX246744Y347244D02*\nY350243D01*\nX245245D01*\nX244745Y349743D01*\nY348744D01*\nX245245Y348244D01*\nX246744D01*\nX245744D02*\nX244745Y347244D01*\nX243745D02*\nX242745D01*\nX243245D01*\nY350243D01*\nX243745Y349743D01*\nX241246Y350243D02*\nX239247D01*\nY349743D01*\nX241246Y347744D01*\nY347244D01*\nX168120Y508992D02*\nY503994D01*\nX170619D01*\nX171452Y504827D01*\nY505660D01*\nX170619Y506493D01*\nX168120D01*\nX170619D01*\nX171452Y507326D01*\nY508159D01*\nX170619Y508992D01*\nX168120D01*\nX173951Y503994D02*\nX175617D01*\nX176450Y504827D01*\nY506493D01*\nX175617Y507326D01*\nX173951D01*\nX173118Y506493D01*\nY504827D01*\nX173951Y503994D01*\nX178949Y508159D02*\nY507326D01*\nX178117D01*\nX179783D01*\nX178949D01*\nY504827D01*\nX179783Y503994D01*\nX183115Y508159D02*\nY507326D01*\nX182282D01*\nX183948D01*\nX183115D01*\nY504827D01*\nX183948Y503994D01*\nX187280D02*\nX188946D01*\nX189779Y504827D01*\nY506493D01*\nX188946Y507326D01*\nX187280D01*\nX186447Y506493D01*\nY504827D01*\nX187280Y503994D01*\nX191446D02*\nY507326D01*\nX192279D01*\nX193112Y506493D01*\nY503994D01*\nY506493D01*\nX193945Y507326D01*\nX194778Y506493D01*\nY503994D01*\nX204774Y508159D02*\nX203941Y508992D01*\nX202275D01*\nX201442Y508159D01*\nY507326D01*\nX202275Y506493D01*\nX203941D01*\nX204774Y505660D01*\nY504827D01*\nX203941Y503994D01*\nX202275D01*\nX201442Y504827D01*\nX206441Y503994D02*\nX208107D01*\nX207274D01*\nY507326D01*\nX206441D01*\nX210606Y503994D02*\nX212272D01*\nX211439D01*\nY508992D01*\nX210606D01*\nX214771Y503994D02*\nY508992D01*\nY505660D02*\nX217270Y507326D01*\nX214771Y505660D02*\nX217270Y503994D01*\nX219770D02*\nX222269D01*\nX223102Y504827D01*\nX222269Y505660D01*\nX220603D01*\nX219770Y506493D01*\nX220603Y507326D01*\nX223102D01*\nX228100D02*\nX225601D01*\nX224768Y506493D01*\nY504827D01*\nX225601Y503994D01*\nX228100D01*\nX229766Y507326D02*\nY503994D01*\nY505660D01*\nX230599Y506493D01*\nX231433Y507326D01*\nX232266D01*\nX237264Y503994D02*\nX235598D01*\nX234765Y504827D01*\nY506493D01*\nX235598Y507326D01*\nX237264D01*\nX238097Y506493D01*\nY505660D01*\nX234765D01*\nX242262Y503994D02*\nX240596D01*\nX239763Y504827D01*\nY506493D01*\nX240596Y507326D01*\nX242262D01*\nX243095Y506493D01*\nY505660D01*\nX239763D01*\nX244761Y503994D02*\nY507326D01*\nX247261D01*\nX248094Y506493D01*\nY503994D01*\nX371501Y394400D02*\nY396399D01*\nX372001Y396899D01*\nX373000D01*\nX373500Y396399D01*\nY394400D01*\nX373000Y393900D01*\nX372001D01*\nX372500Y394900D02*\nX371501Y393900D01*\nX372001D02*\nX371501Y394400D01*\nX368502Y393900D02*\nX370501D01*\nX368502Y395899D01*\nY396399D01*\nX369002Y396899D01*\nX370001D01*\nX370501Y396399D01*\nX335744Y375244D02*\nY378243D01*\nX334245D01*\nX333745Y377743D01*\nY376744D01*\nX334245Y376244D01*\nX335744D01*\nX334744D02*\nX333745Y375244D01*\nX330746Y378243D02*\nX331745Y377743D01*\nX332745Y376744D01*\nY375744D01*\nX332245Y375244D01*\nX331245D01*\nX330746Y375744D01*\nY376244D01*\nX331245Y376744D01*\nX332745D01*\nX353244Y380744D02*\nY383743D01*\nX351745D01*\nX351245Y383243D01*\nY382244D01*\nX351745Y381744D01*\nX353244D01*\nX352244D02*\nX351245Y380744D01*\nX348246Y383743D02*\nX350245D01*\nY382244D01*\nX349245Y382743D01*\nX348745D01*\nX348246Y382244D01*\nY381244D01*\nX348745Y380744D01*\nX349745D01*\nX350245Y381244D01*\nX353344Y340444D02*\nY343443D01*\nX351845D01*\nX351345Y342943D01*\nY341944D01*\nX351845Y341444D01*\nX353344D01*\nX352344D02*\nX351345Y340444D01*\nX350345Y342943D02*\nX349845Y343443D01*\nX348846D01*\nX348346Y342943D01*\nY342443D01*\nX348846Y341944D01*\nX348346Y341444D01*\nY340944D01*\nX348846Y340444D01*\nX349845D01*\nX350345Y340944D01*\nY341444D01*\nX349845Y341944D01*\nX350345Y342443D01*\nY342943D01*\nX349845Y341944D02*\nX348846D01*\nX353544Y359644D02*\nY362643D01*\nX352045D01*\nX351545Y362143D01*\nY361144D01*\nX352045Y360644D01*\nX353544D01*\nX352544D02*\nX351545Y359644D01*\nX350545D02*\nX349545D01*\nX350045D01*\nY362643D01*\nX350545Y362143D01*\nX348046D02*\nX347546Y362643D01*\nX346546D01*\nX346046Y362143D01*\nY361643D01*\nX346546Y361144D01*\nX347046D01*\nX346546D01*\nX346046Y360644D01*\nY360144D01*\nX346546Y359644D01*\nX347546D01*\nX348046Y360144D01*\nX367244Y335244D02*\nY338243D01*\nX365745D01*\nX365245Y337743D01*\nY336744D01*\nX365745Y336244D01*\nX367244D01*\nX366244D02*\nX365245Y335244D01*\nX362745D02*\nY338243D01*\nX364245Y336744D01*\nX362246D01*\nX392245Y347243D02*\nX392745Y347743D01*\nX393744D01*\nX394244Y347243D01*\nY345244D01*\nX393744Y344744D01*\nX392745D01*\nX392245Y345244D01*\nX389246Y344744D02*\nX391245D01*\nX389246Y346743D01*\nY347243D01*\nX389745Y347743D01*\nX390745D01*\nX391245Y347243D01*\nX388246D02*\nX387746Y347743D01*\nX386747D01*\nX386247Y347243D01*\nY345244D01*\nX386747Y344744D01*\nX387746D01*\nX388246Y345244D01*\nY347243D01*\nX393561Y333743D02*\nX394061Y334243D01*\nX395061D01*\nX395561Y333743D01*\nY331744D01*\nX395061Y331244D01*\nX394061D01*\nX393561Y331744D01*\nX392562Y331244D02*\nX391562D01*\nX392062D01*\nY334243D01*\nX392562Y333743D01*\nX390062Y331744D02*\nX389563Y331244D01*\nX388563D01*\nX388063Y331744D01*\nY333743D01*\nX388563Y334243D01*\nX389563D01*\nX390062Y333743D01*\nY333243D01*\nX389563Y332744D01*\nX388063D01*\nX381945Y345443D02*\nX382445Y345943D01*\nX383444D01*\nX383944Y345443D01*\nY343444D01*\nX383444Y342944D01*\nX382445D01*\nX381945Y343444D01*\nX380945Y342944D02*\nX379945D01*\nX380445D01*\nY345943D01*\nX380945Y345443D01*\nX376946Y342944D02*\nY345943D01*\nX378446Y344444D01*\nX376447D01*\nX427243Y415743D02*\nX427743Y415244D01*\nY414244D01*\nX427243Y413744D01*\nX425244D01*\nX424744Y414244D01*\nY415244D01*\nX425244Y415743D01*\nY416743D02*\nX424744Y417243D01*\nY418243D01*\nX425244Y418743D01*\nX427243D01*\nX427743Y418243D01*\nY417243D01*\nX427243Y416743D01*\nX426743D01*\nX426244Y417243D01*\nY418743D01*\nX366145Y369743D02*\nX366645Y370243D01*\nX367644D01*\nX368144Y369743D01*\nY367744D01*\nX367644Y367244D01*\nX366645D01*\nX366145Y367744D01*\nX365145Y369743D02*\nX364645Y370243D01*\nX363646D01*\nX363146Y369743D01*\nY369243D01*\nX363646Y368744D01*\nX363146Y368244D01*\nY367744D01*\nX363646Y367244D01*\nX364645D01*\nX365145Y367744D01*\nY368244D01*\nX364645Y368744D01*\nX365145Y369243D01*\nY369743D01*\nX364645Y368744D02*\nX363646D01*\nX370245Y354243D02*\nX370745Y354743D01*\nX371744D01*\nX372244Y354243D01*\nY352244D01*\nX371744Y351744D01*\nX370745D01*\nX370245Y352244D01*\nX369245Y354743D02*\nX367246D01*\nY354243D01*\nX369245Y352244D01*\nY351744D01*\nX382245Y406243D02*\nX382745Y406743D01*\nX383744D01*\nX384244Y406243D01*\nY404244D01*\nX383744Y403744D01*\nX382745D01*\nX382245Y404244D01*\nX381245Y403744D02*\nX380245D01*\nX380745D01*\nY406743D01*\nX381245Y406243D01*\nX376747Y406743D02*\nX378746D01*\nY405244D01*\nX377746Y405743D01*\nX377246D01*\nX376747Y405244D01*\nY404244D01*\nX377246Y403744D01*\nX378246D01*\nX378746Y404244D01*\nX394205Y357704D02*\nX394705Y358204D01*\nX395705D01*\nX396205Y357704D01*\nY355704D01*\nX395705Y355205D01*\nX394705D01*\nX394205Y355704D01*\nX391206Y358204D02*\nX392206Y357704D01*\nX393206Y356704D01*\nY355704D01*\nX392706Y355205D01*\nX391706D01*\nX391206Y355704D01*\nY356204D01*\nX391706Y356704D01*\nX393206D01*\nX444243Y408243D02*\nX444743Y407744D01*\nY406744D01*\nX444243Y406244D01*\nX442244D01*\nX441744Y406744D01*\nY407744D01*\nX442244Y408243D01*\nX441744Y411242D02*\nY409243D01*\nX443743Y411242D01*\nX444243D01*\nX444743Y410743D01*\nY409743D01*\nX444243Y409243D01*\nX381845Y330043D02*\nX382345Y330543D01*\nX383344D01*\nX383844Y330043D01*\nY328044D01*\nX383344Y327544D01*\nX382345D01*\nX381845Y328044D01*\nX379345Y327544D02*\nY330543D01*\nX380845Y329044D01*\nX378846D01*\nX434743Y416243D02*\nX435243Y415744D01*\nY414744D01*\nX434743Y414244D01*\nX432744D01*\nX432244Y414744D01*\nY415744D01*\nX432744Y416243D01*\nX434743Y417243D02*\nX435243Y417743D01*\nY418743D01*\nX434743Y419242D01*\nX434243D01*\nX433744Y418743D01*\nY418243D01*\nY418743D01*\nX433244Y419242D01*\nX432744D01*\nX432244Y418743D01*\nY417743D01*\nX432744Y417243D01*\nX420099Y415987D02*\nX420599Y415488D01*\nY414488D01*\nX420099Y413988D01*\nX418100D01*\nX417600Y414488D01*\nY415488D01*\nX418100Y415987D01*\nX420599Y418987D02*\nY416987D01*\nX419100D01*\nX419599Y417987D01*\nY418487D01*\nX419100Y418987D01*\nX418100D01*\nX417600Y418487D01*\nY417487D01*\nX418100Y416987D01*\nX405744Y390743D02*\nY388244D01*\nX405244Y387744D01*\nX404245D01*\nX403745Y388244D01*\nY390743D01*\nX400746D02*\nX401745Y390243D01*\nX402745Y389244D01*\nY388244D01*\nX402245Y387744D01*\nX401245D01*\nX400746Y388244D01*\nY388744D01*\nX401245Y389244D01*\nX402745D01*\nX390245Y413743D02*\nX390745Y414243D01*\nX391744D01*\nX392244Y413743D01*\nY411744D01*\nX391744Y411244D01*\nX390745D01*\nX390245Y411744D01*\nX387246Y411244D02*\nX389245D01*\nX387246Y413243D01*\nY413743D01*\nX387745Y414243D01*\nX388745D01*\nX389245Y413743D01*\nX384247Y411244D02*\nX386246D01*\nX384247Y413243D01*\nY413743D01*\nX384747Y414243D01*\nX385746D01*\nX386246Y413743D01*\nX381245Y426743D02*\nX381745Y427243D01*\nX382744D01*\nX383244Y426743D01*\nY424744D01*\nX382744Y424244D01*\nX381745D01*\nX381245Y424744D01*\nX378246Y424244D02*\nX380245D01*\nX378246Y426243D01*\nY426743D01*\nX378746Y427243D01*\nX379745D01*\nX380245Y426743D01*\nX377246D02*\nX376746Y427243D01*\nX375746D01*\nX375247Y426743D01*\nY426243D01*\nX375746Y425744D01*\nX376246D01*\nX375746D01*\nX375247Y425244D01*\nY424744D01*\nX375746Y424244D01*\nX376746D01*\nX377246Y424744D01*\nX404744Y410744D02*\nY413743D01*\nX403245D01*\nX402745Y413243D01*\nY412244D01*\nX403245Y411744D01*\nX404744D01*\nX403744D02*\nX402745Y410744D01*\nX401745Y413743D02*\nX399746D01*\nY413243D01*\nX401745Y411244D01*\nY410744D01*\nX406302Y427372D02*\nY430371D01*\nX404803D01*\nX404303Y429871D01*\nY428871D01*\nX404803Y428371D01*\nX406302D01*\nX405303D02*\nX404303Y427372D01*\nX403303D02*\nX402304D01*\nX402804D01*\nY430371D01*\nX403303Y429871D01*\nX398805Y427372D02*\nX400804D01*\nX398805Y429371D01*\nY429871D01*\nX399305Y430371D01*\nX400304D01*\nX400804Y429871D01*\nX448243Y425743D02*\nX448743Y425244D01*\nY424244D01*\nX448243Y423744D01*\nX446244D01*\nX445744Y424244D01*\nY425244D01*\nX446244Y425743D01*\nX445744Y426743D02*\nY427743D01*\nY427243D01*\nX448743D01*\nX448243Y426743D01*\nX415245Y379743D02*\nX415745Y380243D01*\nX416744D01*\nX417244Y379743D01*\nY377744D01*\nX416744Y377244D01*\nX415745D01*\nX415245Y377744D01*\nX414245Y377244D02*\nX413245D01*\nX413745D01*\nY380243D01*\nX414245Y379743D01*\nX411746D02*\nX411246Y380243D01*\nX410246D01*\nX409747Y379743D01*\nY377744D01*\nX410246Y377244D01*\nX411246D01*\nX411746Y377744D01*\nY379743D01*\nX447244Y383744D02*\nY386743D01*\nX445745D01*\nX445245Y386243D01*\nY385244D01*\nX445745Y384744D01*\nX447244D01*\nX446244D02*\nX445245Y383744D01*\nX444245Y386243D02*\nX443745Y386743D01*\nX442745D01*\nX442246Y386243D01*\nY385743D01*\nX442745Y385244D01*\nX443245D01*\nX442745D01*\nX442246Y384744D01*\nY384244D01*\nX442745Y383744D01*\nX443745D01*\nX444245Y384244D01*\nX425744Y387744D02*\nY390743D01*\nX424245D01*\nX423745Y390243D01*\nY389244D01*\nX424245Y388744D01*\nX425744D01*\nX424744D02*\nX423745Y387744D01*\nX422745Y388244D02*\nX422245Y387744D01*\nX421245D01*\nX420746Y388244D01*\nY390243D01*\nX421245Y390743D01*\nX422245D01*\nX422745Y390243D01*\nY389743D01*\nX422245Y389244D01*\nX420746D01*\nX450244Y367744D02*\nY370743D01*\nX448745D01*\nX448245Y370243D01*\nY369244D01*\nX448745Y368744D01*\nX450244D01*\nX449244D02*\nX448245Y367744D01*\nX447245D02*\nX446245D01*\nX446745D01*\nY370743D01*\nX447245Y370243D01*\nX443246Y367744D02*\nY370743D01*\nX444746Y369244D01*\nX442746D01*\nX433244Y361244D02*\nY364243D01*\nX431745D01*\nX431245Y363743D01*\nY362744D01*\nX431745Y362244D01*\nX433244D01*\nX432244D02*\nX431245Y361244D01*\nX430245D02*\nX429245D01*\nX429745D01*\nY364243D01*\nX430245Y363743D01*\nX425746Y364243D02*\nX427746D01*\nY362744D01*\nX426746Y363243D01*\nX426246D01*\nX425746Y362744D01*\nY361744D01*\nX426246Y361244D01*\nX427246D01*\nX427746Y361744D01*\nX450244Y350244D02*\nY353243D01*\nX448745D01*\nX448245Y352743D01*\nY351744D01*\nX448745Y351244D01*\nX450244D01*\nX449244D02*\nX448245Y350244D01*\nX447245D02*\nX446245D01*\nX446745D01*\nY353243D01*\nX447245Y352743D01*\nX442746Y353243D02*\nX443746Y352743D01*\nX444746Y351744D01*\nY350744D01*\nX444246Y350244D01*\nX443246D01*\nX442746Y350744D01*\nY351244D01*\nX443246Y351744D01*\nX444746D01*\nX426744Y347244D02*\nY350243D01*\nX425245D01*\nX424745Y349743D01*\nY348744D01*\nX425245Y348244D01*\nX426744D01*\nX425744D02*\nX424745Y347244D01*\nX423745D02*\nX422745D01*\nX423245D01*\nY350243D01*\nX423745Y349743D01*\nX421246Y350243D02*\nX419246D01*\nY349743D01*\nX421246Y347744D01*\nY347244D01*\nX348120Y508992D02*\nY503994D01*\nX350619D01*\nX351452Y504827D01*\nY505660D01*\nX350619Y506493D01*\nX348120D01*\nX350619D01*\nX351452Y507326D01*\nY508159D01*\nX350619Y508992D01*\nX348120D01*\nX353951Y503994D02*\nX355617D01*\nX356450Y504827D01*\nY506493D01*\nX355617Y507326D01*\nX353951D01*\nX353118Y506493D01*\nY504827D01*\nX353951Y503994D01*\nX358949Y508159D02*\nY507326D01*\nX358116D01*\nX359783D01*\nX358949D01*\nY504827D01*\nX359783Y503994D01*\nX363115Y508159D02*\nY507326D01*\nX362282D01*\nX363948D01*\nX363115D01*\nY504827D01*\nX363948Y503994D01*\nX367280D02*\nX368946D01*\nX369779Y504827D01*\nY506493D01*\nX368946Y507326D01*\nX367280D01*\nX366447Y506493D01*\nY504827D01*\nX367280Y503994D01*\nX371445D02*\nY507326D01*\nX372278D01*\nX373112Y506493D01*\nY503994D01*\nY506493D01*\nX373945Y507326D01*\nX374778Y506493D01*\nY503994D01*\nX384774Y508159D02*\nX383941Y508992D01*\nX382275D01*\nX381442Y508159D01*\nY507326D01*\nX382275Y506493D01*\nX383941D01*\nX384774Y505660D01*\nY504827D01*\nX383941Y503994D01*\nX382275D01*\nX381442Y504827D01*\nX386441Y503994D02*\nX388107D01*\nX387274D01*\nY507326D01*\nX386441D01*\nX390606Y503994D02*\nX392272D01*\nX391439D01*\nY508992D01*\nX390606D01*\nX394771Y503994D02*\nY508992D01*\nY505660D02*\nX397270Y507326D01*\nX394771Y505660D02*\nX397270Y503994D01*\nX399770D02*\nX402269D01*\nX403102Y504827D01*\nX402269Y505660D01*\nX400603D01*\nX399770Y506493D01*\nX400603Y507326D01*\nX403102D01*\nX408100D02*\nX405601D01*\nX404768Y506493D01*\nY504827D01*\nX405601Y503994D01*\nX408100D01*\nX409766Y507326D02*\nY503994D01*\nY505660D01*\nX410599Y506493D01*\nX411433Y507326D01*\nX412266D01*\nX417264Y503994D02*\nX415598D01*\nX414765Y504827D01*\nY506493D01*\nX415598Y507326D01*\nX417264D01*\nX418097Y506493D01*\nY505660D01*\nX414765D01*\nX422262Y503994D02*\nX420596D01*\nX419763Y504827D01*\nY506493D01*\nX420596Y507326D01*\nX422262D01*\nX423095Y506493D01*\nY505660D01*\nX419763D01*\nX424761Y503994D02*\nY507326D01*\nX427261D01*\nX428094Y506493D01*\nY503994D01*\nD67*\nX193823Y199701D02*\nG03*\nX193823Y199701I-492J0D01*\nG01*\nX219965Y196177D02*\nG03*\nX219965Y196177I-492J0D01*\nG01*\nX373823Y199701D02*\nG03*\nX373823Y199701I-492J0D01*\nG01*\nX399965Y196177D02*\nG03*\nX399965Y196177I-492J0D01*\nG01*\nX193823Y379701D02*\nG03*\nX193823Y379701I-492J0D01*\nG01*\nX219965Y376177D02*\nG03*\nX219965Y376177I-492J0D01*\nG01*\nX373823Y379701D02*\nG03*\nX373823Y379701I-492J0D01*\nG01*\nX399965Y376177D02*\nG03*\nX399965Y376177I-492J0D01*\nG01*\nD69*\nX171850Y155866D02*\nX172638D01*\nX171850Y158622D02*\nX172638D01*\nX221850Y238622D02*\nX222638D01*\nX221850Y235866D02*\nX222638D01*\nX221850Y244622D02*\nX222638D01*\nX221850Y241866D02*\nX222638D01*\nX161850Y182622D02*\nX162638D01*\nX161850Y179866D02*\nX162638D01*\nX172350Y195866D02*\nX173138D01*\nX172350Y198622D02*\nX173138D01*\nX161850Y195866D02*\nX162638D01*\nX161850Y198622D02*\nX162638D01*\nX182850Y151366D02*\nX183638D01*\nX182850Y154122D02*\nX183638D01*\nX192150Y204425D02*\nY206000D01*\nX189000D02*\nX192150D01*\nX180339Y204425D02*\nY206000D01*\nX183488D01*\nX250622Y205850D02*\nY206638D01*\nX247866Y205850D02*\nY206638D01*\nX260122Y208350D02*\nY209138D01*\nX257366Y208350D02*\nY209138D01*\nX251122Y172350D02*\nY173138D01*\nX248366Y172350D02*\nY173138D01*\nX260622Y174850D02*\nY175638D01*\nX257866Y174850D02*\nY175638D01*\nX260122Y192350D02*\nY193138D01*\nX257366Y192350D02*\nY193138D01*\nX250622Y189350D02*\nY190138D01*\nX247866Y189350D02*\nY190138D01*\nX198705Y200508D02*\nX218783D01*\nX198705Y215075D02*\nX218783D01*\nY200508D02*\nY215075D01*\nX198705Y200508D02*\nY215075D01*\nX351850Y155866D02*\nX352638D01*\nX351850Y158622D02*\nX352638D01*\nX401850Y238622D02*\nX402638D01*\nX401850Y235866D02*\nX402638D01*\nX401850Y244622D02*\nX402638D01*\nX401850Y241866D02*\nX402638D01*\nX341850Y182622D02*\nX342638D01*\nX341850Y179866D02*\nX342638D01*\nX352350Y195866D02*\nX353138D01*\nX352350Y198622D02*\nX353138D01*\nX341850Y195866D02*\nX342638D01*\nX341850Y198622D02*\nX342638D01*\nX362850Y151366D02*\nX363638D01*\nX362850Y154122D02*\nX363638D01*\nX372150Y204425D02*\nY206000D01*\nX369000D02*\nX372150D01*\nX360339Y204425D02*\nY206000D01*\nX363488D01*\nX430622Y205850D02*\nY206638D01*\nX427866Y205850D02*\nY206638D01*\nX440122Y208350D02*\nY209138D01*\nX437366Y208350D02*\nY209138D01*\nX431122Y172350D02*\nY173138D01*\nX428366Y172350D02*\nY173138D01*\nX440622Y174850D02*\nY175638D01*\nX437866Y174850D02*\nY175638D01*\nX440122Y192350D02*\nY193138D01*\nX437366Y192350D02*\nY193138D01*\nX430622Y189350D02*\nY190138D01*\nX427866Y189350D02*\nY190138D01*\nX378705Y200508D02*\nX398783D01*\nX378705Y215075D02*\nX398783D01*\nY200508D02*\nY215075D01*\nX378705Y200508D02*\nY215075D01*\nX171850Y335866D02*\nX172638D01*\nX171850Y338622D02*\nX172638D01*\nX221850Y418622D02*\nX222638D01*\nX221850Y415866D02*\nX222638D01*\nX221850Y424622D02*\nX222638D01*\nX221850Y421866D02*\nX222638D01*\nX161850Y362622D02*\nX162638D01*\nX161850Y359866D02*\nX162638D01*\nX172350Y375866D02*\nX173138D01*\nX172350Y378622D02*\nX173138D01*\nX161850Y375866D02*\nX162638D01*\nX161850Y378622D02*\nX162638D01*\nX182850Y331366D02*\nX183638D01*\nX182850Y334122D02*\nX183638D01*\nX192150Y384425D02*\nY386000D01*\nX189000D02*\nX192150D01*\nX180339Y384425D02*\nY386000D01*\nX183488D01*\nX250622Y385850D02*\nY386638D01*\nX247866Y385850D02*\nY386638D01*\nX260122Y388350D02*\nY389138D01*\nX257366Y388350D02*\nY389138D01*\nX251122Y352350D02*\nY353138D01*\nX248366Y352350D02*\nY353138D01*\nX260622Y354850D02*\nY355638D01*\nX257866Y354850D02*\nY355638D01*\nX260122Y372350D02*\nY373138D01*\nX257366Y372350D02*\nY373138D01*\nX250622Y369350D02*\nY370138D01*\nX247866Y369350D02*\nY370138D01*\nX198705Y380508D02*\nX218783D01*\nX198705Y395075D02*\nX218783D01*\nY380508D02*\nY395075D01*\nX198705Y380508D02*\nY395075D01*\nX351850Y335866D02*\nX352638D01*\nX351850Y338622D02*\nX352638D01*\nX401850Y418622D02*\nX402638D01*\nX401850Y415866D02*\nX402638D01*\nX401850Y424622D02*\nX402638D01*\nX401850Y421866D02*\nX402638D01*\nX341850Y362622D02*\nX342638D01*\nX341850Y359866D02*\nX342638D01*\nX352350Y375866D02*\nX353138D01*\nX352350Y378622D02*\nX353138D01*\nX341850Y375866D02*\nX342638D01*\nX341850Y378622D02*\nX342638D01*\nX362850Y331366D02*\nX363638D01*\nX362850Y334122D02*\nX363638D01*\nX372150Y384425D02*\nY386000D01*\nX369000D02*\nX372150D01*\nX360339Y384425D02*\nY386000D01*\nX363488D01*\nX430622Y385850D02*\nY386638D01*\nX427866Y385850D02*\nY386638D01*\nX440122Y388350D02*\nY389138D01*\nX437366Y388350D02*\nY389138D01*\nX431122Y352350D02*\nY353138D01*\nX428366Y352350D02*\nY353138D01*\nX440622Y354850D02*\nY355638D01*\nX437866Y354850D02*\nY355638D01*\nX440122Y372350D02*\nY373138D01*\nX437366Y372350D02*\nY373138D01*\nX430622Y369350D02*\nY370138D01*\nX427866Y369350D02*\nY370138D01*\nX378705Y380508D02*\nX398783D01*\nX378705Y395075D02*\nX398783D01*\nY380508D02*\nY395075D01*\nX378705Y380508D02*\nY395075D01*\nD116*\nX216028Y204445D02*\nG03*\nX216028Y204445I-1181J0D01*\nG01*\nX396028D02*\nG03*\nX396028Y204445I-1181J0D01*\nG01*\nX216028Y384445D02*\nG03*\nX216028Y384445I-1181J0D01*\nG01*\nX396028D02*\nG03*\nX396028Y384445I-1181J0D01*\nG01*\nM02*\n"
  },
  {
    "path": "hardware/panel.GBP",
    "content": "G04 Layer_Color=128*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD13R,0.03347X0.03150*%\n%ADD24R,0.03543X0.02953*%\n%ADD43C,0.00800*%\n%ADD61R,0.03150X0.03347*%\n%ADD62R,0.02953X0.03543*%\nG04:AMPARAMS|DCode=63|XSize=23.62mil|YSize=62.99mil|CornerRadius=5.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD63*\n21,1,0.02362,0.05118,0,0,0.0*\n21,1,0.01181,0.06299,0,0,0.0*\n1,1,0.01181,0.00591,-0.02559*\n1,1,0.01181,-0.00591,-0.02559*\n1,1,0.01181,-0.00591,0.02559*\n1,1,0.01181,0.00591,0.02559*\n%\n%ADD63ROUNDEDRECTD63*%\n%ADD64R,0.02362X0.06299*%\n%ADD65R,0.01772X0.05512*%\n%ADD66O,0.01772X0.05512*%\nD13*\nX211283Y173244D02*\nD03*\nX216205D02*\nD03*\nX207784Y161744D02*\nD03*\nX212705D02*\nD03*\nX207784Y156744D02*\nD03*\nX212705D02*\nD03*\nX188705Y193244D02*\nD03*\nX183783D02*\nD03*\nX213205Y227244D02*\nD03*\nX208283D02*\nD03*\nX211205Y237244D02*\nD03*\nX206283D02*\nD03*\nX211205Y243244D02*\nD03*\nX206283D02*\nD03*\nX203705Y153744D02*\nD03*\nX198783D02*\nD03*\nX198283Y159244D02*\nD03*\nX203205D02*\nD03*\nX192205Y168244D02*\nD03*\nX187284D02*\nD03*\nX391283Y173244D02*\nD03*\nX396205D02*\nD03*\nX387784Y161744D02*\nD03*\nX392705D02*\nD03*\nX387784Y156744D02*\nD03*\nX392705D02*\nD03*\nX368705Y193244D02*\nD03*\nX363783D02*\nD03*\nX393205Y227244D02*\nD03*\nX388283D02*\nD03*\nX391205Y237244D02*\nD03*\nX386283D02*\nD03*\nX391205Y243244D02*\nD03*\nX386283D02*\nD03*\nX383705Y153744D02*\nD03*\nX378783D02*\nD03*\nX378283Y159244D02*\nD03*\nX383205D02*\nD03*\nX372205Y168244D02*\nD03*\nX367284D02*\nD03*\nX211283Y353244D02*\nD03*\nX216205D02*\nD03*\nX207784Y341744D02*\nD03*\nX212705D02*\nD03*\nX207784Y336744D02*\nD03*\nX212705D02*\nD03*\nX188705Y373244D02*\nD03*\nX183783D02*\nD03*\nX213205Y407244D02*\nD03*\nX208283D02*\nD03*\nX211205Y417244D02*\nD03*\nX206283D02*\nD03*\nX211205Y423244D02*\nD03*\nX206283D02*\nD03*\nX203705Y333744D02*\nD03*\nX198783D02*\nD03*\nX198283Y339244D02*\nD03*\nX203205D02*\nD03*\nX192205Y348244D02*\nD03*\nX187284D02*\nD03*\nX391283Y353244D02*\nD03*\nX396205D02*\nD03*\nX387784Y341744D02*\nD03*\nX392705D02*\nD03*\nX387784Y336744D02*\nD03*\nX392705D02*\nD03*\nX368705Y373244D02*\nD03*\nX363783D02*\nD03*\nX393205Y407244D02*\nD03*\nX388283D02*\nD03*\nX391205Y417244D02*\nD03*\nX386283D02*\nD03*\nX391205Y423244D02*\nD03*\nX386283D02*\nD03*\nX383705Y333744D02*\nD03*\nX378783D02*\nD03*\nX378283Y339244D02*\nD03*\nX383205D02*\nD03*\nX372205Y348244D02*\nD03*\nX367284D02*\nD03*\nD24*\nX249244Y203587D02*\nD03*\nY208902D02*\nD03*\nX258744Y206087D02*\nD03*\nY211402D02*\nD03*\nX249744Y170087D02*\nD03*\nY175402D02*\nD03*\nX259244Y172587D02*\nD03*\nY177902D02*\nD03*\nX258744Y190087D02*\nD03*\nY195402D02*\nD03*\nX249244Y187087D02*\nD03*\nY192402D02*\nD03*\nX429244Y203587D02*\nD03*\nY208902D02*\nD03*\nX438744Y206087D02*\nD03*\nY211402D02*\nD03*\nX429744Y170087D02*\nD03*\nY175402D02*\nD03*\nX439244Y172587D02*\nD03*\nY177902D02*\nD03*\nX438744Y190087D02*\nD03*\nY195402D02*\nD03*\nX429244Y187087D02*\nD03*\nY192402D02*\nD03*\nX249244Y383587D02*\nD03*\nY388902D02*\nD03*\nX258744Y386087D02*\nD03*\nY391402D02*\nD03*\nX249744Y350087D02*\nD03*\nY355402D02*\nD03*\nX259244Y352587D02*\nD03*\nY357902D02*\nD03*\nX258744Y370087D02*\nD03*\nY375402D02*\nD03*\nX249244Y367087D02*\nD03*\nY372402D02*\nD03*\nX429244Y383587D02*\nD03*\nY388902D02*\nD03*\nX438744Y386087D02*\nD03*\nY391402D02*\nD03*\nX429744Y350087D02*\nD03*\nY355402D02*\nD03*\nX439244Y352587D02*\nD03*\nY357902D02*\nD03*\nX438744Y370087D02*\nD03*\nY375402D02*\nD03*\nX429244Y367087D02*\nD03*\nY372402D02*\nD03*\nD43*\nX171120Y328192D02*\nY323194D01*\nX173619D01*\nX174452Y324027D01*\nY324860D01*\nX173619Y325693D01*\nX171120D01*\nX173619D01*\nX174452Y326526D01*\nY327359D01*\nX173619Y328192D01*\nX171120D01*\nX176951Y323194D02*\nX178617D01*\nX179450Y324027D01*\nY325693D01*\nX178617Y326526D01*\nX176951D01*\nX176118Y325693D01*\nY324027D01*\nX176951Y323194D01*\nX181949Y327359D02*\nY326526D01*\nX181116D01*\nX182783D01*\nX181949D01*\nY324027D01*\nX182783Y323194D01*\nX186115Y327359D02*\nY326526D01*\nX185282D01*\nX186948D01*\nX186115D01*\nY324027D01*\nX186948Y323194D01*\nX190280D02*\nX191946D01*\nX192779Y324027D01*\nY325693D01*\nX191946Y326526D01*\nX190280D01*\nX189447Y325693D01*\nY324027D01*\nX190280Y323194D01*\nX194446D02*\nY326526D01*\nX195279D01*\nX196112Y325693D01*\nY323194D01*\nY325693D01*\nX196945Y326526D01*\nX197778Y325693D01*\nY323194D01*\nX204442D02*\nY328192D01*\nX206941D01*\nX207774Y327359D01*\nY325693D01*\nX206941Y324860D01*\nX204442D01*\nX210274Y326526D02*\nX211940D01*\nX212773Y325693D01*\nY323194D01*\nX210274D01*\nX209441Y324027D01*\nX210274Y324860D01*\nX212773D01*\nX214439Y323194D02*\nX216938D01*\nX217771Y324027D01*\nX216938Y324860D01*\nX215272D01*\nX214439Y325693D01*\nX215272Y326526D01*\nX217771D01*\nX220270Y327359D02*\nY326526D01*\nX219437D01*\nX221104D01*\nX220270D01*\nY324027D01*\nX221104Y323194D01*\nX226102D02*\nX224436D01*\nX223603Y324027D01*\nY325693D01*\nX224436Y326526D01*\nX226102D01*\nX226935Y325693D01*\nY324860D01*\nX223603D01*\nX351120Y328192D02*\nY323194D01*\nX353619D01*\nX354452Y324027D01*\nY324860D01*\nX353619Y325693D01*\nX351120D01*\nX353619D01*\nX354452Y326526D01*\nY327359D01*\nX353619Y328192D01*\nX351120D01*\nX356951Y323194D02*\nX358617D01*\nX359450Y324027D01*\nY325693D01*\nX358617Y326526D01*\nX356951D01*\nX356118Y325693D01*\nY324027D01*\nX356951Y323194D01*\nX361949Y327359D02*\nY326526D01*\nX361116D01*\nX362783D01*\nX361949D01*\nY324027D01*\nX362783Y323194D01*\nX366115Y327359D02*\nY326526D01*\nX365282D01*\nX366948D01*\nX366115D01*\nY324027D01*\nX366948Y323194D01*\nX370280D02*\nX371946D01*\nX372779Y324027D01*\nY325693D01*\nX371946Y326526D01*\nX370280D01*\nX369447Y325693D01*\nY324027D01*\nX370280Y323194D01*\nX374446D02*\nY326526D01*\nX375278D01*\nX376112Y325693D01*\nY323194D01*\nY325693D01*\nX376945Y326526D01*\nX377778Y325693D01*\nY323194D01*\nX384442D02*\nY328192D01*\nX386941D01*\nX387774Y327359D01*\nY325693D01*\nX386941Y324860D01*\nX384442D01*\nX390274Y326526D02*\nX391940D01*\nX392773Y325693D01*\nY323194D01*\nX390274D01*\nX389441Y324027D01*\nX390274Y324860D01*\nX392773D01*\nX394439Y323194D02*\nX396938D01*\nX397771Y324027D01*\nX396938Y324860D01*\nX395272D01*\nX394439Y325693D01*\nX395272Y326526D01*\nX397771D01*\nX400270Y327359D02*\nY326526D01*\nX399437D01*\nX401103D01*\nX400270D01*\nY324027D01*\nX401103Y323194D01*\nX406102D02*\nX404436D01*\nX403603Y324027D01*\nY325693D01*\nX404436Y326526D01*\nX406102D01*\nX406935Y325693D01*\nY324860D01*\nX403603D01*\nX171120Y508192D02*\nY503194D01*\nX173619D01*\nX174452Y504027D01*\nY504860D01*\nX173619Y505693D01*\nX171120D01*\nX173619D01*\nX174452Y506526D01*\nY507359D01*\nX173619Y508192D01*\nX171120D01*\nX176951Y503194D02*\nX178617D01*\nX179450Y504027D01*\nY505693D01*\nX178617Y506526D01*\nX176951D01*\nX176118Y505693D01*\nY504027D01*\nX176951Y503194D01*\nX181949Y507359D02*\nY506526D01*\nX181116D01*\nX182783D01*\nX181949D01*\nY504027D01*\nX182783Y503194D01*\nX186115Y507359D02*\nY506526D01*\nX185282D01*\nX186948D01*\nX186115D01*\nY504027D01*\nX186948Y503194D01*\nX190280D02*\nX191946D01*\nX192779Y504027D01*\nY505693D01*\nX191946Y506526D01*\nX190280D01*\nX189447Y505693D01*\nY504027D01*\nX190280Y503194D01*\nX194446D02*\nY506526D01*\nX195279D01*\nX196112Y505693D01*\nY503194D01*\nY505693D01*\nX196945Y506526D01*\nX197778Y505693D01*\nY503194D01*\nX204442D02*\nY508192D01*\nX206941D01*\nX207774Y507359D01*\nY505693D01*\nX206941Y504860D01*\nX204442D01*\nX210274Y506526D02*\nX211940D01*\nX212773Y505693D01*\nY503194D01*\nX210274D01*\nX209441Y504027D01*\nX210274Y504860D01*\nX212773D01*\nX214439Y503194D02*\nX216938D01*\nX217771Y504027D01*\nX216938Y504860D01*\nX215272D01*\nX214439Y505693D01*\nX215272Y506526D01*\nX217771D01*\nX220270Y507359D02*\nY506526D01*\nX219437D01*\nX221104D01*\nX220270D01*\nY504027D01*\nX221104Y503194D01*\nX226102D02*\nX224436D01*\nX223603Y504027D01*\nY505693D01*\nX224436Y506526D01*\nX226102D01*\nX226935Y505693D01*\nY504860D01*\nX223603D01*\nX351120Y508192D02*\nY503194D01*\nX353619D01*\nX354452Y504027D01*\nY504860D01*\nX353619Y505693D01*\nX351120D01*\nX353619D01*\nX354452Y506526D01*\nY507359D01*\nX353619Y508192D01*\nX351120D01*\nX356951Y503194D02*\nX358617D01*\nX359450Y504027D01*\nY505693D01*\nX358617Y506526D01*\nX356951D01*\nX356118Y505693D01*\nY504027D01*\nX356951Y503194D01*\nX361949Y507359D02*\nY506526D01*\nX361116D01*\nX362783D01*\nX361949D01*\nY504027D01*\nX362783Y503194D01*\nX366115Y507359D02*\nY506526D01*\nX365282D01*\nX366948D01*\nX366115D01*\nY504027D01*\nX366948Y503194D01*\nX370280D02*\nX371946D01*\nX372779Y504027D01*\nY505693D01*\nX371946Y506526D01*\nX370280D01*\nX369447Y505693D01*\nY504027D01*\nX370280Y503194D01*\nX374446D02*\nY506526D01*\nX375278D01*\nX376112Y505693D01*\nY503194D01*\nY505693D01*\nX376945Y506526D01*\nX377778Y505693D01*\nY503194D01*\nX384442D02*\nY508192D01*\nX386941D01*\nX387774Y507359D01*\nY505693D01*\nX386941Y504860D01*\nX384442D01*\nX390274Y506526D02*\nX391940D01*\nX392773Y505693D01*\nY503194D01*\nX390274D01*\nX389441Y504027D01*\nX390274Y504860D01*\nX392773D01*\nX394439Y503194D02*\nX396938D01*\nX397771Y504027D01*\nX396938Y504860D01*\nX395272D01*\nX394439Y505693D01*\nX395272Y506526D01*\nX397771D01*\nX400270Y507359D02*\nY506526D01*\nX399437D01*\nX401103D01*\nX400270D01*\nY504027D01*\nX401103Y503194D01*\nX406102D02*\nX404436D01*\nX403603Y504027D01*\nY505693D01*\nX404436Y506526D01*\nX406102D01*\nX406935Y505693D01*\nY504860D01*\nX403603D01*\nD61*\nX258744Y226783D02*\nD03*\nY231705D02*\nD03*\nX253744Y227283D02*\nD03*\nY232205D02*\nD03*\nX238744Y230205D02*\nD03*\nY225283D02*\nD03*\nX244744Y229705D02*\nD03*\nY224783D02*\nD03*\nX262244Y249205D02*\nD03*\nY244283D02*\nD03*\nX239744Y194205D02*\nD03*\nY189283D02*\nD03*\nX438744Y226783D02*\nD03*\nY231705D02*\nD03*\nX433744Y227283D02*\nD03*\nY232205D02*\nD03*\nX418744Y230205D02*\nD03*\nY225283D02*\nD03*\nX424744Y229705D02*\nD03*\nY224783D02*\nD03*\nX442244Y249205D02*\nD03*\nY244283D02*\nD03*\nX419744Y194205D02*\nD03*\nY189283D02*\nD03*\nX258744Y406783D02*\nD03*\nY411705D02*\nD03*\nX253744Y407283D02*\nD03*\nY412205D02*\nD03*\nX238744Y410205D02*\nD03*\nY405283D02*\nD03*\nX244744Y409705D02*\nD03*\nY404783D02*\nD03*\nX262244Y429205D02*\nD03*\nY424283D02*\nD03*\nX239744Y374205D02*\nD03*\nY369283D02*\nD03*\nX438744Y406783D02*\nD03*\nY411705D02*\nD03*\nX433744Y407283D02*\nD03*\nY412205D02*\nD03*\nX418744Y410205D02*\nD03*\nY405283D02*\nD03*\nX424744Y409705D02*\nD03*\nY404783D02*\nD03*\nX442244Y429205D02*\nD03*\nY424283D02*\nD03*\nX419744Y374205D02*\nD03*\nY369283D02*\nD03*\nD62*\nX169587Y157244D02*\nD03*\nX174901D02*\nD03*\nX224902Y237244D02*\nD03*\nX219587D02*\nD03*\nX224902Y243244D02*\nD03*\nX219587D02*\nD03*\nX164902Y181244D02*\nD03*\nX159587D02*\nD03*\nX170087Y197244D02*\nD03*\nX175401D02*\nD03*\nX159587D02*\nD03*\nX164901D02*\nD03*\nX180587Y152744D02*\nD03*\nX185901D02*\nD03*\nX349587Y157244D02*\nD03*\nX354901D02*\nD03*\nX404902Y237244D02*\nD03*\nX399587D02*\nD03*\nX404902Y243244D02*\nD03*\nX399587D02*\nD03*\nX344902Y181244D02*\nD03*\nX339587D02*\nD03*\nX350087Y197244D02*\nD03*\nX355401D02*\nD03*\nX339587D02*\nD03*\nX344901D02*\nD03*\nX360587Y152744D02*\nD03*\nX365901D02*\nD03*\nX169587Y337244D02*\nD03*\nX174901D02*\nD03*\nX224902Y417244D02*\nD03*\nX219587D02*\nD03*\nX224902Y423244D02*\nD03*\nX219587D02*\nD03*\nX164902Y361244D02*\nD03*\nX159587D02*\nD03*\nX170087Y377244D02*\nD03*\nX175401D02*\nD03*\nX159587D02*\nD03*\nX164901D02*\nD03*\nX180587Y332744D02*\nD03*\nX185901D02*\nD03*\nX349587Y337244D02*\nD03*\nX354901D02*\nD03*\nX404902Y417244D02*\nD03*\nX399587D02*\nD03*\nX404902Y423244D02*\nD03*\nX399587D02*\nD03*\nX344902Y361244D02*\nD03*\nX339587D02*\nD03*\nX350087Y377244D02*\nD03*\nX355401D02*\nD03*\nX339587D02*\nD03*\nX344901D02*\nD03*\nX360587Y332744D02*\nD03*\nX365901D02*\nD03*\nD63*\nX189984Y199701D02*\nD03*\nX369984D02*\nD03*\nX189984Y379701D02*\nD03*\nX369984D02*\nD03*\nD64*\nX182504Y199701D02*\nD03*\nX186244Y206787D02*\nD03*\nX362504Y199701D02*\nD03*\nX366244Y206787D02*\nD03*\nX182504Y379701D02*\nD03*\nX186244Y386787D02*\nD03*\nX362504Y379701D02*\nD03*\nX366244Y386787D02*\nD03*\nD65*\nX216421Y196177D02*\nD03*\nX396421D02*\nD03*\nX216421Y376177D02*\nD03*\nX396421D02*\nD03*\nD66*\nX213862Y196177D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX216421Y219406D02*\nD03*\nX213862D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX393862Y196177D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX396421Y219406D02*\nD03*\nX393862D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX213862Y376177D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX216421Y399406D02*\nD03*\nX213862D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX393862Y376177D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX396421Y399406D02*\nD03*\nX393862D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nM02*\n"
  },
  {
    "path": "hardware/panel.GBS",
    "content": "G04 Layer_Color=16711935*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD43C,0.00800*%\n%ADD74R,0.04147X0.03950*%\n%ADD85R,0.04343X0.03753*%\n%ADD99C,0.01800*%\n%ADD100O,0.05524X0.10249*%\n%ADD101O,0.06902X0.04343*%\n%ADD102O,0.04540X0.05721*%\n%ADD103C,0.07800*%\n%ADD104R,0.07800X0.07800*%\n%ADD105C,0.04800*%\n%ADD106R,0.04800X0.04800*%\n%ADD107R,0.07800X0.07800*%\n%ADD108C,0.08674*%\n%ADD109R,0.13000X0.25000*%\n%ADD110R,0.03950X0.04147*%\n%ADD111R,0.03753X0.04343*%\nG04:AMPARAMS|DCode=112|XSize=31.62mil|YSize=70.99mil|CornerRadius=9.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD112*\n21,1,0.03162,0.05118,0,0,0.0*\n21,1,0.01181,0.07099,0,0,0.0*\n1,1,0.01981,0.00591,-0.02559*\n1,1,0.01981,-0.00591,-0.02559*\n1,1,0.01981,-0.00591,0.02559*\n1,1,0.01981,0.00591,0.02559*\n%\n%ADD112ROUNDEDRECTD112*%\n%ADD113R,0.03162X0.07099*%\n%ADD114R,0.02572X0.06312*%\n%ADD115O,0.02572X0.06312*%\nD43*\nX169520Y330492D02*\nY325494D01*\nX172019D01*\nX172852Y326327D01*\nY327160D01*\nX172019Y327993D01*\nX169520D01*\nX172019D01*\nX172852Y328826D01*\nY329659D01*\nX172019Y330492D01*\nX169520D01*\nX175351Y325494D02*\nX177017D01*\nX177850Y326327D01*\nY327993D01*\nX177017Y328826D01*\nX175351D01*\nX174518Y327993D01*\nY326327D01*\nX175351Y325494D01*\nX180350Y328826D02*\nX182016D01*\nX182849Y327993D01*\nY325494D01*\nX180350D01*\nX179516Y326327D01*\nX180350Y327160D01*\nX182849D01*\nX184515Y328826D02*\nY325494D01*\nY327160D01*\nX185348Y327993D01*\nX186181Y328826D01*\nX187014D01*\nX192845Y330492D02*\nY325494D01*\nX190346D01*\nX189513Y326327D01*\nY327993D01*\nX190346Y328826D01*\nX192845D01*\nX202009Y330492D02*\nX200343D01*\nX199510Y329659D01*\nY326327D01*\nX200343Y325494D01*\nX202009D01*\nX202842Y326327D01*\nY329659D01*\nX202009Y330492D01*\nX204508Y328826D02*\nY326327D01*\nX205341Y325494D01*\nX207841D01*\nY328826D01*\nX210340Y329659D02*\nY328826D01*\nX209507D01*\nX211173D01*\nX210340D01*\nY326327D01*\nX211173Y325494D01*\nX213672D02*\nX215338D01*\nX214505D01*\nY330492D01*\nX213672D01*\nX217837Y325494D02*\nX219503D01*\nX218670D01*\nY328826D01*\nX217837D01*\nX222003Y325494D02*\nY328826D01*\nX224502D01*\nX225335Y327993D01*\nY325494D01*\nX229500D02*\nX227834D01*\nX227001Y326327D01*\nY327993D01*\nX227834Y328826D01*\nX229500D01*\nX230333Y327993D01*\nY327160D01*\nX227001D01*\nX172620Y332792D02*\nY327794D01*\nX175119D01*\nX175952Y328627D01*\nY329460D01*\nX175119Y330293D01*\nX172620D01*\nX175119D01*\nX175952Y331126D01*\nY331959D01*\nX175119Y332792D01*\nX172620D01*\nX178451Y327794D02*\nX180117D01*\nX180950Y328627D01*\nY330293D01*\nX180117Y331126D01*\nX178451D01*\nX177618Y330293D01*\nY328627D01*\nX178451Y327794D01*\nX183449Y331959D02*\nY331126D01*\nX182616D01*\nX184283D01*\nX183449D01*\nY328627D01*\nX184283Y327794D01*\nX187615Y331959D02*\nY331126D01*\nX186782D01*\nX188448D01*\nX187615D01*\nY328627D01*\nX188448Y327794D01*\nX191780D02*\nX193446D01*\nX194279Y328627D01*\nY330293D01*\nX193446Y331126D01*\nX191780D01*\nX190947Y330293D01*\nY328627D01*\nX191780Y327794D01*\nX195946D02*\nY331126D01*\nX196779D01*\nX197612Y330293D01*\nY327794D01*\nY330293D01*\nX198445Y331126D01*\nX199278Y330293D01*\nY327794D01*\nX209275Y331959D02*\nX208441Y332792D01*\nX206775D01*\nX205942Y331959D01*\nY331126D01*\nX206775Y330293D01*\nX208441D01*\nX209275Y329460D01*\nY328627D01*\nX208441Y327794D01*\nX206775D01*\nX205942Y328627D01*\nX211774Y327794D02*\nX213440D01*\nX214273Y328627D01*\nY330293D01*\nX213440Y331126D01*\nX211774D01*\nX210941Y330293D01*\nY328627D01*\nX211774Y327794D01*\nX215939D02*\nX217605D01*\nX216772D01*\nY332792D01*\nX215939D01*\nX223437D02*\nY327794D01*\nX220937D01*\nX220104Y328627D01*\nY330293D01*\nX220937Y331126D01*\nX223437D01*\nX227602Y327794D02*\nX225936D01*\nX225103Y328627D01*\nY330293D01*\nX225936Y331126D01*\nX227602D01*\nX228435Y330293D01*\nY329460D01*\nX225103D01*\nX230101Y331126D02*\nY327794D01*\nY329460D01*\nX230934Y330293D01*\nX231767Y331126D01*\nX232600D01*\nX349520Y330492D02*\nY325494D01*\nX352019D01*\nX352852Y326327D01*\nY327160D01*\nX352019Y327993D01*\nX349520D01*\nX352019D01*\nX352852Y328826D01*\nY329659D01*\nX352019Y330492D01*\nX349520D01*\nX355351Y325494D02*\nX357017D01*\nX357850Y326327D01*\nY327993D01*\nX357017Y328826D01*\nX355351D01*\nX354518Y327993D01*\nY326327D01*\nX355351Y325494D01*\nX360349Y328826D02*\nX362016D01*\nX362849Y327993D01*\nY325494D01*\nX360349D01*\nX359516Y326327D01*\nX360349Y327160D01*\nX362849D01*\nX364515Y328826D02*\nY325494D01*\nY327160D01*\nX365348Y327993D01*\nX366181Y328826D01*\nX367014D01*\nX372846Y330492D02*\nY325494D01*\nX370346D01*\nX369513Y326327D01*\nY327993D01*\nX370346Y328826D01*\nX372846D01*\nX382009Y330492D02*\nX380343D01*\nX379510Y329659D01*\nY326327D01*\nX380343Y325494D01*\nX382009D01*\nX382842Y326327D01*\nY329659D01*\nX382009Y330492D01*\nX384508Y328826D02*\nY326327D01*\nX385341Y325494D01*\nX387841D01*\nY328826D01*\nX390340Y329659D02*\nY328826D01*\nX389507D01*\nX391173D01*\nX390340D01*\nY326327D01*\nX391173Y325494D01*\nX393672D02*\nX395338D01*\nX394505D01*\nY330492D01*\nX393672D01*\nX397837Y325494D02*\nX399503D01*\nX398670D01*\nY328826D01*\nX397837D01*\nX402003Y325494D02*\nY328826D01*\nX404502D01*\nX405335Y327993D01*\nY325494D01*\nX409500D02*\nX407834D01*\nX407001Y326327D01*\nY327993D01*\nX407834Y328826D01*\nX409500D01*\nX410333Y327993D01*\nY327160D01*\nX407001D01*\nX352620Y332792D02*\nY327794D01*\nX355119D01*\nX355952Y328627D01*\nY329460D01*\nX355119Y330293D01*\nX352620D01*\nX355119D01*\nX355952Y331126D01*\nY331959D01*\nX355119Y332792D01*\nX352620D01*\nX358451Y327794D02*\nX360117D01*\nX360950Y328627D01*\nY330293D01*\nX360117Y331126D01*\nX358451D01*\nX357618Y330293D01*\nY328627D01*\nX358451Y327794D01*\nX363450Y331959D02*\nY331126D01*\nX362616D01*\nX364283D01*\nX363450D01*\nY328627D01*\nX364283Y327794D01*\nX367615Y331959D02*\nY331126D01*\nX366782D01*\nX368448D01*\nX367615D01*\nY328627D01*\nX368448Y327794D01*\nX371780D02*\nX373446D01*\nX374279Y328627D01*\nY330293D01*\nX373446Y331126D01*\nX371780D01*\nX370947Y330293D01*\nY328627D01*\nX371780Y327794D01*\nX375945D02*\nY331126D01*\nX376779D01*\nX377612Y330293D01*\nY327794D01*\nY330293D01*\nX378445Y331126D01*\nX379278Y330293D01*\nY327794D01*\nX389275Y331959D02*\nX388441Y332792D01*\nX386775D01*\nX385942Y331959D01*\nY331126D01*\nX386775Y330293D01*\nX388441D01*\nX389275Y329460D01*\nY328627D01*\nX388441Y327794D01*\nX386775D01*\nX385942Y328627D01*\nX391774Y327794D02*\nX393440D01*\nX394273Y328627D01*\nY330293D01*\nX393440Y331126D01*\nX391774D01*\nX390941Y330293D01*\nY328627D01*\nX391774Y327794D01*\nX395939D02*\nX397605D01*\nX396772D01*\nY332792D01*\nX395939D01*\nX403437D02*\nY327794D01*\nX400937D01*\nX400104Y328627D01*\nY330293D01*\nX400937Y331126D01*\nX403437D01*\nX407602Y327794D02*\nX405936D01*\nX405103Y328627D01*\nY330293D01*\nX405936Y331126D01*\nX407602D01*\nX408435Y330293D01*\nY329460D01*\nX405103D01*\nX410101Y331126D02*\nY327794D01*\nY329460D01*\nX410934Y330293D01*\nX411767Y331126D01*\nX412600D01*\nX169520Y510492D02*\nY505494D01*\nX172019D01*\nX172852Y506327D01*\nY507160D01*\nX172019Y507993D01*\nX169520D01*\nX172019D01*\nX172852Y508826D01*\nY509659D01*\nX172019Y510492D01*\nX169520D01*\nX175351Y505494D02*\nX177017D01*\nX177850Y506327D01*\nY507993D01*\nX177017Y508826D01*\nX175351D01*\nX174518Y507993D01*\nY506327D01*\nX175351Y505494D01*\nX180350Y508826D02*\nX182016D01*\nX182849Y507993D01*\nY505494D01*\nX180350D01*\nX179516Y506327D01*\nX180350Y507160D01*\nX182849D01*\nX184515Y508826D02*\nY505494D01*\nY507160D01*\nX185348Y507993D01*\nX186181Y508826D01*\nX187014D01*\nX192845Y510492D02*\nY505494D01*\nX190346D01*\nX189513Y506327D01*\nY507993D01*\nX190346Y508826D01*\nX192845D01*\nX202009Y510492D02*\nX200343D01*\nX199510Y509659D01*\nY506327D01*\nX200343Y505494D01*\nX202009D01*\nX202842Y506327D01*\nY509659D01*\nX202009Y510492D01*\nX204508Y508826D02*\nY506327D01*\nX205341Y505494D01*\nX207841D01*\nY508826D01*\nX210340Y509659D02*\nY508826D01*\nX209507D01*\nX211173D01*\nX210340D01*\nY506327D01*\nX211173Y505494D01*\nX213672D02*\nX215338D01*\nX214505D01*\nY510492D01*\nX213672D01*\nX217837Y505494D02*\nX219503D01*\nX218670D01*\nY508826D01*\nX217837D01*\nX222003Y505494D02*\nY508826D01*\nX224502D01*\nX225335Y507993D01*\nY505494D01*\nX229500D02*\nX227834D01*\nX227001Y506327D01*\nY507993D01*\nX227834Y508826D01*\nX229500D01*\nX230333Y507993D01*\nY507160D01*\nX227001D01*\nX172620Y512792D02*\nY507794D01*\nX175119D01*\nX175952Y508627D01*\nY509460D01*\nX175119Y510293D01*\nX172620D01*\nX175119D01*\nX175952Y511126D01*\nY511959D01*\nX175119Y512792D01*\nX172620D01*\nX178451Y507794D02*\nX180117D01*\nX180950Y508627D01*\nY510293D01*\nX180117Y511126D01*\nX178451D01*\nX177618Y510293D01*\nY508627D01*\nX178451Y507794D01*\nX183449Y511959D02*\nY511126D01*\nX182616D01*\nX184283D01*\nX183449D01*\nY508627D01*\nX184283Y507794D01*\nX187615Y511959D02*\nY511126D01*\nX186782D01*\nX188448D01*\nX187615D01*\nY508627D01*\nX188448Y507794D01*\nX191780D02*\nX193446D01*\nX194279Y508627D01*\nY510293D01*\nX193446Y511126D01*\nX191780D01*\nX190947Y510293D01*\nY508627D01*\nX191780Y507794D01*\nX195946D02*\nY511126D01*\nX196779D01*\nX197612Y510293D01*\nY507794D01*\nY510293D01*\nX198445Y511126D01*\nX199278Y510293D01*\nY507794D01*\nX209275Y511959D02*\nX208441Y512792D01*\nX206775D01*\nX205942Y511959D01*\nY511126D01*\nX206775Y510293D01*\nX208441D01*\nX209275Y509460D01*\nY508627D01*\nX208441Y507794D01*\nX206775D01*\nX205942Y508627D01*\nX211774Y507794D02*\nX213440D01*\nX214273Y508627D01*\nY510293D01*\nX213440Y511126D01*\nX211774D01*\nX210941Y510293D01*\nY508627D01*\nX211774Y507794D01*\nX215939D02*\nX217605D01*\nX216772D01*\nY512792D01*\nX215939D01*\nX223437D02*\nY507794D01*\nX220937D01*\nX220104Y508627D01*\nY510293D01*\nX220937Y511126D01*\nX223437D01*\nX227602Y507794D02*\nX225936D01*\nX225103Y508627D01*\nY510293D01*\nX225936Y511126D01*\nX227602D01*\nX228435Y510293D01*\nY509460D01*\nX225103D01*\nX230101Y511126D02*\nY507794D01*\nY509460D01*\nX230934Y510293D01*\nX231767Y511126D01*\nX232600D01*\nX349520Y510492D02*\nY505494D01*\nX352019D01*\nX352852Y506327D01*\nY507160D01*\nX352019Y507993D01*\nX349520D01*\nX352019D01*\nX352852Y508826D01*\nY509659D01*\nX352019Y510492D01*\nX349520D01*\nX355351Y505494D02*\nX357017D01*\nX357850Y506327D01*\nY507993D01*\nX357017Y508826D01*\nX355351D01*\nX354518Y507993D01*\nY506327D01*\nX355351Y505494D01*\nX360349Y508826D02*\nX362016D01*\nX362849Y507993D01*\nY505494D01*\nX360349D01*\nX359516Y506327D01*\nX360349Y507160D01*\nX362849D01*\nX364515Y508826D02*\nY505494D01*\nY507160D01*\nX365348Y507993D01*\nX366181Y508826D01*\nX367014D01*\nX372846Y510492D02*\nY505494D01*\nX370346D01*\nX369513Y506327D01*\nY507993D01*\nX370346Y508826D01*\nX372846D01*\nX382009Y510492D02*\nX380343D01*\nX379510Y509659D01*\nY506327D01*\nX380343Y505494D01*\nX382009D01*\nX382842Y506327D01*\nY509659D01*\nX382009Y510492D01*\nX384508Y508826D02*\nY506327D01*\nX385341Y505494D01*\nX387841D01*\nY508826D01*\nX390340Y509659D02*\nY508826D01*\nX389507D01*\nX391173D01*\nX390340D01*\nY506327D01*\nX391173Y505494D01*\nX393672D02*\nX395338D01*\nX394505D01*\nY510492D01*\nX393672D01*\nX397837Y505494D02*\nX399503D01*\nX398670D01*\nY508826D01*\nX397837D01*\nX402003Y505494D02*\nY508826D01*\nX404502D01*\nX405335Y507993D01*\nY505494D01*\nX409500D02*\nX407834D01*\nX407001Y506327D01*\nY507993D01*\nX407834Y508826D01*\nX409500D01*\nX410333Y507993D01*\nY507160D01*\nX407001D01*\nX352620Y512792D02*\nY507794D01*\nX355119D01*\nX355952Y508627D01*\nY509460D01*\nX355119Y510293D01*\nX352620D01*\nX355119D01*\nX355952Y511126D01*\nY511959D01*\nX355119Y512792D01*\nX352620D01*\nX358451Y507794D02*\nX360117D01*\nX360950Y508627D01*\nY510293D01*\nX360117Y511126D01*\nX358451D01*\nX357618Y510293D01*\nY508627D01*\nX358451Y507794D01*\nX363450Y511959D02*\nY511126D01*\nX362616D01*\nX364283D01*\nX363450D01*\nY508627D01*\nX364283Y507794D01*\nX367615Y511959D02*\nY511126D01*\nX366782D01*\nX368448D01*\nX367615D01*\nY508627D01*\nX368448Y507794D01*\nX371780D02*\nX373446D01*\nX374279Y508627D01*\nY510293D01*\nX373446Y511126D01*\nX371780D01*\nX370947Y510293D01*\nY508627D01*\nX371780Y507794D01*\nX375945D02*\nY511126D01*\nX376779D01*\nX377612Y510293D01*\nY507794D01*\nY510293D01*\nX378445Y511126D01*\nX379278Y510293D01*\nY507794D01*\nX389275Y511959D02*\nX388441Y512792D01*\nX386775D01*\nX385942Y511959D01*\nY511126D01*\nX386775Y510293D01*\nX388441D01*\nX389275Y509460D01*\nY508627D01*\nX388441Y507794D01*\nX386775D01*\nX385942Y508627D01*\nX391774Y507794D02*\nX393440D01*\nX394273Y508627D01*\nY510293D01*\nX393440Y511126D01*\nX391774D01*\nX390941Y510293D01*\nY508627D01*\nX391774Y507794D01*\nX395939D02*\nX397605D01*\nX396772D01*\nY512792D01*\nX395939D01*\nX403437D02*\nY507794D01*\nX400937D01*\nX400104Y508627D01*\nY510293D01*\nX400937Y511126D01*\nX403437D01*\nX407602Y507794D02*\nX405936D01*\nX405103Y508627D01*\nY510293D01*\nX405936Y511126D01*\nX407602D01*\nX408435Y510293D01*\nY509460D01*\nX405103D01*\nX410101Y511126D02*\nY507794D01*\nY509460D01*\nX410934Y510293D01*\nX411767Y511126D01*\nX412600D01*\nD74*\nX211283Y173244D02*\nD03*\nX216205D02*\nD03*\nX207784Y161744D02*\nD03*\nX212705D02*\nD03*\nX207784Y156744D02*\nD03*\nX212705D02*\nD03*\nX188705Y193244D02*\nD03*\nX183783D02*\nD03*\nX213205Y227244D02*\nD03*\nX208283D02*\nD03*\nX211205Y237244D02*\nD03*\nX206283D02*\nD03*\nX211205Y243244D02*\nD03*\nX206283D02*\nD03*\nX203705Y153744D02*\nD03*\nX198783D02*\nD03*\nX198283Y159244D02*\nD03*\nX203205D02*\nD03*\nX192205Y168244D02*\nD03*\nX187284D02*\nD03*\nX391283Y173244D02*\nD03*\nX396205D02*\nD03*\nX387784Y161744D02*\nD03*\nX392705D02*\nD03*\nX387784Y156744D02*\nD03*\nX392705D02*\nD03*\nX368705Y193244D02*\nD03*\nX363783D02*\nD03*\nX393205Y227244D02*\nD03*\nX388283D02*\nD03*\nX391205Y237244D02*\nD03*\nX386283D02*\nD03*\nX391205Y243244D02*\nD03*\nX386283D02*\nD03*\nX383705Y153744D02*\nD03*\nX378783D02*\nD03*\nX378283Y159244D02*\nD03*\nX383205D02*\nD03*\nX372205Y168244D02*\nD03*\nX367284D02*\nD03*\nX211283Y353244D02*\nD03*\nX216205D02*\nD03*\nX207784Y341744D02*\nD03*\nX212705D02*\nD03*\nX207784Y336744D02*\nD03*\nX212705D02*\nD03*\nX188705Y373244D02*\nD03*\nX183783D02*\nD03*\nX213205Y407244D02*\nD03*\nX208283D02*\nD03*\nX211205Y417244D02*\nD03*\nX206283D02*\nD03*\nX211205Y423244D02*\nD03*\nX206283D02*\nD03*\nX203705Y333744D02*\nD03*\nX198783D02*\nD03*\nX198283Y339244D02*\nD03*\nX203205D02*\nD03*\nX192205Y348244D02*\nD03*\nX187284D02*\nD03*\nX391283Y353244D02*\nD03*\nX396205D02*\nD03*\nX387784Y341744D02*\nD03*\nX392705D02*\nD03*\nX387784Y336744D02*\nD03*\nX392705D02*\nD03*\nX368705Y373244D02*\nD03*\nX363783D02*\nD03*\nX393205Y407244D02*\nD03*\nX388283D02*\nD03*\nX391205Y417244D02*\nD03*\nX386283D02*\nD03*\nX391205Y423244D02*\nD03*\nX386283D02*\nD03*\nX383705Y333744D02*\nD03*\nX378783D02*\nD03*\nX378283Y339244D02*\nD03*\nX383205D02*\nD03*\nX372205Y348244D02*\nD03*\nX367284D02*\nD03*\nD85*\nX249244Y203587D02*\nD03*\nY208902D02*\nD03*\nX258744Y206087D02*\nD03*\nY211402D02*\nD03*\nX249744Y170087D02*\nD03*\nY175402D02*\nD03*\nX259244Y172587D02*\nD03*\nY177902D02*\nD03*\nX258744Y190087D02*\nD03*\nY195402D02*\nD03*\nX249244Y187087D02*\nD03*\nY192402D02*\nD03*\nX429244Y203587D02*\nD03*\nY208902D02*\nD03*\nX438744Y206087D02*\nD03*\nY211402D02*\nD03*\nX429744Y170087D02*\nD03*\nY175402D02*\nD03*\nX439244Y172587D02*\nD03*\nY177902D02*\nD03*\nX438744Y190087D02*\nD03*\nY195402D02*\nD03*\nX429244Y187087D02*\nD03*\nY192402D02*\nD03*\nX249244Y383587D02*\nD03*\nY388902D02*\nD03*\nX258744Y386087D02*\nD03*\nY391402D02*\nD03*\nX249744Y350087D02*\nD03*\nY355402D02*\nD03*\nX259244Y352587D02*\nD03*\nY357902D02*\nD03*\nX258744Y370087D02*\nD03*\nY375402D02*\nD03*\nX249244Y367087D02*\nD03*\nY372402D02*\nD03*\nX429244Y383587D02*\nD03*\nY388902D02*\nD03*\nX438744Y386087D02*\nD03*\nY391402D02*\nD03*\nX429744Y350087D02*\nD03*\nY355402D02*\nD03*\nX439244Y352587D02*\nD03*\nY357902D02*\nD03*\nX438744Y370087D02*\nD03*\nY375402D02*\nD03*\nX429244Y367087D02*\nD03*\nY372402D02*\nD03*\nD99*\nX125000Y260000D02*\nD03*\nY265000D02*\nD03*\nY255000D02*\nD03*\nY250000D02*\nD03*\nY245000D02*\nD03*\nY240000D02*\nD03*\nX124600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX290600Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX305100Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX291400Y229800D02*\nD03*\nY234800D02*\nD03*\nY239800D02*\nD03*\nY244800D02*\nD03*\nY254800D02*\nD03*\nY249800D02*\nD03*\nX304800Y229300D02*\nD03*\nY234300D02*\nD03*\nY239300D02*\nD03*\nY244300D02*\nD03*\nY254300D02*\nD03*\nY249300D02*\nD03*\nX125200Y409200D02*\nD03*\nY414200D02*\nD03*\nY419200D02*\nD03*\nY424200D02*\nD03*\nY434200D02*\nD03*\nY429200D02*\nD03*\nX291200Y338300D02*\nD03*\nY343300D02*\nD03*\nY348300D02*\nD03*\nY353300D02*\nD03*\nY363300D02*\nD03*\nY358300D02*\nD03*\nX291000Y404100D02*\nD03*\nY409100D02*\nD03*\nY414100D02*\nD03*\nY419100D02*\nD03*\nY429100D02*\nD03*\nY424100D02*\nD03*\nX304900Y404500D02*\nD03*\nY409500D02*\nD03*\nY414500D02*\nD03*\nY419500D02*\nD03*\nY429500D02*\nD03*\nY424500D02*\nD03*\nX304700Y338200D02*\nD03*\nY343200D02*\nD03*\nY348200D02*\nD03*\nY353200D02*\nD03*\nY363200D02*\nD03*\nY358200D02*\nD03*\nX471200Y401400D02*\nD03*\nY406400D02*\nD03*\nY411400D02*\nD03*\nY416400D02*\nD03*\nY426400D02*\nD03*\nY421400D02*\nD03*\nX471600Y339500D02*\nD03*\nY344500D02*\nD03*\nY349500D02*\nD03*\nY354500D02*\nD03*\nY364500D02*\nD03*\nY359500D02*\nD03*\nY216100D02*\nD03*\nY221100D02*\nD03*\nY226100D02*\nD03*\nY231100D02*\nD03*\nY241100D02*\nD03*\nY236100D02*\nD03*\nX470600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX443700Y124400D02*\nD03*\nX438700D02*\nD03*\nX433700D02*\nD03*\nX428700D02*\nD03*\nX418700D02*\nD03*\nX423700D02*\nD03*\nX357000Y124000D02*\nD03*\nX352000D02*\nD03*\nX347000D02*\nD03*\nX342000D02*\nD03*\nX332000D02*\nD03*\nX337000D02*\nD03*\nX360500Y289900D02*\nD03*\nX355500D02*\nD03*\nX350500D02*\nD03*\nX345500D02*\nD03*\nX335500D02*\nD03*\nX340500D02*\nD03*\nX432500Y290100D02*\nD03*\nX427500D02*\nD03*\nX422500D02*\nD03*\nX417500D02*\nD03*\nX407500D02*\nD03*\nX412500D02*\nD03*\nX431400Y303700D02*\nD03*\nX426400D02*\nD03*\nX421400D02*\nD03*\nX416400D02*\nD03*\nX406400D02*\nD03*\nX411400D02*\nD03*\nX360600Y304500D02*\nD03*\nX355600D02*\nD03*\nX350600D02*\nD03*\nX345600D02*\nD03*\nX335600D02*\nD03*\nX340600D02*\nD03*\nX365000Y469600D02*\nD03*\nX360000D02*\nD03*\nX355000D02*\nD03*\nX350000D02*\nD03*\nX340000D02*\nD03*\nX345000D02*\nD03*\nX435000D02*\nD03*\nX430000D02*\nD03*\nX425000D02*\nD03*\nX420000D02*\nD03*\nX410000D02*\nD03*\nX415000D02*\nD03*\nX252600D02*\nD03*\nX247600D02*\nD03*\nX242600D02*\nD03*\nX237600D02*\nD03*\nX227600D02*\nD03*\nX232600D02*\nD03*\nX183200Y469800D02*\nD03*\nX178200D02*\nD03*\nX173200D02*\nD03*\nX168200D02*\nD03*\nX158200D02*\nD03*\nX163200D02*\nD03*\nX175500Y303900D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX160500D02*\nD03*\nX150500D02*\nD03*\nX155500D02*\nD03*\nX175700Y290100D02*\nD03*\nX170700D02*\nD03*\nX165700D02*\nD03*\nX160700D02*\nD03*\nX150700D02*\nD03*\nX155700D02*\nD03*\nX260900Y303300D02*\nD03*\nX255900D02*\nD03*\nX250900D02*\nD03*\nX245900D02*\nD03*\nX235900D02*\nD03*\nX240900D02*\nD03*\nX261100Y290100D02*\nD03*\nX256100D02*\nD03*\nX251100D02*\nD03*\nX246100D02*\nD03*\nX236100D02*\nD03*\nX241100D02*\nD03*\nX261300Y123800D02*\nD03*\nX256300D02*\nD03*\nX251300D02*\nD03*\nX246300D02*\nD03*\nX236300D02*\nD03*\nX241300D02*\nD03*\nX180500Y124000D02*\nD03*\nX175500D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX155500D02*\nD03*\nX160500D02*\nD03*\nX125100Y351700D02*\nD03*\nY356700D02*\nD03*\nY346700D02*\nD03*\nY341700D02*\nD03*\nY336700D02*\nD03*\nY331700D02*\nD03*\nD100*\nX147744Y146744D02*\nD03*\nX269791D02*\nD03*\nY268791D02*\nD03*\nX147744D02*\nD03*\nX327744Y146744D02*\nD03*\nX449791D02*\nD03*\nY268791D02*\nD03*\nX327744D02*\nD03*\nX147744Y326744D02*\nD03*\nX269791D02*\nD03*\nY448791D02*\nD03*\nX147744D02*\nD03*\nX327744Y326744D02*\nD03*\nX449791D02*\nD03*\nY448791D02*\nD03*\nX327744D02*\nD03*\nD101*\nX133008Y181964D02*\nD03*\nY209524D02*\nD03*\nX313008Y181964D02*\nD03*\nY209524D02*\nD03*\nX133008Y361964D02*\nD03*\nY389524D02*\nD03*\nX313008Y361964D02*\nD03*\nY389524D02*\nD03*\nD102*\nX144031Y185901D02*\nD03*\nY205587D02*\nD03*\nX324031Y185901D02*\nD03*\nY205587D02*\nD03*\nX144031Y365901D02*\nD03*\nY385587D02*\nD03*\nX324031Y365901D02*\nD03*\nY385587D02*\nD03*\nD103*\nX132044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX235244Y252744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX312044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX415244Y252744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX132044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX235244Y432744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nX312044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX415244Y432744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nD104*\nX132044Y252344D02*\nD03*\nX312044D02*\nD03*\nX132044Y432344D02*\nD03*\nX312044D02*\nD03*\nD105*\nX141744Y166744D02*\nD03*\nY171744D02*\nD03*\nX146744Y166744D02*\nD03*\nY171744D02*\nD03*\nX151744Y166744D02*\nD03*\nY171744D02*\nD03*\nX156744Y166744D02*\nD03*\nY171744D02*\nD03*\nX161744Y166744D02*\nD03*\nX321744D02*\nD03*\nY171744D02*\nD03*\nX326744Y166744D02*\nD03*\nY171744D02*\nD03*\nX331744Y166744D02*\nD03*\nY171744D02*\nD03*\nX336744Y166744D02*\nD03*\nY171744D02*\nD03*\nX341744Y166744D02*\nD03*\nX141744Y346744D02*\nD03*\nY351744D02*\nD03*\nX146744Y346744D02*\nD03*\nY351744D02*\nD03*\nX151744Y346744D02*\nD03*\nY351744D02*\nD03*\nX156744Y346744D02*\nD03*\nY351744D02*\nD03*\nX161744Y346744D02*\nD03*\nX321744D02*\nD03*\nY351744D02*\nD03*\nX326744Y346744D02*\nD03*\nY351744D02*\nD03*\nX331744Y346744D02*\nD03*\nY351744D02*\nD03*\nX336744Y346744D02*\nD03*\nY351744D02*\nD03*\nX341744Y346744D02*\nD03*\nD106*\nX161744Y171744D02*\nD03*\nX341744D02*\nD03*\nX161744Y351744D02*\nD03*\nX341744D02*\nD03*\nD107*\nX205244Y252744D02*\nD03*\nX283500Y161200D02*\nD03*\nX385244Y252744D02*\nD03*\nX463500Y161200D02*\nD03*\nX205244Y432744D02*\nD03*\nX283500Y341200D02*\nD03*\nX385244Y432744D02*\nD03*\nX463500Y341200D02*\nD03*\nD108*\nX235744Y276244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nX235744Y456244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nD109*\nX181744Y249744D02*\nD03*\nX361744D02*\nD03*\nX181744Y429744D02*\nD03*\nX361744D02*\nD03*\nD110*\nX258744Y226783D02*\nD03*\nY231705D02*\nD03*\nX253744Y227283D02*\nD03*\nY232205D02*\nD03*\nX238744Y230205D02*\nD03*\nY225283D02*\nD03*\nX244744Y229705D02*\nD03*\nY224783D02*\nD03*\nX262244Y249205D02*\nD03*\nY244283D02*\nD03*\nX239744Y194205D02*\nD03*\nY189283D02*\nD03*\nX438744Y226783D02*\nD03*\nY231705D02*\nD03*\nX433744Y227283D02*\nD03*\nY232205D02*\nD03*\nX418744Y230205D02*\nD03*\nY225283D02*\nD03*\nX424744Y229705D02*\nD03*\nY224783D02*\nD03*\nX442244Y249205D02*\nD03*\nY244283D02*\nD03*\nX419744Y194205D02*\nD03*\nY189283D02*\nD03*\nX258744Y406783D02*\nD03*\nY411705D02*\nD03*\nX253744Y407283D02*\nD03*\nY412205D02*\nD03*\nX238744Y410205D02*\nD03*\nY405283D02*\nD03*\nX244744Y409705D02*\nD03*\nY404783D02*\nD03*\nX262244Y429205D02*\nD03*\nY424283D02*\nD03*\nX239744Y374205D02*\nD03*\nY369283D02*\nD03*\nX438744Y406783D02*\nD03*\nY411705D02*\nD03*\nX433744Y407283D02*\nD03*\nY412205D02*\nD03*\nX418744Y410205D02*\nD03*\nY405283D02*\nD03*\nX424744Y409705D02*\nD03*\nY404783D02*\nD03*\nX442244Y429205D02*\nD03*\nY424283D02*\nD03*\nX419744Y374205D02*\nD03*\nY369283D02*\nD03*\nD111*\nX169587Y157244D02*\nD03*\nX174901D02*\nD03*\nX224902Y237244D02*\nD03*\nX219587D02*\nD03*\nX224902Y243244D02*\nD03*\nX219587D02*\nD03*\nX164902Y181244D02*\nD03*\nX159587D02*\nD03*\nX170087Y197244D02*\nD03*\nX175401D02*\nD03*\nX159587D02*\nD03*\nX164901D02*\nD03*\nX180587Y152744D02*\nD03*\nX185901D02*\nD03*\nX349587Y157244D02*\nD03*\nX354901D02*\nD03*\nX404902Y237244D02*\nD03*\nX399587D02*\nD03*\nX404902Y243244D02*\nD03*\nX399587D02*\nD03*\nX344902Y181244D02*\nD03*\nX339587D02*\nD03*\nX350087Y197244D02*\nD03*\nX355401D02*\nD03*\nX339587D02*\nD03*\nX344901D02*\nD03*\nX360587Y152744D02*\nD03*\nX365901D02*\nD03*\nX169587Y337244D02*\nD03*\nX174901D02*\nD03*\nX224902Y417244D02*\nD03*\nX219587D02*\nD03*\nX224902Y423244D02*\nD03*\nX219587D02*\nD03*\nX164902Y361244D02*\nD03*\nX159587D02*\nD03*\nX170087Y377244D02*\nD03*\nX175401D02*\nD03*\nX159587D02*\nD03*\nX164901D02*\nD03*\nX180587Y332744D02*\nD03*\nX185901D02*\nD03*\nX349587Y337244D02*\nD03*\nX354901D02*\nD03*\nX404902Y417244D02*\nD03*\nX399587D02*\nD03*\nX404902Y423244D02*\nD03*\nX399587D02*\nD03*\nX344902Y361244D02*\nD03*\nX339587D02*\nD03*\nX350087Y377244D02*\nD03*\nX355401D02*\nD03*\nX339587D02*\nD03*\nX344901D02*\nD03*\nX360587Y332744D02*\nD03*\nX365901D02*\nD03*\nD112*\nX189984Y199701D02*\nD03*\nX369984D02*\nD03*\nX189984Y379701D02*\nD03*\nX369984D02*\nD03*\nD113*\nX182504Y199701D02*\nD03*\nX186244Y206787D02*\nD03*\nX362504Y199701D02*\nD03*\nX366244Y206787D02*\nD03*\nX182504Y379701D02*\nD03*\nX186244Y386787D02*\nD03*\nX362504Y379701D02*\nD03*\nX366244Y386787D02*\nD03*\nD114*\nX216421Y196177D02*\nD03*\nX396421D02*\nD03*\nX216421Y376177D02*\nD03*\nX396421D02*\nD03*\nD115*\nX213862Y196177D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX216421Y219406D02*\nD03*\nX213862D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX393862Y196177D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX396421Y219406D02*\nD03*\nX393862D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX213862Y376177D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX216421Y399406D02*\nD03*\nX213862D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX393862Y376177D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX396421Y399406D02*\nD03*\nX393862D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nM02*\n"
  },
  {
    "path": "hardware/panel.GD1",
    "content": "G04 Layer_Color=2752767*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD120C,0.00200*%\n%ADD121C,0.00267*%\n%ADD122C,0.00133*%\nD120*\nX124200Y259200D02*\nY260800D01*\nX125800D01*\nY259200D01*\nX124200D01*\nY264200D02*\nY265800D01*\nX125800D01*\nY264200D01*\nX124200D01*\nY254200D02*\nY255800D01*\nX125800D01*\nY254200D01*\nX124200D01*\nY249200D02*\nY250800D01*\nX125800D01*\nY249200D01*\nX124200D01*\nY244200D02*\nY245800D01*\nX125800D01*\nY244200D01*\nX124200D01*\nY239200D02*\nY240800D01*\nX125800D01*\nY239200D01*\nX124200D01*\nX123800Y151700D02*\nY153300D01*\nX125400D01*\nY151700D01*\nX123800D01*\nY156700D02*\nY158300D01*\nX125400D01*\nY156700D01*\nX123800D01*\nY161700D02*\nY163300D01*\nX125400D01*\nY161700D01*\nX123800D01*\nY166700D02*\nY168300D01*\nX125400D01*\nY166700D01*\nX123800D01*\nY176700D02*\nY178300D01*\nX125400D01*\nY176700D01*\nX123800D01*\nY171700D02*\nY173300D01*\nX125400D01*\nY171700D01*\nX123800D01*\nX289800Y149200D02*\nY150800D01*\nX291400D01*\nY149200D01*\nX289800D01*\nY154200D02*\nY155800D01*\nX291400D01*\nY154200D01*\nX289800D01*\nY159200D02*\nY160800D01*\nX291400D01*\nY159200D01*\nX289800D01*\nY164200D02*\nY165800D01*\nX291400D01*\nY164200D01*\nX289800D01*\nY174200D02*\nY175800D01*\nX291400D01*\nY174200D01*\nX289800D01*\nY169200D02*\nY170800D01*\nX291400D01*\nY169200D01*\nX289800D01*\nX304300Y149200D02*\nY150800D01*\nX305900D01*\nY149200D01*\nX304300D01*\nY154200D02*\nY155800D01*\nX305900D01*\nY154200D01*\nX304300D01*\nY159200D02*\nY160800D01*\nX305900D01*\nY159200D01*\nX304300D01*\nY164200D02*\nY165800D01*\nX305900D01*\nY164200D01*\nX304300D01*\nY174200D02*\nY175800D01*\nX305900D01*\nY174200D01*\nX304300D01*\nY169200D02*\nY170800D01*\nX305900D01*\nY169200D01*\nX304300D01*\nX290600Y229000D02*\nY230600D01*\nX292200D01*\nY229000D01*\nX290600D01*\nY234000D02*\nY235600D01*\nX292200D01*\nY234000D01*\nX290600D01*\nY239000D02*\nY240600D01*\nX292200D01*\nY239000D01*\nX290600D01*\nY244000D02*\nY245600D01*\nX292200D01*\nY244000D01*\nX290600D01*\nY254000D02*\nY255600D01*\nX292200D01*\nY254000D01*\nX290600D01*\nY249000D02*\nY250600D01*\nX292200D01*\nY249000D01*\nX290600D01*\nX304000Y228500D02*\nY230100D01*\nX305600D01*\nY228500D01*\nX304000D01*\nY233500D02*\nY235100D01*\nX305600D01*\nY233500D01*\nX304000D01*\nY238500D02*\nY240100D01*\nX305600D01*\nY238500D01*\nX304000D01*\nY243500D02*\nY245100D01*\nX305600D01*\nY243500D01*\nX304000D01*\nY253500D02*\nY255100D01*\nX305600D01*\nY253500D01*\nX304000D01*\nY248500D02*\nY250100D01*\nX305600D01*\nY248500D01*\nX304000D01*\nX124400Y408400D02*\nY410000D01*\nX126000D01*\nY408400D01*\nX124400D01*\nY413400D02*\nY415000D01*\nX126000D01*\nY413400D01*\nX124400D01*\nY418400D02*\nY420000D01*\nX126000D01*\nY418400D01*\nX124400D01*\nY423400D02*\nY425000D01*\nX126000D01*\nY423400D01*\nX124400D01*\nY433400D02*\nY435000D01*\nX126000D01*\nY433400D01*\nX124400D01*\nY428400D02*\nY430000D01*\nX126000D01*\nY428400D01*\nX124400D01*\nX290400Y337500D02*\nY339100D01*\nX292000D01*\nY337500D01*\nX290400D01*\nY342500D02*\nY344100D01*\nX292000D01*\nY342500D01*\nX290400D01*\nY347500D02*\nY349100D01*\nX292000D01*\nY347500D01*\nX290400D01*\nY352500D02*\nY354100D01*\nX292000D01*\nY352500D01*\nX290400D01*\nY362500D02*\nY364100D01*\nX292000D01*\nY362500D01*\nX290400D01*\nY357500D02*\nY359100D01*\nX292000D01*\nY357500D01*\nX290400D01*\nX290200Y403300D02*\nY404900D01*\nX291800D01*\nY403300D01*\nX290200D01*\nY408300D02*\nY409900D01*\nX291800D01*\nY408300D01*\nX290200D01*\nY413300D02*\nY414900D01*\nX291800D01*\nY413300D01*\nX290200D01*\nY418300D02*\nY419900D01*\nX291800D01*\nY418300D01*\nX290200D01*\nY428300D02*\nY429900D01*\nX291800D01*\nY428300D01*\nX290200D01*\nY423300D02*\nY424900D01*\nX291800D01*\nY423300D01*\nX290200D01*\nX304100Y403700D02*\nY405300D01*\nX305700D01*\nY403700D01*\nX304100D01*\nY408700D02*\nY410300D01*\nX305700D01*\nY408700D01*\nX304100D01*\nY413700D02*\nY415300D01*\nX305700D01*\nY413700D01*\nX304100D01*\nY418700D02*\nY420300D01*\nX305700D01*\nY418700D01*\nX304100D01*\nY428700D02*\nY430300D01*\nX305700D01*\nY428700D01*\nX304100D01*\nY423700D02*\nY425300D01*\nX305700D01*\nY423700D01*\nX304100D01*\nX303900Y337400D02*\nY339000D01*\nX305500D01*\nY337400D01*\nX303900D01*\nY342400D02*\nY344000D01*\nX305500D01*\nY342400D01*\nX303900D01*\nY347400D02*\nY349000D01*\nX305500D01*\nY347400D01*\nX303900D01*\nY352400D02*\nY354000D01*\nX305500D01*\nY352400D01*\nX303900D01*\nY362400D02*\nY364000D01*\nX305500D01*\nY362400D01*\nX303900D01*\nY357400D02*\nY359000D01*\nX305500D01*\nY357400D01*\nX303900D01*\nX470400Y400600D02*\nY402200D01*\nX472000D01*\nY400600D01*\nX470400D01*\nY405600D02*\nY407200D01*\nX472000D01*\nY405600D01*\nX470400D01*\nY410600D02*\nY412200D01*\nX472000D01*\nY410600D01*\nX470400D01*\nY415600D02*\nY417200D01*\nX472000D01*\nY415600D01*\nX470400D01*\nY425600D02*\nY427200D01*\nX472000D01*\nY425600D01*\nX470400D01*\nY420600D02*\nY422200D01*\nX472000D01*\nY420600D01*\nX470400D01*\nX470800Y338700D02*\nY340300D01*\nX472400D01*\nY338700D01*\nX470800D01*\nY343700D02*\nY345300D01*\nX472400D01*\nY343700D01*\nX470800D01*\nY348700D02*\nY350300D01*\nX472400D01*\nY348700D01*\nX470800D01*\nY353700D02*\nY355300D01*\nX472400D01*\nY353700D01*\nX470800D01*\nY363700D02*\nY365300D01*\nX472400D01*\nY363700D01*\nX470800D01*\nY358700D02*\nY360300D01*\nX472400D01*\nY358700D01*\nX470800D01*\nY215300D02*\nY216900D01*\nX472400D01*\nY215300D01*\nX470800D01*\nY220300D02*\nY221900D01*\nX472400D01*\nY220300D01*\nX470800D01*\nY225300D02*\nY226900D01*\nX472400D01*\nY225300D01*\nX470800D01*\nY230300D02*\nY231900D01*\nX472400D01*\nY230300D01*\nX470800D01*\nY240300D02*\nY241900D01*\nX472400D01*\nY240300D01*\nX470800D01*\nY235300D02*\nY236900D01*\nX472400D01*\nY235300D01*\nX470800D01*\nX469800Y151700D02*\nY153300D01*\nX471400D01*\nY151700D01*\nX469800D01*\nY156700D02*\nY158300D01*\nX471400D01*\nY156700D01*\nX469800D01*\nY161700D02*\nY163300D01*\nX471400D01*\nY161700D01*\nX469800D01*\nY166700D02*\nY168300D01*\nX471400D01*\nY166700D01*\nX469800D01*\nY176700D02*\nY178300D01*\nX471400D01*\nY176700D01*\nX469800D01*\nY171700D02*\nY173300D01*\nX471400D01*\nY171700D01*\nX469800D01*\nX442900Y123600D02*\nY125200D01*\nX444500D01*\nY123600D01*\nX442900D01*\nX437900D02*\nY125200D01*\nX439500D01*\nY123600D01*\nX437900D01*\nX432900D02*\nY125200D01*\nX434500D01*\nY123600D01*\nX432900D01*\nX427900D02*\nY125200D01*\nX429500D01*\nY123600D01*\nX427900D01*\nX417900D02*\nY125200D01*\nX419500D01*\nY123600D01*\nX417900D01*\nX422900D02*\nY125200D01*\nX424500D01*\nY123600D01*\nX422900D01*\nX356200Y123200D02*\nY124800D01*\nX357800D01*\nY123200D01*\nX356200D01*\nX351200D02*\nY124800D01*\nX352800D01*\nY123200D01*\nX351200D01*\nX346200D02*\nY124800D01*\nX347800D01*\nY123200D01*\nX346200D01*\nX341200D02*\nY124800D01*\nX342800D01*\nY123200D01*\nX341200D01*\nX331200D02*\nY124800D01*\nX332800D01*\nY123200D01*\nX331200D01*\nX336200D02*\nY124800D01*\nX337800D01*\nY123200D01*\nX336200D01*\nX359700Y289100D02*\nY290700D01*\nX361300D01*\nY289100D01*\nX359700D01*\nX354700D02*\nY290700D01*\nX356300D01*\nY289100D01*\nX354700D01*\nX349700D02*\nY290700D01*\nX351300D01*\nY289100D01*\nX349700D01*\nX344700D02*\nY290700D01*\nX346300D01*\nY289100D01*\nX344700D01*\nX334700D02*\nY290700D01*\nX336300D01*\nY289100D01*\nX334700D01*\nX339700D02*\nY290700D01*\nX341300D01*\nY289100D01*\nX339700D01*\nX431700Y289300D02*\nY290900D01*\nX433300D01*\nY289300D01*\nX431700D01*\nX426700D02*\nY290900D01*\nX428300D01*\nY289300D01*\nX426700D01*\nX421700D02*\nY290900D01*\nX423300D01*\nY289300D01*\nX421700D01*\nX416700D02*\nY290900D01*\nX418300D01*\nY289300D01*\nX416700D01*\nX406700D02*\nY290900D01*\nX408300D01*\nY289300D01*\nX406700D01*\nX411700D02*\nY290900D01*\nX413300D01*\nY289300D01*\nX411700D01*\nX430600Y302900D02*\nY304500D01*\nX432200D01*\nY302900D01*\nX430600D01*\nX425600D02*\nY304500D01*\nX427200D01*\nY302900D01*\nX425600D01*\nX420600D02*\nY304500D01*\nX422200D01*\nY302900D01*\nX420600D01*\nX415600D02*\nY304500D01*\nX417200D01*\nY302900D01*\nX415600D01*\nX405600D02*\nY304500D01*\nX407200D01*\nY302900D01*\nX405600D01*\nX410600D02*\nY304500D01*\nX412200D01*\nY302900D01*\nX410600D01*\nX359800Y303700D02*\nY305300D01*\nX361400D01*\nY303700D01*\nX359800D01*\nX354800D02*\nY305300D01*\nX356400D01*\nY303700D01*\nX354800D01*\nX349800D02*\nY305300D01*\nX351400D01*\nY303700D01*\nX349800D01*\nX344800D02*\nY305300D01*\nX346400D01*\nY303700D01*\nX344800D01*\nX334800D02*\nY305300D01*\nX336400D01*\nY303700D01*\nX334800D01*\nX339800D02*\nY305300D01*\nX341400D01*\nY303700D01*\nX339800D01*\nX364200Y468800D02*\nY470400D01*\nX365800D01*\nY468800D01*\nX364200D01*\nX359200D02*\nY470400D01*\nX360800D01*\nY468800D01*\nX359200D01*\nX354200D02*\nY470400D01*\nX355800D01*\nY468800D01*\nX354200D01*\nX349200D02*\nY470400D01*\nX350800D01*\nY468800D01*\nX349200D01*\nX339200D02*\nY470400D01*\nX340800D01*\nY468800D01*\nX339200D01*\nX344200D02*\nY470400D01*\nX345800D01*\nY468800D01*\nX344200D01*\nX434200D02*\nY470400D01*\nX435800D01*\nY468800D01*\nX434200D01*\nX429200D02*\nY470400D01*\nX430800D01*\nY468800D01*\nX429200D01*\nX424200D02*\nY470400D01*\nX425800D01*\nY468800D01*\nX424200D01*\nX419200D02*\nY470400D01*\nX420800D01*\nY468800D01*\nX419200D01*\nX409200D02*\nY470400D01*\nX410800D01*\nY468800D01*\nX409200D01*\nX414200D02*\nY470400D01*\nX415800D01*\nY468800D01*\nX414200D01*\nX251800D02*\nY470400D01*\nX253400D01*\nY468800D01*\nX251800D01*\nX246800D02*\nY470400D01*\nX248400D01*\nY468800D01*\nX246800D01*\nX241800D02*\nY470400D01*\nX243400D01*\nY468800D01*\nX241800D01*\nX236800D02*\nY470400D01*\nX238400D01*\nY468800D01*\nX236800D01*\nX226800D02*\nY470400D01*\nX228400D01*\nY468800D01*\nX226800D01*\nX231800D02*\nY470400D01*\nX233400D01*\nY468800D01*\nX231800D01*\nX182400Y469000D02*\nY470600D01*\nX184000D01*\nY469000D01*\nX182400D01*\nX177400D02*\nY470600D01*\nX179000D01*\nY469000D01*\nX177400D01*\nX172400D02*\nY470600D01*\nX174000D01*\nY469000D01*\nX172400D01*\nX167400D02*\nY470600D01*\nX169000D01*\nY469000D01*\nX167400D01*\nX157400D02*\nY470600D01*\nX159000D01*\nY469000D01*\nX157400D01*\nX162400D02*\nY470600D01*\nX164000D01*\nY469000D01*\nX162400D01*\nX174700Y303100D02*\nY304700D01*\nX176300D01*\nY303100D01*\nX174700D01*\nX169700D02*\nY304700D01*\nX171300D01*\nY303100D01*\nX169700D01*\nX164700D02*\nY304700D01*\nX166300D01*\nY303100D01*\nX164700D01*\nX159700D02*\nY304700D01*\nX161300D01*\nY303100D01*\nX159700D01*\nX149700D02*\nY304700D01*\nX151300D01*\nY303100D01*\nX149700D01*\nX154700D02*\nY304700D01*\nX156300D01*\nY303100D01*\nX154700D01*\nX174900Y289300D02*\nY290900D01*\nX176500D01*\nY289300D01*\nX174900D01*\nX169900D02*\nY290900D01*\nX171500D01*\nY289300D01*\nX169900D01*\nX164900D02*\nY290900D01*\nX166500D01*\nY289300D01*\nX164900D01*\nX159900D02*\nY290900D01*\nX161500D01*\nY289300D01*\nX159900D01*\nX149900D02*\nY290900D01*\nX151500D01*\nY289300D01*\nX149900D01*\nX154900D02*\nY290900D01*\nX156500D01*\nY289300D01*\nX154900D01*\nX260100Y302500D02*\nY304100D01*\nX261700D01*\nY302500D01*\nX260100D01*\nX255100D02*\nY304100D01*\nX256700D01*\nY302500D01*\nX255100D01*\nX250100D02*\nY304100D01*\nX251700D01*\nY302500D01*\nX250100D01*\nX245100D02*\nY304100D01*\nX246700D01*\nY302500D01*\nX245100D01*\nX235100D02*\nY304100D01*\nX236700D01*\nY302500D01*\nX235100D01*\nX240100D02*\nY304100D01*\nX241700D01*\nY302500D01*\nX240100D01*\nX260300Y289300D02*\nY290900D01*\nX261900D01*\nY289300D01*\nX260300D01*\nX255300D02*\nY290900D01*\nX256900D01*\nY289300D01*\nX255300D01*\nX250300D02*\nY290900D01*\nX251900D01*\nY289300D01*\nX250300D01*\nX245300D02*\nY290900D01*\nX246900D01*\nY289300D01*\nX245300D01*\nX235300D02*\nY290900D01*\nX236900D01*\nY289300D01*\nX235300D01*\nX240300D02*\nY290900D01*\nX241900D01*\nY289300D01*\nX240300D01*\nX260500Y123000D02*\nY124600D01*\nX262100D01*\nY123000D01*\nX260500D01*\nX255500D02*\nY124600D01*\nX257100D01*\nY123000D01*\nX255500D01*\nX250500D02*\nY124600D01*\nX252100D01*\nY123000D01*\nX250500D01*\nX245500D02*\nY124600D01*\nX247100D01*\nY123000D01*\nX245500D01*\nX235500D02*\nY124600D01*\nX237100D01*\nY123000D01*\nX235500D01*\nX240500D02*\nY124600D01*\nX242100D01*\nY123000D01*\nX240500D01*\nX179700Y123200D02*\nY124800D01*\nX181300D01*\nY123200D01*\nX179700D01*\nX174700D02*\nY124800D01*\nX176300D01*\nY123200D01*\nX174700D01*\nX169700D02*\nY124800D01*\nX171300D01*\nY123200D01*\nX169700D01*\nX164700D02*\nY124800D01*\nX166300D01*\nY123200D01*\nX164700D01*\nX154700D02*\nY124800D01*\nX156300D01*\nY123200D01*\nX154700D01*\nX159700D02*\nY124800D01*\nX161300D01*\nY123200D01*\nX159700D01*\nX124300Y350900D02*\nY352500D01*\nX125900D01*\nY350900D01*\nX124300D01*\nY355900D02*\nY357500D01*\nX125900D01*\nY355900D01*\nX124300D01*\nY345900D02*\nY347500D01*\nX125900D01*\nY345900D01*\nX124300D01*\nY340900D02*\nY342500D01*\nX125900D01*\nY340900D01*\nX124300D01*\nY335900D02*\nY337500D01*\nX125900D01*\nY335900D01*\nX124300D01*\nY330900D02*\nY332500D01*\nX125900D01*\nY330900D01*\nX124300D01*\nX133008Y181164D02*\nX132208Y182764D01*\nX133808D01*\nX133008Y181164D01*\nX144031Y185101D02*\nX144431Y185501D01*\nX144831D01*\nX144431Y185901D01*\nX144831Y186301D01*\nX144431D01*\nX144031Y186701D01*\nX143631Y186301D01*\nX143231D01*\nX143631Y185901D01*\nX143231Y185501D01*\nX143631D01*\nX144031Y185101D01*\nY204787D02*\nX144431Y205187D01*\nX144831D01*\nX144431Y205587D01*\nX144831Y205987D01*\nX144431D01*\nX144031Y206387D01*\nX143631Y205987D01*\nX143231D01*\nX143631Y205587D01*\nX143231Y205187D01*\nX143631D01*\nX144031Y204787D01*\nX133008Y208724D02*\nX132208Y210324D01*\nX133808D01*\nX133008Y208724D01*\nX131244Y221544D02*\nX131644Y222344D01*\nX131244Y223144D01*\nX132044Y222744D01*\nX132844Y223144D01*\nX132444Y222344D01*\nX132844Y221544D01*\nX132044Y221944D01*\nX131244Y221544D01*\nY231544D02*\nX131644Y232344D01*\nX131244Y233144D01*\nX132044Y232744D01*\nX132844Y233144D01*\nX132444Y232344D01*\nX132844Y231544D01*\nX132044Y231944D01*\nX131244Y231544D01*\nY241544D02*\nX131644Y242344D01*\nX131244Y243144D01*\nX132044Y242744D01*\nX132844Y243144D01*\nX132444Y242344D01*\nX132844Y241544D01*\nX132044Y241944D01*\nX131244Y241544D01*\nY251544D02*\nX131644Y252344D01*\nX131244Y253144D01*\nX132044Y252744D01*\nX132844Y253144D01*\nX132444Y252344D01*\nX132844Y251544D01*\nX132044Y251944D01*\nX131244Y251544D01*\nX141344Y166344D02*\nY165944D01*\nX142144D01*\nY166344D01*\nX142544D01*\nY167144D01*\nX142144D01*\nY167544D01*\nX141344D01*\nY167144D01*\nX140944D01*\nY166344D01*\nX141344D01*\nY171344D02*\nY170944D01*\nX142144D01*\nY171344D01*\nX142544D01*\nY172144D01*\nX142144D01*\nY172544D01*\nX141344D01*\nY172144D01*\nX140944D01*\nY171344D01*\nX141344D01*\nX146344Y166344D02*\nY165944D01*\nX147144D01*\nY166344D01*\nX147544D01*\nY167144D01*\nX147144D01*\nY167544D01*\nX146344D01*\nY167144D01*\nX145944D01*\nY166344D01*\nX146344D01*\nY171344D02*\nY170944D01*\nX147144D01*\nY171344D01*\nX147544D01*\nY172144D01*\nX147144D01*\nY172544D01*\nX146344D01*\nY172144D01*\nX145944D01*\nY171344D01*\nX146344D01*\nX151344Y166344D02*\nY165944D01*\nX152144D01*\nY166344D01*\nX152544D01*\nY167144D01*\nX152144D01*\nY167544D01*\nX151344D01*\nY167144D01*\nX150944D01*\nY166344D01*\nX151344D01*\nY171344D02*\nY170944D01*\nX152144D01*\nY171344D01*\nX152544D01*\nY172144D01*\nX152144D01*\nY172544D01*\nX151344D01*\nY172144D01*\nX150944D01*\nY171344D01*\nX151344D01*\nX156344Y166344D02*\nY165944D01*\nX157144D01*\nY166344D01*\nX157544D01*\nY167144D01*\nX157144D01*\nY167544D01*\nX156344D01*\nY167144D01*\nX155944D01*\nY166344D01*\nX156344D01*\nY171344D02*\nY170944D01*\nX157144D01*\nY171344D01*\nX157544D01*\nY172144D01*\nX157144D01*\nY172544D01*\nX156344D01*\nY172144D01*\nX155944D01*\nY171344D01*\nX156344D01*\nX161344Y166344D02*\nY165944D01*\nX162144D01*\nY166344D01*\nX162544D01*\nY167144D01*\nX162144D01*\nY167544D01*\nX161344D01*\nY167144D01*\nX160944D01*\nY166344D01*\nX161344D01*\nY171344D02*\nY170944D01*\nX162144D01*\nY171344D01*\nX162544D01*\nY172144D01*\nX162144D01*\nY172544D01*\nX161344D01*\nY172144D01*\nX160944D01*\nY171344D01*\nX161344D01*\nX234444Y251944D02*\nX234844Y252744D01*\nX234444Y253544D01*\nX235244Y253144D01*\nX236044Y253544D01*\nX235644Y252744D01*\nX236044Y251944D01*\nX235244Y252344D01*\nX234444Y251944D01*\nX224444D02*\nX224844Y252744D01*\nX224444Y253544D01*\nX225244Y253144D01*\nX226044Y253544D01*\nX225644Y252744D01*\nX226044Y251944D01*\nX225244Y252344D01*\nX224444Y251944D01*\nX214444D02*\nX214844Y252744D01*\nX214444Y253544D01*\nX215244Y253144D01*\nX216044Y253544D01*\nX215644Y252744D01*\nX216044Y251944D01*\nX215244Y252344D01*\nX214444Y251944D01*\nX204444D02*\nX204844Y252744D01*\nX204444Y253544D01*\nX205244Y253144D01*\nX206044Y253544D01*\nX205644Y252744D01*\nX206044Y251944D01*\nX205244Y252344D01*\nX204444Y251944D01*\nX282700Y160400D02*\nX283100D01*\nX283500Y160800D01*\nX283900Y160400D01*\nX284300D01*\nY160800D01*\nX283900Y161200D01*\nX284300Y161600D01*\nY162000D01*\nX283900D01*\nX283500Y161600D01*\nX283100Y162000D01*\nX282700D01*\nY161600D01*\nX283100Y161200D01*\nX282700Y160800D01*\nY160400D01*\nY170400D02*\nX283100D01*\nX283500Y170800D01*\nX283900Y170400D01*\nX284300D01*\nY170800D01*\nX283900Y171200D01*\nX284300Y171600D01*\nY172000D01*\nX283900D01*\nX283500Y171600D01*\nX283100Y172000D01*\nX282700D01*\nY171600D01*\nX283100Y171200D01*\nX282700Y170800D01*\nY170400D01*\nY180400D02*\nX283100D01*\nX283500Y180800D01*\nX283900Y180400D01*\nX284300D01*\nY180800D01*\nX283900Y181200D01*\nX284300Y181600D01*\nY182000D01*\nX283900D01*\nX283500Y181600D01*\nX283100Y182000D01*\nX282700D01*\nY181600D01*\nX283100Y181200D01*\nX282700Y180800D01*\nY180400D01*\nY190400D02*\nX283100D01*\nX283500Y190800D01*\nX283900Y190400D01*\nX284300D01*\nY190800D01*\nX283900Y191200D01*\nX284300Y191600D01*\nY192000D01*\nX283900D01*\nX283500Y191600D01*\nX283100Y192000D01*\nX282700D01*\nY191600D01*\nX283100Y191200D01*\nX282700Y190800D01*\nY190400D01*\nY200400D02*\nX283100D01*\nX283500Y200800D01*\nX283900Y200400D01*\nX284300D01*\nY200800D01*\nX283900Y201200D01*\nX284300Y201600D01*\nY202000D01*\nX283900D01*\nX283500Y201600D01*\nX283100Y202000D01*\nX282700D01*\nY201600D01*\nX283100Y201200D01*\nX282700Y200800D01*\nY200400D01*\nY210400D02*\nX283100D01*\nX283500Y210800D01*\nX283900Y210400D01*\nX284300D01*\nY210800D01*\nX283900Y211200D01*\nX284300Y211600D01*\nY212000D01*\nX283900D01*\nX283500Y211600D01*\nX283100Y212000D01*\nX282700D01*\nY211600D01*\nX283100Y211200D01*\nX282700Y210800D01*\nY210400D01*\nY220400D02*\nX283100D01*\nX283500Y220800D01*\nX283900Y220400D01*\nX284300D01*\nY220800D01*\nX283900Y221200D01*\nX284300Y221600D01*\nY222000D01*\nX283900D01*\nX283500Y221600D01*\nX283100Y222000D01*\nX282700D01*\nY221600D01*\nX283100Y221200D01*\nX282700Y220800D01*\nY220400D01*\nY230400D02*\nX283100D01*\nX283500Y230800D01*\nX283900Y230400D01*\nX284300D01*\nY230800D01*\nX283900Y231200D01*\nX284300Y231600D01*\nY232000D01*\nX283900D01*\nX283500Y231600D01*\nX283100Y232000D01*\nX282700D01*\nY231600D01*\nX283100Y231200D01*\nX282700Y230800D01*\nY230400D01*\nY240400D02*\nX283100D01*\nX283500Y240800D01*\nX283900Y240400D01*\nX284300D01*\nY240800D01*\nX283900Y241200D01*\nX284300Y241600D01*\nY242000D01*\nX283900D01*\nX283500Y241600D01*\nX283100Y242000D01*\nX282700D01*\nY241600D01*\nX283100Y241200D01*\nX282700Y240800D01*\nY240400D01*\nY250400D02*\nX283100D01*\nX283500Y250800D01*\nX283900Y250400D01*\nX284300D01*\nY250800D01*\nX283900Y251200D01*\nX284300Y251600D01*\nY252000D01*\nX283900D01*\nX283500Y251600D01*\nX283100Y252000D01*\nX282700D01*\nY251600D01*\nX283100Y251200D01*\nX282700Y250800D01*\nY250400D01*\nX234944Y276244D02*\nX235744Y277044D01*\nX236544Y276244D01*\nX235744Y275444D01*\nX234944Y276244D01*\nX214944D02*\nX215744Y277044D01*\nX216544Y276244D01*\nX215744Y275444D01*\nX214944Y276244D01*\nX149444Y206944D02*\nY208544D01*\nX151044D01*\nY206944D01*\nX149444D01*\nX149844Y207344D02*\nY208144D01*\nX150644D01*\nY207344D01*\nX149844D01*\nX248600Y228905D02*\nY230505D01*\nX250200D01*\nY228905D01*\nX248600D01*\nX249000Y229305D02*\nY230105D01*\nX249800D01*\nY229305D01*\nX249000D01*\nX183700Y143095D02*\nY144695D01*\nX185300D01*\nY143095D01*\nX183700D01*\nX184100Y143495D02*\nY144295D01*\nX184900D01*\nY143495D01*\nX184100D01*\nX190000Y216500D02*\nY218100D01*\nX191600D01*\nY216500D01*\nX190000D01*\nX190400Y216900D02*\nY217700D01*\nX191200D01*\nY216900D01*\nX190400D01*\nX183187Y167609D02*\nY169209D01*\nX184787D01*\nY167609D01*\nX183187D01*\nX183587Y168009D02*\nY168809D01*\nX184387D01*\nY168009D01*\nX183587D01*\nX233141Y224483D02*\nY226083D01*\nX234741D01*\nY224483D01*\nX233141D01*\nX233541Y224883D02*\nY225683D01*\nX234341D01*\nY224883D01*\nX233541D01*\nX231800Y164300D02*\nY165900D01*\nX233400D01*\nY164300D01*\nX231800D01*\nX232200Y164700D02*\nY165500D01*\nX233000D01*\nY164700D01*\nX232200D01*\nX194900Y229400D02*\nY231000D01*\nX196500D01*\nY229400D01*\nX194900D01*\nX195300Y229800D02*\nY230600D01*\nX196100D01*\nY229800D01*\nX195300D01*\nX185500Y199800D02*\nY201400D01*\nX187100D01*\nY199800D01*\nX185500D01*\nX185900Y200200D02*\nY201000D01*\nX186700D01*\nY200200D01*\nX185900D01*\nX225618Y162200D02*\nY163800D01*\nX227218D01*\nY162200D01*\nX225618D01*\nX226018Y162600D02*\nY163400D01*\nX226818D01*\nY162600D01*\nX226018D01*\nX172300Y190500D02*\nY192100D01*\nX173900D01*\nY190500D01*\nX172300D01*\nX172700Y190900D02*\nY191700D01*\nX173500D01*\nY190900D01*\nX172700D01*\nX193900Y140600D02*\nY142200D01*\nX195500D01*\nY140600D01*\nX193900D01*\nX194300Y141000D02*\nY141800D01*\nX195100D01*\nY141000D01*\nX194300D01*\nX165200Y164500D02*\nY166100D01*\nX166800D01*\nY164500D01*\nX165200D01*\nX165600Y164900D02*\nY165700D01*\nX166400D01*\nY164900D01*\nX165600D01*\nX191800Y152300D02*\nY153900D01*\nX193400D01*\nY152300D01*\nX191800D01*\nX192200Y152700D02*\nY153500D01*\nX193000D01*\nY152700D01*\nX192200D01*\nX188100Y151600D02*\nY153200D01*\nX189700D01*\nY151600D01*\nX188100D01*\nX188500Y152000D02*\nY152800D01*\nX189300D01*\nY152000D01*\nX188500D01*\nX197100Y145386D02*\nY146986D01*\nX198700D01*\nY145386D01*\nX197100D01*\nX197500Y145786D02*\nY146586D01*\nX198300D01*\nY145786D01*\nX197500D01*\nX191800Y148700D02*\nY150300D01*\nX193400D01*\nY148700D01*\nX191800D01*\nX192200Y149100D02*\nY149900D01*\nX193000D01*\nY149100D01*\nX192200D01*\nX177200Y155800D02*\nY157400D01*\nX178800D01*\nY155800D01*\nX177200D01*\nX177600Y156200D02*\nY157000D01*\nX178400D01*\nY156200D01*\nX177600D01*\nX153800Y180444D02*\nY182044D01*\nX155400D01*\nY180444D01*\nX153800D01*\nX154200Y180844D02*\nY181644D01*\nX155000D01*\nY180844D01*\nX154200D01*\nX140444Y245444D02*\nY247044D01*\nX142044D01*\nY245444D01*\nX140444D01*\nX140844Y245844D02*\nY246644D01*\nX141644D01*\nY245844D01*\nX140844D01*\nX140244Y225744D02*\nY227344D01*\nX141844D01*\nY225744D01*\nX140244D01*\nX140644Y226144D02*\nY226944D01*\nX141444D01*\nY226144D01*\nX140644D01*\nX148444Y245544D02*\nY247144D01*\nX150044D01*\nY245544D01*\nX148444D01*\nX148844Y245944D02*\nY246744D01*\nX149644D01*\nY245944D01*\nX148844D01*\nY225844D02*\nY227444D01*\nX150444D01*\nY225844D01*\nX148844D01*\nX149244Y226244D02*\nY227044D01*\nX150044D01*\nY226244D01*\nX149244D01*\nX171644Y233244D02*\nY234844D01*\nX173244D01*\nY233244D01*\nX171644D01*\nX172044Y233644D02*\nY234444D01*\nX172844D01*\nY233644D01*\nX172044D01*\nX165844Y233244D02*\nY234844D01*\nX167444D01*\nY233244D01*\nX165844D01*\nX166244Y233644D02*\nY234444D01*\nX167044D01*\nY233644D01*\nX166244D01*\nX165944Y260844D02*\nY262444D01*\nX167544D01*\nY260844D01*\nX165944D01*\nX166344Y261244D02*\nY262044D01*\nX167144D01*\nY261244D01*\nX166344D01*\nX166244Y267644D02*\nY269244D01*\nX167844D01*\nY267644D01*\nX166244D01*\nX166644Y268044D02*\nY268844D01*\nX167444D01*\nY268044D01*\nX166644D01*\nX165844Y264144D02*\nY265744D01*\nX167444D01*\nY264144D01*\nX165844D01*\nX166244Y264544D02*\nY265344D01*\nX167044D01*\nY264544D01*\nX166244D01*\nX168744Y233244D02*\nY234844D01*\nX170344D01*\nY233244D01*\nX168744D01*\nX169144Y233644D02*\nY234444D01*\nX169944D01*\nY233644D01*\nX169144D01*\nX179444Y259944D02*\nY261544D01*\nX181044D01*\nY259944D01*\nX179444D01*\nX179844Y260344D02*\nY261144D01*\nX180644D01*\nY260344D01*\nX179844D01*\nX187444Y259944D02*\nY261544D01*\nX189044D01*\nY259944D01*\nX187444D01*\nX187844Y260344D02*\nY261144D01*\nX188644D01*\nY260344D01*\nX187844D01*\nX195444Y263944D02*\nY265544D01*\nX197044D01*\nY263944D01*\nX195444D01*\nX195844Y264344D02*\nY265144D01*\nX196644D01*\nY264344D01*\nX195844D01*\nX175444Y267944D02*\nY269544D01*\nX177044D01*\nY267944D01*\nX175444D01*\nX175844Y268344D02*\nY269144D01*\nX176644D01*\nY268344D01*\nX175844D01*\nX191444Y267944D02*\nY269544D01*\nX193044D01*\nY267944D01*\nX191444D01*\nX191844Y268344D02*\nY269144D01*\nX192644D01*\nY268344D01*\nX191844D01*\nX195444Y267944D02*\nY269544D01*\nX197044D01*\nY267944D01*\nX195444D01*\nX195844Y268344D02*\nY269144D01*\nX196644D01*\nY268344D01*\nX195844D01*\nX199444Y263944D02*\nY265544D01*\nX201044D01*\nY263944D01*\nX199444D01*\nX199844Y264344D02*\nY265144D01*\nX200644D01*\nY264344D01*\nX199844D01*\nX229700Y167609D02*\nY169209D01*\nX231300D01*\nY167609D01*\nX229700D01*\nX230100Y168009D02*\nY168809D01*\nX230900D01*\nY168009D01*\nX230100D01*\nX251400Y161900D02*\nY163500D01*\nX253000D01*\nY161900D01*\nX251400D01*\nX251800Y162300D02*\nY163100D01*\nX252600D01*\nY162300D01*\nX251800D01*\nX243100Y236400D02*\nY238000D01*\nX244700D01*\nY236400D01*\nX243100D01*\nX243500Y236800D02*\nY237600D01*\nX244300D01*\nY236800D01*\nX243500D01*\nX257944Y201900D02*\nY203500D01*\nX259544D01*\nY201900D01*\nX257944D01*\nX258344Y202300D02*\nY203100D01*\nX259144D01*\nY202300D01*\nX258344D01*\nX254300Y189600D02*\nY191200D01*\nX255900D01*\nY189600D01*\nX254300D01*\nX254700Y190000D02*\nY190800D01*\nX255500D01*\nY190000D01*\nX254700D01*\nX248300Y196100D02*\nY197700D01*\nX249900D01*\nY196100D01*\nX248300D01*\nX248700Y196500D02*\nY197300D01*\nX249500D01*\nY196500D01*\nX248700D01*\nX238100Y219900D02*\nY221500D01*\nX239700D01*\nY219900D01*\nX238100D01*\nX238500Y220300D02*\nY221100D01*\nX239300D01*\nY220300D01*\nX238500D01*\nX238100Y185244D02*\nY186844D01*\nX239700D01*\nY185244D01*\nX238100D01*\nX238500Y185644D02*\nY186444D01*\nX239300D01*\nY185644D01*\nX238500D01*\nX233900Y187300D02*\nY188900D01*\nX235500D01*\nY187300D01*\nX233900D01*\nX234300Y187700D02*\nY188500D01*\nX235100D01*\nY187700D01*\nX234300D01*\nX272100Y204400D02*\nY206000D01*\nX273700D01*\nY204400D01*\nX272100D01*\nX272500Y204800D02*\nY205600D01*\nX273300D01*\nY204800D01*\nX272500D01*\nX245100Y172100D02*\nY173700D01*\nX246700D01*\nY172100D01*\nX245100D01*\nX245500Y172500D02*\nY173300D01*\nX246300D01*\nY172500D01*\nX245500D01*\nX244700Y185800D02*\nY187400D01*\nX246300D01*\nY185800D01*\nX244700D01*\nX245100Y186200D02*\nY187000D01*\nX245900D01*\nY186200D01*\nX245100D01*\nX245300Y199900D02*\nY201500D01*\nX246900D01*\nY199900D01*\nX245300D01*\nX245700Y200300D02*\nY201100D01*\nX246500D01*\nY200300D01*\nX245700D01*\nX228100Y159300D02*\nY160900D01*\nX229700D01*\nY159300D01*\nX228100D01*\nX228500Y159700D02*\nY160500D01*\nX229300D01*\nY159700D01*\nX228500D01*\nX229900Y210400D02*\nY212000D01*\nX231500D01*\nY210400D01*\nX229900D01*\nX230300Y210800D02*\nY211600D01*\nX231100D01*\nY210800D01*\nX230300D01*\nX233900Y191400D02*\nY193000D01*\nX235500D01*\nY191400D01*\nX233900D01*\nX234300Y191800D02*\nY192600D01*\nX235100D01*\nY191800D01*\nX234300D01*\nX265900Y181000D02*\nY182600D01*\nX267500D01*\nY181000D01*\nX265900D01*\nX266300Y181400D02*\nY182200D01*\nX267100D01*\nY181400D01*\nX266300D01*\nX174444Y201444D02*\nY203044D01*\nX176044D01*\nY201444D01*\nX174444D01*\nX174844Y201844D02*\nY202644D01*\nX175644D01*\nY201844D01*\nX174844D01*\nX158287Y201944D02*\nY203544D01*\nX159887D01*\nY201944D01*\nX158287D01*\nX158687Y202344D02*\nY203144D01*\nX159487D01*\nY202344D01*\nX158687D01*\nX211944Y184944D02*\nY186544D01*\nX213544D01*\nY184944D01*\nX211944D01*\nX212344Y185344D02*\nY186144D01*\nX213144D01*\nY185344D01*\nX212344D01*\nX219444Y188944D02*\nY190544D01*\nX221044D01*\nY188944D01*\nX219444D01*\nX219844Y189344D02*\nY190144D01*\nX220644D01*\nY189344D01*\nX219844D01*\nX220944Y184444D02*\nY186044D01*\nX222544D01*\nY184444D01*\nX220944D01*\nX221344Y184844D02*\nY185644D01*\nX222144D01*\nY184844D01*\nX221344D01*\nX216944Y186444D02*\nY188044D01*\nX218544D01*\nY186444D01*\nX216944D01*\nX217344Y186844D02*\nY187644D01*\nX218144D01*\nY186844D01*\nX217344D01*\nX216944Y149444D02*\nY151044D01*\nX218544D01*\nY149444D01*\nX216944D01*\nX217344Y149844D02*\nY150644D01*\nX218144D01*\nY149844D01*\nX217344D01*\nX221500Y151030D02*\nY152630D01*\nX223100D01*\nY151030D01*\nX221500D01*\nX221900Y151430D02*\nY152230D01*\nX222700D01*\nY151430D01*\nX221900D01*\nX219400Y156444D02*\nY158044D01*\nX221000D01*\nY156444D01*\nX219400D01*\nX219800Y156844D02*\nY157644D01*\nX220600D01*\nY156844D01*\nX219800D01*\nX206944Y187944D02*\nY189544D01*\nX208544D01*\nY187944D01*\nX206944D01*\nX207344Y188344D02*\nY189144D01*\nX208144D01*\nY188344D01*\nX207344D01*\nX202944Y177444D02*\nY179044D01*\nX204544D01*\nY177444D01*\nX202944D01*\nX203344Y177844D02*\nY178644D01*\nX204144D01*\nY177844D01*\nX203344D01*\nX223600Y226444D02*\nY228044D01*\nX225200D01*\nY226444D01*\nX223600D01*\nX224000Y226844D02*\nY227644D01*\nX224800D01*\nY226844D01*\nX224000D01*\nX202944Y189444D02*\nY191044D01*\nX204544D01*\nY189444D01*\nX202944D01*\nX203344Y189844D02*\nY190644D01*\nX204144D01*\nY189844D01*\nX203344D01*\nX198944Y187444D02*\nY189044D01*\nX200544D01*\nY187444D01*\nX198944D01*\nX199344Y187844D02*\nY188644D01*\nX200144D01*\nY187844D01*\nX199344D01*\nX182444Y186444D02*\nY188044D01*\nX184044D01*\nY186444D01*\nX182444D01*\nX182844Y186844D02*\nY187644D01*\nX183644D01*\nY186844D01*\nX182844D01*\nX186444Y180444D02*\nY182044D01*\nX188044D01*\nY180444D01*\nX186444D01*\nX186844Y180844D02*\nY181644D01*\nX187644D01*\nY180844D01*\nX186844D01*\nX177944Y199944D02*\nY201544D01*\nX179544D01*\nY199944D01*\nX177944D01*\nX178344Y200344D02*\nY201144D01*\nX179144D01*\nY200344D01*\nX178344D01*\nX201600Y164444D02*\nY166044D01*\nX203200D01*\nY164444D01*\nX201600D01*\nX202000Y164844D02*\nY165644D01*\nX202800D01*\nY164844D01*\nX202000D01*\nX188944Y184444D02*\nY186044D01*\nX190544D01*\nY184444D01*\nX188944D01*\nX189344Y184844D02*\nY185644D01*\nX190144D01*\nY184844D01*\nX189344D01*\nX212444Y147944D02*\nY149544D01*\nX214044D01*\nY147944D01*\nX212444D01*\nX212844Y148344D02*\nY149144D01*\nX213644D01*\nY148344D01*\nX212844D01*\nX213944Y141444D02*\nY143044D01*\nX215544D01*\nY141444D01*\nX213944D01*\nX214344Y141844D02*\nY142644D01*\nX215144D01*\nY141844D01*\nX214344D01*\nX241818Y147944D02*\nY149544D01*\nX243418D01*\nY147944D01*\nX241818D01*\nX242218Y148344D02*\nY149144D01*\nX243018D01*\nY148344D01*\nX242218D01*\nX214444Y242444D02*\nY244044D01*\nX216044D01*\nY242444D01*\nX214444D01*\nX214844Y242844D02*\nY243644D01*\nX215644D01*\nY242844D01*\nX214844D01*\nX200444Y238944D02*\nY240544D01*\nX202044D01*\nY238944D01*\nX200444D01*\nX200844Y239344D02*\nY240144D01*\nX201644D01*\nY239344D01*\nX200844D01*\nX201444Y235444D02*\nY237044D01*\nX203044D01*\nY235444D01*\nX201444D01*\nX201844Y235844D02*\nY236644D01*\nX202644D01*\nY235844D01*\nX201844D01*\nX198944Y242444D02*\nY244044D01*\nX200544D01*\nY242444D01*\nX198944D01*\nX199344Y242844D02*\nY243644D01*\nX200144D01*\nY242844D01*\nX199344D01*\nX200444Y228444D02*\nY230044D01*\nX202044D01*\nY228444D01*\nX200444D01*\nX200844Y228844D02*\nY229644D01*\nX201644D01*\nY228844D01*\nX200844D01*\nX197944Y233444D02*\nY235044D01*\nX199544D01*\nY233444D01*\nX197944D01*\nX198344Y233844D02*\nY234644D01*\nX199144D01*\nY233844D01*\nX198344D01*\nX189444Y225100D02*\nY226700D01*\nX191044D01*\nY225100D01*\nX189444D01*\nX189844Y225500D02*\nY226300D01*\nX190644D01*\nY225500D01*\nX189844D01*\nX231444Y237444D02*\nY239044D01*\nX233044D01*\nY237444D01*\nX231444D01*\nX231844Y237844D02*\nY238644D01*\nX232644D01*\nY237844D01*\nX231844D01*\nX254444Y214444D02*\nY216044D01*\nX256044D01*\nY214444D01*\nX254444D01*\nX254844Y214844D02*\nY215644D01*\nX255644D01*\nY214844D01*\nX254844D01*\nX233944Y201944D02*\nY203544D01*\nX235544D01*\nY201944D01*\nX233944D01*\nX234344Y202344D02*\nY203144D01*\nX235144D01*\nY202344D01*\nX234344D01*\nX197744Y199089D02*\nY200689D01*\nX199344D01*\nY199089D01*\nX197744D01*\nX198144Y199489D02*\nY200289D01*\nX198944D01*\nY199489D01*\nX198144D01*\nX140444Y231444D02*\nY233044D01*\nX142044D01*\nY231444D01*\nX140444D01*\nX140844Y231844D02*\nY232644D01*\nX141644D01*\nY231844D01*\nX140844D01*\nX149444Y231444D02*\nY233044D01*\nX151044D01*\nY231444D01*\nX149444D01*\nX149844Y231844D02*\nY232644D01*\nX150644D01*\nY231844D01*\nX149844D01*\nX140444Y250444D02*\nY252044D01*\nX142044D01*\nY250444D01*\nX140444D01*\nX140844Y250844D02*\nY251644D01*\nX141644D01*\nY250844D01*\nX140844D01*\nX181944Y255944D02*\nY257544D01*\nX183544D01*\nY255944D01*\nX181944D01*\nX182344Y256344D02*\nY257144D01*\nX183144D01*\nY256344D01*\nX182344D01*\nX179444Y267944D02*\nY269544D01*\nX181044D01*\nY267944D01*\nX179444D01*\nX179844Y268344D02*\nY269144D01*\nX180644D01*\nY268344D01*\nX179844D01*\nX183444Y263944D02*\nY265544D01*\nX185044D01*\nY263944D01*\nX183444D01*\nX183844Y264344D02*\nY265144D01*\nX184644D01*\nY264344D01*\nX183844D01*\nX175944Y235944D02*\nY237544D01*\nX177544D01*\nY235944D01*\nX175944D01*\nX176344Y236344D02*\nY237144D01*\nX177144D01*\nY236344D01*\nX176344D01*\nX185444Y235850D02*\nY237450D01*\nX187044D01*\nY235850D01*\nX185444D01*\nX185844Y236250D02*\nY237050D01*\nX186644D01*\nY236250D01*\nX185844D01*\nX187444Y233444D02*\nY235044D01*\nX189044D01*\nY233444D01*\nX187444D01*\nX187844Y233844D02*\nY234644D01*\nX188644D01*\nY233844D01*\nX187844D01*\nX187444Y229944D02*\nY231544D01*\nX189044D01*\nY229944D01*\nX187444D01*\nX187844Y230344D02*\nY231144D01*\nX188644D01*\nY230344D01*\nX187844D01*\nX182944Y229944D02*\nY231544D01*\nX184544D01*\nY229944D01*\nX182944D01*\nX183344Y230344D02*\nY231144D01*\nX184144D01*\nY230344D01*\nX183344D01*\nX182944Y224444D02*\nY226044D01*\nX184544D01*\nY224444D01*\nX182944D01*\nX183344Y224844D02*\nY225644D01*\nX184144D01*\nY224844D01*\nX183344D01*\nX191444Y259944D02*\nY261544D01*\nX193044D01*\nY259944D01*\nX191444D01*\nX191844Y260344D02*\nY261144D01*\nX192644D01*\nY260344D01*\nX191844D01*\nX177944Y233444D02*\nY235044D01*\nX179544D01*\nY233444D01*\nX177944D01*\nX178344Y233844D02*\nY234644D01*\nX179144D01*\nY233844D01*\nX178344D01*\nX182944Y233444D02*\nY235044D01*\nX184544D01*\nY233444D01*\nX182944D01*\nX183344Y233844D02*\nY234644D01*\nX184144D01*\nY233844D01*\nX183344D01*\nX184944Y226944D02*\nY228544D01*\nX186544D01*\nY226944D01*\nX184944D01*\nX185344Y227344D02*\nY228144D01*\nX186144D01*\nY227344D01*\nX185344D01*\nX171944Y224444D02*\nY226044D01*\nX173544D01*\nY224444D01*\nX171944D01*\nX172344Y224844D02*\nY225644D01*\nX173144D01*\nY224844D01*\nX172344D01*\nX167944Y224444D02*\nY226044D01*\nX169544D01*\nY224444D01*\nX167944D01*\nX168344Y224844D02*\nY225644D01*\nX169144D01*\nY224844D01*\nX168344D01*\nX180944Y220444D02*\nY222044D01*\nX182544D01*\nY220444D01*\nX180944D01*\nX181344Y220844D02*\nY221644D01*\nX182144D01*\nY220844D01*\nX181344D01*\nX139944Y216444D02*\nY218044D01*\nX141544D01*\nY216444D01*\nX139944D01*\nX140344Y216844D02*\nY217644D01*\nX141144D01*\nY216844D01*\nX140344D01*\nX135444Y259444D02*\nY261044D01*\nX137044D01*\nY259444D01*\nX135444D01*\nX135844Y259844D02*\nY260644D01*\nX136644D01*\nY259844D01*\nX135844D01*\nX135444Y268444D02*\nY270044D01*\nX137044D01*\nY268444D01*\nX135444D01*\nX135844Y268844D02*\nY269644D01*\nX136644D01*\nY268844D01*\nX135844D01*\nX134944Y276444D02*\nY278044D01*\nX136544D01*\nY276444D01*\nX134944D01*\nX135344Y276844D02*\nY277644D01*\nX136144D01*\nY276844D01*\nX135344D01*\nX142944Y282944D02*\nY284544D01*\nX144544D01*\nY282944D01*\nX142944D01*\nX143344Y283344D02*\nY284144D01*\nX144144D01*\nY283344D01*\nX143344D01*\nX149944Y282944D02*\nY284544D01*\nX151544D01*\nY282944D01*\nX149944D01*\nX150344Y283344D02*\nY284144D01*\nX151144D01*\nY283344D01*\nX150344D01*\nX157944Y282444D02*\nY284044D01*\nX159544D01*\nY282444D01*\nX157944D01*\nX158344Y282844D02*\nY283644D01*\nX159144D01*\nY282844D01*\nX158344D01*\nX158944Y261444D02*\nY263044D01*\nX160544D01*\nY261444D01*\nX158944D01*\nX159344Y261844D02*\nY262644D01*\nX160144D01*\nY261844D01*\nX159344D01*\nX146944Y216444D02*\nY218044D01*\nX148544D01*\nY216444D01*\nX146944D01*\nX147344Y216844D02*\nY217644D01*\nX148144D01*\nY216844D01*\nX147344D01*\nX150944Y127944D02*\nY129544D01*\nX152544D01*\nY127944D01*\nX150944D01*\nX151344Y128344D02*\nY129144D01*\nX152144D01*\nY128344D01*\nX151344D01*\nX205944Y128145D02*\nY129745D01*\nX207544D01*\nY128145D01*\nX205944D01*\nX206344Y128545D02*\nY129345D01*\nX207144D01*\nY128545D01*\nX206344D01*\nX267944Y169544D02*\nY171144D01*\nX269544D01*\nY169544D01*\nX267944D01*\nX268344Y169944D02*\nY170744D01*\nX269144D01*\nY169944D01*\nX268344D01*\nX241944Y128145D02*\nY129745D01*\nX243544D01*\nY128145D01*\nX241944D01*\nX242344Y128545D02*\nY129345D01*\nX243144D01*\nY128545D01*\nX242344D01*\nX220944Y177444D02*\nY179044D01*\nX222544D01*\nY177444D01*\nX220944D01*\nX221344Y177844D02*\nY178644D01*\nX222144D01*\nY177844D01*\nX221344D01*\nX225444Y190444D02*\nY192044D01*\nX227044D01*\nY190444D01*\nX225444D01*\nX225844Y190844D02*\nY191644D01*\nX226644D01*\nY190844D01*\nX225844D01*\nX257944Y133444D02*\nY135044D01*\nX259544D01*\nY133444D01*\nX257944D01*\nX258344Y133844D02*\nY134644D01*\nX259144D01*\nY133844D01*\nX258344D01*\nX258444Y156444D02*\nY158044D01*\nX260044D01*\nY156444D01*\nX258444D01*\nX258844Y156844D02*\nY157644D01*\nX259644D01*\nY156844D01*\nX258844D01*\nX170944Y149944D02*\nY151544D01*\nX172544D01*\nY149944D01*\nX170944D01*\nX171344Y150344D02*\nY151144D01*\nX172144D01*\nY150344D01*\nX171344D01*\nX313008Y181164D02*\nX312208Y182764D01*\nX313808D01*\nX313008Y181164D01*\nX324031Y185101D02*\nX324431Y185501D01*\nX324831D01*\nX324431Y185901D01*\nX324831Y186301D01*\nX324431D01*\nX324031Y186701D01*\nX323631Y186301D01*\nX323231D01*\nX323631Y185901D01*\nX323231Y185501D01*\nX323631D01*\nX324031Y185101D01*\nY204787D02*\nX324431Y205187D01*\nX324831D01*\nX324431Y205587D01*\nX324831Y205987D01*\nX324431D01*\nX324031Y206387D01*\nX323631Y205987D01*\nX323231D01*\nX323631Y205587D01*\nX323231Y205187D01*\nX323631D01*\nX324031Y204787D01*\nX313008Y208724D02*\nX312208Y210324D01*\nX313808D01*\nX313008Y208724D01*\nX311244Y221544D02*\nX311644Y222344D01*\nX311244Y223144D01*\nX312044Y222744D01*\nX312844Y223144D01*\nX312444Y222344D01*\nX312844Y221544D01*\nX312044Y221944D01*\nX311244Y221544D01*\nY231544D02*\nX311644Y232344D01*\nX311244Y233144D01*\nX312044Y232744D01*\nX312844Y233144D01*\nX312444Y232344D01*\nX312844Y231544D01*\nX312044Y231944D01*\nX311244Y231544D01*\nY241544D02*\nX311644Y242344D01*\nX311244Y243144D01*\nX312044Y242744D01*\nX312844Y243144D01*\nX312444Y242344D01*\nX312844Y241544D01*\nX312044Y241944D01*\nX311244Y241544D01*\nY251544D02*\nX311644Y252344D01*\nX311244Y253144D01*\nX312044Y252744D01*\nX312844Y253144D01*\nX312444Y252344D01*\nX312844Y251544D01*\nX312044Y251944D01*\nX311244Y251544D01*\nX321344Y166344D02*\nY165944D01*\nX322144D01*\nY166344D01*\nX322544D01*\nY167144D01*\nX322144D01*\nY167544D01*\nX321344D01*\nY167144D01*\nX320944D01*\nY166344D01*\nX321344D01*\nY171344D02*\nY170944D01*\nX322144D01*\nY171344D01*\nX322544D01*\nY172144D01*\nX322144D01*\nY172544D01*\nX321344D01*\nY172144D01*\nX320944D01*\nY171344D01*\nX321344D01*\nX326344Y166344D02*\nY165944D01*\nX327144D01*\nY166344D01*\nX327544D01*\nY167144D01*\nX327144D01*\nY167544D01*\nX326344D01*\nY167144D01*\nX325944D01*\nY166344D01*\nX326344D01*\nY171344D02*\nY170944D01*\nX327144D01*\nY171344D01*\nX327544D01*\nY172144D01*\nX327144D01*\nY172544D01*\nX326344D01*\nY172144D01*\nX325944D01*\nY171344D01*\nX326344D01*\nX331344Y166344D02*\nY165944D01*\nX332144D01*\nY166344D01*\nX332544D01*\nY167144D01*\nX332144D01*\nY167544D01*\nX331344D01*\nY167144D01*\nX330944D01*\nY166344D01*\nX331344D01*\nY171344D02*\nY170944D01*\nX332144D01*\nY171344D01*\nX332544D01*\nY172144D01*\nX332144D01*\nY172544D01*\nX331344D01*\nY172144D01*\nX330944D01*\nY171344D01*\nX331344D01*\nX336344Y166344D02*\nY165944D01*\nX337144D01*\nY166344D01*\nX337544D01*\nY167144D01*\nX337144D01*\nY167544D01*\nX336344D01*\nY167144D01*\nX335944D01*\nY166344D01*\nX336344D01*\nY171344D02*\nY170944D01*\nX337144D01*\nY171344D01*\nX337544D01*\nY172144D01*\nX337144D01*\nY172544D01*\nX336344D01*\nY172144D01*\nX335944D01*\nY171344D01*\nX336344D01*\nX341344Y166344D02*\nY165944D01*\nX342144D01*\nY166344D01*\nX342544D01*\nY167144D01*\nX342144D01*\nY167544D01*\nX341344D01*\nY167144D01*\nX340944D01*\nY166344D01*\nX341344D01*\nY171344D02*\nY170944D01*\nX342144D01*\nY171344D01*\nX342544D01*\nY172144D01*\nX342144D01*\nY172544D01*\nX341344D01*\nY172144D01*\nX340944D01*\nY171344D01*\nX341344D01*\nX414444Y251944D02*\nX414844Y252744D01*\nX414444Y253544D01*\nX415244Y253144D01*\nX416044Y253544D01*\nX415644Y252744D01*\nX416044Y251944D01*\nX415244Y252344D01*\nX414444Y251944D01*\nX404444D02*\nX404844Y252744D01*\nX404444Y253544D01*\nX405244Y253144D01*\nX406044Y253544D01*\nX405644Y252744D01*\nX406044Y251944D01*\nX405244Y252344D01*\nX404444Y251944D01*\nX394444D02*\nX394844Y252744D01*\nX394444Y253544D01*\nX395244Y253144D01*\nX396044Y253544D01*\nX395644Y252744D01*\nX396044Y251944D01*\nX395244Y252344D01*\nX394444Y251944D01*\nX384444D02*\nX384844Y252744D01*\nX384444Y253544D01*\nX385244Y253144D01*\nX386044Y253544D01*\nX385644Y252744D01*\nX386044Y251944D01*\nX385244Y252344D01*\nX384444Y251944D01*\nX462700Y160400D02*\nX463100D01*\nX463500Y160800D01*\nX463900Y160400D01*\nX464300D01*\nY160800D01*\nX463900Y161200D01*\nX464300Y161600D01*\nY162000D01*\nX463900D01*\nX463500Y161600D01*\nX463100Y162000D01*\nX462700D01*\nY161600D01*\nX463100Y161200D01*\nX462700Y160800D01*\nY160400D01*\nY170400D02*\nX463100D01*\nX463500Y170800D01*\nX463900Y170400D01*\nX464300D01*\nY170800D01*\nX463900Y171200D01*\nX464300Y171600D01*\nY172000D01*\nX463900D01*\nX463500Y171600D01*\nX463100Y172000D01*\nX462700D01*\nY171600D01*\nX463100Y171200D01*\nX462700Y170800D01*\nY170400D01*\nY180400D02*\nX463100D01*\nX463500Y180800D01*\nX463900Y180400D01*\nX464300D01*\nY180800D01*\nX463900Y181200D01*\nX464300Y181600D01*\nY182000D01*\nX463900D01*\nX463500Y181600D01*\nX463100Y182000D01*\nX462700D01*\nY181600D01*\nX463100Y181200D01*\nX462700Y180800D01*\nY180400D01*\nY190400D02*\nX463100D01*\nX463500Y190800D01*\nX463900Y190400D01*\nX464300D01*\nY190800D01*\nX463900Y191200D01*\nX464300Y191600D01*\nY192000D01*\nX463900D01*\nX463500Y191600D01*\nX463100Y192000D01*\nX462700D01*\nY191600D01*\nX463100Y191200D01*\nX462700Y190800D01*\nY190400D01*\nY200400D02*\nX463100D01*\nX463500Y200800D01*\nX463900Y200400D01*\nX464300D01*\nY200800D01*\nX463900Y201200D01*\nX464300Y201600D01*\nY202000D01*\nX463900D01*\nX463500Y201600D01*\nX463100Y202000D01*\nX462700D01*\nY201600D01*\nX463100Y201200D01*\nX462700Y200800D01*\nY200400D01*\nY210400D02*\nX463100D01*\nX463500Y210800D01*\nX463900Y210400D01*\nX464300D01*\nY210800D01*\nX463900Y211200D01*\nX464300Y211600D01*\nY212000D01*\nX463900D01*\nX463500Y211600D01*\nX463100Y212000D01*\nX462700D01*\nY211600D01*\nX463100Y211200D01*\nX462700Y210800D01*\nY210400D01*\nY220400D02*\nX463100D01*\nX463500Y220800D01*\nX463900Y220400D01*\nX464300D01*\nY220800D01*\nX463900Y221200D01*\nX464300Y221600D01*\nY222000D01*\nX463900D01*\nX463500Y221600D01*\nX463100Y222000D01*\nX462700D01*\nY221600D01*\nX463100Y221200D01*\nX462700Y220800D01*\nY220400D01*\nY230400D02*\nX463100D01*\nX463500Y230800D01*\nX463900Y230400D01*\nX464300D01*\nY230800D01*\nX463900Y231200D01*\nX464300Y231600D01*\nY232000D01*\nX463900D01*\nX463500Y231600D01*\nX463100Y232000D01*\nX462700D01*\nY231600D01*\nX463100Y231200D01*\nX462700Y230800D01*\nY230400D01*\nY240400D02*\nX463100D01*\nX463500Y240800D01*\nX463900Y240400D01*\nX464300D01*\nY240800D01*\nX463900Y241200D01*\nX464300Y241600D01*\nY242000D01*\nX463900D01*\nX463500Y241600D01*\nX463100Y242000D01*\nX462700D01*\nY241600D01*\nX463100Y241200D01*\nX462700Y240800D01*\nY240400D01*\nY250400D02*\nX463100D01*\nX463500Y250800D01*\nX463900Y250400D01*\nX464300D01*\nY250800D01*\nX463900Y251200D01*\nX464300Y251600D01*\nY252000D01*\nX463900D01*\nX463500Y251600D01*\nX463100Y252000D01*\nX462700D01*\nY251600D01*\nX463100Y251200D01*\nX462700Y250800D01*\nY250400D01*\nX414944Y276244D02*\nX415744Y277044D01*\nX416544Y276244D01*\nX415744Y275444D01*\nX414944Y276244D01*\nX394944D02*\nX395744Y277044D01*\nX396544Y276244D01*\nX395744Y275444D01*\nX394944Y276244D01*\nX329444Y206944D02*\nY208544D01*\nX331044D01*\nY206944D01*\nX329444D01*\nX329844Y207344D02*\nY208144D01*\nX330644D01*\nY207344D01*\nX329844D01*\nX428600Y228905D02*\nY230505D01*\nX430200D01*\nY228905D01*\nX428600D01*\nX429000Y229305D02*\nY230105D01*\nX429800D01*\nY229305D01*\nX429000D01*\nX363700Y143095D02*\nY144695D01*\nX365300D01*\nY143095D01*\nX363700D01*\nX364100Y143495D02*\nY144295D01*\nX364900D01*\nY143495D01*\nX364100D01*\nX370000Y216500D02*\nY218100D01*\nX371600D01*\nY216500D01*\nX370000D01*\nX370400Y216900D02*\nY217700D01*\nX371200D01*\nY216900D01*\nX370400D01*\nX363187Y167609D02*\nY169209D01*\nX364787D01*\nY167609D01*\nX363187D01*\nX363587Y168009D02*\nY168809D01*\nX364387D01*\nY168009D01*\nX363587D01*\nX413141Y224483D02*\nY226083D01*\nX414741D01*\nY224483D01*\nX413141D01*\nX413541Y224883D02*\nY225683D01*\nX414341D01*\nY224883D01*\nX413541D01*\nX411800Y164300D02*\nY165900D01*\nX413400D01*\nY164300D01*\nX411800D01*\nX412200Y164700D02*\nY165500D01*\nX413000D01*\nY164700D01*\nX412200D01*\nX374900Y229400D02*\nY231000D01*\nX376500D01*\nY229400D01*\nX374900D01*\nX375300Y229800D02*\nY230600D01*\nX376100D01*\nY229800D01*\nX375300D01*\nX365500Y199800D02*\nY201400D01*\nX367100D01*\nY199800D01*\nX365500D01*\nX365900Y200200D02*\nY201000D01*\nX366700D01*\nY200200D01*\nX365900D01*\nX405618Y162200D02*\nY163800D01*\nX407218D01*\nY162200D01*\nX405618D01*\nX406018Y162600D02*\nY163400D01*\nX406818D01*\nY162600D01*\nX406018D01*\nX352300Y190500D02*\nY192100D01*\nX353900D01*\nY190500D01*\nX352300D01*\nX352700Y190900D02*\nY191700D01*\nX353500D01*\nY190900D01*\nX352700D01*\nX373900Y140600D02*\nY142200D01*\nX375500D01*\nY140600D01*\nX373900D01*\nX374300Y141000D02*\nY141800D01*\nX375100D01*\nY141000D01*\nX374300D01*\nX345200Y164500D02*\nY166100D01*\nX346800D01*\nY164500D01*\nX345200D01*\nX345600Y164900D02*\nY165700D01*\nX346400D01*\nY164900D01*\nX345600D01*\nX371800Y152300D02*\nY153900D01*\nX373400D01*\nY152300D01*\nX371800D01*\nX372200Y152700D02*\nY153500D01*\nX373000D01*\nY152700D01*\nX372200D01*\nX368100Y151600D02*\nY153200D01*\nX369700D01*\nY151600D01*\nX368100D01*\nX368500Y152000D02*\nY152800D01*\nX369300D01*\nY152000D01*\nX368500D01*\nX377100Y145386D02*\nY146986D01*\nX378700D01*\nY145386D01*\nX377100D01*\nX377500Y145786D02*\nY146586D01*\nX378300D01*\nY145786D01*\nX377500D01*\nX371800Y148700D02*\nY150300D01*\nX373400D01*\nY148700D01*\nX371800D01*\nX372200Y149100D02*\nY149900D01*\nX373000D01*\nY149100D01*\nX372200D01*\nX357200Y155800D02*\nY157400D01*\nX358800D01*\nY155800D01*\nX357200D01*\nX357600Y156200D02*\nY157000D01*\nX358400D01*\nY156200D01*\nX357600D01*\nX333800Y180444D02*\nY182044D01*\nX335400D01*\nY180444D01*\nX333800D01*\nX334200Y180844D02*\nY181644D01*\nX335000D01*\nY180844D01*\nX334200D01*\nX320444Y245444D02*\nY247044D01*\nX322044D01*\nY245444D01*\nX320444D01*\nX320844Y245844D02*\nY246644D01*\nX321644D01*\nY245844D01*\nX320844D01*\nX320244Y225744D02*\nY227344D01*\nX321844D01*\nY225744D01*\nX320244D01*\nX320644Y226144D02*\nY226944D01*\nX321444D01*\nY226144D01*\nX320644D01*\nX328444Y245544D02*\nY247144D01*\nX330044D01*\nY245544D01*\nX328444D01*\nX328844Y245944D02*\nY246744D01*\nX329644D01*\nY245944D01*\nX328844D01*\nY225844D02*\nY227444D01*\nX330444D01*\nY225844D01*\nX328844D01*\nX329244Y226244D02*\nY227044D01*\nX330044D01*\nY226244D01*\nX329244D01*\nX351644Y233244D02*\nY234844D01*\nX353244D01*\nY233244D01*\nX351644D01*\nX352044Y233644D02*\nY234444D01*\nX352844D01*\nY233644D01*\nX352044D01*\nX345844Y233244D02*\nY234844D01*\nX347444D01*\nY233244D01*\nX345844D01*\nX346244Y233644D02*\nY234444D01*\nX347044D01*\nY233644D01*\nX346244D01*\nX345944Y260844D02*\nY262444D01*\nX347544D01*\nY260844D01*\nX345944D01*\nX346344Y261244D02*\nY262044D01*\nX347144D01*\nY261244D01*\nX346344D01*\nX346244Y267644D02*\nY269244D01*\nX347844D01*\nY267644D01*\nX346244D01*\nX346644Y268044D02*\nY268844D01*\nX347444D01*\nY268044D01*\nX346644D01*\nX345844Y264144D02*\nY265744D01*\nX347444D01*\nY264144D01*\nX345844D01*\nX346244Y264544D02*\nY265344D01*\nX347044D01*\nY264544D01*\nX346244D01*\nX348744Y233244D02*\nY234844D01*\nX350344D01*\nY233244D01*\nX348744D01*\nX349144Y233644D02*\nY234444D01*\nX349944D01*\nY233644D01*\nX349144D01*\nX359444Y259944D02*\nY261544D01*\nX361044D01*\nY259944D01*\nX359444D01*\nX359844Y260344D02*\nY261144D01*\nX360644D01*\nY260344D01*\nX359844D01*\nX367444Y259944D02*\nY261544D01*\nX369044D01*\nY259944D01*\nX367444D01*\nX367844Y260344D02*\nY261144D01*\nX368644D01*\nY260344D01*\nX367844D01*\nX375444Y263944D02*\nY265544D01*\nX377044D01*\nY263944D01*\nX375444D01*\nX375844Y264344D02*\nY265144D01*\nX376644D01*\nY264344D01*\nX375844D01*\nX355444Y267944D02*\nY269544D01*\nX357044D01*\nY267944D01*\nX355444D01*\nX355844Y268344D02*\nY269144D01*\nX356644D01*\nY268344D01*\nX355844D01*\nX371444Y267944D02*\nY269544D01*\nX373044D01*\nY267944D01*\nX371444D01*\nX371844Y268344D02*\nY269144D01*\nX372644D01*\nY268344D01*\nX371844D01*\nX375444Y267944D02*\nY269544D01*\nX377044D01*\nY267944D01*\nX375444D01*\nX375844Y268344D02*\nY269144D01*\nX376644D01*\nY268344D01*\nX375844D01*\nX379444Y263944D02*\nY265544D01*\nX381044D01*\nY263944D01*\nX379444D01*\nX379844Y264344D02*\nY265144D01*\nX380644D01*\nY264344D01*\nX379844D01*\nX409700Y167609D02*\nY169209D01*\nX411300D01*\nY167609D01*\nX409700D01*\nX410100Y168009D02*\nY168809D01*\nX410900D01*\nY168009D01*\nX410100D01*\nX431400Y161900D02*\nY163500D01*\nX433000D01*\nY161900D01*\nX431400D01*\nX431800Y162300D02*\nY163100D01*\nX432600D01*\nY162300D01*\nX431800D01*\nX423100Y236400D02*\nY238000D01*\nX424700D01*\nY236400D01*\nX423100D01*\nX423500Y236800D02*\nY237600D01*\nX424300D01*\nY236800D01*\nX423500D01*\nX437944Y201900D02*\nY203500D01*\nX439544D01*\nY201900D01*\nX437944D01*\nX438344Y202300D02*\nY203100D01*\nX439144D01*\nY202300D01*\nX438344D01*\nX434300Y189600D02*\nY191200D01*\nX435900D01*\nY189600D01*\nX434300D01*\nX434700Y190000D02*\nY190800D01*\nX435500D01*\nY190000D01*\nX434700D01*\nX428300Y196100D02*\nY197700D01*\nX429900D01*\nY196100D01*\nX428300D01*\nX428700Y196500D02*\nY197300D01*\nX429500D01*\nY196500D01*\nX428700D01*\nX418100Y219900D02*\nY221500D01*\nX419700D01*\nY219900D01*\nX418100D01*\nX418500Y220300D02*\nY221100D01*\nX419300D01*\nY220300D01*\nX418500D01*\nX418100Y185244D02*\nY186844D01*\nX419700D01*\nY185244D01*\nX418100D01*\nX418500Y185644D02*\nY186444D01*\nX419300D01*\nY185644D01*\nX418500D01*\nX413900Y187300D02*\nY188900D01*\nX415500D01*\nY187300D01*\nX413900D01*\nX414300Y187700D02*\nY188500D01*\nX415100D01*\nY187700D01*\nX414300D01*\nX452100Y204400D02*\nY206000D01*\nX453700D01*\nY204400D01*\nX452100D01*\nX452500Y204800D02*\nY205600D01*\nX453300D01*\nY204800D01*\nX452500D01*\nX425100Y172100D02*\nY173700D01*\nX426700D01*\nY172100D01*\nX425100D01*\nX425500Y172500D02*\nY173300D01*\nX426300D01*\nY172500D01*\nX425500D01*\nX424700Y185800D02*\nY187400D01*\nX426300D01*\nY185800D01*\nX424700D01*\nX425100Y186200D02*\nY187000D01*\nX425900D01*\nY186200D01*\nX425100D01*\nX425300Y199900D02*\nY201500D01*\nX426900D01*\nY199900D01*\nX425300D01*\nX425700Y200300D02*\nY201100D01*\nX426500D01*\nY200300D01*\nX425700D01*\nX408100Y159300D02*\nY160900D01*\nX409700D01*\nY159300D01*\nX408100D01*\nX408500Y159700D02*\nY160500D01*\nX409300D01*\nY159700D01*\nX408500D01*\nX409900Y210400D02*\nY212000D01*\nX411500D01*\nY210400D01*\nX409900D01*\nX410300Y210800D02*\nY211600D01*\nX411100D01*\nY210800D01*\nX410300D01*\nX413900Y191400D02*\nY193000D01*\nX415500D01*\nY191400D01*\nX413900D01*\nX414300Y191800D02*\nY192600D01*\nX415100D01*\nY191800D01*\nX414300D01*\nX445900Y181000D02*\nY182600D01*\nX447500D01*\nY181000D01*\nX445900D01*\nX446300Y181400D02*\nY182200D01*\nX447100D01*\nY181400D01*\nX446300D01*\nX354444Y201444D02*\nY203044D01*\nX356044D01*\nY201444D01*\nX354444D01*\nX354844Y201844D02*\nY202644D01*\nX355644D01*\nY201844D01*\nX354844D01*\nX338287Y201944D02*\nY203544D01*\nX339887D01*\nY201944D01*\nX338287D01*\nX338687Y202344D02*\nY203144D01*\nX339487D01*\nY202344D01*\nX338687D01*\nX391944Y184944D02*\nY186544D01*\nX393544D01*\nY184944D01*\nX391944D01*\nX392344Y185344D02*\nY186144D01*\nX393144D01*\nY185344D01*\nX392344D01*\nX399444Y188944D02*\nY190544D01*\nX401044D01*\nY188944D01*\nX399444D01*\nX399844Y189344D02*\nY190144D01*\nX400644D01*\nY189344D01*\nX399844D01*\nX400944Y184444D02*\nY186044D01*\nX402544D01*\nY184444D01*\nX400944D01*\nX401344Y184844D02*\nY185644D01*\nX402144D01*\nY184844D01*\nX401344D01*\nX396944Y186444D02*\nY188044D01*\nX398544D01*\nY186444D01*\nX396944D01*\nX397344Y186844D02*\nY187644D01*\nX398144D01*\nY186844D01*\nX397344D01*\nX396944Y149444D02*\nY151044D01*\nX398544D01*\nY149444D01*\nX396944D01*\nX397344Y149844D02*\nY150644D01*\nX398144D01*\nY149844D01*\nX397344D01*\nX401500Y151030D02*\nY152630D01*\nX403100D01*\nY151030D01*\nX401500D01*\nX401900Y151430D02*\nY152230D01*\nX402700D01*\nY151430D01*\nX401900D01*\nX399400Y156444D02*\nY158044D01*\nX401000D01*\nY156444D01*\nX399400D01*\nX399800Y156844D02*\nY157644D01*\nX400600D01*\nY156844D01*\nX399800D01*\nX386944Y187944D02*\nY189544D01*\nX388544D01*\nY187944D01*\nX386944D01*\nX387344Y188344D02*\nY189144D01*\nX388144D01*\nY188344D01*\nX387344D01*\nX382944Y177444D02*\nY179044D01*\nX384544D01*\nY177444D01*\nX382944D01*\nX383344Y177844D02*\nY178644D01*\nX384144D01*\nY177844D01*\nX383344D01*\nX403600Y226444D02*\nY228044D01*\nX405200D01*\nY226444D01*\nX403600D01*\nX404000Y226844D02*\nY227644D01*\nX404800D01*\nY226844D01*\nX404000D01*\nX382944Y189444D02*\nY191044D01*\nX384544D01*\nY189444D01*\nX382944D01*\nX383344Y189844D02*\nY190644D01*\nX384144D01*\nY189844D01*\nX383344D01*\nX378944Y187444D02*\nY189044D01*\nX380544D01*\nY187444D01*\nX378944D01*\nX379344Y187844D02*\nY188644D01*\nX380144D01*\nY187844D01*\nX379344D01*\nX362444Y186444D02*\nY188044D01*\nX364044D01*\nY186444D01*\nX362444D01*\nX362844Y186844D02*\nY187644D01*\nX363644D01*\nY186844D01*\nX362844D01*\nX366444Y180444D02*\nY182044D01*\nX368044D01*\nY180444D01*\nX366444D01*\nX366844Y180844D02*\nY181644D01*\nX367644D01*\nY180844D01*\nX366844D01*\nX357944Y199944D02*\nY201544D01*\nX359544D01*\nY199944D01*\nX357944D01*\nX358344Y200344D02*\nY201144D01*\nX359144D01*\nY200344D01*\nX358344D01*\nX381600Y164444D02*\nY166044D01*\nX383200D01*\nY164444D01*\nX381600D01*\nX382000Y164844D02*\nY165644D01*\nX382800D01*\nY164844D01*\nX382000D01*\nX368944Y184444D02*\nY186044D01*\nX370544D01*\nY184444D01*\nX368944D01*\nX369344Y184844D02*\nY185644D01*\nX370144D01*\nY184844D01*\nX369344D01*\nX392444Y147944D02*\nY149544D01*\nX394044D01*\nY147944D01*\nX392444D01*\nX392844Y148344D02*\nY149144D01*\nX393644D01*\nY148344D01*\nX392844D01*\nX393944Y141444D02*\nY143044D01*\nX395544D01*\nY141444D01*\nX393944D01*\nX394344Y141844D02*\nY142644D01*\nX395144D01*\nY141844D01*\nX394344D01*\nX421818Y147944D02*\nY149544D01*\nX423418D01*\nY147944D01*\nX421818D01*\nX422218Y148344D02*\nY149144D01*\nX423018D01*\nY148344D01*\nX422218D01*\nX394444Y242444D02*\nY244044D01*\nX396044D01*\nY242444D01*\nX394444D01*\nX394844Y242844D02*\nY243644D01*\nX395644D01*\nY242844D01*\nX394844D01*\nX380444Y238944D02*\nY240544D01*\nX382044D01*\nY238944D01*\nX380444D01*\nX380844Y239344D02*\nY240144D01*\nX381644D01*\nY239344D01*\nX380844D01*\nX381444Y235444D02*\nY237044D01*\nX383044D01*\nY235444D01*\nX381444D01*\nX381844Y235844D02*\nY236644D01*\nX382644D01*\nY235844D01*\nX381844D01*\nX378944Y242444D02*\nY244044D01*\nX380544D01*\nY242444D01*\nX378944D01*\nX379344Y242844D02*\nY243644D01*\nX380144D01*\nY242844D01*\nX379344D01*\nX380444Y228444D02*\nY230044D01*\nX382044D01*\nY228444D01*\nX380444D01*\nX380844Y228844D02*\nY229644D01*\nX381644D01*\nY228844D01*\nX380844D01*\nX377944Y233444D02*\nY235044D01*\nX379544D01*\nY233444D01*\nX377944D01*\nX378344Y233844D02*\nY234644D01*\nX379144D01*\nY233844D01*\nX378344D01*\nX369444Y225100D02*\nY226700D01*\nX371044D01*\nY225100D01*\nX369444D01*\nX369844Y225500D02*\nY226300D01*\nX370644D01*\nY225500D01*\nX369844D01*\nX411444Y237444D02*\nY239044D01*\nX413044D01*\nY237444D01*\nX411444D01*\nX411844Y237844D02*\nY238644D01*\nX412644D01*\nY237844D01*\nX411844D01*\nX434444Y214444D02*\nY216044D01*\nX436044D01*\nY214444D01*\nX434444D01*\nX434844Y214844D02*\nY215644D01*\nX435644D01*\nY214844D01*\nX434844D01*\nX413944Y201944D02*\nY203544D01*\nX415544D01*\nY201944D01*\nX413944D01*\nX414344Y202344D02*\nY203144D01*\nX415144D01*\nY202344D01*\nX414344D01*\nX377744Y199089D02*\nY200689D01*\nX379344D01*\nY199089D01*\nX377744D01*\nX378144Y199489D02*\nY200289D01*\nX378944D01*\nY199489D01*\nX378144D01*\nX320444Y231444D02*\nY233044D01*\nX322044D01*\nY231444D01*\nX320444D01*\nX320844Y231844D02*\nY232644D01*\nX321644D01*\nY231844D01*\nX320844D01*\nX329444Y231444D02*\nY233044D01*\nX331044D01*\nY231444D01*\nX329444D01*\nX329844Y231844D02*\nY232644D01*\nX330644D01*\nY231844D01*\nX329844D01*\nX320444Y250444D02*\nY252044D01*\nX322044D01*\nY250444D01*\nX320444D01*\nX320844Y250844D02*\nY251644D01*\nX321644D01*\nY250844D01*\nX320844D01*\nX361944Y255944D02*\nY257544D01*\nX363544D01*\nY255944D01*\nX361944D01*\nX362344Y256344D02*\nY257144D01*\nX363144D01*\nY256344D01*\nX362344D01*\nX359444Y267944D02*\nY269544D01*\nX361044D01*\nY267944D01*\nX359444D01*\nX359844Y268344D02*\nY269144D01*\nX360644D01*\nY268344D01*\nX359844D01*\nX363444Y263944D02*\nY265544D01*\nX365044D01*\nY263944D01*\nX363444D01*\nX363844Y264344D02*\nY265144D01*\nX364644D01*\nY264344D01*\nX363844D01*\nX355944Y235944D02*\nY237544D01*\nX357544D01*\nY235944D01*\nX355944D01*\nX356344Y236344D02*\nY237144D01*\nX357144D01*\nY236344D01*\nX356344D01*\nX365444Y235850D02*\nY237450D01*\nX367044D01*\nY235850D01*\nX365444D01*\nX365844Y236250D02*\nY237050D01*\nX366644D01*\nY236250D01*\nX365844D01*\nX367444Y233444D02*\nY235044D01*\nX369044D01*\nY233444D01*\nX367444D01*\nX367844Y233844D02*\nY234644D01*\nX368644D01*\nY233844D01*\nX367844D01*\nX367444Y229944D02*\nY231544D01*\nX369044D01*\nY229944D01*\nX367444D01*\nX367844Y230344D02*\nY231144D01*\nX368644D01*\nY230344D01*\nX367844D01*\nX362944Y229944D02*\nY231544D01*\nX364544D01*\nY229944D01*\nX362944D01*\nX363344Y230344D02*\nY231144D01*\nX364144D01*\nY230344D01*\nX363344D01*\nX362944Y224444D02*\nY226044D01*\nX364544D01*\nY224444D01*\nX362944D01*\nX363344Y224844D02*\nY225644D01*\nX364144D01*\nY224844D01*\nX363344D01*\nX371444Y259944D02*\nY261544D01*\nX373044D01*\nY259944D01*\nX371444D01*\nX371844Y260344D02*\nY261144D01*\nX372644D01*\nY260344D01*\nX371844D01*\nX357944Y233444D02*\nY235044D01*\nX359544D01*\nY233444D01*\nX357944D01*\nX358344Y233844D02*\nY234644D01*\nX359144D01*\nY233844D01*\nX358344D01*\nX362944Y233444D02*\nY235044D01*\nX364544D01*\nY233444D01*\nX362944D01*\nX363344Y233844D02*\nY234644D01*\nX364144D01*\nY233844D01*\nX363344D01*\nX364944Y226944D02*\nY228544D01*\nX366544D01*\nY226944D01*\nX364944D01*\nX365344Y227344D02*\nY228144D01*\nX366144D01*\nY227344D01*\nX365344D01*\nX351944Y224444D02*\nY226044D01*\nX353544D01*\nY224444D01*\nX351944D01*\nX352344Y224844D02*\nY225644D01*\nX353144D01*\nY224844D01*\nX352344D01*\nX347944Y224444D02*\nY226044D01*\nX349544D01*\nY224444D01*\nX347944D01*\nX348344Y224844D02*\nY225644D01*\nX349144D01*\nY224844D01*\nX348344D01*\nX360944Y220444D02*\nY222044D01*\nX362544D01*\nY220444D01*\nX360944D01*\nX361344Y220844D02*\nY221644D01*\nX362144D01*\nY220844D01*\nX361344D01*\nX319944Y216444D02*\nY218044D01*\nX321544D01*\nY216444D01*\nX319944D01*\nX320344Y216844D02*\nY217644D01*\nX321144D01*\nY216844D01*\nX320344D01*\nX315444Y259444D02*\nY261044D01*\nX317044D01*\nY259444D01*\nX315444D01*\nX315844Y259844D02*\nY260644D01*\nX316644D01*\nY259844D01*\nX315844D01*\nX315444Y268444D02*\nY270044D01*\nX317044D01*\nY268444D01*\nX315444D01*\nX315844Y268844D02*\nY269644D01*\nX316644D01*\nY268844D01*\nX315844D01*\nX314944Y276444D02*\nY278044D01*\nX316544D01*\nY276444D01*\nX314944D01*\nX315344Y276844D02*\nY277644D01*\nX316144D01*\nY276844D01*\nX315344D01*\nX322944Y282944D02*\nY284544D01*\nX324544D01*\nY282944D01*\nX322944D01*\nX323344Y283344D02*\nY284144D01*\nX324144D01*\nY283344D01*\nX323344D01*\nX329944Y282944D02*\nY284544D01*\nX331544D01*\nY282944D01*\nX329944D01*\nX330344Y283344D02*\nY284144D01*\nX331144D01*\nY283344D01*\nX330344D01*\nX337944Y282444D02*\nY284044D01*\nX339544D01*\nY282444D01*\nX337944D01*\nX338344Y282844D02*\nY283644D01*\nX339144D01*\nY282844D01*\nX338344D01*\nX338944Y261444D02*\nY263044D01*\nX340544D01*\nY261444D01*\nX338944D01*\nX339344Y261844D02*\nY262644D01*\nX340144D01*\nY261844D01*\nX339344D01*\nX326944Y216444D02*\nY218044D01*\nX328544D01*\nY216444D01*\nX326944D01*\nX327344Y216844D02*\nY217644D01*\nX328144D01*\nY216844D01*\nX327344D01*\nX330944Y127944D02*\nY129544D01*\nX332544D01*\nY127944D01*\nX330944D01*\nX331344Y128344D02*\nY129144D01*\nX332144D01*\nY128344D01*\nX331344D01*\nX385944Y128145D02*\nY129745D01*\nX387544D01*\nY128145D01*\nX385944D01*\nX386344Y128545D02*\nY129345D01*\nX387144D01*\nY128545D01*\nX386344D01*\nX447944Y169544D02*\nY171144D01*\nX449544D01*\nY169544D01*\nX447944D01*\nX448344Y169944D02*\nY170744D01*\nX449144D01*\nY169944D01*\nX448344D01*\nX421944Y128145D02*\nY129745D01*\nX423544D01*\nY128145D01*\nX421944D01*\nX422344Y128545D02*\nY129345D01*\nX423144D01*\nY128545D01*\nX422344D01*\nX400944Y177444D02*\nY179044D01*\nX402544D01*\nY177444D01*\nX400944D01*\nX401344Y177844D02*\nY178644D01*\nX402144D01*\nY177844D01*\nX401344D01*\nX405444Y190444D02*\nY192044D01*\nX407044D01*\nY190444D01*\nX405444D01*\nX405844Y190844D02*\nY191644D01*\nX406644D01*\nY190844D01*\nX405844D01*\nX437944Y133444D02*\nY135044D01*\nX439544D01*\nY133444D01*\nX437944D01*\nX438344Y133844D02*\nY134644D01*\nX439144D01*\nY133844D01*\nX438344D01*\nX438444Y156444D02*\nY158044D01*\nX440044D01*\nY156444D01*\nX438444D01*\nX438844Y156844D02*\nY157644D01*\nX439644D01*\nY156844D01*\nX438844D01*\nX350944Y149944D02*\nY151544D01*\nX352544D01*\nY149944D01*\nX350944D01*\nX351344Y150344D02*\nY151144D01*\nX352144D01*\nY150344D01*\nX351344D01*\nX133008Y361164D02*\nX132208Y362764D01*\nX133808D01*\nX133008Y361164D01*\nX144031Y365101D02*\nX144431Y365501D01*\nX144831D01*\nX144431Y365901D01*\nX144831Y366301D01*\nX144431D01*\nX144031Y366701D01*\nX143631Y366301D01*\nX143231D01*\nX143631Y365901D01*\nX143231Y365501D01*\nX143631D01*\nX144031Y365101D01*\nY384787D02*\nX144431Y385187D01*\nX144831D01*\nX144431Y385587D01*\nX144831Y385987D01*\nX144431D01*\nX144031Y386387D01*\nX143631Y385987D01*\nX143231D01*\nX143631Y385587D01*\nX143231Y385187D01*\nX143631D01*\nX144031Y384787D01*\nX133008Y388724D02*\nX132208Y390324D01*\nX133808D01*\nX133008Y388724D01*\nX131244Y401544D02*\nX131644Y402344D01*\nX131244Y403144D01*\nX132044Y402744D01*\nX132844Y403144D01*\nX132444Y402344D01*\nX132844Y401544D01*\nX132044Y401944D01*\nX131244Y401544D01*\nY411544D02*\nX131644Y412344D01*\nX131244Y413144D01*\nX132044Y412744D01*\nX132844Y413144D01*\nX132444Y412344D01*\nX132844Y411544D01*\nX132044Y411944D01*\nX131244Y411544D01*\nY421544D02*\nX131644Y422344D01*\nX131244Y423144D01*\nX132044Y422744D01*\nX132844Y423144D01*\nX132444Y422344D01*\nX132844Y421544D01*\nX132044Y421944D01*\nX131244Y421544D01*\nY431544D02*\nX131644Y432344D01*\nX131244Y433144D01*\nX132044Y432744D01*\nX132844Y433144D01*\nX132444Y432344D01*\nX132844Y431544D01*\nX132044Y431944D01*\nX131244Y431544D01*\nX141344Y346344D02*\nY345944D01*\nX142144D01*\nY346344D01*\nX142544D01*\nY347144D01*\nX142144D01*\nY347544D01*\nX141344D01*\nY347144D01*\nX140944D01*\nY346344D01*\nX141344D01*\nY351344D02*\nY350944D01*\nX142144D01*\nY351344D01*\nX142544D01*\nY352144D01*\nX142144D01*\nY352544D01*\nX141344D01*\nY352144D01*\nX140944D01*\nY351344D01*\nX141344D01*\nX146344Y346344D02*\nY345944D01*\nX147144D01*\nY346344D01*\nX147544D01*\nY347144D01*\nX147144D01*\nY347544D01*\nX146344D01*\nY347144D01*\nX145944D01*\nY346344D01*\nX146344D01*\nY351344D02*\nY350944D01*\nX147144D01*\nY351344D01*\nX147544D01*\nY352144D01*\nX147144D01*\nY352544D01*\nX146344D01*\nY352144D01*\nX145944D01*\nY351344D01*\nX146344D01*\nX151344Y346344D02*\nY345944D01*\nX152144D01*\nY346344D01*\nX152544D01*\nY347144D01*\nX152144D01*\nY347544D01*\nX151344D01*\nY347144D01*\nX150944D01*\nY346344D01*\nX151344D01*\nY351344D02*\nY350944D01*\nX152144D01*\nY351344D01*\nX152544D01*\nY352144D01*\nX152144D01*\nY352544D01*\nX151344D01*\nY352144D01*\nX150944D01*\nY351344D01*\nX151344D01*\nX156344Y346344D02*\nY345944D01*\nX157144D01*\nY346344D01*\nX157544D01*\nY347144D01*\nX157144D01*\nY347544D01*\nX156344D01*\nY347144D01*\nX155944D01*\nY346344D01*\nX156344D01*\nY351344D02*\nY350944D01*\nX157144D01*\nY351344D01*\nX157544D01*\nY352144D01*\nX157144D01*\nY352544D01*\nX156344D01*\nY352144D01*\nX155944D01*\nY351344D01*\nX156344D01*\nX161344Y346344D02*\nY345944D01*\nX162144D01*\nY346344D01*\nX162544D01*\nY347144D01*\nX162144D01*\nY347544D01*\nX161344D01*\nY347144D01*\nX160944D01*\nY346344D01*\nX161344D01*\nY351344D02*\nY350944D01*\nX162144D01*\nY351344D01*\nX162544D01*\nY352144D01*\nX162144D01*\nY352544D01*\nX161344D01*\nY352144D01*\nX160944D01*\nY351344D01*\nX161344D01*\nX234444Y431944D02*\nX234844Y432744D01*\nX234444Y433544D01*\nX235244Y433144D01*\nX236044Y433544D01*\nX235644Y432744D01*\nX236044Y431944D01*\nX235244Y432344D01*\nX234444Y431944D01*\nX224444D02*\nX224844Y432744D01*\nX224444Y433544D01*\nX225244Y433144D01*\nX226044Y433544D01*\nX225644Y432744D01*\nX226044Y431944D01*\nX225244Y432344D01*\nX224444Y431944D01*\nX214444D02*\nX214844Y432744D01*\nX214444Y433544D01*\nX215244Y433144D01*\nX216044Y433544D01*\nX215644Y432744D01*\nX216044Y431944D01*\nX215244Y432344D01*\nX214444Y431944D01*\nX204444D02*\nX204844Y432744D01*\nX204444Y433544D01*\nX205244Y433144D01*\nX206044Y433544D01*\nX205644Y432744D01*\nX206044Y431944D01*\nX205244Y432344D01*\nX204444Y431944D01*\nX282700Y340400D02*\nX283100D01*\nX283500Y340800D01*\nX283900Y340400D01*\nX284300D01*\nY340800D01*\nX283900Y341200D01*\nX284300Y341600D01*\nY342000D01*\nX283900D01*\nX283500Y341600D01*\nX283100Y342000D01*\nX282700D01*\nY341600D01*\nX283100Y341200D01*\nX282700Y340800D01*\nY340400D01*\nY350400D02*\nX283100D01*\nX283500Y350800D01*\nX283900Y350400D01*\nX284300D01*\nY350800D01*\nX283900Y351200D01*\nX284300Y351600D01*\nY352000D01*\nX283900D01*\nX283500Y351600D01*\nX283100Y352000D01*\nX282700D01*\nY351600D01*\nX283100Y351200D01*\nX282700Y350800D01*\nY350400D01*\nY360400D02*\nX283100D01*\nX283500Y360800D01*\nX283900Y360400D01*\nX284300D01*\nY360800D01*\nX283900Y361200D01*\nX284300Y361600D01*\nY362000D01*\nX283900D01*\nX283500Y361600D01*\nX283100Y362000D01*\nX282700D01*\nY361600D01*\nX283100Y361200D01*\nX282700Y360800D01*\nY360400D01*\nY370400D02*\nX283100D01*\nX283500Y370800D01*\nX283900Y370400D01*\nX284300D01*\nY370800D01*\nX283900Y371200D01*\nX284300Y371600D01*\nY372000D01*\nX283900D01*\nX283500Y371600D01*\nX283100Y372000D01*\nX282700D01*\nY371600D01*\nX283100Y371200D01*\nX282700Y370800D01*\nY370400D01*\nY380400D02*\nX283100D01*\nX283500Y380800D01*\nX283900Y380400D01*\nX284300D01*\nY380800D01*\nX283900Y381200D01*\nX284300Y381600D01*\nY382000D01*\nX283900D01*\nX283500Y381600D01*\nX283100Y382000D01*\nX282700D01*\nY381600D01*\nX283100Y381200D01*\nX282700Y380800D01*\nY380400D01*\nY390400D02*\nX283100D01*\nX283500Y390800D01*\nX283900Y390400D01*\nX284300D01*\nY390800D01*\nX283900Y391200D01*\nX284300Y391600D01*\nY392000D01*\nX283900D01*\nX283500Y391600D01*\nX283100Y392000D01*\nX282700D01*\nY391600D01*\nX283100Y391200D01*\nX282700Y390800D01*\nY390400D01*\nY400400D02*\nX283100D01*\nX283500Y400800D01*\nX283900Y400400D01*\nX284300D01*\nY400800D01*\nX283900Y401200D01*\nX284300Y401600D01*\nY402000D01*\nX283900D01*\nX283500Y401600D01*\nX283100Y402000D01*\nX282700D01*\nY401600D01*\nX283100Y401200D01*\nX282700Y400800D01*\nY400400D01*\nY410400D02*\nX283100D01*\nX283500Y410800D01*\nX283900Y410400D01*\nX284300D01*\nY410800D01*\nX283900Y411200D01*\nX284300Y411600D01*\nY412000D01*\nX283900D01*\nX283500Y411600D01*\nX283100Y412000D01*\nX282700D01*\nY411600D01*\nX283100Y411200D01*\nX282700Y410800D01*\nY410400D01*\nY420400D02*\nX283100D01*\nX283500Y420800D01*\nX283900Y420400D01*\nX284300D01*\nY420800D01*\nX283900Y421200D01*\nX284300Y421600D01*\nY422000D01*\nX283900D01*\nX283500Y421600D01*\nX283100Y422000D01*\nX282700D01*\nY421600D01*\nX283100Y421200D01*\nX282700Y420800D01*\nY420400D01*\nY430400D02*\nX283100D01*\nX283500Y430800D01*\nX283900Y430400D01*\nX284300D01*\nY430800D01*\nX283900Y431200D01*\nX284300Y431600D01*\nY432000D01*\nX283900D01*\nX283500Y431600D01*\nX283100Y432000D01*\nX282700D01*\nY431600D01*\nX283100Y431200D01*\nX282700Y430800D01*\nY430400D01*\nX234944Y456244D02*\nX235744Y457044D01*\nX236544Y456244D01*\nX235744Y455444D01*\nX234944Y456244D01*\nX214944D02*\nX215744Y457044D01*\nX216544Y456244D01*\nX215744Y455444D01*\nX214944Y456244D01*\nX149444Y386944D02*\nY388544D01*\nX151044D01*\nY386944D01*\nX149444D01*\nX149844Y387344D02*\nY388144D01*\nX150644D01*\nY387344D01*\nX149844D01*\nX248600Y408905D02*\nY410505D01*\nX250200D01*\nY408905D01*\nX248600D01*\nX249000Y409305D02*\nY410105D01*\nX249800D01*\nY409305D01*\nX249000D01*\nX183700Y323095D02*\nY324695D01*\nX185300D01*\nY323095D01*\nX183700D01*\nX184100Y323495D02*\nY324295D01*\nX184900D01*\nY323495D01*\nX184100D01*\nX190000Y396500D02*\nY398100D01*\nX191600D01*\nY396500D01*\nX190000D01*\nX190400Y396900D02*\nY397700D01*\nX191200D01*\nY396900D01*\nX190400D01*\nX183187Y347609D02*\nY349209D01*\nX184787D01*\nY347609D01*\nX183187D01*\nX183587Y348009D02*\nY348809D01*\nX184387D01*\nY348009D01*\nX183587D01*\nX233141Y404483D02*\nY406083D01*\nX234741D01*\nY404483D01*\nX233141D01*\nX233541Y404883D02*\nY405683D01*\nX234341D01*\nY404883D01*\nX233541D01*\nX231800Y344300D02*\nY345900D01*\nX233400D01*\nY344300D01*\nX231800D01*\nX232200Y344700D02*\nY345500D01*\nX233000D01*\nY344700D01*\nX232200D01*\nX194900Y409400D02*\nY411000D01*\nX196500D01*\nY409400D01*\nX194900D01*\nX195300Y409800D02*\nY410600D01*\nX196100D01*\nY409800D01*\nX195300D01*\nX185500Y379800D02*\nY381400D01*\nX187100D01*\nY379800D01*\nX185500D01*\nX185900Y380200D02*\nY381000D01*\nX186700D01*\nY380200D01*\nX185900D01*\nX225618Y342200D02*\nY343800D01*\nX227218D01*\nY342200D01*\nX225618D01*\nX226018Y342600D02*\nY343400D01*\nX226818D01*\nY342600D01*\nX226018D01*\nX172300Y370500D02*\nY372100D01*\nX173900D01*\nY370500D01*\nX172300D01*\nX172700Y370900D02*\nY371700D01*\nX173500D01*\nY370900D01*\nX172700D01*\nX193900Y320600D02*\nY322200D01*\nX195500D01*\nY320600D01*\nX193900D01*\nX194300Y321000D02*\nY321800D01*\nX195100D01*\nY321000D01*\nX194300D01*\nX165200Y344500D02*\nY346100D01*\nX166800D01*\nY344500D01*\nX165200D01*\nX165600Y344900D02*\nY345700D01*\nX166400D01*\nY344900D01*\nX165600D01*\nX191800Y332300D02*\nY333900D01*\nX193400D01*\nY332300D01*\nX191800D01*\nX192200Y332700D02*\nY333500D01*\nX193000D01*\nY332700D01*\nX192200D01*\nX188100Y331600D02*\nY333200D01*\nX189700D01*\nY331600D01*\nX188100D01*\nX188500Y332000D02*\nY332800D01*\nX189300D01*\nY332000D01*\nX188500D01*\nX197100Y325386D02*\nY326986D01*\nX198700D01*\nY325386D01*\nX197100D01*\nX197500Y325786D02*\nY326586D01*\nX198300D01*\nY325786D01*\nX197500D01*\nX191800Y328700D02*\nY330300D01*\nX193400D01*\nY328700D01*\nX191800D01*\nX192200Y329100D02*\nY329900D01*\nX193000D01*\nY329100D01*\nX192200D01*\nX177200Y335800D02*\nY337400D01*\nX178800D01*\nY335800D01*\nX177200D01*\nX177600Y336200D02*\nY337000D01*\nX178400D01*\nY336200D01*\nX177600D01*\nX153800Y360444D02*\nY362044D01*\nX155400D01*\nY360444D01*\nX153800D01*\nX154200Y360844D02*\nY361644D01*\nX155000D01*\nY360844D01*\nX154200D01*\nX140444Y425444D02*\nY427044D01*\nX142044D01*\nY425444D01*\nX140444D01*\nX140844Y425844D02*\nY426644D01*\nX141644D01*\nY425844D01*\nX140844D01*\nX140244Y405744D02*\nY407344D01*\nX141844D01*\nY405744D01*\nX140244D01*\nX140644Y406144D02*\nY406944D01*\nX141444D01*\nY406144D01*\nX140644D01*\nX148444Y425544D02*\nY427144D01*\nX150044D01*\nY425544D01*\nX148444D01*\nX148844Y425944D02*\nY426744D01*\nX149644D01*\nY425944D01*\nX148844D01*\nY405844D02*\nY407444D01*\nX150444D01*\nY405844D01*\nX148844D01*\nX149244Y406244D02*\nY407044D01*\nX150044D01*\nY406244D01*\nX149244D01*\nX171644Y413244D02*\nY414844D01*\nX173244D01*\nY413244D01*\nX171644D01*\nX172044Y413644D02*\nY414444D01*\nX172844D01*\nY413644D01*\nX172044D01*\nX165844Y413244D02*\nY414844D01*\nX167444D01*\nY413244D01*\nX165844D01*\nX166244Y413644D02*\nY414444D01*\nX167044D01*\nY413644D01*\nX166244D01*\nX165944Y440844D02*\nY442444D01*\nX167544D01*\nY440844D01*\nX165944D01*\nX166344Y441244D02*\nY442044D01*\nX167144D01*\nY441244D01*\nX166344D01*\nX166244Y447644D02*\nY449244D01*\nX167844D01*\nY447644D01*\nX166244D01*\nX166644Y448044D02*\nY448844D01*\nX167444D01*\nY448044D01*\nX166644D01*\nX165844Y444144D02*\nY445744D01*\nX167444D01*\nY444144D01*\nX165844D01*\nX166244Y444544D02*\nY445344D01*\nX167044D01*\nY444544D01*\nX166244D01*\nX168744Y413244D02*\nY414844D01*\nX170344D01*\nY413244D01*\nX168744D01*\nX169144Y413644D02*\nY414444D01*\nX169944D01*\nY413644D01*\nX169144D01*\nX179444Y439944D02*\nY441544D01*\nX181044D01*\nY439944D01*\nX179444D01*\nX179844Y440344D02*\nY441144D01*\nX180644D01*\nY440344D01*\nX179844D01*\nX187444Y439944D02*\nY441544D01*\nX189044D01*\nY439944D01*\nX187444D01*\nX187844Y440344D02*\nY441144D01*\nX188644D01*\nY440344D01*\nX187844D01*\nX195444Y443944D02*\nY445544D01*\nX197044D01*\nY443944D01*\nX195444D01*\nX195844Y444344D02*\nY445144D01*\nX196644D01*\nY444344D01*\nX195844D01*\nX175444Y447944D02*\nY449544D01*\nX177044D01*\nY447944D01*\nX175444D01*\nX175844Y448344D02*\nY449144D01*\nX176644D01*\nY448344D01*\nX175844D01*\nX191444Y447944D02*\nY449544D01*\nX193044D01*\nY447944D01*\nX191444D01*\nX191844Y448344D02*\nY449144D01*\nX192644D01*\nY448344D01*\nX191844D01*\nX195444Y447944D02*\nY449544D01*\nX197044D01*\nY447944D01*\nX195444D01*\nX195844Y448344D02*\nY449144D01*\nX196644D01*\nY448344D01*\nX195844D01*\nX199444Y443944D02*\nY445544D01*\nX201044D01*\nY443944D01*\nX199444D01*\nX199844Y444344D02*\nY445144D01*\nX200644D01*\nY444344D01*\nX199844D01*\nX229700Y347609D02*\nY349209D01*\nX231300D01*\nY347609D01*\nX229700D01*\nX230100Y348009D02*\nY348809D01*\nX230900D01*\nY348009D01*\nX230100D01*\nX251400Y341900D02*\nY343500D01*\nX253000D01*\nY341900D01*\nX251400D01*\nX251800Y342300D02*\nY343100D01*\nX252600D01*\nY342300D01*\nX251800D01*\nX243100Y416400D02*\nY418000D01*\nX244700D01*\nY416400D01*\nX243100D01*\nX243500Y416800D02*\nY417600D01*\nX244300D01*\nY416800D01*\nX243500D01*\nX257944Y381900D02*\nY383500D01*\nX259544D01*\nY381900D01*\nX257944D01*\nX258344Y382300D02*\nY383100D01*\nX259144D01*\nY382300D01*\nX258344D01*\nX254300Y369600D02*\nY371200D01*\nX255900D01*\nY369600D01*\nX254300D01*\nX254700Y370000D02*\nY370800D01*\nX255500D01*\nY370000D01*\nX254700D01*\nX248300Y376100D02*\nY377700D01*\nX249900D01*\nY376100D01*\nX248300D01*\nX248700Y376500D02*\nY377300D01*\nX249500D01*\nY376500D01*\nX248700D01*\nX238100Y399900D02*\nY401500D01*\nX239700D01*\nY399900D01*\nX238100D01*\nX238500Y400300D02*\nY401100D01*\nX239300D01*\nY400300D01*\nX238500D01*\nX238100Y365244D02*\nY366844D01*\nX239700D01*\nY365244D01*\nX238100D01*\nX238500Y365644D02*\nY366444D01*\nX239300D01*\nY365644D01*\nX238500D01*\nX233900Y367300D02*\nY368900D01*\nX235500D01*\nY367300D01*\nX233900D01*\nX234300Y367700D02*\nY368500D01*\nX235100D01*\nY367700D01*\nX234300D01*\nX272100Y384400D02*\nY386000D01*\nX273700D01*\nY384400D01*\nX272100D01*\nX272500Y384800D02*\nY385600D01*\nX273300D01*\nY384800D01*\nX272500D01*\nX245100Y352100D02*\nY353700D01*\nX246700D01*\nY352100D01*\nX245100D01*\nX245500Y352500D02*\nY353300D01*\nX246300D01*\nY352500D01*\nX245500D01*\nX244700Y365800D02*\nY367400D01*\nX246300D01*\nY365800D01*\nX244700D01*\nX245100Y366200D02*\nY367000D01*\nX245900D01*\nY366200D01*\nX245100D01*\nX245300Y379900D02*\nY381500D01*\nX246900D01*\nY379900D01*\nX245300D01*\nX245700Y380300D02*\nY381100D01*\nX246500D01*\nY380300D01*\nX245700D01*\nX228100Y339300D02*\nY340900D01*\nX229700D01*\nY339300D01*\nX228100D01*\nX228500Y339700D02*\nY340500D01*\nX229300D01*\nY339700D01*\nX228500D01*\nX229900Y390400D02*\nY392000D01*\nX231500D01*\nY390400D01*\nX229900D01*\nX230300Y390800D02*\nY391600D01*\nX231100D01*\nY390800D01*\nX230300D01*\nX233900Y371400D02*\nY373000D01*\nX235500D01*\nY371400D01*\nX233900D01*\nX234300Y371800D02*\nY372600D01*\nX235100D01*\nY371800D01*\nX234300D01*\nX265900Y361000D02*\nY362600D01*\nX267500D01*\nY361000D01*\nX265900D01*\nX266300Y361400D02*\nY362200D01*\nX267100D01*\nY361400D01*\nX266300D01*\nX174444Y381444D02*\nY383044D01*\nX176044D01*\nY381444D01*\nX174444D01*\nX174844Y381844D02*\nY382644D01*\nX175644D01*\nY381844D01*\nX174844D01*\nX158287Y381944D02*\nY383544D01*\nX159887D01*\nY381944D01*\nX158287D01*\nX158687Y382344D02*\nY383144D01*\nX159487D01*\nY382344D01*\nX158687D01*\nX211944Y364944D02*\nY366544D01*\nX213544D01*\nY364944D01*\nX211944D01*\nX212344Y365344D02*\nY366144D01*\nX213144D01*\nY365344D01*\nX212344D01*\nX219444Y368944D02*\nY370544D01*\nX221044D01*\nY368944D01*\nX219444D01*\nX219844Y369344D02*\nY370144D01*\nX220644D01*\nY369344D01*\nX219844D01*\nX220944Y364444D02*\nY366044D01*\nX222544D01*\nY364444D01*\nX220944D01*\nX221344Y364844D02*\nY365644D01*\nX222144D01*\nY364844D01*\nX221344D01*\nX216944Y366444D02*\nY368044D01*\nX218544D01*\nY366444D01*\nX216944D01*\nX217344Y366844D02*\nY367644D01*\nX218144D01*\nY366844D01*\nX217344D01*\nX216944Y329444D02*\nY331044D01*\nX218544D01*\nY329444D01*\nX216944D01*\nX217344Y329844D02*\nY330644D01*\nX218144D01*\nY329844D01*\nX217344D01*\nX221500Y331030D02*\nY332630D01*\nX223100D01*\nY331030D01*\nX221500D01*\nX221900Y331430D02*\nY332230D01*\nX222700D01*\nY331430D01*\nX221900D01*\nX219400Y336444D02*\nY338044D01*\nX221000D01*\nY336444D01*\nX219400D01*\nX219800Y336844D02*\nY337644D01*\nX220600D01*\nY336844D01*\nX219800D01*\nX206944Y367944D02*\nY369544D01*\nX208544D01*\nY367944D01*\nX206944D01*\nX207344Y368344D02*\nY369144D01*\nX208144D01*\nY368344D01*\nX207344D01*\nX202944Y357444D02*\nY359044D01*\nX204544D01*\nY357444D01*\nX202944D01*\nX203344Y357844D02*\nY358644D01*\nX204144D01*\nY357844D01*\nX203344D01*\nX223600Y406444D02*\nY408044D01*\nX225200D01*\nY406444D01*\nX223600D01*\nX224000Y406844D02*\nY407644D01*\nX224800D01*\nY406844D01*\nX224000D01*\nX202944Y369444D02*\nY371044D01*\nX204544D01*\nY369444D01*\nX202944D01*\nX203344Y369844D02*\nY370644D01*\nX204144D01*\nY369844D01*\nX203344D01*\nX198944Y367444D02*\nY369044D01*\nX200544D01*\nY367444D01*\nX198944D01*\nX199344Y367844D02*\nY368644D01*\nX200144D01*\nY367844D01*\nX199344D01*\nX182444Y366444D02*\nY368044D01*\nX184044D01*\nY366444D01*\nX182444D01*\nX182844Y366844D02*\nY367644D01*\nX183644D01*\nY366844D01*\nX182844D01*\nX186444Y360444D02*\nY362044D01*\nX188044D01*\nY360444D01*\nX186444D01*\nX186844Y360844D02*\nY361644D01*\nX187644D01*\nY360844D01*\nX186844D01*\nX177944Y379944D02*\nY381544D01*\nX179544D01*\nY379944D01*\nX177944D01*\nX178344Y380344D02*\nY381144D01*\nX179144D01*\nY380344D01*\nX178344D01*\nX201600Y344444D02*\nY346044D01*\nX203200D01*\nY344444D01*\nX201600D01*\nX202000Y344844D02*\nY345644D01*\nX202800D01*\nY344844D01*\nX202000D01*\nX188944Y364444D02*\nY366044D01*\nX190544D01*\nY364444D01*\nX188944D01*\nX189344Y364844D02*\nY365644D01*\nX190144D01*\nY364844D01*\nX189344D01*\nX212444Y327944D02*\nY329544D01*\nX214044D01*\nY327944D01*\nX212444D01*\nX212844Y328344D02*\nY329144D01*\nX213644D01*\nY328344D01*\nX212844D01*\nX213944Y321444D02*\nY323044D01*\nX215544D01*\nY321444D01*\nX213944D01*\nX214344Y321844D02*\nY322644D01*\nX215144D01*\nY321844D01*\nX214344D01*\nX241818Y327944D02*\nY329544D01*\nX243418D01*\nY327944D01*\nX241818D01*\nX242218Y328344D02*\nY329144D01*\nX243018D01*\nY328344D01*\nX242218D01*\nX214444Y422444D02*\nY424044D01*\nX216044D01*\nY422444D01*\nX214444D01*\nX214844Y422844D02*\nY423644D01*\nX215644D01*\nY422844D01*\nX214844D01*\nX200444Y418944D02*\nY420544D01*\nX202044D01*\nY418944D01*\nX200444D01*\nX200844Y419344D02*\nY420144D01*\nX201644D01*\nY419344D01*\nX200844D01*\nX201444Y415444D02*\nY417044D01*\nX203044D01*\nY415444D01*\nX201444D01*\nX201844Y415844D02*\nY416644D01*\nX202644D01*\nY415844D01*\nX201844D01*\nX198944Y422444D02*\nY424044D01*\nX200544D01*\nY422444D01*\nX198944D01*\nX199344Y422844D02*\nY423644D01*\nX200144D01*\nY422844D01*\nX199344D01*\nX200444Y408444D02*\nY410044D01*\nX202044D01*\nY408444D01*\nX200444D01*\nX200844Y408844D02*\nY409644D01*\nX201644D01*\nY408844D01*\nX200844D01*\nX197944Y413444D02*\nY415044D01*\nX199544D01*\nY413444D01*\nX197944D01*\nX198344Y413844D02*\nY414644D01*\nX199144D01*\nY413844D01*\nX198344D01*\nX189444Y405100D02*\nY406700D01*\nX191044D01*\nY405100D01*\nX189444D01*\nX189844Y405500D02*\nY406300D01*\nX190644D01*\nY405500D01*\nX189844D01*\nX231444Y417444D02*\nY419044D01*\nX233044D01*\nY417444D01*\nX231444D01*\nX231844Y417844D02*\nY418644D01*\nX232644D01*\nY417844D01*\nX231844D01*\nX254444Y394444D02*\nY396044D01*\nX256044D01*\nY394444D01*\nX254444D01*\nX254844Y394844D02*\nY395644D01*\nX255644D01*\nY394844D01*\nX254844D01*\nX233944Y381944D02*\nY383544D01*\nX235544D01*\nY381944D01*\nX233944D01*\nX234344Y382344D02*\nY383144D01*\nX235144D01*\nY382344D01*\nX234344D01*\nX197744Y379088D02*\nY380689D01*\nX199344D01*\nY379088D01*\nX197744D01*\nX198144Y379488D02*\nY380289D01*\nX198944D01*\nY379488D01*\nX198144D01*\nX140444Y411444D02*\nY413044D01*\nX142044D01*\nY411444D01*\nX140444D01*\nX140844Y411844D02*\nY412644D01*\nX141644D01*\nY411844D01*\nX140844D01*\nX149444Y411444D02*\nY413044D01*\nX151044D01*\nY411444D01*\nX149444D01*\nX149844Y411844D02*\nY412644D01*\nX150644D01*\nY411844D01*\nX149844D01*\nX140444Y430444D02*\nY432044D01*\nX142044D01*\nY430444D01*\nX140444D01*\nX140844Y430844D02*\nY431644D01*\nX141644D01*\nY430844D01*\nX140844D01*\nX181944Y435944D02*\nY437544D01*\nX183544D01*\nY435944D01*\nX181944D01*\nX182344Y436344D02*\nY437144D01*\nX183144D01*\nY436344D01*\nX182344D01*\nX179444Y447944D02*\nY449544D01*\nX181044D01*\nY447944D01*\nX179444D01*\nX179844Y448344D02*\nY449144D01*\nX180644D01*\nY448344D01*\nX179844D01*\nX183444Y443944D02*\nY445544D01*\nX185044D01*\nY443944D01*\nX183444D01*\nX183844Y444344D02*\nY445144D01*\nX184644D01*\nY444344D01*\nX183844D01*\nX175944Y415944D02*\nY417544D01*\nX177544D01*\nY415944D01*\nX175944D01*\nX176344Y416344D02*\nY417144D01*\nX177144D01*\nY416344D01*\nX176344D01*\nX185444Y415850D02*\nY417450D01*\nX187044D01*\nY415850D01*\nX185444D01*\nX185844Y416250D02*\nY417050D01*\nX186644D01*\nY416250D01*\nX185844D01*\nX187444Y413444D02*\nY415044D01*\nX189044D01*\nY413444D01*\nX187444D01*\nX187844Y413844D02*\nY414644D01*\nX188644D01*\nY413844D01*\nX187844D01*\nX187444Y409944D02*\nY411544D01*\nX189044D01*\nY409944D01*\nX187444D01*\nX187844Y410344D02*\nY411144D01*\nX188644D01*\nY410344D01*\nX187844D01*\nX182944Y409944D02*\nY411544D01*\nX184544D01*\nY409944D01*\nX182944D01*\nX183344Y410344D02*\nY411144D01*\nX184144D01*\nY410344D01*\nX183344D01*\nX182944Y404444D02*\nY406044D01*\nX184544D01*\nY404444D01*\nX182944D01*\nX183344Y404844D02*\nY405644D01*\nX184144D01*\nY404844D01*\nX183344D01*\nX191444Y439944D02*\nY441544D01*\nX193044D01*\nY439944D01*\nX191444D01*\nX191844Y440344D02*\nY441144D01*\nX192644D01*\nY440344D01*\nX191844D01*\nX177944Y413444D02*\nY415044D01*\nX179544D01*\nY413444D01*\nX177944D01*\nX178344Y413844D02*\nY414644D01*\nX179144D01*\nY413844D01*\nX178344D01*\nX182944Y413444D02*\nY415044D01*\nX184544D01*\nY413444D01*\nX182944D01*\nX183344Y413844D02*\nY414644D01*\nX184144D01*\nY413844D01*\nX183344D01*\nX184944Y406944D02*\nY408544D01*\nX186544D01*\nY406944D01*\nX184944D01*\nX185344Y407344D02*\nY408144D01*\nX186144D01*\nY407344D01*\nX185344D01*\nX171944Y404444D02*\nY406044D01*\nX173544D01*\nY404444D01*\nX171944D01*\nX172344Y404844D02*\nY405644D01*\nX173144D01*\nY404844D01*\nX172344D01*\nX167944Y404444D02*\nY406044D01*\nX169544D01*\nY404444D01*\nX167944D01*\nX168344Y404844D02*\nY405644D01*\nX169144D01*\nY404844D01*\nX168344D01*\nX180944Y400444D02*\nY402044D01*\nX182544D01*\nY400444D01*\nX180944D01*\nX181344Y400844D02*\nY401644D01*\nX182144D01*\nY400844D01*\nX181344D01*\nX139944Y396444D02*\nY398044D01*\nX141544D01*\nY396444D01*\nX139944D01*\nX140344Y396844D02*\nY397644D01*\nX141144D01*\nY396844D01*\nX140344D01*\nX135444Y439444D02*\nY441044D01*\nX137044D01*\nY439444D01*\nX135444D01*\nX135844Y439844D02*\nY440644D01*\nX136644D01*\nY439844D01*\nX135844D01*\nX135444Y448444D02*\nY450044D01*\nX137044D01*\nY448444D01*\nX135444D01*\nX135844Y448844D02*\nY449644D01*\nX136644D01*\nY448844D01*\nX135844D01*\nX134944Y456444D02*\nY458044D01*\nX136544D01*\nY456444D01*\nX134944D01*\nX135344Y456844D02*\nY457644D01*\nX136144D01*\nY456844D01*\nX135344D01*\nX142944Y462944D02*\nY464544D01*\nX144544D01*\nY462944D01*\nX142944D01*\nX143344Y463344D02*\nY464144D01*\nX144144D01*\nY463344D01*\nX143344D01*\nX149944Y462944D02*\nY464544D01*\nX151544D01*\nY462944D01*\nX149944D01*\nX150344Y463344D02*\nY464144D01*\nX151144D01*\nY463344D01*\nX150344D01*\nX157944Y462444D02*\nY464044D01*\nX159544D01*\nY462444D01*\nX157944D01*\nX158344Y462844D02*\nY463644D01*\nX159144D01*\nY462844D01*\nX158344D01*\nX158944Y441444D02*\nY443044D01*\nX160544D01*\nY441444D01*\nX158944D01*\nX159344Y441844D02*\nY442644D01*\nX160144D01*\nY441844D01*\nX159344D01*\nX146944Y396444D02*\nY398044D01*\nX148544D01*\nY396444D01*\nX146944D01*\nX147344Y396844D02*\nY397644D01*\nX148144D01*\nY396844D01*\nX147344D01*\nX150944Y307944D02*\nY309544D01*\nX152544D01*\nY307944D01*\nX150944D01*\nX151344Y308344D02*\nY309144D01*\nX152144D01*\nY308344D01*\nX151344D01*\nX205944Y308145D02*\nY309745D01*\nX207544D01*\nY308145D01*\nX205944D01*\nX206344Y308545D02*\nY309345D01*\nX207144D01*\nY308545D01*\nX206344D01*\nX267944Y349544D02*\nY351144D01*\nX269544D01*\nY349544D01*\nX267944D01*\nX268344Y349944D02*\nY350744D01*\nX269144D01*\nY349944D01*\nX268344D01*\nX241944Y308145D02*\nY309745D01*\nX243544D01*\nY308145D01*\nX241944D01*\nX242344Y308545D02*\nY309345D01*\nX243144D01*\nY308545D01*\nX242344D01*\nX220944Y357444D02*\nY359044D01*\nX222544D01*\nY357444D01*\nX220944D01*\nX221344Y357844D02*\nY358644D01*\nX222144D01*\nY357844D01*\nX221344D01*\nX225444Y370444D02*\nY372044D01*\nX227044D01*\nY370444D01*\nX225444D01*\nX225844Y370844D02*\nY371644D01*\nX226644D01*\nY370844D01*\nX225844D01*\nX257944Y313444D02*\nY315044D01*\nX259544D01*\nY313444D01*\nX257944D01*\nX258344Y313844D02*\nY314644D01*\nX259144D01*\nY313844D01*\nX258344D01*\nX258444Y336444D02*\nY338044D01*\nX260044D01*\nY336444D01*\nX258444D01*\nX258844Y336844D02*\nY337644D01*\nX259644D01*\nY336844D01*\nX258844D01*\nX170944Y329944D02*\nY331544D01*\nX172544D01*\nY329944D01*\nX170944D01*\nX171344Y330344D02*\nY331144D01*\nX172144D01*\nY330344D01*\nX171344D01*\nX313008Y361164D02*\nX312208Y362764D01*\nX313808D01*\nX313008Y361164D01*\nX324031Y365101D02*\nX324431Y365501D01*\nX324831D01*\nX324431Y365901D01*\nX324831Y366301D01*\nX324431D01*\nX324031Y366701D01*\nX323631Y366301D01*\nX323231D01*\nX323631Y365901D01*\nX323231Y365501D01*\nX323631D01*\nX324031Y365101D01*\nY384787D02*\nX324431Y385187D01*\nX324831D01*\nX324431Y385587D01*\nX324831Y385987D01*\nX324431D01*\nX324031Y386387D01*\nX323631Y385987D01*\nX323231D01*\nX323631Y385587D01*\nX323231Y385187D01*\nX323631D01*\nX324031Y384787D01*\nX313008Y388724D02*\nX312208Y390324D01*\nX313808D01*\nX313008Y388724D01*\nX311244Y401544D02*\nX311644Y402344D01*\nX311244Y403144D01*\nX312044Y402744D01*\nX312844Y403144D01*\nX312444Y402344D01*\nX312844Y401544D01*\nX312044Y401944D01*\nX311244Y401544D01*\nY411544D02*\nX311644Y412344D01*\nX311244Y413144D01*\nX312044Y412744D01*\nX312844Y413144D01*\nX312444Y412344D01*\nX312844Y411544D01*\nX312044Y411944D01*\nX311244Y411544D01*\nY421544D02*\nX311644Y422344D01*\nX311244Y423144D01*\nX312044Y422744D01*\nX312844Y423144D01*\nX312444Y422344D01*\nX312844Y421544D01*\nX312044Y421944D01*\nX311244Y421544D01*\nY431544D02*\nX311644Y432344D01*\nX311244Y433144D01*\nX312044Y432744D01*\nX312844Y433144D01*\nX312444Y432344D01*\nX312844Y431544D01*\nX312044Y431944D01*\nX311244Y431544D01*\nX321344Y346344D02*\nY345944D01*\nX322144D01*\nY346344D01*\nX322544D01*\nY347144D01*\nX322144D01*\nY347544D01*\nX321344D01*\nY347144D01*\nX320944D01*\nY346344D01*\nX321344D01*\nY351344D02*\nY350944D01*\nX322144D01*\nY351344D01*\nX322544D01*\nY352144D01*\nX322144D01*\nY352544D01*\nX321344D01*\nY352144D01*\nX320944D01*\nY351344D01*\nX321344D01*\nX326344Y346344D02*\nY345944D01*\nX327144D01*\nY346344D01*\nX327544D01*\nY347144D01*\nX327144D01*\nY347544D01*\nX326344D01*\nY347144D01*\nX325944D01*\nY346344D01*\nX326344D01*\nY351344D02*\nY350944D01*\nX327144D01*\nY351344D01*\nX327544D01*\nY352144D01*\nX327144D01*\nY352544D01*\nX326344D01*\nY352144D01*\nX325944D01*\nY351344D01*\nX326344D01*\nX331344Y346344D02*\nY345944D01*\nX332144D01*\nY346344D01*\nX332544D01*\nY347144D01*\nX332144D01*\nY347544D01*\nX331344D01*\nY347144D01*\nX330944D01*\nY346344D01*\nX331344D01*\nY351344D02*\nY350944D01*\nX332144D01*\nY351344D01*\nX332544D01*\nY352144D01*\nX332144D01*\nY352544D01*\nX331344D01*\nY352144D01*\nX330944D01*\nY351344D01*\nX331344D01*\nX336344Y346344D02*\nY345944D01*\nX337144D01*\nY346344D01*\nX337544D01*\nY347144D01*\nX337144D01*\nY347544D01*\nX336344D01*\nY347144D01*\nX335944D01*\nY346344D01*\nX336344D01*\nY351344D02*\nY350944D01*\nX337144D01*\nY351344D01*\nX337544D01*\nY352144D01*\nX337144D01*\nY352544D01*\nX336344D01*\nY352144D01*\nX335944D01*\nY351344D01*\nX336344D01*\nX341344Y346344D02*\nY345944D01*\nX342144D01*\nY346344D01*\nX342544D01*\nY347144D01*\nX342144D01*\nY347544D01*\nX341344D01*\nY347144D01*\nX340944D01*\nY346344D01*\nX341344D01*\nY351344D02*\nY350944D01*\nX342144D01*\nY351344D01*\nX342544D01*\nY352144D01*\nX342144D01*\nY352544D01*\nX341344D01*\nY352144D01*\nX340944D01*\nY351344D01*\nX341344D01*\nX414444Y431944D02*\nX414844Y432744D01*\nX414444Y433544D01*\nX415244Y433144D01*\nX416044Y433544D01*\nX415644Y432744D01*\nX416044Y431944D01*\nX415244Y432344D01*\nX414444Y431944D01*\nX404444D02*\nX404844Y432744D01*\nX404444Y433544D01*\nX405244Y433144D01*\nX406044Y433544D01*\nX405644Y432744D01*\nX406044Y431944D01*\nX405244Y432344D01*\nX404444Y431944D01*\nX394444D02*\nX394844Y432744D01*\nX394444Y433544D01*\nX395244Y433144D01*\nX396044Y433544D01*\nX395644Y432744D01*\nX396044Y431944D01*\nX395244Y432344D01*\nX394444Y431944D01*\nX384444D02*\nX384844Y432744D01*\nX384444Y433544D01*\nX385244Y433144D01*\nX386044Y433544D01*\nX385644Y432744D01*\nX386044Y431944D01*\nX385244Y432344D01*\nX384444Y431944D01*\nX462700Y340400D02*\nX463100D01*\nX463500Y340800D01*\nX463900Y340400D01*\nX464300D01*\nY340800D01*\nX463900Y341200D01*\nX464300Y341600D01*\nY342000D01*\nX463900D01*\nX463500Y341600D01*\nX463100Y342000D01*\nX462700D01*\nY341600D01*\nX463100Y341200D01*\nX462700Y340800D01*\nY340400D01*\nY350400D02*\nX463100D01*\nX463500Y350800D01*\nX463900Y350400D01*\nX464300D01*\nY350800D01*\nX463900Y351200D01*\nX464300Y351600D01*\nY352000D01*\nX463900D01*\nX463500Y351600D01*\nX463100Y352000D01*\nX462700D01*\nY351600D01*\nX463100Y351200D01*\nX462700Y350800D01*\nY350400D01*\nY360400D02*\nX463100D01*\nX463500Y360800D01*\nX463900Y360400D01*\nX464300D01*\nY360800D01*\nX463900Y361200D01*\nX464300Y361600D01*\nY362000D01*\nX463900D01*\nX463500Y361600D01*\nX463100Y362000D01*\nX462700D01*\nY361600D01*\nX463100Y361200D01*\nX462700Y360800D01*\nY360400D01*\nY370400D02*\nX463100D01*\nX463500Y370800D01*\nX463900Y370400D01*\nX464300D01*\nY370800D01*\nX463900Y371200D01*\nX464300Y371600D01*\nY372000D01*\nX463900D01*\nX463500Y371600D01*\nX463100Y372000D01*\nX462700D01*\nY371600D01*\nX463100Y371200D01*\nX462700Y370800D01*\nY370400D01*\nY380400D02*\nX463100D01*\nX463500Y380800D01*\nX463900Y380400D01*\nX464300D01*\nY380800D01*\nX463900Y381200D01*\nX464300Y381600D01*\nY382000D01*\nX463900D01*\nX463500Y381600D01*\nX463100Y382000D01*\nX462700D01*\nY381600D01*\nX463100Y381200D01*\nX462700Y380800D01*\nY380400D01*\nY390400D02*\nX463100D01*\nX463500Y390800D01*\nX463900Y390400D01*\nX464300D01*\nY390800D01*\nX463900Y391200D01*\nX464300Y391600D01*\nY392000D01*\nX463900D01*\nX463500Y391600D01*\nX463100Y392000D01*\nX462700D01*\nY391600D01*\nX463100Y391200D01*\nX462700Y390800D01*\nY390400D01*\nY400400D02*\nX463100D01*\nX463500Y400800D01*\nX463900Y400400D01*\nX464300D01*\nY400800D01*\nX463900Y401200D01*\nX464300Y401600D01*\nY402000D01*\nX463900D01*\nX463500Y401600D01*\nX463100Y402000D01*\nX462700D01*\nY401600D01*\nX463100Y401200D01*\nX462700Y400800D01*\nY400400D01*\nY410400D02*\nX463100D01*\nX463500Y410800D01*\nX463900Y410400D01*\nX464300D01*\nY410800D01*\nX463900Y411200D01*\nX464300Y411600D01*\nY412000D01*\nX463900D01*\nX463500Y411600D01*\nX463100Y412000D01*\nX462700D01*\nY411600D01*\nX463100Y411200D01*\nX462700Y410800D01*\nY410400D01*\nY420400D02*\nX463100D01*\nX463500Y420800D01*\nX463900Y420400D01*\nX464300D01*\nY420800D01*\nX463900Y421200D01*\nX464300Y421600D01*\nY422000D01*\nX463900D01*\nX463500Y421600D01*\nX463100Y422000D01*\nX462700D01*\nY421600D01*\nX463100Y421200D01*\nX462700Y420800D01*\nY420400D01*\nY430400D02*\nX463100D01*\nX463500Y430800D01*\nX463900Y430400D01*\nX464300D01*\nY430800D01*\nX463900Y431200D01*\nX464300Y431600D01*\nY432000D01*\nX463900D01*\nX463500Y431600D01*\nX463100Y432000D01*\nX462700D01*\nY431600D01*\nX463100Y431200D01*\nX462700Y430800D01*\nY430400D01*\nX414944Y456244D02*\nX415744Y457044D01*\nX416544Y456244D01*\nX415744Y455444D01*\nX414944Y456244D01*\nX394944D02*\nX395744Y457044D01*\nX396544Y456244D01*\nX395744Y455444D01*\nX394944Y456244D01*\nX329444Y386944D02*\nY388544D01*\nX331044D01*\nY386944D01*\nX329444D01*\nX329844Y387344D02*\nY388144D01*\nX330644D01*\nY387344D01*\nX329844D01*\nX428600Y408905D02*\nY410505D01*\nX430200D01*\nY408905D01*\nX428600D01*\nX429000Y409305D02*\nY410105D01*\nX429800D01*\nY409305D01*\nX429000D01*\nX363700Y323095D02*\nY324695D01*\nX365300D01*\nY323095D01*\nX363700D01*\nX364100Y323495D02*\nY324295D01*\nX364900D01*\nY323495D01*\nX364100D01*\nX370000Y396500D02*\nY398100D01*\nX371600D01*\nY396500D01*\nX370000D01*\nX370400Y396900D02*\nY397700D01*\nX371200D01*\nY396900D01*\nX370400D01*\nX363187Y347609D02*\nY349209D01*\nX364787D01*\nY347609D01*\nX363187D01*\nX363587Y348009D02*\nY348809D01*\nX364387D01*\nY348009D01*\nX363587D01*\nX413141Y404483D02*\nY406083D01*\nX414741D01*\nY404483D01*\nX413141D01*\nX413541Y404883D02*\nY405683D01*\nX414341D01*\nY404883D01*\nX413541D01*\nX411800Y344300D02*\nY345900D01*\nX413400D01*\nY344300D01*\nX411800D01*\nX412200Y344700D02*\nY345500D01*\nX413000D01*\nY344700D01*\nX412200D01*\nX374900Y409400D02*\nY411000D01*\nX376500D01*\nY409400D01*\nX374900D01*\nX375300Y409800D02*\nY410600D01*\nX376100D01*\nY409800D01*\nX375300D01*\nX365500Y379800D02*\nY381400D01*\nX367100D01*\nY379800D01*\nX365500D01*\nX365900Y380200D02*\nY381000D01*\nX366700D01*\nY380200D01*\nX365900D01*\nX405618Y342200D02*\nY343800D01*\nX407218D01*\nY342200D01*\nX405618D01*\nX406018Y342600D02*\nY343400D01*\nX406818D01*\nY342600D01*\nX406018D01*\nX352300Y370500D02*\nY372100D01*\nX353900D01*\nY370500D01*\nX352300D01*\nX352700Y370900D02*\nY371700D01*\nX353500D01*\nY370900D01*\nX352700D01*\nX373900Y320600D02*\nY322200D01*\nX375500D01*\nY320600D01*\nX373900D01*\nX374300Y321000D02*\nY321800D01*\nX375100D01*\nY321000D01*\nX374300D01*\nX345200Y344500D02*\nY346100D01*\nX346800D01*\nY344500D01*\nX345200D01*\nX345600Y344900D02*\nY345700D01*\nX346400D01*\nY344900D01*\nX345600D01*\nX371800Y332300D02*\nY333900D01*\nX373400D01*\nY332300D01*\nX371800D01*\nX372200Y332700D02*\nY333500D01*\nX373000D01*\nY332700D01*\nX372200D01*\nX368100Y331600D02*\nY333200D01*\nX369700D01*\nY331600D01*\nX368100D01*\nX368500Y332000D02*\nY332800D01*\nX369300D01*\nY332000D01*\nX368500D01*\nX377100Y325386D02*\nY326986D01*\nX378700D01*\nY325386D01*\nX377100D01*\nX377500Y325786D02*\nY326586D01*\nX378300D01*\nY325786D01*\nX377500D01*\nX371800Y328700D02*\nY330300D01*\nX373400D01*\nY328700D01*\nX371800D01*\nX372200Y329100D02*\nY329900D01*\nX373000D01*\nY329100D01*\nX372200D01*\nX357200Y335800D02*\nY337400D01*\nX358800D01*\nY335800D01*\nX357200D01*\nX357600Y336200D02*\nY337000D01*\nX358400D01*\nY336200D01*\nX357600D01*\nX333800Y360444D02*\nY362044D01*\nX335400D01*\nY360444D01*\nX333800D01*\nX334200Y360844D02*\nY361644D01*\nX335000D01*\nY360844D01*\nX334200D01*\nX320444Y425444D02*\nY427044D01*\nX322044D01*\nY425444D01*\nX320444D01*\nX320844Y425844D02*\nY426644D01*\nX321644D01*\nY425844D01*\nX320844D01*\nX320244Y405744D02*\nY407344D01*\nX321844D01*\nY405744D01*\nX320244D01*\nX320644Y406144D02*\nY406944D01*\nX321444D01*\nY406144D01*\nX320644D01*\nX328444Y425544D02*\nY427144D01*\nX330044D01*\nY425544D01*\nX328444D01*\nX328844Y425944D02*\nY426744D01*\nX329644D01*\nY425944D01*\nX328844D01*\nY405844D02*\nY407444D01*\nX330444D01*\nY405844D01*\nX328844D01*\nX329244Y406244D02*\nY407044D01*\nX330044D01*\nY406244D01*\nX329244D01*\nX351644Y413244D02*\nY414844D01*\nX353244D01*\nY413244D01*\nX351644D01*\nX352044Y413644D02*\nY414444D01*\nX352844D01*\nY413644D01*\nX352044D01*\nX345844Y413244D02*\nY414844D01*\nX347444D01*\nY413244D01*\nX345844D01*\nX346244Y413644D02*\nY414444D01*\nX347044D01*\nY413644D01*\nX346244D01*\nX345944Y440844D02*\nY442444D01*\nX347544D01*\nY440844D01*\nX345944D01*\nX346344Y441244D02*\nY442044D01*\nX347144D01*\nY441244D01*\nX346344D01*\nX346244Y447644D02*\nY449244D01*\nX347844D01*\nY447644D01*\nX346244D01*\nX346644Y448044D02*\nY448844D01*\nX347444D01*\nY448044D01*\nX346644D01*\nX345844Y444144D02*\nY445744D01*\nX347444D01*\nY444144D01*\nX345844D01*\nX346244Y444544D02*\nY445344D01*\nX347044D01*\nY444544D01*\nX346244D01*\nX348744Y413244D02*\nY414844D01*\nX350344D01*\nY413244D01*\nX348744D01*\nX349144Y413644D02*\nY414444D01*\nX349944D01*\nY413644D01*\nX349144D01*\nX359444Y439944D02*\nY441544D01*\nX361044D01*\nY439944D01*\nX359444D01*\nX359844Y440344D02*\nY441144D01*\nX360644D01*\nY440344D01*\nX359844D01*\nX367444Y439944D02*\nY441544D01*\nX369044D01*\nY439944D01*\nX367444D01*\nX367844Y440344D02*\nY441144D01*\nX368644D01*\nY440344D01*\nX367844D01*\nX375444Y443944D02*\nY445544D01*\nX377044D01*\nY443944D01*\nX375444D01*\nX375844Y444344D02*\nY445144D01*\nX376644D01*\nY444344D01*\nX375844D01*\nX355444Y447944D02*\nY449544D01*\nX357044D01*\nY447944D01*\nX355444D01*\nX355844Y448344D02*\nY449144D01*\nX356644D01*\nY448344D01*\nX355844D01*\nX371444Y447944D02*\nY449544D01*\nX373044D01*\nY447944D01*\nX371444D01*\nX371844Y448344D02*\nY449144D01*\nX372644D01*\nY448344D01*\nX371844D01*\nX375444Y447944D02*\nY449544D01*\nX377044D01*\nY447944D01*\nX375444D01*\nX375844Y448344D02*\nY449144D01*\nX376644D01*\nY448344D01*\nX375844D01*\nX379444Y443944D02*\nY445544D01*\nX381044D01*\nY443944D01*\nX379444D01*\nX379844Y444344D02*\nY445144D01*\nX380644D01*\nY444344D01*\nX379844D01*\nX409700Y347609D02*\nY349209D01*\nX411300D01*\nY347609D01*\nX409700D01*\nX410100Y348009D02*\nY348809D01*\nX410900D01*\nY348009D01*\nX410100D01*\nX431400Y341900D02*\nY343500D01*\nX433000D01*\nY341900D01*\nX431400D01*\nX431800Y342300D02*\nY343100D01*\nX432600D01*\nY342300D01*\nX431800D01*\nX423100Y416400D02*\nY418000D01*\nX424700D01*\nY416400D01*\nX423100D01*\nX423500Y416800D02*\nY417600D01*\nX424300D01*\nY416800D01*\nX423500D01*\nX437944Y381900D02*\nY383500D01*\nX439544D01*\nY381900D01*\nX437944D01*\nX438344Y382300D02*\nY383100D01*\nX439144D01*\nY382300D01*\nX438344D01*\nX434300Y369600D02*\nY371200D01*\nX435900D01*\nY369600D01*\nX434300D01*\nX434700Y370000D02*\nY370800D01*\nX435500D01*\nY370000D01*\nX434700D01*\nX428300Y376100D02*\nY377700D01*\nX429900D01*\nY376100D01*\nX428300D01*\nX428700Y376500D02*\nY377300D01*\nX429500D01*\nY376500D01*\nX428700D01*\nX418100Y399900D02*\nY401500D01*\nX419700D01*\nY399900D01*\nX418100D01*\nX418500Y400300D02*\nY401100D01*\nX419300D01*\nY400300D01*\nX418500D01*\nX418100Y365244D02*\nY366844D01*\nX419700D01*\nY365244D01*\nX418100D01*\nX418500Y365644D02*\nY366444D01*\nX419300D01*\nY365644D01*\nX418500D01*\nX413900Y367300D02*\nY368900D01*\nX415500D01*\nY367300D01*\nX413900D01*\nX414300Y367700D02*\nY368500D01*\nX415100D01*\nY367700D01*\nX414300D01*\nX452100Y384400D02*\nY386000D01*\nX453700D01*\nY384400D01*\nX452100D01*\nX452500Y384800D02*\nY385600D01*\nX453300D01*\nY384800D01*\nX452500D01*\nX425100Y352100D02*\nY353700D01*\nX426700D01*\nY352100D01*\nX425100D01*\nX425500Y352500D02*\nY353300D01*\nX426300D01*\nY352500D01*\nX425500D01*\nX424700Y365800D02*\nY367400D01*\nX426300D01*\nY365800D01*\nX424700D01*\nX425100Y366200D02*\nY367000D01*\nX425900D01*\nY366200D01*\nX425100D01*\nX425300Y379900D02*\nY381500D01*\nX426900D01*\nY379900D01*\nX425300D01*\nX425700Y380300D02*\nY381100D01*\nX426500D01*\nY380300D01*\nX425700D01*\nX408100Y339300D02*\nY340900D01*\nX409700D01*\nY339300D01*\nX408100D01*\nX408500Y339700D02*\nY340500D01*\nX409300D01*\nY339700D01*\nX408500D01*\nX409900Y390400D02*\nY392000D01*\nX411500D01*\nY390400D01*\nX409900D01*\nX410300Y390800D02*\nY391600D01*\nX411100D01*\nY390800D01*\nX410300D01*\nX413900Y371400D02*\nY373000D01*\nX415500D01*\nY371400D01*\nX413900D01*\nX414300Y371800D02*\nY372600D01*\nX415100D01*\nY371800D01*\nX414300D01*\nX445900Y361000D02*\nY362600D01*\nX447500D01*\nY361000D01*\nX445900D01*\nX446300Y361400D02*\nY362200D01*\nX447100D01*\nY361400D01*\nX446300D01*\nX354444Y381444D02*\nY383044D01*\nX356044D01*\nY381444D01*\nX354444D01*\nX354844Y381844D02*\nY382644D01*\nX355644D01*\nY381844D01*\nX354844D01*\nX338287Y381944D02*\nY383544D01*\nX339887D01*\nY381944D01*\nX338287D01*\nX338687Y382344D02*\nY383144D01*\nX339487D01*\nY382344D01*\nX338687D01*\nX391944Y364944D02*\nY366544D01*\nX393544D01*\nY364944D01*\nX391944D01*\nX392344Y365344D02*\nY366144D01*\nX393144D01*\nY365344D01*\nX392344D01*\nX399444Y368944D02*\nY370544D01*\nX401044D01*\nY368944D01*\nX399444D01*\nX399844Y369344D02*\nY370144D01*\nX400644D01*\nY369344D01*\nX399844D01*\nX400944Y364444D02*\nY366044D01*\nX402544D01*\nY364444D01*\nX400944D01*\nX401344Y364844D02*\nY365644D01*\nX402144D01*\nY364844D01*\nX401344D01*\nX396944Y366444D02*\nY368044D01*\nX398544D01*\nY366444D01*\nX396944D01*\nX397344Y366844D02*\nY367644D01*\nX398144D01*\nY366844D01*\nX397344D01*\nX396944Y329444D02*\nY331044D01*\nX398544D01*\nY329444D01*\nX396944D01*\nX397344Y329844D02*\nY330644D01*\nX398144D01*\nY329844D01*\nX397344D01*\nX401500Y331030D02*\nY332630D01*\nX403100D01*\nY331030D01*\nX401500D01*\nX401900Y331430D02*\nY332230D01*\nX402700D01*\nY331430D01*\nX401900D01*\nX399400Y336444D02*\nY338044D01*\nX401000D01*\nY336444D01*\nX399400D01*\nX399800Y336844D02*\nY337644D01*\nX400600D01*\nY336844D01*\nX399800D01*\nX386944Y367944D02*\nY369544D01*\nX388544D01*\nY367944D01*\nX386944D01*\nX387344Y368344D02*\nY369144D01*\nX388144D01*\nY368344D01*\nX387344D01*\nX382944Y357444D02*\nY359044D01*\nX384544D01*\nY357444D01*\nX382944D01*\nX383344Y357844D02*\nY358644D01*\nX384144D01*\nY357844D01*\nX383344D01*\nX403600Y406444D02*\nY408044D01*\nX405200D01*\nY406444D01*\nX403600D01*\nX404000Y406844D02*\nY407644D01*\nX404800D01*\nY406844D01*\nX404000D01*\nX382944Y369444D02*\nY371044D01*\nX384544D01*\nY369444D01*\nX382944D01*\nX383344Y369844D02*\nY370644D01*\nX384144D01*\nY369844D01*\nX383344D01*\nX378944Y367444D02*\nY369044D01*\nX380544D01*\nY367444D01*\nX378944D01*\nX379344Y367844D02*\nY368644D01*\nX380144D01*\nY367844D01*\nX379344D01*\nX362444Y366444D02*\nY368044D01*\nX364044D01*\nY366444D01*\nX362444D01*\nX362844Y366844D02*\nY367644D01*\nX363644D01*\nY366844D01*\nX362844D01*\nX366444Y360444D02*\nY362044D01*\nX368044D01*\nY360444D01*\nX366444D01*\nX366844Y360844D02*\nY361644D01*\nX367644D01*\nY360844D01*\nX366844D01*\nX357944Y379944D02*\nY381544D01*\nX359544D01*\nY379944D01*\nX357944D01*\nX358344Y380344D02*\nY381144D01*\nX359144D01*\nY380344D01*\nX358344D01*\nX381600Y344444D02*\nY346044D01*\nX383200D01*\nY344444D01*\nX381600D01*\nX382000Y344844D02*\nY345644D01*\nX382800D01*\nY344844D01*\nX382000D01*\nX368944Y364444D02*\nY366044D01*\nX370544D01*\nY364444D01*\nX368944D01*\nX369344Y364844D02*\nY365644D01*\nX370144D01*\nY364844D01*\nX369344D01*\nX392444Y327944D02*\nY329544D01*\nX394044D01*\nY327944D01*\nX392444D01*\nX392844Y328344D02*\nY329144D01*\nX393644D01*\nY328344D01*\nX392844D01*\nX393944Y321444D02*\nY323044D01*\nX395544D01*\nY321444D01*\nX393944D01*\nX394344Y321844D02*\nY322644D01*\nX395144D01*\nY321844D01*\nX394344D01*\nX421818Y327944D02*\nY329544D01*\nX423418D01*\nY327944D01*\nX421818D01*\nX422218Y328344D02*\nY329144D01*\nX423018D01*\nY328344D01*\nX422218D01*\nX394444Y422444D02*\nY424044D01*\nX396044D01*\nY422444D01*\nX394444D01*\nX394844Y422844D02*\nY423644D01*\nX395644D01*\nY422844D01*\nX394844D01*\nX380444Y418944D02*\nY420544D01*\nX382044D01*\nY418944D01*\nX380444D01*\nX380844Y419344D02*\nY420144D01*\nX381644D01*\nY419344D01*\nX380844D01*\nX381444Y415444D02*\nY417044D01*\nX383044D01*\nY415444D01*\nX381444D01*\nX381844Y415844D02*\nY416644D01*\nX382644D01*\nY415844D01*\nX381844D01*\nX378944Y422444D02*\nY424044D01*\nX380544D01*\nY422444D01*\nX378944D01*\nX379344Y422844D02*\nY423644D01*\nX380144D01*\nY422844D01*\nX379344D01*\nX380444Y408444D02*\nY410044D01*\nX382044D01*\nY408444D01*\nX380444D01*\nX380844Y408844D02*\nY409644D01*\nX381644D01*\nY408844D01*\nX380844D01*\nX377944Y413444D02*\nY415044D01*\nX379544D01*\nY413444D01*\nX377944D01*\nX378344Y413844D02*\nY414644D01*\nX379144D01*\nY413844D01*\nX378344D01*\nX369444Y405100D02*\nY406700D01*\nX371044D01*\nY405100D01*\nX369444D01*\nX369844Y405500D02*\nY406300D01*\nX370644D01*\nY405500D01*\nX369844D01*\nX411444Y417444D02*\nY419044D01*\nX413044D01*\nY417444D01*\nX411444D01*\nX411844Y417844D02*\nY418644D01*\nX412644D01*\nY417844D01*\nX411844D01*\nX434444Y394444D02*\nY396044D01*\nX436044D01*\nY394444D01*\nX434444D01*\nX434844Y394844D02*\nY395644D01*\nX435644D01*\nY394844D01*\nX434844D01*\nX413944Y381944D02*\nY383544D01*\nX415544D01*\nY381944D01*\nX413944D01*\nX414344Y382344D02*\nY383144D01*\nX415144D01*\nY382344D01*\nX414344D01*\nX377744Y379088D02*\nY380689D01*\nX379344D01*\nY379088D01*\nX377744D01*\nX378144Y379488D02*\nY380289D01*\nX378944D01*\nY379488D01*\nX378144D01*\nX320444Y411444D02*\nY413044D01*\nX322044D01*\nY411444D01*\nX320444D01*\nX320844Y411844D02*\nY412644D01*\nX321644D01*\nY411844D01*\nX320844D01*\nX329444Y411444D02*\nY413044D01*\nX331044D01*\nY411444D01*\nX329444D01*\nX329844Y411844D02*\nY412644D01*\nX330644D01*\nY411844D01*\nX329844D01*\nX320444Y430444D02*\nY432044D01*\nX322044D01*\nY430444D01*\nX320444D01*\nX320844Y430844D02*\nY431644D01*\nX321644D01*\nY430844D01*\nX320844D01*\nX361944Y435944D02*\nY437544D01*\nX363544D01*\nY435944D01*\nX361944D01*\nX362344Y436344D02*\nY437144D01*\nX363144D01*\nY436344D01*\nX362344D01*\nX359444Y447944D02*\nY449544D01*\nX361044D01*\nY447944D01*\nX359444D01*\nX359844Y448344D02*\nY449144D01*\nX360644D01*\nY448344D01*\nX359844D01*\nX363444Y443944D02*\nY445544D01*\nX365044D01*\nY443944D01*\nX363444D01*\nX363844Y444344D02*\nY445144D01*\nX364644D01*\nY444344D01*\nX363844D01*\nX355944Y415944D02*\nY417544D01*\nX357544D01*\nY415944D01*\nX355944D01*\nX356344Y416344D02*\nY417144D01*\nX357144D01*\nY416344D01*\nX356344D01*\nX365444Y415850D02*\nY417450D01*\nX367044D01*\nY415850D01*\nX365444D01*\nX365844Y416250D02*\nY417050D01*\nX366644D01*\nY416250D01*\nX365844D01*\nX367444Y413444D02*\nY415044D01*\nX369044D01*\nY413444D01*\nX367444D01*\nX367844Y413844D02*\nY414644D01*\nX368644D01*\nY413844D01*\nX367844D01*\nX367444Y409944D02*\nY411544D01*\nX369044D01*\nY409944D01*\nX367444D01*\nX367844Y410344D02*\nY411144D01*\nX368644D01*\nY410344D01*\nX367844D01*\nX362944Y409944D02*\nY411544D01*\nX364544D01*\nY409944D01*\nX362944D01*\nX363344Y410344D02*\nY411144D01*\nX364144D01*\nY410344D01*\nX363344D01*\nX362944Y404444D02*\nY406044D01*\nX364544D01*\nY404444D01*\nX362944D01*\nX363344Y404844D02*\nY405644D01*\nX364144D01*\nY404844D01*\nX363344D01*\nX371444Y439944D02*\nY441544D01*\nX373044D01*\nY439944D01*\nX371444D01*\nX371844Y440344D02*\nY441144D01*\nX372644D01*\nY440344D01*\nX371844D01*\nX357944Y413444D02*\nY415044D01*\nX359544D01*\nY413444D01*\nX357944D01*\nX358344Y413844D02*\nY414644D01*\nX359144D01*\nY413844D01*\nX358344D01*\nX362944Y413444D02*\nY415044D01*\nX364544D01*\nY413444D01*\nX362944D01*\nX363344Y413844D02*\nY414644D01*\nX364144D01*\nY413844D01*\nX363344D01*\nX364944Y406944D02*\nY408544D01*\nX366544D01*\nY406944D01*\nX364944D01*\nX365344Y407344D02*\nY408144D01*\nX366144D01*\nY407344D01*\nX365344D01*\nX351944Y404444D02*\nY406044D01*\nX353544D01*\nY404444D01*\nX351944D01*\nX352344Y404844D02*\nY405644D01*\nX353144D01*\nY404844D01*\nX352344D01*\nX347944Y404444D02*\nY406044D01*\nX349544D01*\nY404444D01*\nX347944D01*\nX348344Y404844D02*\nY405644D01*\nX349144D01*\nY404844D01*\nX348344D01*\nX360944Y400444D02*\nY402044D01*\nX362544D01*\nY400444D01*\nX360944D01*\nX361344Y400844D02*\nY401644D01*\nX362144D01*\nY400844D01*\nX361344D01*\nX319944Y396444D02*\nY398044D01*\nX321544D01*\nY396444D01*\nX319944D01*\nX320344Y396844D02*\nY397644D01*\nX321144D01*\nY396844D01*\nX320344D01*\nX315444Y439444D02*\nY441044D01*\nX317044D01*\nY439444D01*\nX315444D01*\nX315844Y439844D02*\nY440644D01*\nX316644D01*\nY439844D01*\nX315844D01*\nX315444Y448444D02*\nY450044D01*\nX317044D01*\nY448444D01*\nX315444D01*\nX315844Y448844D02*\nY449644D01*\nX316644D01*\nY448844D01*\nX315844D01*\nX314944Y456444D02*\nY458044D01*\nX316544D01*\nY456444D01*\nX314944D01*\nX315344Y456844D02*\nY457644D01*\nX316144D01*\nY456844D01*\nX315344D01*\nX322944Y462944D02*\nY464544D01*\nX324544D01*\nY462944D01*\nX322944D01*\nX323344Y463344D02*\nY464144D01*\nX324144D01*\nY463344D01*\nX323344D01*\nX329944Y462944D02*\nY464544D01*\nX331544D01*\nY462944D01*\nX329944D01*\nX330344Y463344D02*\nY464144D01*\nX331144D01*\nY463344D01*\nX330344D01*\nX337944Y462444D02*\nY464044D01*\nX339544D01*\nY462444D01*\nX337944D01*\nX338344Y462844D02*\nY463644D01*\nX339144D01*\nY462844D01*\nX338344D01*\nX338944Y441444D02*\nY443044D01*\nX340544D01*\nY441444D01*\nX338944D01*\nX339344Y441844D02*\nY442644D01*\nX340144D01*\nY441844D01*\nX339344D01*\nX326944Y396444D02*\nY398044D01*\nX328544D01*\nY396444D01*\nX326944D01*\nX327344Y396844D02*\nY397644D01*\nX328144D01*\nY396844D01*\nX327344D01*\nX330944Y307944D02*\nY309544D01*\nX332544D01*\nY307944D01*\nX330944D01*\nX331344Y308344D02*\nY309144D01*\nX332144D01*\nY308344D01*\nX331344D01*\nX385944Y308145D02*\nY309745D01*\nX387544D01*\nY308145D01*\nX385944D01*\nX386344Y308545D02*\nY309345D01*\nX387144D01*\nY308545D01*\nX386344D01*\nX447944Y349544D02*\nY351144D01*\nX449544D01*\nY349544D01*\nX447944D01*\nX448344Y349944D02*\nY350744D01*\nX449144D01*\nY349944D01*\nX448344D01*\nX421944Y308145D02*\nY309745D01*\nX423544D01*\nY308145D01*\nX421944D01*\nX422344Y308545D02*\nY309345D01*\nX423144D01*\nY308545D01*\nX422344D01*\nX400944Y357444D02*\nY359044D01*\nX402544D01*\nY357444D01*\nX400944D01*\nX401344Y357844D02*\nY358644D01*\nX402144D01*\nY357844D01*\nX401344D01*\nX405444Y370444D02*\nY372044D01*\nX407044D01*\nY370444D01*\nX405444D01*\nX405844Y370844D02*\nY371644D01*\nX406644D01*\nY370844D01*\nX405844D01*\nX437944Y313444D02*\nY315044D01*\nX439544D01*\nY313444D01*\nX437944D01*\nX438344Y313844D02*\nY314644D01*\nX439144D01*\nY313844D01*\nX438344D01*\nX438444Y336444D02*\nY338044D01*\nX440044D01*\nY336444D01*\nX438444D01*\nX438844Y336844D02*\nY337644D01*\nX439644D01*\nY336844D01*\nX438844D01*\nX350944Y329944D02*\nY331544D01*\nX352544D01*\nY329944D01*\nX350944D01*\nX351344Y330344D02*\nY331144D01*\nX352144D01*\nY330344D01*\nX351344D01*\nD121*\nX148544Y146744D02*\nG03*\nX148544Y146744I-800J0D01*\nG01*\nX270591D02*\nG03*\nX270591Y146744I-800J0D01*\nG01*\nY268791D02*\nG03*\nX270591Y268791I-800J0D01*\nG01*\nX148544D02*\nG03*\nX148544Y268791I-800J0D01*\nG01*\nX177813Y250875D02*\nG03*\nX177813Y250875I-800J0D01*\nG01*\nX182144D02*\nG03*\nX182144Y250875I-800J0D01*\nG01*\nX186475D02*\nG03*\nX186475Y250875I-800J0D01*\nG01*\nX177813Y246544D02*\nG03*\nX177813Y246544I-800J0D01*\nG01*\nX182144D02*\nG03*\nX182144Y246544I-800J0D01*\nG01*\nX186475D02*\nG03*\nX186475Y246544I-800J0D01*\nG01*\nX177813Y242213D02*\nG03*\nX177813Y242213I-800J0D01*\nG01*\nX182144D02*\nG03*\nX182144Y242213I-800J0D01*\nG01*\nX186475D02*\nG03*\nX186475Y242213I-800J0D01*\nG01*\nX328544Y146744D02*\nG03*\nX328544Y146744I-800J0D01*\nG01*\nX450591D02*\nG03*\nX450591Y146744I-800J0D01*\nG01*\nY268791D02*\nG03*\nX450591Y268791I-800J0D01*\nG01*\nX328544D02*\nG03*\nX328544Y268791I-800J0D01*\nG01*\nX357813Y250875D02*\nG03*\nX357813Y250875I-800J0D01*\nG01*\nX362144D02*\nG03*\nX362144Y250875I-800J0D01*\nG01*\nX366475D02*\nG03*\nX366475Y250875I-800J0D01*\nG01*\nX357813Y246544D02*\nG03*\nX357813Y246544I-800J0D01*\nG01*\nX362144D02*\nG03*\nX362144Y246544I-800J0D01*\nG01*\nX366475D02*\nG03*\nX366475Y246544I-800J0D01*\nG01*\nX357813Y242213D02*\nG03*\nX357813Y242213I-800J0D01*\nG01*\nX362144D02*\nG03*\nX362144Y242213I-800J0D01*\nG01*\nX366475D02*\nG03*\nX366475Y242213I-800J0D01*\nG01*\nX148544Y326744D02*\nG03*\nX148544Y326744I-800J0D01*\nG01*\nX270591D02*\nG03*\nX270591Y326744I-800J0D01*\nG01*\nY448791D02*\nG03*\nX270591Y448791I-800J0D01*\nG01*\nX148544D02*\nG03*\nX148544Y448791I-800J0D01*\nG01*\nX177813Y430875D02*\nG03*\nX177813Y430875I-800J0D01*\nG01*\nX182144D02*\nG03*\nX182144Y430875I-800J0D01*\nG01*\nX186475D02*\nG03*\nX186475Y430875I-800J0D01*\nG01*\nX177813Y426544D02*\nG03*\nX177813Y426544I-800J0D01*\nG01*\nX182144D02*\nG03*\nX182144Y426544I-800J0D01*\nG01*\nX186475D02*\nG03*\nX186475Y426544I-800J0D01*\nG01*\nX177813Y422213D02*\nG03*\nX177813Y422213I-800J0D01*\nG01*\nX182144D02*\nG03*\nX182144Y422213I-800J0D01*\nG01*\nX186475D02*\nG03*\nX186475Y422213I-800J0D01*\nG01*\nX328544Y326744D02*\nG03*\nX328544Y326744I-800J0D01*\nG01*\nX450591D02*\nG03*\nX450591Y326744I-800J0D01*\nG01*\nY448791D02*\nG03*\nX450591Y448791I-800J0D01*\nG01*\nX328544D02*\nG03*\nX328544Y448791I-800J0D01*\nG01*\nX357813Y430875D02*\nG03*\nX357813Y430875I-800J0D01*\nG01*\nX362144D02*\nG03*\nX362144Y430875I-800J0D01*\nG01*\nX366475D02*\nG03*\nX366475Y430875I-800J0D01*\nG01*\nX357813Y426544D02*\nG03*\nX357813Y426544I-800J0D01*\nG01*\nX362144D02*\nG03*\nX362144Y426544I-800J0D01*\nG01*\nX366475D02*\nG03*\nX366475Y426544I-800J0D01*\nG01*\nX357813Y422213D02*\nG03*\nX357813Y422213I-800J0D01*\nG01*\nX362144D02*\nG03*\nX362144Y422213I-800J0D01*\nG01*\nX366475D02*\nG03*\nX366475Y422213I-800J0D01*\nG01*\nD122*\nX177413Y250875D02*\nG03*\nX177413Y250875I-400J0D01*\nG01*\nX181744D02*\nG03*\nX181744Y250875I-400J0D01*\nG01*\nX186075D02*\nG03*\nX186075Y250875I-400J0D01*\nG01*\nX177413Y246544D02*\nG03*\nX177413Y246544I-400J0D01*\nG01*\nX181744D02*\nG03*\nX181744Y246544I-400J0D01*\nG01*\nX186075D02*\nG03*\nX186075Y246544I-400J0D01*\nG01*\nX177413Y242213D02*\nG03*\nX177413Y242213I-400J0D01*\nG01*\nX181744D02*\nG03*\nX181744Y242213I-400J0D01*\nG01*\nX186075D02*\nG03*\nX186075Y242213I-400J0D01*\nG01*\nX357413Y250875D02*\nG03*\nX357413Y250875I-400J0D01*\nG01*\nX361744D02*\nG03*\nX361744Y250875I-400J0D01*\nG01*\nX366075D02*\nG03*\nX366075Y250875I-400J0D01*\nG01*\nX357413Y246544D02*\nG03*\nX357413Y246544I-400J0D01*\nG01*\nX361744D02*\nG03*\nX361744Y246544I-400J0D01*\nG01*\nX366075D02*\nG03*\nX366075Y246544I-400J0D01*\nG01*\nX357413Y242213D02*\nG03*\nX357413Y242213I-400J0D01*\nG01*\nX361744D02*\nG03*\nX361744Y242213I-400J0D01*\nG01*\nX366075D02*\nG03*\nX366075Y242213I-400J0D01*\nG01*\nX177413Y430875D02*\nG03*\nX177413Y430875I-400J0D01*\nG01*\nX181744D02*\nG03*\nX181744Y430875I-400J0D01*\nG01*\nX186075D02*\nG03*\nX186075Y430875I-400J0D01*\nG01*\nX177413Y426544D02*\nG03*\nX177413Y426544I-400J0D01*\nG01*\nX181744D02*\nG03*\nX181744Y426544I-400J0D01*\nG01*\nX186075D02*\nG03*\nX186075Y426544I-400J0D01*\nG01*\nX177413Y422213D02*\nG03*\nX177413Y422213I-400J0D01*\nG01*\nX181744D02*\nG03*\nX181744Y422213I-400J0D01*\nG01*\nX186075D02*\nG03*\nX186075Y422213I-400J0D01*\nG01*\nX357413Y430875D02*\nG03*\nX357413Y430875I-400J0D01*\nG01*\nX361744D02*\nG03*\nX361744Y430875I-400J0D01*\nG01*\nX366075D02*\nG03*\nX366075Y430875I-400J0D01*\nG01*\nX357413Y426544D02*\nG03*\nX357413Y426544I-400J0D01*\nG01*\nX361744D02*\nG03*\nX361744Y426544I-400J0D01*\nG01*\nX366075D02*\nG03*\nX366075Y426544I-400J0D01*\nG01*\nX357413Y422213D02*\nG03*\nX357413Y422213I-400J0D01*\nG01*\nX361744D02*\nG03*\nX361744Y422213I-400J0D01*\nG01*\nX366075D02*\nG03*\nX366075Y422213I-400J0D01*\nG01*\nM02*\n"
  },
  {
    "path": "hardware/panel.GKO",
    "content": "G04 Layer_Color=16711935*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD38C,0.00600*%\n%ADD45C,0.01000*%\nD38*\nX187583Y307201D02*\nX189583D01*\nX188583D01*\nY313199D01*\nX187583Y312199D01*\nX196580Y313199D02*\nX194581Y312199D01*\nX192582Y310200D01*\nY308201D01*\nX193581Y307201D01*\nX195581D01*\nX196580Y308201D01*\nY309200D01*\nX195581Y310200D01*\nX192582D01*\nX202578Y313199D02*\nX198580D01*\nY310200D01*\nX200579Y311200D01*\nX201579D01*\nX202578Y310200D01*\nY308201D01*\nX201579Y307201D01*\nX199580D01*\nX198580Y308201D01*\nX204578Y312199D02*\nX205577Y313199D01*\nX207577D01*\nX208576Y312199D01*\nY311200D01*\nX207577Y310200D01*\nX206577D01*\nX207577D01*\nX208576Y309200D01*\nY308201D01*\nX207577Y307201D01*\nX205577D01*\nX204578Y308201D01*\nX210576Y307201D02*\nY308201D01*\nX211576D01*\nY307201D01*\nX210576D01*\nX219573Y313199D02*\nX215574D01*\nY310200D01*\nX217574Y311200D01*\nX218573D01*\nX219573Y310200D01*\nY308201D01*\nX218573Y307201D01*\nX216574D01*\nX215574Y308201D01*\nX224571Y307201D02*\nY313199D01*\nX221572Y310200D01*\nX225571D01*\nX317399Y186583D02*\nY188583D01*\nY187583D01*\nX311401D01*\nX312401Y186583D01*\nX311401Y195580D02*\nX312401Y193581D01*\nX314400Y191582D01*\nX316399D01*\nX317399Y192581D01*\nY194581D01*\nX316399Y195580D01*\nX315400D01*\nX314400Y194581D01*\nY191582D01*\nX311401Y201578D02*\nY197580D01*\nX314400D01*\nX313400Y199579D01*\nY200579D01*\nX314400Y201578D01*\nX316399D01*\nX317399Y200579D01*\nY198580D01*\nX316399Y197580D01*\nX312401Y203578D02*\nX311401Y204577D01*\nY206577D01*\nX312401Y207576D01*\nX313400D01*\nX314400Y206577D01*\nY205577D01*\nY206577D01*\nX315400Y207576D01*\nX316399D01*\nX317399Y206577D01*\nY204577D01*\nX316399Y203578D01*\nX317399Y209576D02*\nX316399D01*\nY210576D01*\nX317399D01*\nY209576D01*\nX311401Y218573D02*\nY214574D01*\nX314400D01*\nX313400Y216574D01*\nY217573D01*\nX314400Y218573D01*\nX316399D01*\nX317399Y217573D01*\nY215574D01*\nX316399Y214574D01*\nX317399Y223571D02*\nX311401D01*\nX314400Y220572D01*\nY224571D01*\nX367583Y307201D02*\nX369583D01*\nX368583D01*\nY313199D01*\nX367583Y312199D01*\nX376580Y313199D02*\nX374581Y312199D01*\nX372582Y310200D01*\nY308201D01*\nX373581Y307201D01*\nX375581D01*\nX376580Y308201D01*\nY309200D01*\nX375581Y310200D01*\nX372582D01*\nX382578Y313199D02*\nX378580D01*\nY310200D01*\nX380579Y311200D01*\nX381579D01*\nX382578Y310200D01*\nY308201D01*\nX381579Y307201D01*\nX379579D01*\nX378580Y308201D01*\nX384578Y312199D02*\nX385578Y313199D01*\nX387577D01*\nX388577Y312199D01*\nY311200D01*\nX387577Y310200D01*\nX386577D01*\nX387577D01*\nX388577Y309200D01*\nY308201D01*\nX387577Y307201D01*\nX385578D01*\nX384578Y308201D01*\nX390576Y307201D02*\nY308201D01*\nX391576D01*\nY307201D01*\nX390576D01*\nX399573Y313199D02*\nX395574D01*\nY310200D01*\nX397574Y311200D01*\nX398573D01*\nX399573Y310200D01*\nY308201D01*\nX398573Y307201D01*\nX396574D01*\nX395574Y308201D01*\nX404571Y307201D02*\nY313199D01*\nX401572Y310200D01*\nX405571D01*\nX497399Y186583D02*\nY188583D01*\nY187583D01*\nX491401D01*\nX492401Y186583D01*\nX491401Y195580D02*\nX492401Y193581D01*\nX494400Y191582D01*\nX496399D01*\nX497399Y192581D01*\nY194581D01*\nX496399Y195580D01*\nX495400D01*\nX494400Y194581D01*\nY191582D01*\nX491401Y201578D02*\nY197580D01*\nX494400D01*\nX493400Y199579D01*\nY200579D01*\nX494400Y201578D01*\nX496399D01*\nX497399Y200579D01*\nY198580D01*\nX496399Y197580D01*\nX492401Y203578D02*\nX491401Y204577D01*\nY206577D01*\nX492401Y207576D01*\nX493400D01*\nX494400Y206577D01*\nY205577D01*\nY206577D01*\nX495400Y207576D01*\nX496399D01*\nX497399Y206577D01*\nY204577D01*\nX496399Y203578D01*\nX497399Y209576D02*\nX496399D01*\nY210576D01*\nX497399D01*\nY209576D01*\nX491401Y218573D02*\nY214574D01*\nX494400D01*\nX493400Y216574D01*\nY217573D01*\nX494400Y218573D01*\nX496399D01*\nX497399Y217573D01*\nY215574D01*\nX496399Y214574D01*\nX497399Y223571D02*\nX491401D01*\nX494400Y220572D01*\nY224571D01*\nX187583Y487201D02*\nX189583D01*\nX188583D01*\nY493199D01*\nX187583Y492199D01*\nX196580Y493199D02*\nX194581Y492199D01*\nX192582Y490200D01*\nY488201D01*\nX193581Y487201D01*\nX195581D01*\nX196580Y488201D01*\nY489200D01*\nX195581Y490200D01*\nX192582D01*\nX202578Y493199D02*\nX198580D01*\nY490200D01*\nX200579Y491200D01*\nX201579D01*\nX202578Y490200D01*\nY488201D01*\nX201579Y487201D01*\nX199580D01*\nX198580Y488201D01*\nX204578Y492199D02*\nX205577Y493199D01*\nX207577D01*\nX208576Y492199D01*\nY491200D01*\nX207577Y490200D01*\nX206577D01*\nX207577D01*\nX208576Y489200D01*\nY488201D01*\nX207577Y487201D01*\nX205577D01*\nX204578Y488201D01*\nX210576Y487201D02*\nY488201D01*\nX211576D01*\nY487201D01*\nX210576D01*\nX219573Y493199D02*\nX215574D01*\nY490200D01*\nX217574Y491200D01*\nX218573D01*\nX219573Y490200D01*\nY488201D01*\nX218573Y487201D01*\nX216574D01*\nX215574Y488201D01*\nX224571Y487201D02*\nY493199D01*\nX221572Y490200D01*\nX225571D01*\nX317399Y366583D02*\nY368583D01*\nY367583D01*\nX311401D01*\nX312401Y366583D01*\nX311401Y375580D02*\nX312401Y373581D01*\nX314400Y371582D01*\nX316399D01*\nX317399Y372581D01*\nY374581D01*\nX316399Y375580D01*\nX315400D01*\nX314400Y374581D01*\nY371582D01*\nX311401Y381578D02*\nY377580D01*\nX314400D01*\nX313400Y379579D01*\nY380579D01*\nX314400Y381578D01*\nX316399D01*\nX317399Y380579D01*\nY378579D01*\nX316399Y377580D01*\nX312401Y383578D02*\nX311401Y384577D01*\nY386577D01*\nX312401Y387577D01*\nX313400D01*\nX314400Y386577D01*\nY385577D01*\nY386577D01*\nX315400Y387577D01*\nX316399D01*\nX317399Y386577D01*\nY384577D01*\nX316399Y383578D01*\nX317399Y389576D02*\nX316399D01*\nY390576D01*\nX317399D01*\nY389576D01*\nX311401Y398573D02*\nY394574D01*\nX314400D01*\nX313400Y396574D01*\nY397573D01*\nX314400Y398573D01*\nX316399D01*\nX317399Y397573D01*\nY395574D01*\nX316399Y394574D01*\nX317399Y403571D02*\nX311401D01*\nX314400Y400572D01*\nY404571D01*\nX367583Y487201D02*\nX369583D01*\nX368583D01*\nY493199D01*\nX367583Y492199D01*\nX376580Y493199D02*\nX374581Y492199D01*\nX372582Y490200D01*\nY488201D01*\nX373581Y487201D01*\nX375581D01*\nX376580Y488201D01*\nY489200D01*\nX375581Y490200D01*\nX372582D01*\nX382578Y493199D02*\nX378580D01*\nY490200D01*\nX380579Y491200D01*\nX381579D01*\nX382578Y490200D01*\nY488201D01*\nX381579Y487201D01*\nX379579D01*\nX378580Y488201D01*\nX384578Y492199D02*\nX385578Y493199D01*\nX387577D01*\nX388577Y492199D01*\nY491200D01*\nX387577Y490200D01*\nX386577D01*\nX387577D01*\nX388577Y489200D01*\nY488201D01*\nX387577Y487201D01*\nX385578D01*\nX384578Y488201D01*\nX390576Y487201D02*\nY488201D01*\nX391576D01*\nY487201D01*\nX390576D01*\nX399573Y493199D02*\nX395574D01*\nY490200D01*\nX397574Y491200D01*\nX398573D01*\nX399573Y490200D01*\nY488201D01*\nX398573Y487201D01*\nX396574D01*\nX395574Y488201D01*\nX404571Y487201D02*\nY493199D01*\nX401572Y490200D01*\nX405571D01*\nX497399Y366583D02*\nY368583D01*\nY367583D01*\nX491401D01*\nX492401Y366583D01*\nX491401Y375580D02*\nX492401Y373581D01*\nX494400Y371582D01*\nX496399D01*\nX497399Y372581D01*\nY374581D01*\nX496399Y375580D01*\nX495400D01*\nX494400Y374581D01*\nY371582D01*\nX491401Y381578D02*\nY377580D01*\nX494400D01*\nX493400Y379579D01*\nY380579D01*\nX494400Y381578D01*\nX496399D01*\nX497399Y380579D01*\nY378579D01*\nX496399Y377580D01*\nX492401Y383578D02*\nX491401Y384577D01*\nY386577D01*\nX492401Y387577D01*\nX493400D01*\nX494400Y386577D01*\nY385577D01*\nY386577D01*\nX495400Y387577D01*\nX496399D01*\nX497399Y386577D01*\nY384577D01*\nX496399Y383578D01*\nX497399Y389576D02*\nX496399D01*\nY390576D01*\nX497399D01*\nY389576D01*\nX491401Y398573D02*\nY394574D01*\nX494400D01*\nX493400Y396574D01*\nY397573D01*\nX494400Y398573D01*\nX496399D01*\nX497399Y397573D01*\nY395574D01*\nX496399Y394574D01*\nX497399Y403571D02*\nX491401D01*\nX494400Y400572D01*\nY404571D01*\nD45*\nX290854Y281246D02*\nY311800D01*\nX125500Y281700D02*\nY311800D01*\nX227171Y310800D02*\nX290854D01*\nX125500D02*\nX185983D01*\nX284854Y312800D02*\nX290854Y310800D01*\nX284854Y308800D02*\nX290854Y310800D01*\nX125500D02*\nX131500Y308800D01*\nX125500Y310800D02*\nX131500Y312800D01*\nX282600Y124500D02*\nX314800D01*\nX282246Y289854D02*\nX314800D01*\nX313800Y124500D02*\nY184983D01*\nY226171D02*\nY289854D01*\nY124500D02*\nX315800Y130500D01*\nX311800D02*\nX313800Y124500D01*\nX311800Y283854D02*\nX313800Y289854D01*\nX315800Y283854D01*\nX135154Y289854D02*\nX280746D01*\nX125500Y280200D02*\nX135154Y289854D01*\nX125500Y133700D02*\nY280200D01*\nX134700Y124500D02*\nX281100D01*\nX125500Y133700D02*\nX134700Y124500D01*\nX281100D02*\nX290854Y134254D01*\nY279746D01*\nX280746Y289854D02*\nX290854Y279746D01*\nX470854Y281246D02*\nY311800D01*\nX305500Y281700D02*\nY311800D01*\nX407171Y310800D02*\nX470854D01*\nX305500D02*\nX365983D01*\nX464854Y312800D02*\nX470854Y310800D01*\nX464854Y308800D02*\nX470854Y310800D01*\nX305500D02*\nX311500Y308800D01*\nX305500Y310800D02*\nX311500Y312800D01*\nX462600Y124500D02*\nX494800D01*\nX462246Y289854D02*\nX494800D01*\nX493800Y124500D02*\nY184983D01*\nY226171D02*\nY289854D01*\nY124500D02*\nX495800Y130500D01*\nX491800D02*\nX493800Y124500D01*\nX491800Y283854D02*\nX493800Y289854D01*\nX495800Y283854D01*\nX315154Y289854D02*\nX460746D01*\nX305500Y280200D02*\nX315154Y289854D01*\nX305500Y133700D02*\nY280200D01*\nX314700Y124500D02*\nX461100D01*\nX305500Y133700D02*\nX314700Y124500D01*\nX461100D02*\nX470854Y134254D01*\nY279746D01*\nX460746Y289854D02*\nX470854Y279746D01*\nX290854Y461246D02*\nY491800D01*\nX125500Y461700D02*\nY491800D01*\nX227171Y490800D02*\nX290854D01*\nX125500D02*\nX185983D01*\nX284854Y492800D02*\nX290854Y490800D01*\nX284854Y488800D02*\nX290854Y490800D01*\nX125500D02*\nX131500Y488800D01*\nX125500Y490800D02*\nX131500Y492800D01*\nX282600Y304500D02*\nX314800D01*\nX282246Y469854D02*\nX314800D01*\nX313800Y304500D02*\nY364983D01*\nY406171D02*\nY469854D01*\nY304500D02*\nX315800Y310500D01*\nX311800D02*\nX313800Y304500D01*\nX311800Y463854D02*\nX313800Y469854D01*\nX315800Y463854D01*\nX135154Y469854D02*\nX280746D01*\nX125500Y460200D02*\nX135154Y469854D01*\nX125500Y313700D02*\nY460200D01*\nX134700Y304500D02*\nX281100D01*\nX125500Y313700D02*\nX134700Y304500D01*\nX281100D02*\nX290854Y314254D01*\nY459746D01*\nX280746Y469854D02*\nX290854Y459746D01*\nX470854Y461246D02*\nY491800D01*\nX305500Y461700D02*\nY491800D01*\nX407171Y490800D02*\nX470854D01*\nX305500D02*\nX365983D01*\nX464854Y492800D02*\nX470854Y490800D01*\nX464854Y488800D02*\nX470854Y490800D01*\nX305500D02*\nX311500Y488800D01*\nX305500Y490800D02*\nX311500Y492800D01*\nX462600Y304500D02*\nX494800D01*\nX462246Y469854D02*\nX494800D01*\nX493800Y304500D02*\nY364983D01*\nY406171D02*\nY469854D01*\nY304500D02*\nX495800Y310500D01*\nX491800D02*\nX493800Y304500D01*\nX491800Y463854D02*\nX493800Y469854D01*\nX495800Y463854D01*\nX315154Y469854D02*\nX460746D01*\nX305500Y460200D02*\nX315154Y469854D01*\nX305500Y313700D02*\nY460200D01*\nX314700Y304500D02*\nX461100D01*\nX305500Y313700D02*\nX314700Y304500D01*\nX461100D02*\nX470854Y314254D01*\nY459746D01*\nX460746Y469854D02*\nX470854Y459746D01*\nM02*\n"
  },
  {
    "path": "hardware/panel.GM1",
    "content": "G04 Layer_Color=16711935*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\nM02*\n"
  },
  {
    "path": "hardware/panel.GM13",
    "content": "G04 Layer_Color=16711935*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD118C,0.00394*%\nD118*\nX206869Y152124D02*\nG03*\nX206869Y152124I-1969J0D01*\nG01*\nX188628Y240048D02*\nG03*\nX188628Y240048I-1969J0D01*\nG01*\nX217209Y202476D02*\nG03*\nX217209Y202476I-1969J0D01*\nG01*\nX210398Y171472D02*\nX217090D01*\nX210398Y175016D02*\nX217090D01*\nX210398Y171472D02*\nY175016D01*\nX217090Y171472D02*\nY175016D01*\nX260516Y225898D02*\nY232590D01*\nX256972Y225898D02*\nY232590D01*\nY225898D02*\nX260516D01*\nX256972Y232590D02*\nX260516D01*\nX255516Y226398D02*\nY233090D01*\nX251972Y226398D02*\nY233090D01*\nY226398D02*\nX255516D01*\nX251972Y233090D02*\nX255516D01*\nX236972Y224398D02*\nY231090D01*\nX240516Y224398D02*\nY231090D01*\nX236972D02*\nX240516D01*\nX236972Y224398D02*\nX240516D01*\nX242972Y223898D02*\nY230590D01*\nX246516Y223898D02*\nY230590D01*\nX242972D02*\nX246516D01*\nX242972Y223898D02*\nX246516D01*\nX168996Y155374D02*\nX175492D01*\nX168996Y159114D02*\nX175492D01*\nX168996Y155374D02*\nY159114D01*\nX175492Y155374D02*\nY159114D01*\nX206898Y159972D02*\nX213591D01*\nX206898Y163516D02*\nX213591D01*\nX206898Y159972D02*\nY163516D01*\nX213591Y159972D02*\nY163516D01*\nX206898Y154972D02*\nX213591D01*\nX206898Y158516D02*\nX213591D01*\nX206898Y154972D02*\nY158516D01*\nX213591Y154972D02*\nY158516D01*\nX182898Y195016D02*\nX189590D01*\nX182898Y191472D02*\nX189590D01*\nY195016D01*\nX182898Y191472D02*\nY195016D01*\nX207398Y229016D02*\nX214090D01*\nX207398Y225472D02*\nX214090D01*\nY229016D01*\nX207398Y225472D02*\nY229016D01*\nX225492Y235374D02*\nY239114D01*\nX218996Y235374D02*\nY239114D01*\nX225492D01*\nX218996Y235374D02*\nX225492D01*\nX212091Y235472D02*\nY239016D01*\nX205398Y235472D02*\nY239016D01*\nX212091D01*\nX205398Y235472D02*\nX212091D01*\nX225492Y241374D02*\nY245114D01*\nX218996Y241374D02*\nY245114D01*\nX225492D01*\nX218996Y241374D02*\nX225492D01*\nX212091Y241472D02*\nY245016D01*\nX205398Y241472D02*\nY245016D01*\nX212091D01*\nX205398Y241472D02*\nX212091D01*\nX158996Y183114D02*\nX165492D01*\nX158996Y179374D02*\nX165492D01*\nY183114D01*\nX158996Y179374D02*\nY183114D01*\nX169496Y195374D02*\nX175992D01*\nX169496Y199114D02*\nX175992D01*\nX169496Y195374D02*\nY199114D01*\nX175992Y195374D02*\nY199114D01*\nX158996Y195374D02*\nX165492D01*\nX158996Y199114D02*\nX165492D01*\nX158996Y195374D02*\nY199114D01*\nX165492Y195374D02*\nY199114D01*\nX179996Y150874D02*\nX186492D01*\nX179996Y154614D02*\nX186492D01*\nX179996Y150874D02*\nY154614D01*\nX186492Y150874D02*\nY154614D01*\nX197898Y155516D02*\nX204590D01*\nX197898Y151972D02*\nX204590D01*\nY155516D01*\nX197898Y151972D02*\nY155516D01*\nX197398Y157472D02*\nX204090D01*\nX197398Y161016D02*\nX204090D01*\nX197398Y157472D02*\nY161016D01*\nX204090Y157472D02*\nY161016D01*\nX186398Y170016D02*\nX193091D01*\nX186398Y166472D02*\nX193091D01*\nY170016D01*\nX186398Y166472D02*\nY170016D01*\nX172898Y228473D02*\nX179590D01*\nX172898Y232016D02*\nX179590D01*\nY228473D02*\nY232016D01*\nX172898Y228473D02*\nY232016D01*\nX159547Y179669D02*\nY182819D01*\nX165846Y179669D02*\nY182819D01*\nX159547D02*\nX165846D01*\nX159547Y179669D02*\nX165846D01*\nX159101Y186242D02*\nY198446D01*\nX166187Y186242D02*\nY198446D01*\nX159101D02*\nX166187D01*\nX159101Y186242D02*\nX166187D01*\nX252250Y221791D02*\nY233209D01*\nX245950Y221791D02*\nY233209D01*\nY221791D02*\nX252250D01*\nX245950Y233209D02*\nX252250D01*\nX235730Y224252D02*\nY230748D01*\nX239470Y224252D02*\nY230748D01*\nX235730Y224252D02*\nX239470D01*\nX235730Y230748D02*\nX239470D01*\nY235252D02*\nY241748D01*\nX235730Y235252D02*\nY241748D01*\nX239470D01*\nX235730Y235252D02*\nX239470D01*\nX168803Y155425D02*\nY158575D01*\nX175102Y155425D02*\nY158575D01*\nX168803D02*\nX175102D01*\nX168803Y155425D02*\nX175102D01*\nX236811Y142228D02*\nX243504D01*\nX236811Y145772D02*\nX243504D01*\nY142228D02*\nY145772D01*\nX236811Y142228D02*\nY145772D01*\nY152228D02*\nX243504D01*\nX236811Y155772D02*\nX243504D01*\nY152228D02*\nY155772D01*\nX236811Y152228D02*\nY155772D01*\nX204900Y186087D02*\nX224387Y166600D01*\nX185413Y166600D02*\nX204900Y147113D01*\nX185413Y166600D02*\nX204900Y186087D01*\nY147113D02*\nX224387Y166600D01*\nX144648Y232289D02*\nX157640D01*\nX144648Y225399D02*\nX157640D01*\nX144648D02*\nY232289D01*\nX157640Y225399D02*\nY232289D01*\nX144548Y251989D02*\nX157540D01*\nX144548Y245099D02*\nX157540D01*\nX144548D02*\nY251989D01*\nX157540Y245099D02*\nY251989D01*\nX172486Y256583D02*\nX190202D01*\nX172486Y236505D02*\nX190202D01*\nX172486D02*\nY256583D01*\nX190202Y236505D02*\nY256583D01*\nX180260Y200488D02*\nX192228D01*\nX180260Y206000D02*\nX192228D01*\nY200488D02*\nY206000D01*\nX180260Y200488D02*\nY206000D01*\nX251291Y166602D02*\nX257197D01*\nX251291Y178886D02*\nX257197D01*\nY166602D02*\nY178886D01*\nX251291Y166602D02*\nY178886D01*\nX250791Y184102D02*\nX256697D01*\nX250791Y196386D02*\nX256697D01*\nY184102D02*\nY196386D01*\nX250791Y184102D02*\nY196386D01*\nX251291Y200102D02*\nX257197D01*\nX251291Y212386D02*\nX257197D01*\nY200102D02*\nY212386D01*\nX251291Y200102D02*\nY212386D01*\nX260472Y250091D02*\nX264016D01*\nX260472Y243398D02*\nX264016D01*\nX260472D02*\nY250091D01*\nX264016Y243398D02*\nY250091D01*\nX247374Y202996D02*\nX251114D01*\nX247374Y209492D02*\nX251114D01*\nY202996D02*\nY209492D01*\nX247374Y202996D02*\nY209492D01*\nX256874Y205496D02*\nX260614D01*\nX256874Y211992D02*\nX260614D01*\nY205496D02*\nY211992D01*\nX256874Y205496D02*\nY211992D01*\nX247874Y169496D02*\nX251614D01*\nX247874Y175992D02*\nX251614D01*\nY169496D02*\nY175992D01*\nX247874Y169496D02*\nY175992D01*\nX257374Y171996D02*\nX261114D01*\nX257374Y178492D02*\nX261114D01*\nY171996D02*\nY178492D01*\nX257374Y171996D02*\nY178492D01*\nX256874Y189496D02*\nX260614D01*\nX256874Y195992D02*\nX260614D01*\nY189496D02*\nY195992D01*\nX256874Y189496D02*\nY195992D01*\nX247374Y186496D02*\nX251114D01*\nX247374Y192992D02*\nX251114D01*\nY186496D02*\nY192992D01*\nX247374Y186496D02*\nY192992D01*\nX237972Y195091D02*\nX241516D01*\nX237972Y188398D02*\nX241516D01*\nX237972D02*\nY195091D01*\nX241516Y188398D02*\nY195091D01*\nX198705Y198933D02*\nX218783D01*\nX198705Y216650D02*\nX218783D01*\nY198933D02*\nY216650D01*\nX198705Y198933D02*\nY216650D01*\nX386869Y152124D02*\nG03*\nX386869Y152124I-1969J0D01*\nG01*\nX368628Y240048D02*\nG03*\nX368628Y240048I-1969J0D01*\nG01*\nX397209Y202476D02*\nG03*\nX397209Y202476I-1969J0D01*\nG01*\nX390398Y171472D02*\nX397090D01*\nX390398Y175016D02*\nX397090D01*\nX390398Y171472D02*\nY175016D01*\nX397090Y171472D02*\nY175016D01*\nX440516Y225898D02*\nY232590D01*\nX436972Y225898D02*\nY232590D01*\nY225898D02*\nX440516D01*\nX436972Y232590D02*\nX440516D01*\nX435516Y226398D02*\nY233090D01*\nX431972Y226398D02*\nY233090D01*\nY226398D02*\nX435516D01*\nX431972Y233090D02*\nX435516D01*\nX416972Y224398D02*\nY231090D01*\nX420516Y224398D02*\nY231090D01*\nX416972D02*\nX420516D01*\nX416972Y224398D02*\nX420516D01*\nX422972Y223898D02*\nY230590D01*\nX426516Y223898D02*\nY230590D01*\nX422972D02*\nX426516D01*\nX422972Y223898D02*\nX426516D01*\nX348996Y155374D02*\nX355492D01*\nX348996Y159114D02*\nX355492D01*\nX348996Y155374D02*\nY159114D01*\nX355492Y155374D02*\nY159114D01*\nX386898Y159972D02*\nX393591D01*\nX386898Y163516D02*\nX393591D01*\nX386898Y159972D02*\nY163516D01*\nX393591Y159972D02*\nY163516D01*\nX386898Y154972D02*\nX393591D01*\nX386898Y158516D02*\nX393591D01*\nX386898Y154972D02*\nY158516D01*\nX393591Y154972D02*\nY158516D01*\nX362898Y195016D02*\nX369590D01*\nX362898Y191472D02*\nX369590D01*\nY195016D01*\nX362898Y191472D02*\nY195016D01*\nX387398Y229016D02*\nX394090D01*\nX387398Y225472D02*\nX394090D01*\nY229016D01*\nX387398Y225472D02*\nY229016D01*\nX405492Y235374D02*\nY239114D01*\nX398996Y235374D02*\nY239114D01*\nX405492D01*\nX398996Y235374D02*\nX405492D01*\nX392091Y235472D02*\nY239016D01*\nX385398Y235472D02*\nY239016D01*\nX392091D01*\nX385398Y235472D02*\nX392091D01*\nX405492Y241374D02*\nY245114D01*\nX398996Y241374D02*\nY245114D01*\nX405492D01*\nX398996Y241374D02*\nX405492D01*\nX392091Y241472D02*\nY245016D01*\nX385398Y241472D02*\nY245016D01*\nX392091D01*\nX385398Y241472D02*\nX392091D01*\nX338996Y183114D02*\nX345492D01*\nX338996Y179374D02*\nX345492D01*\nY183114D01*\nX338996Y179374D02*\nY183114D01*\nX349496Y195374D02*\nX355992D01*\nX349496Y199114D02*\nX355992D01*\nX349496Y195374D02*\nY199114D01*\nX355992Y195374D02*\nY199114D01*\nX338996Y195374D02*\nX345492D01*\nX338996Y199114D02*\nX345492D01*\nX338996Y195374D02*\nY199114D01*\nX345492Y195374D02*\nY199114D01*\nX359996Y150874D02*\nX366492D01*\nX359996Y154614D02*\nX366492D01*\nX359996Y150874D02*\nY154614D01*\nX366492Y150874D02*\nY154614D01*\nX377898Y155516D02*\nX384590D01*\nX377898Y151972D02*\nX384590D01*\nY155516D01*\nX377898Y151972D02*\nY155516D01*\nX377398Y157472D02*\nX384090D01*\nX377398Y161016D02*\nX384090D01*\nX377398Y157472D02*\nY161016D01*\nX384090Y157472D02*\nY161016D01*\nX366398Y170016D02*\nX373091D01*\nX366398Y166472D02*\nX373091D01*\nY170016D01*\nX366398Y166472D02*\nY170016D01*\nX352898Y228473D02*\nX359590D01*\nX352898Y232016D02*\nX359590D01*\nY228473D02*\nY232016D01*\nX352898Y228473D02*\nY232016D01*\nX339547Y179669D02*\nY182819D01*\nX345846Y179669D02*\nY182819D01*\nX339547D02*\nX345846D01*\nX339547Y179669D02*\nX345846D01*\nX339101Y186242D02*\nY198446D01*\nX346187Y186242D02*\nY198446D01*\nX339101D02*\nX346187D01*\nX339101Y186242D02*\nX346187D01*\nX432250Y221791D02*\nY233209D01*\nX425950Y221791D02*\nY233209D01*\nY221791D02*\nX432250D01*\nX425950Y233209D02*\nX432250D01*\nX415730Y224252D02*\nY230748D01*\nX419470Y224252D02*\nY230748D01*\nX415730Y224252D02*\nX419470D01*\nX415730Y230748D02*\nX419470D01*\nY235252D02*\nY241748D01*\nX415730Y235252D02*\nY241748D01*\nX419470D01*\nX415730Y235252D02*\nX419470D01*\nX348803Y155425D02*\nY158575D01*\nX355102Y155425D02*\nY158575D01*\nX348803D02*\nX355102D01*\nX348803Y155425D02*\nX355102D01*\nX416811Y142228D02*\nX423504D01*\nX416811Y145772D02*\nX423504D01*\nY142228D02*\nY145772D01*\nX416811Y142228D02*\nY145772D01*\nY152228D02*\nX423504D01*\nX416811Y155772D02*\nX423504D01*\nY152228D02*\nY155772D01*\nX416811Y152228D02*\nY155772D01*\nX384900Y186087D02*\nX404387Y166600D01*\nX365413Y166600D02*\nX384900Y147113D01*\nX365413Y166600D02*\nX384900Y186087D01*\nY147113D02*\nX404387Y166600D01*\nX324648Y232289D02*\nX337640D01*\nX324648Y225399D02*\nX337640D01*\nX324648D02*\nY232289D01*\nX337640Y225399D02*\nY232289D01*\nX324548Y251989D02*\nX337540D01*\nX324548Y245099D02*\nX337540D01*\nX324548D02*\nY251989D01*\nX337540Y245099D02*\nY251989D01*\nX352486Y256583D02*\nX370202D01*\nX352486Y236505D02*\nX370202D01*\nX352486D02*\nY256583D01*\nX370202Y236505D02*\nY256583D01*\nX360260Y200488D02*\nX372228D01*\nX360260Y206000D02*\nX372228D01*\nY200488D02*\nY206000D01*\nX360260Y200488D02*\nY206000D01*\nX431291Y166602D02*\nX437197D01*\nX431291Y178886D02*\nX437197D01*\nY166602D02*\nY178886D01*\nX431291Y166602D02*\nY178886D01*\nX430791Y184102D02*\nX436697D01*\nX430791Y196386D02*\nX436697D01*\nY184102D02*\nY196386D01*\nX430791Y184102D02*\nY196386D01*\nX431291Y200102D02*\nX437197D01*\nX431291Y212386D02*\nX437197D01*\nY200102D02*\nY212386D01*\nX431291Y200102D02*\nY212386D01*\nX440472Y250091D02*\nX444016D01*\nX440472Y243398D02*\nX444016D01*\nX440472D02*\nY250091D01*\nX444016Y243398D02*\nY250091D01*\nX427374Y202996D02*\nX431114D01*\nX427374Y209492D02*\nX431114D01*\nY202996D02*\nY209492D01*\nX427374Y202996D02*\nY209492D01*\nX436874Y205496D02*\nX440614D01*\nX436874Y211992D02*\nX440614D01*\nY205496D02*\nY211992D01*\nX436874Y205496D02*\nY211992D01*\nX427874Y169496D02*\nX431614D01*\nX427874Y175992D02*\nX431614D01*\nY169496D02*\nY175992D01*\nX427874Y169496D02*\nY175992D01*\nX437374Y171996D02*\nX441114D01*\nX437374Y178492D02*\nX441114D01*\nY171996D02*\nY178492D01*\nX437374Y171996D02*\nY178492D01*\nX436874Y189496D02*\nX440614D01*\nX436874Y195992D02*\nX440614D01*\nY189496D02*\nY195992D01*\nX436874Y189496D02*\nY195992D01*\nX427374Y186496D02*\nX431114D01*\nX427374Y192992D02*\nX431114D01*\nY186496D02*\nY192992D01*\nX427374Y186496D02*\nY192992D01*\nX417972Y195091D02*\nX421516D01*\nX417972Y188398D02*\nX421516D01*\nX417972D02*\nY195091D01*\nX421516Y188398D02*\nY195091D01*\nX378705Y198933D02*\nX398783D01*\nX378705Y216650D02*\nX398783D01*\nY198933D02*\nY216650D01*\nX378705Y198933D02*\nY216650D01*\nX206869Y332124D02*\nG03*\nX206869Y332124I-1969J0D01*\nG01*\nX188628Y420048D02*\nG03*\nX188628Y420048I-1969J0D01*\nG01*\nX217209Y382476D02*\nG03*\nX217209Y382476I-1969J0D01*\nG01*\nX210398Y351472D02*\nX217090D01*\nX210398Y355016D02*\nX217090D01*\nX210398Y351472D02*\nY355016D01*\nX217090Y351472D02*\nY355016D01*\nX260516Y405898D02*\nY412590D01*\nX256972Y405898D02*\nY412590D01*\nY405898D02*\nX260516D01*\nX256972Y412590D02*\nX260516D01*\nX255516Y406398D02*\nY413090D01*\nX251972Y406398D02*\nY413090D01*\nY406398D02*\nX255516D01*\nX251972Y413090D02*\nX255516D01*\nX236972Y404398D02*\nY411090D01*\nX240516Y404398D02*\nY411090D01*\nX236972D02*\nX240516D01*\nX236972Y404398D02*\nX240516D01*\nX242972Y403898D02*\nY410590D01*\nX246516Y403898D02*\nY410590D01*\nX242972D02*\nX246516D01*\nX242972Y403898D02*\nX246516D01*\nX168996Y335374D02*\nX175492D01*\nX168996Y339114D02*\nX175492D01*\nX168996Y335374D02*\nY339114D01*\nX175492Y335374D02*\nY339114D01*\nX206898Y339972D02*\nX213591D01*\nX206898Y343516D02*\nX213591D01*\nX206898Y339972D02*\nY343516D01*\nX213591Y339972D02*\nY343516D01*\nX206898Y334972D02*\nX213591D01*\nX206898Y338516D02*\nX213591D01*\nX206898Y334972D02*\nY338516D01*\nX213591Y334972D02*\nY338516D01*\nX182898Y375016D02*\nX189590D01*\nX182898Y371472D02*\nX189590D01*\nY375016D01*\nX182898Y371472D02*\nY375016D01*\nX207398Y409016D02*\nX214090D01*\nX207398Y405472D02*\nX214090D01*\nY409016D01*\nX207398Y405472D02*\nY409016D01*\nX225492Y415374D02*\nY419114D01*\nX218996Y415374D02*\nY419114D01*\nX225492D01*\nX218996Y415374D02*\nX225492D01*\nX212091Y415472D02*\nY419016D01*\nX205398Y415472D02*\nY419016D01*\nX212091D01*\nX205398Y415472D02*\nX212091D01*\nX225492Y421374D02*\nY425114D01*\nX218996Y421374D02*\nY425114D01*\nX225492D01*\nX218996Y421374D02*\nX225492D01*\nX212091Y421472D02*\nY425016D01*\nX205398Y421472D02*\nY425016D01*\nX212091D01*\nX205398Y421472D02*\nX212091D01*\nX158996Y363114D02*\nX165492D01*\nX158996Y359374D02*\nX165492D01*\nY363114D01*\nX158996Y359374D02*\nY363114D01*\nX169496Y375374D02*\nX175992D01*\nX169496Y379114D02*\nX175992D01*\nX169496Y375374D02*\nY379114D01*\nX175992Y375374D02*\nY379114D01*\nX158996Y375374D02*\nX165492D01*\nX158996Y379114D02*\nX165492D01*\nX158996Y375374D02*\nY379114D01*\nX165492Y375374D02*\nY379114D01*\nX179996Y330874D02*\nX186492D01*\nX179996Y334614D02*\nX186492D01*\nX179996Y330874D02*\nY334614D01*\nX186492Y330874D02*\nY334614D01*\nX197898Y335516D02*\nX204590D01*\nX197898Y331972D02*\nX204590D01*\nY335516D01*\nX197898Y331972D02*\nY335516D01*\nX197398Y337472D02*\nX204090D01*\nX197398Y341016D02*\nX204090D01*\nX197398Y337472D02*\nY341016D01*\nX204090Y337472D02*\nY341016D01*\nX186398Y350016D02*\nX193091D01*\nX186398Y346472D02*\nX193091D01*\nY350016D01*\nX186398Y346472D02*\nY350016D01*\nX172898Y408473D02*\nX179590D01*\nX172898Y412016D02*\nX179590D01*\nY408473D02*\nY412016D01*\nX172898Y408473D02*\nY412016D01*\nX159547Y359669D02*\nY362819D01*\nX165846Y359669D02*\nY362819D01*\nX159547D02*\nX165846D01*\nX159547Y359669D02*\nX165846D01*\nX159101Y366242D02*\nY378446D01*\nX166187Y366242D02*\nY378446D01*\nX159101D02*\nX166187D01*\nX159101Y366242D02*\nX166187D01*\nX252250Y401791D02*\nY413209D01*\nX245950Y401791D02*\nY413209D01*\nY401791D02*\nX252250D01*\nX245950Y413209D02*\nX252250D01*\nX235730Y404252D02*\nY410748D01*\nX239470Y404252D02*\nY410748D01*\nX235730Y404252D02*\nX239470D01*\nX235730Y410748D02*\nX239470D01*\nY415252D02*\nY421748D01*\nX235730Y415252D02*\nY421748D01*\nX239470D01*\nX235730Y415252D02*\nX239470D01*\nX168803Y335425D02*\nY338575D01*\nX175102Y335425D02*\nY338575D01*\nX168803D02*\nX175102D01*\nX168803Y335425D02*\nX175102D01*\nX236811Y322228D02*\nX243504D01*\nX236811Y325772D02*\nX243504D01*\nY322228D02*\nY325772D01*\nX236811Y322228D02*\nY325772D01*\nY332228D02*\nX243504D01*\nX236811Y335772D02*\nX243504D01*\nY332228D02*\nY335772D01*\nX236811Y332228D02*\nY335772D01*\nX204900Y366087D02*\nX224387Y346600D01*\nX185413Y346600D02*\nX204900Y327113D01*\nX185413Y346600D02*\nX204900Y366087D01*\nY327113D02*\nX224387Y346600D01*\nX144648Y412289D02*\nX157640D01*\nX144648Y405399D02*\nX157640D01*\nX144648D02*\nY412289D01*\nX157640Y405399D02*\nY412289D01*\nX144548Y431989D02*\nX157540D01*\nX144548Y425099D02*\nX157540D01*\nX144548D02*\nY431989D01*\nX157540Y425099D02*\nY431989D01*\nX172486Y436583D02*\nX190202D01*\nX172486Y416505D02*\nX190202D01*\nX172486D02*\nY436583D01*\nX190202Y416505D02*\nY436583D01*\nX180260Y380488D02*\nX192228D01*\nX180260Y386000D02*\nX192228D01*\nY380488D02*\nY386000D01*\nX180260Y380488D02*\nY386000D01*\nX251291Y346602D02*\nX257197D01*\nX251291Y358886D02*\nX257197D01*\nY346602D02*\nY358886D01*\nX251291Y346602D02*\nY358886D01*\nX250791Y364102D02*\nX256697D01*\nX250791Y376386D02*\nX256697D01*\nY364102D02*\nY376386D01*\nX250791Y364102D02*\nY376386D01*\nX251291Y380102D02*\nX257197D01*\nX251291Y392386D02*\nX257197D01*\nY380102D02*\nY392386D01*\nX251291Y380102D02*\nY392386D01*\nX260472Y430091D02*\nX264016D01*\nX260472Y423398D02*\nX264016D01*\nX260472D02*\nY430091D01*\nX264016Y423398D02*\nY430091D01*\nX247374Y382996D02*\nX251114D01*\nX247374Y389492D02*\nX251114D01*\nY382996D02*\nY389492D01*\nX247374Y382996D02*\nY389492D01*\nX256874Y385496D02*\nX260614D01*\nX256874Y391992D02*\nX260614D01*\nY385496D02*\nY391992D01*\nX256874Y385496D02*\nY391992D01*\nX247874Y349496D02*\nX251614D01*\nX247874Y355992D02*\nX251614D01*\nY349496D02*\nY355992D01*\nX247874Y349496D02*\nY355992D01*\nX257374Y351996D02*\nX261114D01*\nX257374Y358492D02*\nX261114D01*\nY351996D02*\nY358492D01*\nX257374Y351996D02*\nY358492D01*\nX256874Y369496D02*\nX260614D01*\nX256874Y375992D02*\nX260614D01*\nY369496D02*\nY375992D01*\nX256874Y369496D02*\nY375992D01*\nX247374Y366496D02*\nX251114D01*\nX247374Y372992D02*\nX251114D01*\nY366496D02*\nY372992D01*\nX247374Y366496D02*\nY372992D01*\nX237972Y375091D02*\nX241516D01*\nX237972Y368398D02*\nX241516D01*\nX237972D02*\nY375091D01*\nX241516Y368398D02*\nY375091D01*\nX198705Y378933D02*\nX218783D01*\nX198705Y396650D02*\nX218783D01*\nY378933D02*\nY396650D01*\nX198705Y378933D02*\nY396650D01*\nX386869Y332124D02*\nG03*\nX386869Y332124I-1969J0D01*\nG01*\nX368628Y420048D02*\nG03*\nX368628Y420048I-1969J0D01*\nG01*\nX397209Y382476D02*\nG03*\nX397209Y382476I-1969J0D01*\nG01*\nX390398Y351472D02*\nX397090D01*\nX390398Y355016D02*\nX397090D01*\nX390398Y351472D02*\nY355016D01*\nX397090Y351472D02*\nY355016D01*\nX440516Y405898D02*\nY412590D01*\nX436972Y405898D02*\nY412590D01*\nY405898D02*\nX440516D01*\nX436972Y412590D02*\nX440516D01*\nX435516Y406398D02*\nY413090D01*\nX431972Y406398D02*\nY413090D01*\nY406398D02*\nX435516D01*\nX431972Y413090D02*\nX435516D01*\nX416972Y404398D02*\nY411090D01*\nX420516Y404398D02*\nY411090D01*\nX416972D02*\nX420516D01*\nX416972Y404398D02*\nX420516D01*\nX422972Y403898D02*\nY410590D01*\nX426516Y403898D02*\nY410590D01*\nX422972D02*\nX426516D01*\nX422972Y403898D02*\nX426516D01*\nX348996Y335374D02*\nX355492D01*\nX348996Y339114D02*\nX355492D01*\nX348996Y335374D02*\nY339114D01*\nX355492Y335374D02*\nY339114D01*\nX386898Y339972D02*\nX393591D01*\nX386898Y343516D02*\nX393591D01*\nX386898Y339972D02*\nY343516D01*\nX393591Y339972D02*\nY343516D01*\nX386898Y334972D02*\nX393591D01*\nX386898Y338516D02*\nX393591D01*\nX386898Y334972D02*\nY338516D01*\nX393591Y334972D02*\nY338516D01*\nX362898Y375016D02*\nX369590D01*\nX362898Y371472D02*\nX369590D01*\nY375016D01*\nX362898Y371472D02*\nY375016D01*\nX387398Y409016D02*\nX394090D01*\nX387398Y405472D02*\nX394090D01*\nY409016D01*\nX387398Y405472D02*\nY409016D01*\nX405492Y415374D02*\nY419114D01*\nX398996Y415374D02*\nY419114D01*\nX405492D01*\nX398996Y415374D02*\nX405492D01*\nX392091Y415472D02*\nY419016D01*\nX385398Y415472D02*\nY419016D01*\nX392091D01*\nX385398Y415472D02*\nX392091D01*\nX405492Y421374D02*\nY425114D01*\nX398996Y421374D02*\nY425114D01*\nX405492D01*\nX398996Y421374D02*\nX405492D01*\nX392091Y421472D02*\nY425016D01*\nX385398Y421472D02*\nY425016D01*\nX392091D01*\nX385398Y421472D02*\nX392091D01*\nX338996Y363114D02*\nX345492D01*\nX338996Y359374D02*\nX345492D01*\nY363114D01*\nX338996Y359374D02*\nY363114D01*\nX349496Y375374D02*\nX355992D01*\nX349496Y379114D02*\nX355992D01*\nX349496Y375374D02*\nY379114D01*\nX355992Y375374D02*\nY379114D01*\nX338996Y375374D02*\nX345492D01*\nX338996Y379114D02*\nX345492D01*\nX338996Y375374D02*\nY379114D01*\nX345492Y375374D02*\nY379114D01*\nX359996Y330874D02*\nX366492D01*\nX359996Y334614D02*\nX366492D01*\nX359996Y330874D02*\nY334614D01*\nX366492Y330874D02*\nY334614D01*\nX377898Y335516D02*\nX384590D01*\nX377898Y331972D02*\nX384590D01*\nY335516D01*\nX377898Y331972D02*\nY335516D01*\nX377398Y337472D02*\nX384090D01*\nX377398Y341016D02*\nX384090D01*\nX377398Y337472D02*\nY341016D01*\nX384090Y337472D02*\nY341016D01*\nX366398Y350016D02*\nX373091D01*\nX366398Y346472D02*\nX373091D01*\nY350016D01*\nX366398Y346472D02*\nY350016D01*\nX352898Y408473D02*\nX359590D01*\nX352898Y412016D02*\nX359590D01*\nY408473D02*\nY412016D01*\nX352898Y408473D02*\nY412016D01*\nX339547Y359669D02*\nY362819D01*\nX345846Y359669D02*\nY362819D01*\nX339547D02*\nX345846D01*\nX339547Y359669D02*\nX345846D01*\nX339101Y366242D02*\nY378446D01*\nX346187Y366242D02*\nY378446D01*\nX339101D02*\nX346187D01*\nX339101Y366242D02*\nX346187D01*\nX432250Y401791D02*\nY413209D01*\nX425950Y401791D02*\nY413209D01*\nY401791D02*\nX432250D01*\nX425950Y413209D02*\nX432250D01*\nX415730Y404252D02*\nY410748D01*\nX419470Y404252D02*\nY410748D01*\nX415730Y404252D02*\nX419470D01*\nX415730Y410748D02*\nX419470D01*\nY415252D02*\nY421748D01*\nX415730Y415252D02*\nY421748D01*\nX419470D01*\nX415730Y415252D02*\nX419470D01*\nX348803Y335425D02*\nY338575D01*\nX355102Y335425D02*\nY338575D01*\nX348803D02*\nX355102D01*\nX348803Y335425D02*\nX355102D01*\nX416811Y322228D02*\nX423504D01*\nX416811Y325772D02*\nX423504D01*\nY322228D02*\nY325772D01*\nX416811Y322228D02*\nY325772D01*\nY332228D02*\nX423504D01*\nX416811Y335772D02*\nX423504D01*\nY332228D02*\nY335772D01*\nX416811Y332228D02*\nY335772D01*\nX384900Y366087D02*\nX404387Y346600D01*\nX365413Y346600D02*\nX384900Y327113D01*\nX365413Y346600D02*\nX384900Y366087D01*\nY327113D02*\nX404387Y346600D01*\nX324648Y412289D02*\nX337640D01*\nX324648Y405399D02*\nX337640D01*\nX324648D02*\nY412289D01*\nX337640Y405399D02*\nY412289D01*\nX324548Y431989D02*\nX337540D01*\nX324548Y425099D02*\nX337540D01*\nX324548D02*\nY431989D01*\nX337540Y425099D02*\nY431989D01*\nX352486Y436583D02*\nX370202D01*\nX352486Y416505D02*\nX370202D01*\nX352486D02*\nY436583D01*\nX370202Y416505D02*\nY436583D01*\nX360260Y380488D02*\nX372228D01*\nX360260Y386000D02*\nX372228D01*\nY380488D02*\nY386000D01*\nX360260Y380488D02*\nY386000D01*\nX431291Y346602D02*\nX437197D01*\nX431291Y358886D02*\nX437197D01*\nY346602D02*\nY358886D01*\nX431291Y346602D02*\nY358886D01*\nX430791Y364102D02*\nX436697D01*\nX430791Y376386D02*\nX436697D01*\nY364102D02*\nY376386D01*\nX430791Y364102D02*\nY376386D01*\nX431291Y380102D02*\nX437197D01*\nX431291Y392386D02*\nX437197D01*\nY380102D02*\nY392386D01*\nX431291Y380102D02*\nY392386D01*\nX440472Y430091D02*\nX444016D01*\nX440472Y423398D02*\nX444016D01*\nX440472D02*\nY430091D01*\nX444016Y423398D02*\nY430091D01*\nX427374Y382996D02*\nX431114D01*\nX427374Y389492D02*\nX431114D01*\nY382996D02*\nY389492D01*\nX427374Y382996D02*\nY389492D01*\nX436874Y385496D02*\nX440614D01*\nX436874Y391992D02*\nX440614D01*\nY385496D02*\nY391992D01*\nX436874Y385496D02*\nY391992D01*\nX427874Y349496D02*\nX431614D01*\nX427874Y355992D02*\nX431614D01*\nY349496D02*\nY355992D01*\nX427874Y349496D02*\nY355992D01*\nX437374Y351996D02*\nX441114D01*\nX437374Y358492D02*\nX441114D01*\nY351996D02*\nY358492D01*\nX437374Y351996D02*\nY358492D01*\nX436874Y369496D02*\nX440614D01*\nX436874Y375992D02*\nX440614D01*\nY369496D02*\nY375992D01*\nX436874Y369496D02*\nY375992D01*\nX427374Y366496D02*\nX431114D01*\nX427374Y372992D02*\nX431114D01*\nY366496D02*\nY372992D01*\nX427374Y366496D02*\nY372992D01*\nX417972Y375091D02*\nX421516D01*\nX417972Y368398D02*\nX421516D01*\nX417972D02*\nY375091D01*\nX421516Y368398D02*\nY375091D01*\nX378705Y378933D02*\nX398783D01*\nX378705Y396650D02*\nX398783D01*\nY378933D02*\nY396650D01*\nX378705Y378933D02*\nY396650D01*\nM02*\n"
  },
  {
    "path": "hardware/panel.GM15",
    "content": "G04 Layer_Color=32768*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD118C,0.00394*%\n%ADD119C,0.00197*%\nD118*\nX213744Y171472D02*\nY175016D01*\nX211972Y173244D02*\nX215516D01*\nX209118Y171275D02*\nX218370D01*\nX209118Y175213D02*\nX218370D01*\nX209118Y171275D02*\nY175213D01*\nX218370Y171275D02*\nY175213D01*\nX256972Y229244D02*\nX260516D01*\nX258744Y227472D02*\nY231016D01*\nX260713Y224618D02*\nY233870D01*\nX256776Y224618D02*\nY233870D01*\nY224618D02*\nX260713D01*\nX256776Y233870D02*\nX260713D01*\nX251972Y229744D02*\nX255516D01*\nX253744Y227972D02*\nY231516D01*\nX255713Y225118D02*\nY234370D01*\nX251776Y225118D02*\nY234370D01*\nY225118D02*\nX255713D01*\nX251776Y234370D02*\nX255713D01*\nX236972Y227744D02*\nX240516D01*\nX238744Y225972D02*\nY229516D01*\nX236775Y223118D02*\nY232370D01*\nX240713Y223118D02*\nY232370D01*\nX236775D02*\nX240713D01*\nX236775Y223118D02*\nX240713D01*\nX242972Y227244D02*\nX246516D01*\nX244744Y225472D02*\nY229016D01*\nX242775Y222618D02*\nY231870D01*\nX246713Y222618D02*\nY231870D01*\nX242775D02*\nX246713D01*\nX242775Y222618D02*\nX246713D01*\nX172244Y155374D02*\nY159114D01*\nX170374Y157244D02*\nX174114D01*\nX167618Y155079D02*\nX176870D01*\nX167618Y159409D02*\nX176870D01*\nX167618Y155079D02*\nY159409D01*\nX176870Y155079D02*\nY159409D01*\nX210244Y159972D02*\nY163516D01*\nX208473Y161744D02*\nX212016D01*\nX205618Y159775D02*\nX214870D01*\nX205618Y163712D02*\nX214870D01*\nX205618Y159775D02*\nY163712D01*\nX214870Y159775D02*\nY163712D01*\nX210244Y154972D02*\nY158516D01*\nX208473Y156744D02*\nX212016D01*\nX205618Y154775D02*\nX214870D01*\nX205618Y158712D02*\nX214870D01*\nX205618Y154775D02*\nY158712D01*\nX214870Y154775D02*\nY158712D01*\nX186244Y191472D02*\nY195016D01*\nX184472Y193244D02*\nX188016D01*\nX181618Y195213D02*\nX190870D01*\nX181618Y191275D02*\nX190870D01*\nY195213D01*\nX181618Y191275D02*\nY195213D01*\nX210744Y225472D02*\nY229016D01*\nX208972Y227244D02*\nX212516D01*\nX206118Y229213D02*\nX215370D01*\nX206118Y225275D02*\nX215370D01*\nY229213D01*\nX206118Y225275D02*\nY229213D01*\nX226870Y235079D02*\nY239409D01*\nX217618Y235079D02*\nY239409D01*\nX226870D01*\nX217618Y235079D02*\nX226870D01*\nX220374Y237244D02*\nX224114D01*\nX222244Y235374D02*\nY239114D01*\nX213370Y235276D02*\nY239213D01*\nX204118Y235276D02*\nY239213D01*\nX213370D01*\nX204118Y235276D02*\nX213370D01*\nX206972Y237244D02*\nX210516D01*\nX208744Y235472D02*\nY239016D01*\nX226870Y241079D02*\nY245409D01*\nX217618Y241079D02*\nY245409D01*\nX226870D01*\nX217618Y241079D02*\nX226870D01*\nX220374Y243244D02*\nX224114D01*\nX222244Y241374D02*\nY245114D01*\nX213370Y241276D02*\nY245213D01*\nX204118Y241276D02*\nY245213D01*\nX213370D01*\nX204118Y241276D02*\nX213370D01*\nX206972Y243244D02*\nX210516D01*\nX208744Y241472D02*\nY245016D01*\nX162244Y179374D02*\nY183114D01*\nX160374Y181244D02*\nX164114D01*\nX157618Y183409D02*\nX166870D01*\nX157618Y179079D02*\nX166870D01*\nY183409D01*\nX157618Y179079D02*\nY183409D01*\nX172744Y195374D02*\nY199114D01*\nX170874Y197244D02*\nX174614D01*\nX168118Y195079D02*\nX177370D01*\nX168118Y199410D02*\nX177370D01*\nX168118Y195079D02*\nY199410D01*\nX177370Y195079D02*\nY199410D01*\nX162244Y195374D02*\nY199114D01*\nX160374Y197244D02*\nX164114D01*\nX157618Y195079D02*\nX166870D01*\nX157618Y199410D02*\nX166870D01*\nX157618Y195079D02*\nY199410D01*\nX166870Y195079D02*\nY199410D01*\nX183244Y150874D02*\nY154614D01*\nX181374Y152744D02*\nX185114D01*\nX178618Y150579D02*\nX187870D01*\nX178618Y154910D02*\nX187870D01*\nX178618Y150579D02*\nY154910D01*\nX187870Y150579D02*\nY154910D01*\nX201244Y151972D02*\nY155516D01*\nX199472Y153744D02*\nX203016D01*\nX196618Y155713D02*\nX205870D01*\nX196618Y151775D02*\nX205870D01*\nY155713D01*\nX196618Y151775D02*\nY155713D01*\nX200744Y157472D02*\nY161016D01*\nX198972Y159244D02*\nX202516D01*\nX196118Y157275D02*\nX205370D01*\nX196118Y161212D02*\nX205370D01*\nX196118Y157275D02*\nY161212D01*\nX205370Y157275D02*\nY161212D01*\nX189744Y166472D02*\nY170016D01*\nX187973Y168244D02*\nX191516D01*\nX185118Y170213D02*\nX194370D01*\nX185118Y166276D02*\nX194370D01*\nY170213D01*\nX185118Y166276D02*\nY170213D01*\nX176244Y228473D02*\nY232016D01*\nX174472Y230244D02*\nX178016D01*\nX171618Y228276D02*\nX180870D01*\nX171618Y232213D02*\nX180870D01*\nY228276D02*\nY232213D01*\nX171618Y228276D02*\nY232213D01*\nX158071Y179275D02*\nY183213D01*\nX167323Y179275D02*\nY183213D01*\nX158071D02*\nX167323D01*\nX158071Y179275D02*\nX167323D01*\nX161122Y181244D02*\nX164272D01*\nX162697Y179669D02*\nY182819D01*\nX153392Y184273D02*\nY200415D01*\nX171896Y184273D02*\nY200415D01*\nX153392D02*\nX171896D01*\nX153392Y184273D02*\nX171896D01*\nX160676Y192344D02*\nX164613D01*\nX162644Y190376D02*\nY194313D01*\nX255990Y221398D02*\nY233602D01*\nX242210Y221398D02*\nY233602D01*\nY221398D02*\nX255990D01*\nX242210Y233602D02*\nX255990D01*\nX247131Y227500D02*\nX251068D01*\nX249100Y225531D02*\nY229468D01*\nX235730Y227500D02*\nX239470D01*\nX237600Y225630D02*\nY229370D01*\nX235435Y222874D02*\nY232126D01*\nX239765Y222874D02*\nY232126D01*\nX235435Y222874D02*\nX239765D01*\nX235435Y232126D02*\nX239765D01*\nX235730Y238500D02*\nX239470D01*\nX237600Y236630D02*\nY240370D01*\nX239765Y233874D02*\nY243126D01*\nX235435Y233874D02*\nY243126D01*\nX239765D01*\nX235435Y233874D02*\nX239765D01*\nX167327Y155031D02*\nY158969D01*\nX176579Y155031D02*\nY158969D01*\nX167327D02*\nX176579D01*\nX167327Y155031D02*\nX176579D01*\nX170378Y157000D02*\nX173528D01*\nX171953Y155425D02*\nY158575D01*\nX240157Y142228D02*\nY145772D01*\nX238386Y144000D02*\nX241929D01*\nX235531Y142031D02*\nX244783D01*\nX235531Y145969D02*\nX244783D01*\nY142031D02*\nY145969D01*\nX235531Y142031D02*\nY145969D01*\nX240157Y152228D02*\nY155772D01*\nX238386Y154000D02*\nX241929D01*\nX235531Y152031D02*\nX244783D01*\nX235531Y155969D02*\nX244783D01*\nY152031D02*\nY155969D01*\nX235531Y152031D02*\nY155969D01*\nX203508Y165208D02*\nX206292Y167992D01*\nX203508D02*\nX206292Y165208D01*\nX151144Y226876D02*\nY230813D01*\nX149176Y228844D02*\nX153113D01*\nX143270Y232584D02*\nX159018D01*\nX143270Y225104D02*\nX159018D01*\nX143270D02*\nY232584D01*\nX159018Y225104D02*\nY232584D01*\nX151044Y246576D02*\nY250513D01*\nX149076Y248544D02*\nX153013D01*\nX143170Y252284D02*\nX158918D01*\nX143170Y244804D02*\nX158918D01*\nX143170D02*\nY252284D01*\nX158918Y244804D02*\nY252284D01*\nX181344Y244576D02*\nY248513D01*\nX179376Y246544D02*\nX183313D01*\nX179276Y195567D02*\nX193213D01*\nX179276Y210921D02*\nX193213D01*\nY195567D02*\nY210921D01*\nX179276Y195567D02*\nY210921D01*\nX186244Y201276D02*\nY205213D01*\nX184276Y203244D02*\nX188213D01*\nX254244Y170776D02*\nY174713D01*\nX252276Y172744D02*\nX256213D01*\nX253744Y188276D02*\nY192213D01*\nX251776Y190244D02*\nX255713D01*\nX254244Y204276D02*\nY208213D01*\nX252276Y206244D02*\nX256213D01*\nX260276Y251370D02*\nX264213D01*\nX260276Y242118D02*\nX264213D01*\nX260276D02*\nY251370D01*\nX264213Y242118D02*\nY251370D01*\nX262244Y244972D02*\nY248516D01*\nX260472Y246744D02*\nX264016D01*\nX247079Y201618D02*\nX251409D01*\nX247079Y210870D02*\nX251409D01*\nY201618D02*\nY210870D01*\nX247079Y201618D02*\nY210870D01*\nX249244Y204374D02*\nY208114D01*\nX247374Y206244D02*\nX251114D01*\nX256579Y204118D02*\nX260909D01*\nX256579Y213370D02*\nX260909D01*\nY204118D02*\nY213370D01*\nX256579Y204118D02*\nY213370D01*\nX258744Y206874D02*\nY210614D01*\nX256874Y208744D02*\nX260614D01*\nX247579Y168118D02*\nX251909D01*\nX247579Y177370D02*\nX251909D01*\nY168118D02*\nY177370D01*\nX247579Y168118D02*\nY177370D01*\nX249744Y170874D02*\nY174614D01*\nX247874Y172744D02*\nX251614D01*\nX257079Y170618D02*\nX261409D01*\nX257079Y179870D02*\nX261409D01*\nY170618D02*\nY179870D01*\nX257079Y170618D02*\nY179870D01*\nX259244Y173374D02*\nY177114D01*\nX257374Y175244D02*\nX261114D01*\nX256579Y188118D02*\nX260909D01*\nX256579Y197370D02*\nX260909D01*\nY188118D02*\nY197370D01*\nX256579Y188118D02*\nY197370D01*\nX258744Y190874D02*\nY194614D01*\nX256874Y192744D02*\nX260614D01*\nX247079Y185118D02*\nX251409D01*\nX247079Y194370D02*\nX251409D01*\nY185118D02*\nY194370D01*\nX247079Y185118D02*\nY194370D01*\nX249244Y187874D02*\nY191614D01*\nX247374Y189744D02*\nX251114D01*\nX237776Y196370D02*\nX241713D01*\nX237776Y187118D02*\nX241713D01*\nX237776D02*\nY196370D01*\nX241713Y187118D02*\nY196370D01*\nX239744Y189972D02*\nY193516D01*\nX237972Y191744D02*\nX241516D01*\nX208744Y205823D02*\nY209760D01*\nX206776Y207791D02*\nX210713D01*\nX393744Y171472D02*\nY175016D01*\nX391972Y173244D02*\nX395516D01*\nX389118Y171275D02*\nX398370D01*\nX389118Y175213D02*\nX398370D01*\nX389118Y171275D02*\nY175213D01*\nX398370Y171275D02*\nY175213D01*\nX436972Y229244D02*\nX440516D01*\nX438744Y227472D02*\nY231016D01*\nX440713Y224618D02*\nY233870D01*\nX436776Y224618D02*\nY233870D01*\nY224618D02*\nX440713D01*\nX436776Y233870D02*\nX440713D01*\nX431972Y229744D02*\nX435516D01*\nX433744Y227972D02*\nY231516D01*\nX435713Y225118D02*\nY234370D01*\nX431776Y225118D02*\nY234370D01*\nY225118D02*\nX435713D01*\nX431776Y234370D02*\nX435713D01*\nX416972Y227744D02*\nX420516D01*\nX418744Y225972D02*\nY229516D01*\nX416775Y223118D02*\nY232370D01*\nX420713Y223118D02*\nY232370D01*\nX416775D02*\nX420713D01*\nX416775Y223118D02*\nX420713D01*\nX422972Y227244D02*\nX426516D01*\nX424744Y225472D02*\nY229016D01*\nX422775Y222618D02*\nY231870D01*\nX426713Y222618D02*\nY231870D01*\nX422775D02*\nX426713D01*\nX422775Y222618D02*\nX426713D01*\nX352244Y155374D02*\nY159114D01*\nX350374Y157244D02*\nX354114D01*\nX347618Y155079D02*\nX356870D01*\nX347618Y159409D02*\nX356870D01*\nX347618Y155079D02*\nY159409D01*\nX356870Y155079D02*\nY159409D01*\nX390244Y159972D02*\nY163516D01*\nX388473Y161744D02*\nX392016D01*\nX385618Y159775D02*\nX394870D01*\nX385618Y163712D02*\nX394870D01*\nX385618Y159775D02*\nY163712D01*\nX394870Y159775D02*\nY163712D01*\nX390244Y154972D02*\nY158516D01*\nX388473Y156744D02*\nX392016D01*\nX385618Y154775D02*\nX394870D01*\nX385618Y158712D02*\nX394870D01*\nX385618Y154775D02*\nY158712D01*\nX394870Y154775D02*\nY158712D01*\nX366244Y191472D02*\nY195016D01*\nX364472Y193244D02*\nX368016D01*\nX361618Y195213D02*\nX370870D01*\nX361618Y191275D02*\nX370870D01*\nY195213D01*\nX361618Y191275D02*\nY195213D01*\nX390744Y225472D02*\nY229016D01*\nX388972Y227244D02*\nX392516D01*\nX386118Y229213D02*\nX395370D01*\nX386118Y225275D02*\nX395370D01*\nY229213D01*\nX386118Y225275D02*\nY229213D01*\nX406870Y235079D02*\nY239409D01*\nX397618Y235079D02*\nY239409D01*\nX406870D01*\nX397618Y235079D02*\nX406870D01*\nX400374Y237244D02*\nX404114D01*\nX402244Y235374D02*\nY239114D01*\nX393370Y235276D02*\nY239213D01*\nX384118Y235276D02*\nY239213D01*\nX393370D01*\nX384118Y235276D02*\nX393370D01*\nX386972Y237244D02*\nX390516D01*\nX388744Y235472D02*\nY239016D01*\nX406870Y241079D02*\nY245409D01*\nX397618Y241079D02*\nY245409D01*\nX406870D01*\nX397618Y241079D02*\nX406870D01*\nX400374Y243244D02*\nX404114D01*\nX402244Y241374D02*\nY245114D01*\nX393370Y241276D02*\nY245213D01*\nX384118Y241276D02*\nY245213D01*\nX393370D01*\nX384118Y241276D02*\nX393370D01*\nX386972Y243244D02*\nX390516D01*\nX388744Y241472D02*\nY245016D01*\nX342244Y179374D02*\nY183114D01*\nX340374Y181244D02*\nX344114D01*\nX337618Y183409D02*\nX346870D01*\nX337618Y179079D02*\nX346870D01*\nY183409D01*\nX337618Y179079D02*\nY183409D01*\nX352744Y195374D02*\nY199114D01*\nX350874Y197244D02*\nX354614D01*\nX348118Y195079D02*\nX357370D01*\nX348118Y199410D02*\nX357370D01*\nX348118Y195079D02*\nY199410D01*\nX357370Y195079D02*\nY199410D01*\nX342244Y195374D02*\nY199114D01*\nX340374Y197244D02*\nX344114D01*\nX337618Y195079D02*\nX346870D01*\nX337618Y199410D02*\nX346870D01*\nX337618Y195079D02*\nY199410D01*\nX346870Y195079D02*\nY199410D01*\nX363244Y150874D02*\nY154614D01*\nX361374Y152744D02*\nX365114D01*\nX358618Y150579D02*\nX367870D01*\nX358618Y154910D02*\nX367870D01*\nX358618Y150579D02*\nY154910D01*\nX367870Y150579D02*\nY154910D01*\nX381244Y151972D02*\nY155516D01*\nX379472Y153744D02*\nX383016D01*\nX376618Y155713D02*\nX385870D01*\nX376618Y151775D02*\nX385870D01*\nY155713D01*\nX376618Y151775D02*\nY155713D01*\nX380744Y157472D02*\nY161016D01*\nX378972Y159244D02*\nX382516D01*\nX376118Y157275D02*\nX385370D01*\nX376118Y161212D02*\nX385370D01*\nX376118Y157275D02*\nY161212D01*\nX385370Y157275D02*\nY161212D01*\nX369744Y166472D02*\nY170016D01*\nX367973Y168244D02*\nX371516D01*\nX365118Y170213D02*\nX374370D01*\nX365118Y166276D02*\nX374370D01*\nY170213D01*\nX365118Y166276D02*\nY170213D01*\nX356244Y228473D02*\nY232016D01*\nX354472Y230244D02*\nX358016D01*\nX351618Y228276D02*\nX360870D01*\nX351618Y232213D02*\nX360870D01*\nY228276D02*\nY232213D01*\nX351618Y228276D02*\nY232213D01*\nX338071Y179275D02*\nY183213D01*\nX347323Y179275D02*\nY183213D01*\nX338071D02*\nX347323D01*\nX338071Y179275D02*\nX347323D01*\nX341122Y181244D02*\nX344272D01*\nX342697Y179669D02*\nY182819D01*\nX333392Y184273D02*\nY200415D01*\nX351896Y184273D02*\nY200415D01*\nX333392D02*\nX351896D01*\nX333392Y184273D02*\nX351896D01*\nX340676Y192344D02*\nX344613D01*\nX342644Y190376D02*\nY194313D01*\nX435990Y221398D02*\nY233602D01*\nX422210Y221398D02*\nY233602D01*\nY221398D02*\nX435990D01*\nX422210Y233602D02*\nX435990D01*\nX427131Y227500D02*\nX431068D01*\nX429100Y225531D02*\nY229468D01*\nX415730Y227500D02*\nX419470D01*\nX417600Y225630D02*\nY229370D01*\nX415435Y222874D02*\nY232126D01*\nX419765Y222874D02*\nY232126D01*\nX415435Y222874D02*\nX419765D01*\nX415435Y232126D02*\nX419765D01*\nX415730Y238500D02*\nX419470D01*\nX417600Y236630D02*\nY240370D01*\nX419765Y233874D02*\nY243126D01*\nX415435Y233874D02*\nY243126D01*\nX419765D01*\nX415435Y233874D02*\nX419765D01*\nX347327Y155031D02*\nY158969D01*\nX356579Y155031D02*\nY158969D01*\nX347327D02*\nX356579D01*\nX347327Y155031D02*\nX356579D01*\nX350378Y157000D02*\nX353528D01*\nX351953Y155425D02*\nY158575D01*\nX420157Y142228D02*\nY145772D01*\nX418386Y144000D02*\nX421929D01*\nX415531Y142031D02*\nX424783D01*\nX415531Y145969D02*\nX424783D01*\nY142031D02*\nY145969D01*\nX415531Y142031D02*\nY145969D01*\nX420157Y152228D02*\nY155772D01*\nX418386Y154000D02*\nX421929D01*\nX415531Y152031D02*\nX424783D01*\nX415531Y155969D02*\nX424783D01*\nY152031D02*\nY155969D01*\nX415531Y152031D02*\nY155969D01*\nX383508Y165208D02*\nX386292Y167992D01*\nX383508D02*\nX386292Y165208D01*\nX331144Y226876D02*\nY230813D01*\nX329176Y228844D02*\nX333113D01*\nX323270Y232584D02*\nX339018D01*\nX323270Y225104D02*\nX339018D01*\nX323270D02*\nY232584D01*\nX339018Y225104D02*\nY232584D01*\nX331044Y246576D02*\nY250513D01*\nX329076Y248544D02*\nX333013D01*\nX323170Y252284D02*\nX338918D01*\nX323170Y244804D02*\nX338918D01*\nX323170D02*\nY252284D01*\nX338918Y244804D02*\nY252284D01*\nX361344Y244576D02*\nY248513D01*\nX359376Y246544D02*\nX363313D01*\nX359276Y195567D02*\nX373213D01*\nX359276Y210921D02*\nX373213D01*\nY195567D02*\nY210921D01*\nX359276Y195567D02*\nY210921D01*\nX366244Y201276D02*\nY205213D01*\nX364276Y203244D02*\nX368213D01*\nX434244Y170776D02*\nY174713D01*\nX432276Y172744D02*\nX436213D01*\nX433744Y188276D02*\nY192213D01*\nX431776Y190244D02*\nX435713D01*\nX434244Y204276D02*\nY208213D01*\nX432276Y206244D02*\nX436213D01*\nX440276Y251370D02*\nX444213D01*\nX440276Y242118D02*\nX444213D01*\nX440276D02*\nY251370D01*\nX444213Y242118D02*\nY251370D01*\nX442244Y244972D02*\nY248516D01*\nX440472Y246744D02*\nX444016D01*\nX427079Y201618D02*\nX431409D01*\nX427079Y210870D02*\nX431409D01*\nY201618D02*\nY210870D01*\nX427079Y201618D02*\nY210870D01*\nX429244Y204374D02*\nY208114D01*\nX427374Y206244D02*\nX431114D01*\nX436579Y204118D02*\nX440909D01*\nX436579Y213370D02*\nX440909D01*\nY204118D02*\nY213370D01*\nX436579Y204118D02*\nY213370D01*\nX438744Y206874D02*\nY210614D01*\nX436874Y208744D02*\nX440614D01*\nX427579Y168118D02*\nX431909D01*\nX427579Y177370D02*\nX431909D01*\nY168118D02*\nY177370D01*\nX427579Y168118D02*\nY177370D01*\nX429744Y170874D02*\nY174614D01*\nX427874Y172744D02*\nX431614D01*\nX437079Y170618D02*\nX441409D01*\nX437079Y179870D02*\nX441409D01*\nY170618D02*\nY179870D01*\nX437079Y170618D02*\nY179870D01*\nX439244Y173374D02*\nY177114D01*\nX437374Y175244D02*\nX441114D01*\nX436579Y188118D02*\nX440909D01*\nX436579Y197370D02*\nX440909D01*\nY188118D02*\nY197370D01*\nX436579Y188118D02*\nY197370D01*\nX438744Y190874D02*\nY194614D01*\nX436874Y192744D02*\nX440614D01*\nX427079Y185118D02*\nX431409D01*\nX427079Y194370D02*\nX431409D01*\nY185118D02*\nY194370D01*\nX427079Y185118D02*\nY194370D01*\nX429244Y187874D02*\nY191614D01*\nX427374Y189744D02*\nX431114D01*\nX417776Y196370D02*\nX421713D01*\nX417776Y187118D02*\nX421713D01*\nX417776D02*\nY196370D01*\nX421713Y187118D02*\nY196370D01*\nX419744Y189972D02*\nY193516D01*\nX417972Y191744D02*\nX421516D01*\nX388744Y205823D02*\nY209760D01*\nX386776Y207791D02*\nX390713D01*\nX213744Y351472D02*\nY355016D01*\nX211972Y353244D02*\nX215516D01*\nX209118Y351275D02*\nX218370D01*\nX209118Y355213D02*\nX218370D01*\nX209118Y351275D02*\nY355213D01*\nX218370Y351275D02*\nY355213D01*\nX256972Y409244D02*\nX260516D01*\nX258744Y407472D02*\nY411016D01*\nX260713Y404618D02*\nY413870D01*\nX256776Y404618D02*\nY413870D01*\nY404618D02*\nX260713D01*\nX256776Y413870D02*\nX260713D01*\nX251972Y409744D02*\nX255516D01*\nX253744Y407972D02*\nY411516D01*\nX255713Y405118D02*\nY414370D01*\nX251776Y405118D02*\nY414370D01*\nY405118D02*\nX255713D01*\nX251776Y414370D02*\nX255713D01*\nX236972Y407744D02*\nX240516D01*\nX238744Y405972D02*\nY409516D01*\nX236775Y403118D02*\nY412370D01*\nX240713Y403118D02*\nY412370D01*\nX236775D02*\nX240713D01*\nX236775Y403118D02*\nX240713D01*\nX242972Y407244D02*\nX246516D01*\nX244744Y405472D02*\nY409016D01*\nX242775Y402618D02*\nY411870D01*\nX246713Y402618D02*\nY411870D01*\nX242775D02*\nX246713D01*\nX242775Y402618D02*\nX246713D01*\nX172244Y335374D02*\nY339114D01*\nX170374Y337244D02*\nX174114D01*\nX167618Y335079D02*\nX176870D01*\nX167618Y339409D02*\nX176870D01*\nX167618Y335079D02*\nY339409D01*\nX176870Y335079D02*\nY339409D01*\nX210244Y339972D02*\nY343516D01*\nX208473Y341744D02*\nX212016D01*\nX205618Y339775D02*\nX214870D01*\nX205618Y343712D02*\nX214870D01*\nX205618Y339775D02*\nY343712D01*\nX214870Y339775D02*\nY343712D01*\nX210244Y334972D02*\nY338516D01*\nX208473Y336744D02*\nX212016D01*\nX205618Y334775D02*\nX214870D01*\nX205618Y338712D02*\nX214870D01*\nX205618Y334775D02*\nY338712D01*\nX214870Y334775D02*\nY338712D01*\nX186244Y371472D02*\nY375016D01*\nX184472Y373244D02*\nX188016D01*\nX181618Y375213D02*\nX190870D01*\nX181618Y371275D02*\nX190870D01*\nY375213D01*\nX181618Y371275D02*\nY375213D01*\nX210744Y405472D02*\nY409016D01*\nX208972Y407244D02*\nX212516D01*\nX206118Y409213D02*\nX215370D01*\nX206118Y405275D02*\nX215370D01*\nY409213D01*\nX206118Y405275D02*\nY409213D01*\nX226870Y415079D02*\nY419409D01*\nX217618Y415079D02*\nY419409D01*\nX226870D01*\nX217618Y415079D02*\nX226870D01*\nX220374Y417244D02*\nX224114D01*\nX222244Y415374D02*\nY419114D01*\nX213370Y415276D02*\nY419213D01*\nX204118Y415276D02*\nY419213D01*\nX213370D01*\nX204118Y415276D02*\nX213370D01*\nX206972Y417244D02*\nX210516D01*\nX208744Y415472D02*\nY419016D01*\nX226870Y421079D02*\nY425409D01*\nX217618Y421079D02*\nY425409D01*\nX226870D01*\nX217618Y421079D02*\nX226870D01*\nX220374Y423244D02*\nX224114D01*\nX222244Y421374D02*\nY425114D01*\nX213370Y421276D02*\nY425213D01*\nX204118Y421276D02*\nY425213D01*\nX213370D01*\nX204118Y421276D02*\nX213370D01*\nX206972Y423244D02*\nX210516D01*\nX208744Y421472D02*\nY425016D01*\nX162244Y359374D02*\nY363114D01*\nX160374Y361244D02*\nX164114D01*\nX157618Y363409D02*\nX166870D01*\nX157618Y359079D02*\nX166870D01*\nY363409D01*\nX157618Y359079D02*\nY363409D01*\nX172744Y375374D02*\nY379114D01*\nX170874Y377244D02*\nX174614D01*\nX168118Y375079D02*\nX177370D01*\nX168118Y379410D02*\nX177370D01*\nX168118Y375079D02*\nY379410D01*\nX177370Y375079D02*\nY379410D01*\nX162244Y375374D02*\nY379114D01*\nX160374Y377244D02*\nX164114D01*\nX157618Y375079D02*\nX166870D01*\nX157618Y379410D02*\nX166870D01*\nX157618Y375079D02*\nY379410D01*\nX166870Y375079D02*\nY379410D01*\nX183244Y330874D02*\nY334614D01*\nX181374Y332744D02*\nX185114D01*\nX178618Y330579D02*\nX187870D01*\nX178618Y334910D02*\nX187870D01*\nX178618Y330579D02*\nY334910D01*\nX187870Y330579D02*\nY334910D01*\nX201244Y331972D02*\nY335516D01*\nX199472Y333744D02*\nX203016D01*\nX196618Y335713D02*\nX205870D01*\nX196618Y331775D02*\nX205870D01*\nY335713D01*\nX196618Y331775D02*\nY335713D01*\nX200744Y337472D02*\nY341016D01*\nX198972Y339244D02*\nX202516D01*\nX196118Y337275D02*\nX205370D01*\nX196118Y341212D02*\nX205370D01*\nX196118Y337275D02*\nY341212D01*\nX205370Y337275D02*\nY341212D01*\nX189744Y346472D02*\nY350016D01*\nX187973Y348244D02*\nX191516D01*\nX185118Y350213D02*\nX194370D01*\nX185118Y346276D02*\nX194370D01*\nY350213D01*\nX185118Y346276D02*\nY350213D01*\nX176244Y408473D02*\nY412016D01*\nX174472Y410244D02*\nX178016D01*\nX171618Y408276D02*\nX180870D01*\nX171618Y412213D02*\nX180870D01*\nY408276D02*\nY412213D01*\nX171618Y408276D02*\nY412213D01*\nX158071Y359275D02*\nY363213D01*\nX167323Y359275D02*\nY363213D01*\nX158071D02*\nX167323D01*\nX158071Y359275D02*\nX167323D01*\nX161122Y361244D02*\nX164272D01*\nX162697Y359669D02*\nY362819D01*\nX153392Y364273D02*\nY380415D01*\nX171896Y364273D02*\nY380415D01*\nX153392D02*\nX171896D01*\nX153392Y364273D02*\nX171896D01*\nX160676Y372344D02*\nX164613D01*\nX162644Y370376D02*\nY374313D01*\nX255990Y401398D02*\nY413602D01*\nX242210Y401398D02*\nY413602D01*\nY401398D02*\nX255990D01*\nX242210Y413602D02*\nX255990D01*\nX247131Y407500D02*\nX251068D01*\nX249100Y405531D02*\nY409468D01*\nX235730Y407500D02*\nX239470D01*\nX237600Y405630D02*\nY409370D01*\nX235435Y402874D02*\nY412126D01*\nX239765Y402874D02*\nY412126D01*\nX235435Y402874D02*\nX239765D01*\nX235435Y412126D02*\nX239765D01*\nX235730Y418500D02*\nX239470D01*\nX237600Y416630D02*\nY420370D01*\nX239765Y413874D02*\nY423126D01*\nX235435Y413874D02*\nY423126D01*\nX239765D01*\nX235435Y413874D02*\nX239765D01*\nX167327Y335031D02*\nY338969D01*\nX176579Y335031D02*\nY338969D01*\nX167327D02*\nX176579D01*\nX167327Y335031D02*\nX176579D01*\nX170378Y337000D02*\nX173528D01*\nX171953Y335425D02*\nY338575D01*\nX240157Y322228D02*\nY325772D01*\nX238386Y324000D02*\nX241929D01*\nX235531Y322031D02*\nX244783D01*\nX235531Y325969D02*\nX244783D01*\nY322031D02*\nY325969D01*\nX235531Y322031D02*\nY325969D01*\nX240157Y332228D02*\nY335772D01*\nX238386Y334000D02*\nX241929D01*\nX235531Y332031D02*\nX244783D01*\nX235531Y335969D02*\nX244783D01*\nY332031D02*\nY335969D01*\nX235531Y332031D02*\nY335969D01*\nX203508Y345208D02*\nX206292Y347992D01*\nX203508D02*\nX206292Y345208D01*\nX151144Y406876D02*\nY410813D01*\nX149176Y408844D02*\nX153113D01*\nX143270Y412584D02*\nX159018D01*\nX143270Y405104D02*\nX159018D01*\nX143270D02*\nY412584D01*\nX159018Y405104D02*\nY412584D01*\nX151044Y426576D02*\nY430513D01*\nX149076Y428544D02*\nX153013D01*\nX143170Y432284D02*\nX158918D01*\nX143170Y424804D02*\nX158918D01*\nX143170D02*\nY432284D01*\nX158918Y424804D02*\nY432284D01*\nX181344Y424576D02*\nY428513D01*\nX179376Y426544D02*\nX183313D01*\nX179276Y375567D02*\nX193213D01*\nX179276Y390921D02*\nX193213D01*\nY375567D02*\nY390921D01*\nX179276Y375567D02*\nY390921D01*\nX186244Y381276D02*\nY385213D01*\nX184276Y383244D02*\nX188213D01*\nX254244Y350776D02*\nY354713D01*\nX252276Y352744D02*\nX256213D01*\nX253744Y368276D02*\nY372213D01*\nX251776Y370244D02*\nX255713D01*\nX254244Y384276D02*\nY388213D01*\nX252276Y386244D02*\nX256213D01*\nX260276Y431370D02*\nX264213D01*\nX260276Y422118D02*\nX264213D01*\nX260276D02*\nY431370D01*\nX264213Y422118D02*\nY431370D01*\nX262244Y424972D02*\nY428516D01*\nX260472Y426744D02*\nX264016D01*\nX247079Y381618D02*\nX251409D01*\nX247079Y390870D02*\nX251409D01*\nY381618D02*\nY390870D01*\nX247079Y381618D02*\nY390870D01*\nX249244Y384374D02*\nY388114D01*\nX247374Y386244D02*\nX251114D01*\nX256579Y384118D02*\nX260909D01*\nX256579Y393370D02*\nX260909D01*\nY384118D02*\nY393370D01*\nX256579Y384118D02*\nY393370D01*\nX258744Y386874D02*\nY390614D01*\nX256874Y388744D02*\nX260614D01*\nX247579Y348118D02*\nX251909D01*\nX247579Y357370D02*\nX251909D01*\nY348118D02*\nY357370D01*\nX247579Y348118D02*\nY357370D01*\nX249744Y350874D02*\nY354614D01*\nX247874Y352744D02*\nX251614D01*\nX257079Y350618D02*\nX261409D01*\nX257079Y359870D02*\nX261409D01*\nY350618D02*\nY359870D01*\nX257079Y350618D02*\nY359870D01*\nX259244Y353374D02*\nY357114D01*\nX257374Y355244D02*\nX261114D01*\nX256579Y368118D02*\nX260909D01*\nX256579Y377370D02*\nX260909D01*\nY368118D02*\nY377370D01*\nX256579Y368118D02*\nY377370D01*\nX258744Y370874D02*\nY374614D01*\nX256874Y372744D02*\nX260614D01*\nX247079Y365118D02*\nX251409D01*\nX247079Y374370D02*\nX251409D01*\nY365118D02*\nY374370D01*\nX247079Y365118D02*\nY374370D01*\nX249244Y367874D02*\nY371614D01*\nX247374Y369744D02*\nX251114D01*\nX237776Y376370D02*\nX241713D01*\nX237776Y367118D02*\nX241713D01*\nX237776D02*\nY376370D01*\nX241713Y367118D02*\nY376370D01*\nX239744Y369972D02*\nY373516D01*\nX237972Y371744D02*\nX241516D01*\nX208744Y385823D02*\nY389760D01*\nX206776Y387791D02*\nX210713D01*\nX393744Y351472D02*\nY355016D01*\nX391972Y353244D02*\nX395516D01*\nX389118Y351275D02*\nX398370D01*\nX389118Y355213D02*\nX398370D01*\nX389118Y351275D02*\nY355213D01*\nX398370Y351275D02*\nY355213D01*\nX436972Y409244D02*\nX440516D01*\nX438744Y407472D02*\nY411016D01*\nX440713Y404618D02*\nY413870D01*\nX436776Y404618D02*\nY413870D01*\nY404618D02*\nX440713D01*\nX436776Y413870D02*\nX440713D01*\nX431972Y409744D02*\nX435516D01*\nX433744Y407972D02*\nY411516D01*\nX435713Y405118D02*\nY414370D01*\nX431776Y405118D02*\nY414370D01*\nY405118D02*\nX435713D01*\nX431776Y414370D02*\nX435713D01*\nX416972Y407744D02*\nX420516D01*\nX418744Y405972D02*\nY409516D01*\nX416775Y403118D02*\nY412370D01*\nX420713Y403118D02*\nY412370D01*\nX416775D02*\nX420713D01*\nX416775Y403118D02*\nX420713D01*\nX422972Y407244D02*\nX426516D01*\nX424744Y405472D02*\nY409016D01*\nX422775Y402618D02*\nY411870D01*\nX426713Y402618D02*\nY411870D01*\nX422775D02*\nX426713D01*\nX422775Y402618D02*\nX426713D01*\nX352244Y335374D02*\nY339114D01*\nX350374Y337244D02*\nX354114D01*\nX347618Y335079D02*\nX356870D01*\nX347618Y339409D02*\nX356870D01*\nX347618Y335079D02*\nY339409D01*\nX356870Y335079D02*\nY339409D01*\nX390244Y339972D02*\nY343516D01*\nX388473Y341744D02*\nX392016D01*\nX385618Y339775D02*\nX394870D01*\nX385618Y343712D02*\nX394870D01*\nX385618Y339775D02*\nY343712D01*\nX394870Y339775D02*\nY343712D01*\nX390244Y334972D02*\nY338516D01*\nX388473Y336744D02*\nX392016D01*\nX385618Y334775D02*\nX394870D01*\nX385618Y338712D02*\nX394870D01*\nX385618Y334775D02*\nY338712D01*\nX394870Y334775D02*\nY338712D01*\nX366244Y371472D02*\nY375016D01*\nX364472Y373244D02*\nX368016D01*\nX361618Y375213D02*\nX370870D01*\nX361618Y371275D02*\nX370870D01*\nY375213D01*\nX361618Y371275D02*\nY375213D01*\nX390744Y405472D02*\nY409016D01*\nX388972Y407244D02*\nX392516D01*\nX386118Y409213D02*\nX395370D01*\nX386118Y405275D02*\nX395370D01*\nY409213D01*\nX386118Y405275D02*\nY409213D01*\nX406870Y415079D02*\nY419409D01*\nX397618Y415079D02*\nY419409D01*\nX406870D01*\nX397618Y415079D02*\nX406870D01*\nX400374Y417244D02*\nX404114D01*\nX402244Y415374D02*\nY419114D01*\nX393370Y415276D02*\nY419213D01*\nX384118Y415276D02*\nY419213D01*\nX393370D01*\nX384118Y415276D02*\nX393370D01*\nX386972Y417244D02*\nX390516D01*\nX388744Y415472D02*\nY419016D01*\nX406870Y421079D02*\nY425409D01*\nX397618Y421079D02*\nY425409D01*\nX406870D01*\nX397618Y421079D02*\nX406870D01*\nX400374Y423244D02*\nX404114D01*\nX402244Y421374D02*\nY425114D01*\nX393370Y421276D02*\nY425213D01*\nX384118Y421276D02*\nY425213D01*\nX393370D01*\nX384118Y421276D02*\nX393370D01*\nX386972Y423244D02*\nX390516D01*\nX388744Y421472D02*\nY425016D01*\nX342244Y359374D02*\nY363114D01*\nX340374Y361244D02*\nX344114D01*\nX337618Y363409D02*\nX346870D01*\nX337618Y359079D02*\nX346870D01*\nY363409D01*\nX337618Y359079D02*\nY363409D01*\nX352744Y375374D02*\nY379114D01*\nX350874Y377244D02*\nX354614D01*\nX348118Y375079D02*\nX357370D01*\nX348118Y379410D02*\nX357370D01*\nX348118Y375079D02*\nY379410D01*\nX357370Y375079D02*\nY379410D01*\nX342244Y375374D02*\nY379114D01*\nX340374Y377244D02*\nX344114D01*\nX337618Y375079D02*\nX346870D01*\nX337618Y379410D02*\nX346870D01*\nX337618Y375079D02*\nY379410D01*\nX346870Y375079D02*\nY379410D01*\nX363244Y330874D02*\nY334614D01*\nX361374Y332744D02*\nX365114D01*\nX358618Y330579D02*\nX367870D01*\nX358618Y334910D02*\nX367870D01*\nX358618Y330579D02*\nY334910D01*\nX367870Y330579D02*\nY334910D01*\nX381244Y331972D02*\nY335516D01*\nX379472Y333744D02*\nX383016D01*\nX376618Y335713D02*\nX385870D01*\nX376618Y331775D02*\nX385870D01*\nY335713D01*\nX376618Y331775D02*\nY335713D01*\nX380744Y337472D02*\nY341016D01*\nX378972Y339244D02*\nX382516D01*\nX376118Y337275D02*\nX385370D01*\nX376118Y341212D02*\nX385370D01*\nX376118Y337275D02*\nY341212D01*\nX385370Y337275D02*\nY341212D01*\nX369744Y346472D02*\nY350016D01*\nX367973Y348244D02*\nX371516D01*\nX365118Y350213D02*\nX374370D01*\nX365118Y346276D02*\nX374370D01*\nY350213D01*\nX365118Y346276D02*\nY350213D01*\nX356244Y408473D02*\nY412016D01*\nX354472Y410244D02*\nX358016D01*\nX351618Y408276D02*\nX360870D01*\nX351618Y412213D02*\nX360870D01*\nY408276D02*\nY412213D01*\nX351618Y408276D02*\nY412213D01*\nX338071Y359275D02*\nY363213D01*\nX347323Y359275D02*\nY363213D01*\nX338071D02*\nX347323D01*\nX338071Y359275D02*\nX347323D01*\nX341122Y361244D02*\nX344272D01*\nX342697Y359669D02*\nY362819D01*\nX333392Y364273D02*\nY380415D01*\nX351896Y364273D02*\nY380415D01*\nX333392D02*\nX351896D01*\nX333392Y364273D02*\nX351896D01*\nX340676Y372344D02*\nX344613D01*\nX342644Y370376D02*\nY374313D01*\nX435990Y401398D02*\nY413602D01*\nX422210Y401398D02*\nY413602D01*\nY401398D02*\nX435990D01*\nX422210Y413602D02*\nX435990D01*\nX427131Y407500D02*\nX431068D01*\nX429100Y405531D02*\nY409468D01*\nX415730Y407500D02*\nX419470D01*\nX417600Y405630D02*\nY409370D01*\nX415435Y402874D02*\nY412126D01*\nX419765Y402874D02*\nY412126D01*\nX415435Y402874D02*\nX419765D01*\nX415435Y412126D02*\nX419765D01*\nX415730Y418500D02*\nX419470D01*\nX417600Y416630D02*\nY420370D01*\nX419765Y413874D02*\nY423126D01*\nX415435Y413874D02*\nY423126D01*\nX419765D01*\nX415435Y413874D02*\nX419765D01*\nX347327Y335031D02*\nY338969D01*\nX356579Y335031D02*\nY338969D01*\nX347327D02*\nX356579D01*\nX347327Y335031D02*\nX356579D01*\nX350378Y337000D02*\nX353528D01*\nX351953Y335425D02*\nY338575D01*\nX420157Y322228D02*\nY325772D01*\nX418386Y324000D02*\nX421929D01*\nX415531Y322031D02*\nX424783D01*\nX415531Y325969D02*\nX424783D01*\nY322031D02*\nY325969D01*\nX415531Y322031D02*\nY325969D01*\nX420157Y332228D02*\nY335772D01*\nX418386Y334000D02*\nX421929D01*\nX415531Y332031D02*\nX424783D01*\nX415531Y335969D02*\nX424783D01*\nY332031D02*\nY335969D01*\nX415531Y332031D02*\nY335969D01*\nX383508Y345208D02*\nX386292Y347992D01*\nX383508D02*\nX386292Y345208D01*\nX331144Y406876D02*\nY410813D01*\nX329176Y408844D02*\nX333113D01*\nX323270Y412584D02*\nX339018D01*\nX323270Y405104D02*\nX339018D01*\nX323270D02*\nY412584D01*\nX339018Y405104D02*\nY412584D01*\nX331044Y426576D02*\nY430513D01*\nX329076Y428544D02*\nX333013D01*\nX323170Y432284D02*\nX338918D01*\nX323170Y424804D02*\nX338918D01*\nX323170D02*\nY432284D01*\nX338918Y424804D02*\nY432284D01*\nX361344Y424576D02*\nY428513D01*\nX359376Y426544D02*\nX363313D01*\nX359276Y375567D02*\nX373213D01*\nX359276Y390921D02*\nX373213D01*\nY375567D02*\nY390921D01*\nX359276Y375567D02*\nY390921D01*\nX366244Y381276D02*\nY385213D01*\nX364276Y383244D02*\nX368213D01*\nX434244Y350776D02*\nY354713D01*\nX432276Y352744D02*\nX436213D01*\nX433744Y368276D02*\nY372213D01*\nX431776Y370244D02*\nX435713D01*\nX434244Y384276D02*\nY388213D01*\nX432276Y386244D02*\nX436213D01*\nX440276Y431370D02*\nX444213D01*\nX440276Y422118D02*\nX444213D01*\nX440276D02*\nY431370D01*\nX444213Y422118D02*\nY431370D01*\nX442244Y424972D02*\nY428516D01*\nX440472Y426744D02*\nX444016D01*\nX427079Y381618D02*\nX431409D01*\nX427079Y390870D02*\nX431409D01*\nY381618D02*\nY390870D01*\nX427079Y381618D02*\nY390870D01*\nX429244Y384374D02*\nY388114D01*\nX427374Y386244D02*\nX431114D01*\nX436579Y384118D02*\nX440909D01*\nX436579Y393370D02*\nX440909D01*\nY384118D02*\nY393370D01*\nX436579Y384118D02*\nY393370D01*\nX438744Y386874D02*\nY390614D01*\nX436874Y388744D02*\nX440614D01*\nX427579Y348118D02*\nX431909D01*\nX427579Y357370D02*\nX431909D01*\nY348118D02*\nY357370D01*\nX427579Y348118D02*\nY357370D01*\nX429744Y350874D02*\nY354614D01*\nX427874Y352744D02*\nX431614D01*\nX437079Y350618D02*\nX441409D01*\nX437079Y359870D02*\nX441409D01*\nY350618D02*\nY359870D01*\nX437079Y350618D02*\nY359870D01*\nX439244Y353374D02*\nY357114D01*\nX437374Y355244D02*\nX441114D01*\nX436579Y368118D02*\nX440909D01*\nX436579Y377370D02*\nX440909D01*\nY368118D02*\nY377370D01*\nX436579Y368118D02*\nY377370D01*\nX438744Y370874D02*\nY374614D01*\nX436874Y372744D02*\nX440614D01*\nX427079Y365118D02*\nX431409D01*\nX427079Y374370D02*\nX431409D01*\nY365118D02*\nY374370D01*\nX427079Y365118D02*\nY374370D01*\nX429244Y367874D02*\nY371614D01*\nX427374Y369744D02*\nX431114D01*\nX417776Y376370D02*\nX421713D01*\nX417776Y367118D02*\nX421713D01*\nX417776D02*\nY376370D01*\nX421713Y367118D02*\nY376370D01*\nX419744Y369972D02*\nY373516D01*\nX417972Y371744D02*\nX421516D01*\nX388744Y385823D02*\nY389760D01*\nX386776Y387791D02*\nX390713D01*\nD119*\nX204900Y189289D02*\nX227589Y166600D01*\nX182211D02*\nX204900Y143911D01*\nX182211Y166600D02*\nX204900Y189289D01*\nY143911D02*\nX227589Y166600D01*\nX165990Y257568D02*\nX196698D01*\nX165990Y235520D02*\nX196698D01*\nX165990D02*\nY257568D01*\nX196698Y235520D02*\nY257568D01*\nX246567Y165657D02*\nX261921D01*\nX246567Y179831D02*\nX261921D01*\nY165657D02*\nY179831D01*\nX246567Y165657D02*\nY179831D01*\nX246067Y183157D02*\nX261421D01*\nX246067Y197331D02*\nX261421D01*\nY183157D02*\nY197331D01*\nX246067Y183157D02*\nY197331D01*\nX246567Y199157D02*\nX261921D01*\nX246567Y213331D02*\nX261921D01*\nY199157D02*\nY213331D01*\nX246567Y199157D02*\nY213331D01*\nX197720Y192536D02*\nX219768D01*\nX197720Y223047D02*\nX219768D01*\nY192536D02*\nY223047D01*\nX197720Y192536D02*\nY223047D01*\nX384900Y189289D02*\nX407589Y166600D01*\nX362211D02*\nX384900Y143911D01*\nX362211Y166600D02*\nX384900Y189289D01*\nY143911D02*\nX407589Y166600D01*\nX345990Y257568D02*\nX376698D01*\nX345990Y235520D02*\nX376698D01*\nX345990D02*\nY257568D01*\nX376698Y235520D02*\nY257568D01*\nX426567Y165657D02*\nX441921D01*\nX426567Y179831D02*\nX441921D01*\nY165657D02*\nY179831D01*\nX426567Y165657D02*\nY179831D01*\nX426067Y183157D02*\nX441421D01*\nX426067Y197331D02*\nX441421D01*\nY183157D02*\nY197331D01*\nX426067Y183157D02*\nY197331D01*\nX426567Y199157D02*\nX441921D01*\nX426567Y213331D02*\nX441921D01*\nY199157D02*\nY213331D01*\nX426567Y199157D02*\nY213331D01*\nX377720Y192536D02*\nX399768D01*\nX377720Y223047D02*\nX399768D01*\nY192536D02*\nY223047D01*\nX377720Y192536D02*\nY223047D01*\nX204900Y369289D02*\nX227589Y346600D01*\nX182211D02*\nX204900Y323911D01*\nX182211Y346600D02*\nX204900Y369289D01*\nY323911D02*\nX227589Y346600D01*\nX165990Y437568D02*\nX196698D01*\nX165990Y415520D02*\nX196698D01*\nX165990D02*\nY437568D01*\nX196698Y415520D02*\nY437568D01*\nX246567Y345657D02*\nX261921D01*\nX246567Y359831D02*\nX261921D01*\nY345657D02*\nY359831D01*\nX246567Y345657D02*\nY359831D01*\nX246067Y363157D02*\nX261421D01*\nX246067Y377331D02*\nX261421D01*\nY363157D02*\nY377331D01*\nX246067Y363157D02*\nY377331D01*\nX246567Y379157D02*\nX261921D01*\nX246567Y393331D02*\nX261921D01*\nY379157D02*\nY393331D01*\nX246567Y379157D02*\nY393331D01*\nX197720Y372536D02*\nX219768D01*\nX197720Y403047D02*\nX219768D01*\nY372536D02*\nY403047D01*\nX197720Y372536D02*\nY403047D01*\nX384900Y369289D02*\nX407589Y346600D01*\nX362211D02*\nX384900Y323911D01*\nX362211Y346600D02*\nX384900Y369289D01*\nY323911D02*\nX407589Y346600D01*\nX345990Y437568D02*\nX376698D01*\nX345990Y415520D02*\nX376698D01*\nX345990D02*\nY437568D01*\nX376698Y415520D02*\nY437568D01*\nX426567Y345657D02*\nX441921D01*\nX426567Y359831D02*\nX441921D01*\nY345657D02*\nY359831D01*\nX426567Y345657D02*\nY359831D01*\nX426067Y363157D02*\nX441421D01*\nX426067Y377331D02*\nX441421D01*\nY363157D02*\nY377331D01*\nX426067Y363157D02*\nY377331D01*\nX426567Y379157D02*\nX441921D01*\nX426567Y393331D02*\nX441921D01*\nY379157D02*\nY393331D01*\nX426567Y379157D02*\nY393331D01*\nX377720Y372536D02*\nX399768D01*\nX377720Y403047D02*\nX399768D01*\nY372536D02*\nY403047D01*\nX377720Y372536D02*\nY403047D01*\nM02*\n"
  },
  {
    "path": "hardware/panel.GM2",
    "content": "G04 Layer_Color=8388736*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD68C,0.00500*%\nD68*\nX134044Y222344D02*\nG03*\nX134044Y222344I-2000J0D01*\nG01*\nY232344D02*\nG03*\nX134044Y232344I-2000J0D01*\nG01*\nY242344D02*\nG03*\nX134044Y242344I-2000J0D01*\nG01*\nY252344D02*\nG03*\nX134044Y252344I-2000J0D01*\nG01*\nX237244Y252744D02*\nG03*\nX237244Y252744I-2000J0D01*\nG01*\nX227244D02*\nG03*\nX227244Y252744I-2000J0D01*\nG01*\nX217244D02*\nG03*\nX217244Y252744I-2000J0D01*\nG01*\nX207244D02*\nG03*\nX207244Y252744I-2000J0D01*\nG01*\nX314044Y222344D02*\nG03*\nX314044Y222344I-2000J0D01*\nG01*\nY232344D02*\nG03*\nX314044Y232344I-2000J0D01*\nG01*\nY242344D02*\nG03*\nX314044Y242344I-2000J0D01*\nG01*\nY252344D02*\nG03*\nX314044Y252344I-2000J0D01*\nG01*\nX417244Y252744D02*\nG03*\nX417244Y252744I-2000J0D01*\nG01*\nX407244D02*\nG03*\nX407244Y252744I-2000J0D01*\nG01*\nX397244D02*\nG03*\nX397244Y252744I-2000J0D01*\nG01*\nX387244D02*\nG03*\nX387244Y252744I-2000J0D01*\nG01*\nX134044Y402344D02*\nG03*\nX134044Y402344I-2000J0D01*\nG01*\nY412344D02*\nG03*\nX134044Y412344I-2000J0D01*\nG01*\nY422344D02*\nG03*\nX134044Y422344I-2000J0D01*\nG01*\nY432344D02*\nG03*\nX134044Y432344I-2000J0D01*\nG01*\nX237244Y432744D02*\nG03*\nX237244Y432744I-2000J0D01*\nG01*\nX227244D02*\nG03*\nX227244Y432744I-2000J0D01*\nG01*\nX217244D02*\nG03*\nX217244Y432744I-2000J0D01*\nG01*\nX207244D02*\nG03*\nX207244Y432744I-2000J0D01*\nG01*\nX314044Y402344D02*\nG03*\nX314044Y402344I-2000J0D01*\nG01*\nY412344D02*\nG03*\nX314044Y412344I-2000J0D01*\nG01*\nY422344D02*\nG03*\nX314044Y422344I-2000J0D01*\nG01*\nY432344D02*\nG03*\nX314044Y432344I-2000J0D01*\nG01*\nX417244Y432744D02*\nG03*\nX417244Y432744I-2000J0D01*\nG01*\nX407244D02*\nG03*\nX407244Y432744I-2000J0D01*\nG01*\nX397244D02*\nG03*\nX397244Y432744I-2000J0D01*\nG01*\nX387244D02*\nG03*\nX387244Y432744I-2000J0D01*\nG01*\nM02*\n"
  },
  {
    "path": "hardware/panel.GM3",
    "content": "G04 Layer_Color=12566272*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD40C,0.02000*%\n%ADD117C,0.04724*%\nD40*\nX160800Y531193D02*\nY511200D01*\nX170797D01*\nX174129Y514532D01*\nY517865D01*\nX170797Y521197D01*\nX160800D01*\nX170797D01*\nX174129Y524529D01*\nY527861D01*\nX170797Y531193D01*\nX160800D01*\nX184126Y511200D02*\nX190790D01*\nX194123Y514532D01*\nY521197D01*\nX190790Y524529D01*\nX184126D01*\nX180793Y521197D01*\nY514532D01*\nX184126Y511200D01*\nX204119Y524529D02*\nX210784D01*\nX214116Y521197D01*\nY511200D01*\nX204119D01*\nX200787Y514532D01*\nX204119Y517865D01*\nX214116D01*\nX220781Y524529D02*\nY511200D01*\nY517865D01*\nX224113Y521197D01*\nX227445Y524529D01*\nX230777D01*\nX254103Y531193D02*\nY511200D01*\nX244106D01*\nX240774Y514532D01*\nY521197D01*\nX244106Y524529D01*\nX254103D01*\nX290758Y531193D02*\nX284093D01*\nX280761Y527861D01*\nY514532D01*\nX284093Y511200D01*\nX290758D01*\nX294090Y514532D01*\nY527861D01*\nX290758Y531193D01*\nX300755Y524529D02*\nY514532D01*\nX304087Y511200D01*\nX314084D01*\nY524529D01*\nX324081Y527861D02*\nY524529D01*\nX320748D01*\nX327413D01*\nX324081D01*\nY514532D01*\nX327413Y511200D01*\nX337410D02*\nX344074D01*\nX340742D01*\nY531193D01*\nX337410D01*\nX354071Y511200D02*\nX360735D01*\nX357403D01*\nY524529D01*\nX354071D01*\nX370732Y511200D02*\nY524529D01*\nX380729D01*\nX384061Y521197D01*\nY511200D01*\nX400723D02*\nX394058D01*\nX390726Y514532D01*\nY521197D01*\nX394058Y524529D01*\nX400723D01*\nX404055Y521197D01*\nY517865D01*\nX390726D01*\nD117*\nX357900Y124200D02*\nX358000Y113200D01*\nX358600Y112600D01*\nX418000D01*\nY124200D01*\nX357900D02*\nX418000D01*\nX361600Y290100D02*\nX361900Y304300D01*\nX361600Y290100D02*\nX405600D01*\nX405900Y289800D01*\nX406000Y289900D01*\nY304500D01*\nX362100D02*\nX406000D01*\nX361900Y304300D02*\nX362100Y304500D01*\nX182100Y112800D02*\nY124400D01*\nY112800D02*\nX182800Y112100D01*\nX235400D01*\nY123800D01*\nX234800Y124400D02*\nX235400Y123800D01*\nX182100Y124400D02*\nX234800D01*\nX114600Y407900D02*\nX125400Y407800D01*\nX114600Y407900D02*\nX114700Y407800D01*\nY357300D02*\nY407800D01*\nY357300D02*\nX124600D01*\nX125400Y358100D01*\nY407800D01*\nX115000Y240000D02*\nX125400D01*\nX115000Y180000D02*\nY240000D01*\nY180000D02*\nX125400D01*\nY240000D01*\nX291000Y177000D02*\nY228000D01*\nY177000D02*\nX305000D01*\nY228000D01*\nX291000D02*\nX305000D01*\nX177100Y304500D02*\nX235100D01*\nY290000D02*\nY304500D01*\nX177100Y290000D02*\nX235100D01*\nX177100D02*\nY304500D01*\nX291000Y134000D02*\nY150000D01*\nX281500Y124500D02*\nX291000Y134000D01*\nX263000Y124500D02*\nX281500D01*\nX262500Y125000D02*\nX263000Y124500D01*\nX262500Y112500D02*\nY125000D01*\nY112500D02*\nX332500D01*\nX333000Y113000D01*\nY124000D01*\nX315500D02*\nX333000D01*\nX305500Y134000D02*\nX315500Y124000D01*\nX305500Y134000D02*\nY150000D01*\nX291000D02*\nX305500D01*\nX125000Y133000D02*\nY152500D01*\nY133000D02*\nX125500D01*\nX134500Y124000D01*\nX135000Y124500D01*\nX154500D01*\nY112000D02*\nY124500D01*\nX154000Y112500D02*\nX154500Y112000D01*\nX115000Y112500D02*\nX154000D01*\nX115000D02*\nY152000D01*\nX114500Y152500D02*\nX115000Y152000D01*\nX114500Y152500D02*\nX125000D01*\nX114550Y330100D02*\nX114987Y265000D01*\nX125500Y265000D01*\nX125500Y280500D01*\nX135000Y290000D01*\nX149500D01*\nY304500D01*\nX134500D02*\nX149500D01*\nX125500Y313500D02*\nX134500Y304500D01*\nX125500Y313500D02*\nY330100D01*\nX114550D02*\nX125500D01*\nX290281Y401131D02*\nX290900Y402700D01*\nX290281Y401131D02*\nX291107Y364800D01*\nX305500D01*\nY402700D01*\nX290900D02*\nX305500D01*\nX290500Y314000D02*\nY337500D01*\nX281000Y304500D02*\nX290500Y314000D01*\nX262000Y304500D02*\nX281000D01*\nX262000Y290000D02*\nY304500D01*\nY290000D02*\nX281000D01*\nX291000Y280000D01*\nY255500D02*\nY280000D01*\nY255500D02*\nX304500D01*\nX305000Y255000D01*\nY280500D01*\nX315000Y290500D01*\nX334500D01*\nY304500D01*\nX314500D02*\nX334500D01*\nX314500D02*\nY305000D01*\nX305500Y314000D02*\nX314500Y305000D01*\nX305500Y314000D02*\nY337500D01*\nX290500D02*\nX305500D01*\nX471000Y134000D02*\nY152500D01*\nX461500Y124500D02*\nX471000Y134000D01*\nX444600Y124500D02*\nX461500D01*\nX444600Y112500D02*\nY124500D01*\nY112500D02*\nX480000D01*\nX482500Y115000D01*\nY152500D01*\nX471000D02*\nX482500D01*\nX470500Y177500D02*\nY215000D01*\nY177500D02*\nX482500D01*\nY215000D01*\nX470500D02*\nX482500D01*\nX471000Y338100D02*\nX482500D01*\nY242300D02*\nY338100D01*\nX471000Y242300D02*\nX482500D01*\nX471000D02*\nY280000D01*\nX470000D02*\nX471000D01*\nX459500Y290500D02*\nX470000Y280000D01*\nX432500Y290500D02*\nX459500D01*\nX432500D02*\nY304000D01*\nX432000Y304500D02*\nX432500Y304000D01*\nX432000Y304500D02*\nX461000D01*\nX471000Y314500D01*\nY338100D01*\nX471000Y400400D02*\nX471000Y365000D01*\nX482500D01*\nX480000D02*\nX482500D01*\nX480000D02*\nY367500D01*\nX480000Y400400D02*\nX480000Y367500D01*\nX471000Y400400D02*\nX480000D01*\nX435000Y470000D02*\nY480000D01*\nX480000D01*\nY428000D02*\nY480000D01*\nY428000D02*\nX480500Y427500D01*\nX470500D02*\nX480500D01*\nX470500D02*\nY459500D01*\nX471000Y460000D01*\nX461000Y470000D02*\nX471000Y460000D01*\nX435000Y470000D02*\nX461000D01*\nX366100D02*\nY480000D01*\nX409500D01*\nY470000D02*\nY480000D01*\nX366100Y470000D02*\nX409500D01*\nX253900D02*\nY480000D01*\nX338700D01*\nY470000D02*\nY480000D01*\nX315000Y470000D02*\nX338700D01*\nX305000Y460000D02*\nX315000Y470000D01*\nX305000Y460000D02*\nX305500Y459500D01*\nY430000D02*\nY459500D01*\nX291000Y430000D02*\nX305500D01*\nX291000D02*\nY460000D01*\nX290500D02*\nX291000D01*\nX280500Y470000D02*\nX290500Y460000D01*\nX253900Y470000D02*\nX280500D01*\nX190000D02*\nX227500D01*\nY480000D01*\nX190000D02*\nX227500D01*\nX190000Y470000D02*\nY480000D01*\nX135500Y470000D02*\nX157500D01*\nX125500Y460000D02*\nX135500Y470000D01*\nX125000Y460000D02*\nX125500D01*\nX125000Y435000D02*\nY460000D01*\nX115000Y435000D02*\nX125000D01*\nX115000D02*\nY480000D01*\nX157500D01*\nY470000D02*\nY480000D01*\nX100000Y100000D02*\nX493700D01*\nY493700D01*\nX100000D02*\nX493700D01*\nX100000Y100000D02*\nY493700D01*\nM02*\n"
  },
  {
    "path": "hardware/panel.GML",
    "content": "G04 Layer_Color=12632256*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD49C,0.01000*%\n%ADD50O,0.04724X0.09449*%\n%ADD51O,0.06102X0.03543*%\n%ADD52O,0.03740X0.04921*%\n%ADD53C,0.07000*%\n%ADD54R,0.07000X0.07000*%\n%ADD55C,0.04000*%\n%ADD56R,0.04000X0.04000*%\n%ADD57R,0.07000X0.07000*%\n%ADD58C,0.07874*%\nD49*\nX125000Y260000D02*\nD03*\nY265000D02*\nD03*\nY255000D02*\nD03*\nY250000D02*\nD03*\nY245000D02*\nD03*\nY240000D02*\nD03*\nX124600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX290600Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX305100Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX291400Y229800D02*\nD03*\nY234800D02*\nD03*\nY239800D02*\nD03*\nY244800D02*\nD03*\nY254800D02*\nD03*\nY249800D02*\nD03*\nX304800Y229300D02*\nD03*\nY234300D02*\nD03*\nY239300D02*\nD03*\nY244300D02*\nD03*\nY254300D02*\nD03*\nY249300D02*\nD03*\nX125200Y409200D02*\nD03*\nY414200D02*\nD03*\nY419200D02*\nD03*\nY424200D02*\nD03*\nY434200D02*\nD03*\nY429200D02*\nD03*\nX291200Y338300D02*\nD03*\nY343300D02*\nD03*\nY348300D02*\nD03*\nY353300D02*\nD03*\nY363300D02*\nD03*\nY358300D02*\nD03*\nX291000Y404100D02*\nD03*\nY409100D02*\nD03*\nY414100D02*\nD03*\nY419100D02*\nD03*\nY429100D02*\nD03*\nY424100D02*\nD03*\nX304900Y404500D02*\nD03*\nY409500D02*\nD03*\nY414500D02*\nD03*\nY419500D02*\nD03*\nY429500D02*\nD03*\nY424500D02*\nD03*\nX304700Y338200D02*\nD03*\nY343200D02*\nD03*\nY348200D02*\nD03*\nY353200D02*\nD03*\nY363200D02*\nD03*\nY358200D02*\nD03*\nX471200Y401400D02*\nD03*\nY406400D02*\nD03*\nY411400D02*\nD03*\nY416400D02*\nD03*\nY426400D02*\nD03*\nY421400D02*\nD03*\nX471600Y339500D02*\nD03*\nY344500D02*\nD03*\nY349500D02*\nD03*\nY354500D02*\nD03*\nY364500D02*\nD03*\nY359500D02*\nD03*\nY216100D02*\nD03*\nY221100D02*\nD03*\nY226100D02*\nD03*\nY231100D02*\nD03*\nY241100D02*\nD03*\nY236100D02*\nD03*\nX470600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX443700Y124400D02*\nD03*\nX438700D02*\nD03*\nX433700D02*\nD03*\nX428700D02*\nD03*\nX418700D02*\nD03*\nX423700D02*\nD03*\nX357000Y124000D02*\nD03*\nX352000D02*\nD03*\nX347000D02*\nD03*\nX342000D02*\nD03*\nX332000D02*\nD03*\nX337000D02*\nD03*\nX360500Y289900D02*\nD03*\nX355500D02*\nD03*\nX350500D02*\nD03*\nX345500D02*\nD03*\nX335500D02*\nD03*\nX340500D02*\nD03*\nX432500Y290100D02*\nD03*\nX427500D02*\nD03*\nX422500D02*\nD03*\nX417500D02*\nD03*\nX407500D02*\nD03*\nX412500D02*\nD03*\nX431400Y303700D02*\nD03*\nX426400D02*\nD03*\nX421400D02*\nD03*\nX416400D02*\nD03*\nX406400D02*\nD03*\nX411400D02*\nD03*\nX360600Y304500D02*\nD03*\nX355600D02*\nD03*\nX350600D02*\nD03*\nX345600D02*\nD03*\nX335600D02*\nD03*\nX340600D02*\nD03*\nX365000Y469600D02*\nD03*\nX360000D02*\nD03*\nX355000D02*\nD03*\nX350000D02*\nD03*\nX340000D02*\nD03*\nX345000D02*\nD03*\nX435000D02*\nD03*\nX430000D02*\nD03*\nX425000D02*\nD03*\nX420000D02*\nD03*\nX410000D02*\nD03*\nX415000D02*\nD03*\nX252600D02*\nD03*\nX247600D02*\nD03*\nX242600D02*\nD03*\nX237600D02*\nD03*\nX227600D02*\nD03*\nX232600D02*\nD03*\nX183200Y469800D02*\nD03*\nX178200D02*\nD03*\nX173200D02*\nD03*\nX168200D02*\nD03*\nX158200D02*\nD03*\nX163200D02*\nD03*\nX175500Y303900D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX160500D02*\nD03*\nX150500D02*\nD03*\nX155500D02*\nD03*\nX175700Y290100D02*\nD03*\nX170700D02*\nD03*\nX165700D02*\nD03*\nX160700D02*\nD03*\nX150700D02*\nD03*\nX155700D02*\nD03*\nX260900Y303300D02*\nD03*\nX255900D02*\nD03*\nX250900D02*\nD03*\nX245900D02*\nD03*\nX235900D02*\nD03*\nX240900D02*\nD03*\nX261100Y290100D02*\nD03*\nX256100D02*\nD03*\nX251100D02*\nD03*\nX246100D02*\nD03*\nX236100D02*\nD03*\nX241100D02*\nD03*\nX261300Y123800D02*\nD03*\nX256300D02*\nD03*\nX251300D02*\nD03*\nX246300D02*\nD03*\nX236300D02*\nD03*\nX241300D02*\nD03*\nX180500Y124000D02*\nD03*\nX175500D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX155500D02*\nD03*\nX160500D02*\nD03*\nX125100Y351700D02*\nD03*\nY356700D02*\nD03*\nY346700D02*\nD03*\nY341700D02*\nD03*\nY336700D02*\nD03*\nY331700D02*\nD03*\nD50*\nX147744Y146744D02*\nD03*\nX269791D02*\nD03*\nY268791D02*\nD03*\nX147744D02*\nD03*\nX327744Y146744D02*\nD03*\nX449791D02*\nD03*\nY268791D02*\nD03*\nX327744D02*\nD03*\nX147744Y326744D02*\nD03*\nX269791D02*\nD03*\nY448791D02*\nD03*\nX147744D02*\nD03*\nX327744Y326744D02*\nD03*\nX449791D02*\nD03*\nY448791D02*\nD03*\nX327744D02*\nD03*\nD51*\nX133008Y181964D02*\nD03*\nY209524D02*\nD03*\nX313008Y181964D02*\nD03*\nY209524D02*\nD03*\nX133008Y361964D02*\nD03*\nY389524D02*\nD03*\nX313008Y361964D02*\nD03*\nY389524D02*\nD03*\nD52*\nX144031Y185901D02*\nD03*\nY205587D02*\nD03*\nX324031Y185901D02*\nD03*\nY205587D02*\nD03*\nX144031Y365901D02*\nD03*\nY385587D02*\nD03*\nX324031Y365901D02*\nD03*\nY385587D02*\nD03*\nD53*\nX132044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX235244Y252744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX312044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX415244Y252744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX132044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX235244Y432744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nX312044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX415244Y432744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nD54*\nX132044Y252344D02*\nD03*\nX312044D02*\nD03*\nX132044Y432344D02*\nD03*\nX312044D02*\nD03*\nD55*\nX141744Y166744D02*\nD03*\nY171744D02*\nD03*\nX146744Y166744D02*\nD03*\nY171744D02*\nD03*\nX151744Y166744D02*\nD03*\nY171744D02*\nD03*\nX156744Y166744D02*\nD03*\nY171744D02*\nD03*\nX161744Y166744D02*\nD03*\nX321744D02*\nD03*\nY171744D02*\nD03*\nX326744Y166744D02*\nD03*\nY171744D02*\nD03*\nX331744Y166744D02*\nD03*\nY171744D02*\nD03*\nX336744Y166744D02*\nD03*\nY171744D02*\nD03*\nX341744Y166744D02*\nD03*\nX141744Y346744D02*\nD03*\nY351744D02*\nD03*\nX146744Y346744D02*\nD03*\nY351744D02*\nD03*\nX151744Y346744D02*\nD03*\nY351744D02*\nD03*\nX156744Y346744D02*\nD03*\nY351744D02*\nD03*\nX161744Y346744D02*\nD03*\nX321744D02*\nD03*\nY351744D02*\nD03*\nX326744Y346744D02*\nD03*\nY351744D02*\nD03*\nX331744Y346744D02*\nD03*\nY351744D02*\nD03*\nX336744Y346744D02*\nD03*\nY351744D02*\nD03*\nX341744Y346744D02*\nD03*\nD56*\nX161744Y171744D02*\nD03*\nX341744D02*\nD03*\nX161744Y351744D02*\nD03*\nX341744D02*\nD03*\nD57*\nX205244Y252744D02*\nD03*\nX283500Y161200D02*\nD03*\nX385244Y252744D02*\nD03*\nX463500Y161200D02*\nD03*\nX205244Y432744D02*\nD03*\nX283500Y341200D02*\nD03*\nX385244Y432744D02*\nD03*\nX463500Y341200D02*\nD03*\nD58*\nX235744Y276244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nX235744Y456244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nM02*\n"
  },
  {
    "path": "hardware/panel.GPB",
    "content": "G04 Layer_Color=255*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD13R,0.03347X0.03150*%\n%ADD24R,0.03543X0.02953*%\n%ADD49C,0.01000*%\n%ADD50O,0.04724X0.09449*%\n%ADD51O,0.06102X0.03543*%\n%ADD52O,0.03740X0.04921*%\n%ADD53C,0.07000*%\n%ADD54R,0.07000X0.07000*%\n%ADD55C,0.04000*%\n%ADD56R,0.04000X0.04000*%\n%ADD57R,0.07000X0.07000*%\n%ADD58C,0.07874*%\n%ADD61R,0.03150X0.03347*%\n%ADD62R,0.02953X0.03543*%\nG04:AMPARAMS|DCode=63|XSize=23.62mil|YSize=62.99mil|CornerRadius=5.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD63*\n21,1,0.02362,0.05118,0,0,0.0*\n21,1,0.01181,0.06299,0,0,0.0*\n1,1,0.01181,0.00591,-0.02559*\n1,1,0.01181,-0.00591,-0.02559*\n1,1,0.01181,-0.00591,0.02559*\n1,1,0.01181,0.00591,0.02559*\n%\n%ADD63ROUNDEDRECTD63*%\n%ADD64R,0.02362X0.06299*%\n%ADD65R,0.01772X0.05512*%\n%ADD66O,0.01772X0.05512*%\nD13*\nX211283Y173244D02*\nD03*\nX216205D02*\nD03*\nX207784Y161744D02*\nD03*\nX212705D02*\nD03*\nX207784Y156744D02*\nD03*\nX212705D02*\nD03*\nX188705Y193244D02*\nD03*\nX183783D02*\nD03*\nX213205Y227244D02*\nD03*\nX208283D02*\nD03*\nX211205Y237244D02*\nD03*\nX206283D02*\nD03*\nX211205Y243244D02*\nD03*\nX206283D02*\nD03*\nX203705Y153744D02*\nD03*\nX198783D02*\nD03*\nX198283Y159244D02*\nD03*\nX203205D02*\nD03*\nX192205Y168244D02*\nD03*\nX187284D02*\nD03*\nX391283Y173244D02*\nD03*\nX396205D02*\nD03*\nX387784Y161744D02*\nD03*\nX392705D02*\nD03*\nX387784Y156744D02*\nD03*\nX392705D02*\nD03*\nX368705Y193244D02*\nD03*\nX363783D02*\nD03*\nX393205Y227244D02*\nD03*\nX388283D02*\nD03*\nX391205Y237244D02*\nD03*\nX386283D02*\nD03*\nX391205Y243244D02*\nD03*\nX386283D02*\nD03*\nX383705Y153744D02*\nD03*\nX378783D02*\nD03*\nX378283Y159244D02*\nD03*\nX383205D02*\nD03*\nX372205Y168244D02*\nD03*\nX367284D02*\nD03*\nX211283Y353244D02*\nD03*\nX216205D02*\nD03*\nX207784Y341744D02*\nD03*\nX212705D02*\nD03*\nX207784Y336744D02*\nD03*\nX212705D02*\nD03*\nX188705Y373244D02*\nD03*\nX183783D02*\nD03*\nX213205Y407244D02*\nD03*\nX208283D02*\nD03*\nX211205Y417244D02*\nD03*\nX206283D02*\nD03*\nX211205Y423244D02*\nD03*\nX206283D02*\nD03*\nX203705Y333744D02*\nD03*\nX198783D02*\nD03*\nX198283Y339244D02*\nD03*\nX203205D02*\nD03*\nX192205Y348244D02*\nD03*\nX187284D02*\nD03*\nX391283Y353244D02*\nD03*\nX396205D02*\nD03*\nX387784Y341744D02*\nD03*\nX392705D02*\nD03*\nX387784Y336744D02*\nD03*\nX392705D02*\nD03*\nX368705Y373244D02*\nD03*\nX363783D02*\nD03*\nX393205Y407244D02*\nD03*\nX388283D02*\nD03*\nX391205Y417244D02*\nD03*\nX386283D02*\nD03*\nX391205Y423244D02*\nD03*\nX386283D02*\nD03*\nX383705Y333744D02*\nD03*\nX378783D02*\nD03*\nX378283Y339244D02*\nD03*\nX383205D02*\nD03*\nX372205Y348244D02*\nD03*\nX367284D02*\nD03*\nD24*\nX249244Y203587D02*\nD03*\nY208902D02*\nD03*\nX258744Y206087D02*\nD03*\nY211402D02*\nD03*\nX249744Y170087D02*\nD03*\nY175402D02*\nD03*\nX259244Y172587D02*\nD03*\nY177902D02*\nD03*\nX258744Y190087D02*\nD03*\nY195402D02*\nD03*\nX249244Y187087D02*\nD03*\nY192402D02*\nD03*\nX429244Y203587D02*\nD03*\nY208902D02*\nD03*\nX438744Y206087D02*\nD03*\nY211402D02*\nD03*\nX429744Y170087D02*\nD03*\nY175402D02*\nD03*\nX439244Y172587D02*\nD03*\nY177902D02*\nD03*\nX438744Y190087D02*\nD03*\nY195402D02*\nD03*\nX429244Y187087D02*\nD03*\nY192402D02*\nD03*\nX249244Y383587D02*\nD03*\nY388902D02*\nD03*\nX258744Y386087D02*\nD03*\nY391402D02*\nD03*\nX249744Y350087D02*\nD03*\nY355402D02*\nD03*\nX259244Y352587D02*\nD03*\nY357902D02*\nD03*\nX258744Y370087D02*\nD03*\nY375402D02*\nD03*\nX249244Y367087D02*\nD03*\nY372402D02*\nD03*\nX429244Y383587D02*\nD03*\nY388902D02*\nD03*\nX438744Y386087D02*\nD03*\nY391402D02*\nD03*\nX429744Y350087D02*\nD03*\nY355402D02*\nD03*\nX439244Y352587D02*\nD03*\nY357902D02*\nD03*\nX438744Y370087D02*\nD03*\nY375402D02*\nD03*\nX429244Y367087D02*\nD03*\nY372402D02*\nD03*\nD49*\nX125000Y260000D02*\nD03*\nY265000D02*\nD03*\nY255000D02*\nD03*\nY250000D02*\nD03*\nY245000D02*\nD03*\nY240000D02*\nD03*\nX124600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX290600Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX305100Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX291400Y229800D02*\nD03*\nY234800D02*\nD03*\nY239800D02*\nD03*\nY244800D02*\nD03*\nY254800D02*\nD03*\nY249800D02*\nD03*\nX304800Y229300D02*\nD03*\nY234300D02*\nD03*\nY239300D02*\nD03*\nY244300D02*\nD03*\nY254300D02*\nD03*\nY249300D02*\nD03*\nX125200Y409200D02*\nD03*\nY414200D02*\nD03*\nY419200D02*\nD03*\nY424200D02*\nD03*\nY434200D02*\nD03*\nY429200D02*\nD03*\nX291200Y338300D02*\nD03*\nY343300D02*\nD03*\nY348300D02*\nD03*\nY353300D02*\nD03*\nY363300D02*\nD03*\nY358300D02*\nD03*\nX291000Y404100D02*\nD03*\nY409100D02*\nD03*\nY414100D02*\nD03*\nY419100D02*\nD03*\nY429100D02*\nD03*\nY424100D02*\nD03*\nX304900Y404500D02*\nD03*\nY409500D02*\nD03*\nY414500D02*\nD03*\nY419500D02*\nD03*\nY429500D02*\nD03*\nY424500D02*\nD03*\nX304700Y338200D02*\nD03*\nY343200D02*\nD03*\nY348200D02*\nD03*\nY353200D02*\nD03*\nY363200D02*\nD03*\nY358200D02*\nD03*\nX471200Y401400D02*\nD03*\nY406400D02*\nD03*\nY411400D02*\nD03*\nY416400D02*\nD03*\nY426400D02*\nD03*\nY421400D02*\nD03*\nX471600Y339500D02*\nD03*\nY344500D02*\nD03*\nY349500D02*\nD03*\nY354500D02*\nD03*\nY364500D02*\nD03*\nY359500D02*\nD03*\nY216100D02*\nD03*\nY221100D02*\nD03*\nY226100D02*\nD03*\nY231100D02*\nD03*\nY241100D02*\nD03*\nY236100D02*\nD03*\nX470600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX443700Y124400D02*\nD03*\nX438700D02*\nD03*\nX433700D02*\nD03*\nX428700D02*\nD03*\nX418700D02*\nD03*\nX423700D02*\nD03*\nX357000Y124000D02*\nD03*\nX352000D02*\nD03*\nX347000D02*\nD03*\nX342000D02*\nD03*\nX332000D02*\nD03*\nX337000D02*\nD03*\nX360500Y289900D02*\nD03*\nX355500D02*\nD03*\nX350500D02*\nD03*\nX345500D02*\nD03*\nX335500D02*\nD03*\nX340500D02*\nD03*\nX432500Y290100D02*\nD03*\nX427500D02*\nD03*\nX422500D02*\nD03*\nX417500D02*\nD03*\nX407500D02*\nD03*\nX412500D02*\nD03*\nX431400Y303700D02*\nD03*\nX426400D02*\nD03*\nX421400D02*\nD03*\nX416400D02*\nD03*\nX406400D02*\nD03*\nX411400D02*\nD03*\nX360600Y304500D02*\nD03*\nX355600D02*\nD03*\nX350600D02*\nD03*\nX345600D02*\nD03*\nX335600D02*\nD03*\nX340600D02*\nD03*\nX365000Y469600D02*\nD03*\nX360000D02*\nD03*\nX355000D02*\nD03*\nX350000D02*\nD03*\nX340000D02*\nD03*\nX345000D02*\nD03*\nX435000D02*\nD03*\nX430000D02*\nD03*\nX425000D02*\nD03*\nX420000D02*\nD03*\nX410000D02*\nD03*\nX415000D02*\nD03*\nX252600D02*\nD03*\nX247600D02*\nD03*\nX242600D02*\nD03*\nX237600D02*\nD03*\nX227600D02*\nD03*\nX232600D02*\nD03*\nX183200Y469800D02*\nD03*\nX178200D02*\nD03*\nX173200D02*\nD03*\nX168200D02*\nD03*\nX158200D02*\nD03*\nX163200D02*\nD03*\nX175500Y303900D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX160500D02*\nD03*\nX150500D02*\nD03*\nX155500D02*\nD03*\nX175700Y290100D02*\nD03*\nX170700D02*\nD03*\nX165700D02*\nD03*\nX160700D02*\nD03*\nX150700D02*\nD03*\nX155700D02*\nD03*\nX260900Y303300D02*\nD03*\nX255900D02*\nD03*\nX250900D02*\nD03*\nX245900D02*\nD03*\nX235900D02*\nD03*\nX240900D02*\nD03*\nX261100Y290100D02*\nD03*\nX256100D02*\nD03*\nX251100D02*\nD03*\nX246100D02*\nD03*\nX236100D02*\nD03*\nX241100D02*\nD03*\nX261300Y123800D02*\nD03*\nX256300D02*\nD03*\nX251300D02*\nD03*\nX246300D02*\nD03*\nX236300D02*\nD03*\nX241300D02*\nD03*\nX180500Y124000D02*\nD03*\nX175500D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX155500D02*\nD03*\nX160500D02*\nD03*\nX125100Y351700D02*\nD03*\nY356700D02*\nD03*\nY346700D02*\nD03*\nY341700D02*\nD03*\nY336700D02*\nD03*\nY331700D02*\nD03*\nD50*\nX147744Y146744D02*\nD03*\nX269791D02*\nD03*\nY268791D02*\nD03*\nX147744D02*\nD03*\nX327744Y146744D02*\nD03*\nX449791D02*\nD03*\nY268791D02*\nD03*\nX327744D02*\nD03*\nX147744Y326744D02*\nD03*\nX269791D02*\nD03*\nY448791D02*\nD03*\nX147744D02*\nD03*\nX327744Y326744D02*\nD03*\nX449791D02*\nD03*\nY448791D02*\nD03*\nX327744D02*\nD03*\nD51*\nX133008Y181964D02*\nD03*\nY209524D02*\nD03*\nX313008Y181964D02*\nD03*\nY209524D02*\nD03*\nX133008Y361964D02*\nD03*\nY389524D02*\nD03*\nX313008Y361964D02*\nD03*\nY389524D02*\nD03*\nD52*\nX144031Y185901D02*\nD03*\nY205587D02*\nD03*\nX324031Y185901D02*\nD03*\nY205587D02*\nD03*\nX144031Y365901D02*\nD03*\nY385587D02*\nD03*\nX324031Y365901D02*\nD03*\nY385587D02*\nD03*\nD53*\nX132044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX235244Y252744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX312044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX415244Y252744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX132044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX235244Y432744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nX312044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX415244Y432744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nD54*\nX132044Y252344D02*\nD03*\nX312044D02*\nD03*\nX132044Y432344D02*\nD03*\nX312044D02*\nD03*\nD55*\nX141744Y166744D02*\nD03*\nY171744D02*\nD03*\nX146744Y166744D02*\nD03*\nY171744D02*\nD03*\nX151744Y166744D02*\nD03*\nY171744D02*\nD03*\nX156744Y166744D02*\nD03*\nY171744D02*\nD03*\nX161744Y166744D02*\nD03*\nX321744D02*\nD03*\nY171744D02*\nD03*\nX326744Y166744D02*\nD03*\nY171744D02*\nD03*\nX331744Y166744D02*\nD03*\nY171744D02*\nD03*\nX336744Y166744D02*\nD03*\nY171744D02*\nD03*\nX341744Y166744D02*\nD03*\nX141744Y346744D02*\nD03*\nY351744D02*\nD03*\nX146744Y346744D02*\nD03*\nY351744D02*\nD03*\nX151744Y346744D02*\nD03*\nY351744D02*\nD03*\nX156744Y346744D02*\nD03*\nY351744D02*\nD03*\nX161744Y346744D02*\nD03*\nX321744D02*\nD03*\nY351744D02*\nD03*\nX326744Y346744D02*\nD03*\nY351744D02*\nD03*\nX331744Y346744D02*\nD03*\nY351744D02*\nD03*\nX336744Y346744D02*\nD03*\nY351744D02*\nD03*\nX341744Y346744D02*\nD03*\nD56*\nX161744Y171744D02*\nD03*\nX341744D02*\nD03*\nX161744Y351744D02*\nD03*\nX341744D02*\nD03*\nD57*\nX205244Y252744D02*\nD03*\nX283500Y161200D02*\nD03*\nX385244Y252744D02*\nD03*\nX463500Y161200D02*\nD03*\nX205244Y432744D02*\nD03*\nX283500Y341200D02*\nD03*\nX385244Y432744D02*\nD03*\nX463500Y341200D02*\nD03*\nD58*\nX235744Y276244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nX235744Y456244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nD61*\nX258744Y226783D02*\nD03*\nY231705D02*\nD03*\nX253744Y227283D02*\nD03*\nY232205D02*\nD03*\nX238744Y230205D02*\nD03*\nY225283D02*\nD03*\nX244744Y229705D02*\nD03*\nY224783D02*\nD03*\nX262244Y249205D02*\nD03*\nY244283D02*\nD03*\nX239744Y194205D02*\nD03*\nY189283D02*\nD03*\nX438744Y226783D02*\nD03*\nY231705D02*\nD03*\nX433744Y227283D02*\nD03*\nY232205D02*\nD03*\nX418744Y230205D02*\nD03*\nY225283D02*\nD03*\nX424744Y229705D02*\nD03*\nY224783D02*\nD03*\nX442244Y249205D02*\nD03*\nY244283D02*\nD03*\nX419744Y194205D02*\nD03*\nY189283D02*\nD03*\nX258744Y406783D02*\nD03*\nY411705D02*\nD03*\nX253744Y407283D02*\nD03*\nY412205D02*\nD03*\nX238744Y410205D02*\nD03*\nY405283D02*\nD03*\nX244744Y409705D02*\nD03*\nY404783D02*\nD03*\nX262244Y429205D02*\nD03*\nY424283D02*\nD03*\nX239744Y374205D02*\nD03*\nY369283D02*\nD03*\nX438744Y406783D02*\nD03*\nY411705D02*\nD03*\nX433744Y407283D02*\nD03*\nY412205D02*\nD03*\nX418744Y410205D02*\nD03*\nY405283D02*\nD03*\nX424744Y409705D02*\nD03*\nY404783D02*\nD03*\nX442244Y429205D02*\nD03*\nY424283D02*\nD03*\nX419744Y374205D02*\nD03*\nY369283D02*\nD03*\nD62*\nX169587Y157244D02*\nD03*\nX174901D02*\nD03*\nX224902Y237244D02*\nD03*\nX219587D02*\nD03*\nX224902Y243244D02*\nD03*\nX219587D02*\nD03*\nX164902Y181244D02*\nD03*\nX159587D02*\nD03*\nX170087Y197244D02*\nD03*\nX175401D02*\nD03*\nX159587D02*\nD03*\nX164901D02*\nD03*\nX180587Y152744D02*\nD03*\nX185901D02*\nD03*\nX349587Y157244D02*\nD03*\nX354901D02*\nD03*\nX404902Y237244D02*\nD03*\nX399587D02*\nD03*\nX404902Y243244D02*\nD03*\nX399587D02*\nD03*\nX344902Y181244D02*\nD03*\nX339587D02*\nD03*\nX350087Y197244D02*\nD03*\nX355401D02*\nD03*\nX339587D02*\nD03*\nX344901D02*\nD03*\nX360587Y152744D02*\nD03*\nX365901D02*\nD03*\nX169587Y337244D02*\nD03*\nX174901D02*\nD03*\nX224902Y417244D02*\nD03*\nX219587D02*\nD03*\nX224902Y423244D02*\nD03*\nX219587D02*\nD03*\nX164902Y361244D02*\nD03*\nX159587D02*\nD03*\nX170087Y377244D02*\nD03*\nX175401D02*\nD03*\nX159587D02*\nD03*\nX164901D02*\nD03*\nX180587Y332744D02*\nD03*\nX185901D02*\nD03*\nX349587Y337244D02*\nD03*\nX354901D02*\nD03*\nX404902Y417244D02*\nD03*\nX399587D02*\nD03*\nX404902Y423244D02*\nD03*\nX399587D02*\nD03*\nX344902Y361244D02*\nD03*\nX339587D02*\nD03*\nX350087Y377244D02*\nD03*\nX355401D02*\nD03*\nX339587D02*\nD03*\nX344901D02*\nD03*\nX360587Y332744D02*\nD03*\nX365901D02*\nD03*\nD63*\nX189984Y199701D02*\nD03*\nX369984D02*\nD03*\nX189984Y379701D02*\nD03*\nX369984D02*\nD03*\nD64*\nX182504Y199701D02*\nD03*\nX186244Y206787D02*\nD03*\nX362504Y199701D02*\nD03*\nX366244Y206787D02*\nD03*\nX182504Y379701D02*\nD03*\nX186244Y386787D02*\nD03*\nX362504Y379701D02*\nD03*\nX366244Y386787D02*\nD03*\nD65*\nX216421Y196177D02*\nD03*\nX396421D02*\nD03*\nX216421Y376177D02*\nD03*\nX396421D02*\nD03*\nD66*\nX213862Y196177D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX216421Y219406D02*\nD03*\nX213862D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX393862Y196177D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX396421Y219406D02*\nD03*\nX393862D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX213862Y376177D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX216421Y399406D02*\nD03*\nX213862D02*\nD03*\nX211303D02*\nD03*\nX208744D02*\nD03*\nX206185D02*\nD03*\nX203626D02*\nD03*\nX201067D02*\nD03*\nX393862Y376177D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nX396421Y399406D02*\nD03*\nX393862D02*\nD03*\nX391303D02*\nD03*\nX388744D02*\nD03*\nX386185D02*\nD03*\nX383626D02*\nD03*\nX381067D02*\nD03*\nM02*\n"
  },
  {
    "path": "hardware/panel.GPT",
    "content": "G04 Layer_Color=255*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD10R,0.03543X0.03150*%\nG04:AMPARAMS|DCode=11|XSize=31.5mil|YSize=35.43mil|CornerRadius=7.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD11*\n21,1,0.03150,0.01969,0,0,270.0*\n21,1,0.01575,0.03543,0,0,270.0*\n1,1,0.01575,-0.00984,-0.00787*\n1,1,0.01575,-0.00984,0.00787*\n1,1,0.01575,0.00984,0.00787*\n1,1,0.01575,0.00984,-0.00787*\n%\n%ADD11ROUNDEDRECTD11*%\n%ADD12R,0.07087X0.03937*%\n%ADD13R,0.03347X0.03150*%\n%ADD14R,0.06890X0.01575*%\n%ADD15R,0.09449X0.04724*%\n%ADD16R,0.12205X0.04724*%\n%ADD17R,0.04724X0.07087*%\nG04:AMPARAMS|DCode=18|XSize=31.5mil|YSize=31.5mil|CornerRadius=7.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD18*\n21,1,0.03150,0.01575,0,0,90.0*\n21,1,0.01575,0.03150,0,0,90.0*\n1,1,0.01575,0.00787,0.00787*\n1,1,0.01575,0.00787,-0.00787*\n1,1,0.01575,-0.00787,-0.00787*\n1,1,0.01575,-0.00787,0.00787*\n%\n%ADD18ROUNDEDRECTD18*%\n%ADD19R,0.03150X0.03150*%\nG04:AMPARAMS|DCode=20|XSize=27.56mil|YSize=51.18mil|CornerRadius=6.89mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD20*\n21,1,0.02756,0.03740,0,0,90.0*\n21,1,0.01378,0.05118,0,0,90.0*\n1,1,0.01378,0.01870,0.00689*\n1,1,0.01378,0.01870,-0.00689*\n1,1,0.01378,-0.01870,-0.00689*\n1,1,0.01378,-0.01870,0.00689*\n%\n%ADD20ROUNDEDRECTD20*%\n%ADD21R,0.05118X0.02756*%\nG04:AMPARAMS|DCode=22|XSize=23.62mil|YSize=35.43mil|CornerRadius=5.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD22*\n21,1,0.02362,0.02362,0,0,270.0*\n21,1,0.01181,0.03543,0,0,270.0*\n1,1,0.01181,-0.01181,-0.00591*\n1,1,0.01181,-0.01181,0.00591*\n1,1,0.01181,0.01181,0.00591*\n1,1,0.01181,0.01181,-0.00591*\n%\n%ADD22ROUNDEDRECTD22*%\n%ADD23R,0.03543X0.02362*%\n%ADD24R,0.03543X0.02953*%\nG04:AMPARAMS|DCode=25|XSize=78.74mil|YSize=39.37mil|CornerRadius=9.84mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD25*\n21,1,0.07874,0.01969,0,0,0.0*\n21,1,0.05906,0.03937,0,0,0.0*\n1,1,0.01969,0.02953,-0.00984*\n1,1,0.01969,-0.02953,-0.00984*\n1,1,0.01969,-0.02953,0.00984*\n1,1,0.01969,0.02953,0.00984*\n%\n%ADD25ROUNDEDRECTD25*%\n%ADD26P,0.28674X4X180.0*%\nG04:AMPARAMS|DCode=27|XSize=9.84mil|YSize=33.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD27*\n21,1,0.02362,0.00984,0.00000,0.00000,225.0*\n1,1,0.00984,0.00835,0.00835*\n1,1,0.00984,-0.00835,-0.00835*\n%\n%ADD27OVALD27*%\n\nG04:AMPARAMS|DCode=28|XSize=9.84mil|YSize=35.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD28*\n21,1,0.02559,0.00984,0.00000,0.00000,225.0*\n1,1,0.00984,0.00905,0.00905*\n1,1,0.00984,-0.00905,-0.00905*\n%\n%ADD28OVALD28*%\n\nG04:AMPARAMS|DCode=29|XSize=9.84mil|YSize=33.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD29*\n21,1,0.02362,0.00984,0.00000,0.00000,315.0*\n1,1,0.00984,-0.00835,0.00835*\n1,1,0.00984,0.00835,-0.00835*\n%\n%ADD29OVALD29*%\n\nG04:AMPARAMS|DCode=30|XSize=9.84mil|YSize=35.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD30*\n21,1,0.02559,0.00984,0.00000,0.00000,315.0*\n1,1,0.00984,-0.00905,0.00905*\n1,1,0.00984,0.00905,-0.00905*\n%\n%ADD30OVALD30*%\n\nG04:AMPARAMS|DCode=31|XSize=9.84mil|YSize=33.47mil|CornerRadius=2.46mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD31*\n21,1,0.00984,0.02854,0,0,225.0*\n21,1,0.00492,0.03347,0,0,225.0*\n1,1,0.00492,-0.01183,0.00835*\n1,1,0.00492,-0.00835,0.01183*\n1,1,0.00492,0.01183,-0.00835*\n1,1,0.00492,0.00835,-0.01183*\n%\n%ADD31ROUNDEDRECTD31*%\n%ADD32R,0.03937X0.06693*%\n%ADD33R,0.11811X0.11811*%\n%ADD34O,0.05512X0.01772*%\n%ADD35R,0.05512X0.01772*%\n%ADD36R,0.03740X0.02756*%\n%ADD37R,0.12500X0.04500*%\n%ADD49C,0.01000*%\n%ADD50O,0.04724X0.09449*%\n%ADD51O,0.06102X0.03543*%\n%ADD52O,0.03740X0.04921*%\n%ADD53C,0.07000*%\n%ADD54R,0.07000X0.07000*%\n%ADD55C,0.04000*%\n%ADD56R,0.04000X0.04000*%\n%ADD57R,0.07000X0.07000*%\n%ADD58C,0.07874*%\nD10*\nX246583Y246681D02*\nD03*\nX255244Y250618D02*\nD03*\nX426583Y246681D02*\nD03*\nX435244Y250618D02*\nD03*\nX246583Y426681D02*\nD03*\nX255244Y430618D02*\nD03*\nX426583Y426681D02*\nD03*\nX435244Y430618D02*\nD03*\nD11*\nX255244Y242744D02*\nD03*\nX435244D02*\nD03*\nX255244Y422744D02*\nD03*\nX435244D02*\nD03*\nD12*\nX230157Y154000D02*\nD03*\nY144157D02*\nD03*\nX410157Y154000D02*\nD03*\nY144157D02*\nD03*\nX230157Y334000D02*\nD03*\nY324157D02*\nD03*\nX410157Y334000D02*\nD03*\nY324157D02*\nD03*\nD13*\nX178705Y230244D02*\nD03*\nX173783D02*\nD03*\nX242618Y144000D02*\nD03*\nX237697D02*\nD03*\nX242618Y154000D02*\nD03*\nX237697D02*\nD03*\nX358705Y230244D02*\nD03*\nX353783D02*\nD03*\nX422618Y144000D02*\nD03*\nX417697D02*\nD03*\nX422618Y154000D02*\nD03*\nX417697D02*\nD03*\nX178705Y410244D02*\nD03*\nX173783D02*\nD03*\nX242618Y324000D02*\nD03*\nX237697D02*\nD03*\nX242618Y334000D02*\nD03*\nX237697D02*\nD03*\nX358705Y410244D02*\nD03*\nX353783D02*\nD03*\nX422618Y324000D02*\nD03*\nX417697D02*\nD03*\nX422618Y334000D02*\nD03*\nX417697D02*\nD03*\nD14*\nX143244Y200862D02*\nD03*\nY198303D02*\nD03*\nY195744D02*\nD03*\nY190626D02*\nD03*\nY193185D02*\nD03*\nX323244Y200862D02*\nD03*\nY198303D02*\nD03*\nY195744D02*\nD03*\nY190626D02*\nD03*\nY193185D02*\nD03*\nX143244Y380862D02*\nD03*\nY378303D02*\nD03*\nY375744D02*\nD03*\nY370626D02*\nD03*\nY373185D02*\nD03*\nX323244Y380862D02*\nD03*\nY378303D02*\nD03*\nY375744D02*\nD03*\nY370626D02*\nD03*\nY373185D02*\nD03*\nD15*\nX131433Y200075D02*\nD03*\nY192201D02*\nD03*\nX311433Y200075D02*\nD03*\nY192201D02*\nD03*\nX131433Y380075D02*\nD03*\nY372201D02*\nD03*\nX311433Y380075D02*\nD03*\nY372201D02*\nD03*\nD16*\nX134344Y183944D02*\nD03*\nY207244D02*\nD03*\nX314344Y183944D02*\nD03*\nY207244D02*\nD03*\nX134344Y363944D02*\nD03*\nY387244D02*\nD03*\nX314344Y363944D02*\nD03*\nY387244D02*\nD03*\nD17*\nX143944Y184344D02*\nD03*\nX144057Y207187D02*\nD03*\nX323944Y184344D02*\nD03*\nX324057Y207187D02*\nD03*\nX143944Y364344D02*\nD03*\nX144057Y387187D02*\nD03*\nX323944Y364344D02*\nD03*\nX324057Y387187D02*\nD03*\nD18*\nX159744Y181244D02*\nD03*\nX169000Y157000D02*\nD03*\nX339744Y181244D02*\nD03*\nX349000Y157000D02*\nD03*\nX159744Y361244D02*\nD03*\nX169000Y337000D02*\nD03*\nX339744Y361244D02*\nD03*\nX349000Y337000D02*\nD03*\nD19*\nX165650Y181244D02*\nD03*\nX174906Y157000D02*\nD03*\nX345650Y181244D02*\nD03*\nX354906Y157000D02*\nD03*\nX165650Y361244D02*\nD03*\nX174906Y337000D02*\nD03*\nX345650Y361244D02*\nD03*\nX354906Y337000D02*\nD03*\nD20*\nX157920Y196084D02*\nD03*\nX337920D02*\nD03*\nX157920Y376084D02*\nD03*\nX337920D02*\nD03*\nD21*\nX157920Y192344D02*\nD03*\nY188604D02*\nD03*\nX167368D02*\nD03*\nY192344D02*\nD03*\nY196084D02*\nD03*\nX337920Y192344D02*\nD03*\nY188604D02*\nD03*\nX347368D02*\nD03*\nY192344D02*\nD03*\nY196084D02*\nD03*\nX157920Y372344D02*\nD03*\nY368604D02*\nD03*\nX167368D02*\nD03*\nY372344D02*\nD03*\nY376084D02*\nD03*\nX337920Y372344D02*\nD03*\nY368604D02*\nD03*\nX347368D02*\nD03*\nY372344D02*\nD03*\nY376084D02*\nD03*\nD22*\nX253824Y223760D02*\nD03*\nX433824D02*\nD03*\nX253824Y403760D02*\nD03*\nX433824D02*\nD03*\nD23*\nX253824Y227500D02*\nD03*\nY231240D02*\nD03*\nX244376D02*\nD03*\nY223760D02*\nD03*\nX433824Y227500D02*\nD03*\nY231240D02*\nD03*\nX424376D02*\nD03*\nY223760D02*\nD03*\nX253824Y407500D02*\nD03*\nY411240D02*\nD03*\nX244376D02*\nD03*\nY403760D02*\nD03*\nX433824Y407500D02*\nD03*\nY411240D02*\nD03*\nX424376D02*\nD03*\nY403760D02*\nD03*\nD24*\nX237600Y224843D02*\nD03*\nY230157D02*\nD03*\nY241157D02*\nD03*\nY235843D02*\nD03*\nX417600Y224843D02*\nD03*\nY230157D02*\nD03*\nY241157D02*\nD03*\nY235843D02*\nD03*\nX237600Y404843D02*\nD03*\nY410157D02*\nD03*\nY421157D02*\nD03*\nY415843D02*\nD03*\nX417600Y404843D02*\nD03*\nY410157D02*\nD03*\nY421157D02*\nD03*\nY415843D02*\nD03*\nD25*\nX158744Y207744D02*\nD03*\nX174886D02*\nD03*\nX158744Y214043D02*\nD03*\nX174744D02*\nD03*\nX199244Y128945D02*\nD03*\nX215244D02*\nD03*\nX199102Y135244D02*\nD03*\nX215244D02*\nD03*\nX164744Y128945D02*\nD03*\nX180744D02*\nD03*\nX164602Y135244D02*\nD03*\nX180744D02*\nD03*\nX250744D02*\nD03*\nX234602D02*\nD03*\nX250744Y128945D02*\nD03*\nX234744D02*\nD03*\nX338744Y207744D02*\nD03*\nX354886D02*\nD03*\nX338744Y214043D02*\nD03*\nX354744D02*\nD03*\nX379244Y128945D02*\nD03*\nX395244D02*\nD03*\nX379102Y135244D02*\nD03*\nX395244D02*\nD03*\nX344744Y128945D02*\nD03*\nX360744D02*\nD03*\nX344602Y135244D02*\nD03*\nX360744D02*\nD03*\nX430744D02*\nD03*\nX414602D02*\nD03*\nX430744Y128945D02*\nD03*\nX414744D02*\nD03*\nX158744Y387744D02*\nD03*\nX174886D02*\nD03*\nX158744Y394043D02*\nD03*\nX174744D02*\nD03*\nX199244Y308945D02*\nD03*\nX215244D02*\nD03*\nX199102Y315244D02*\nD03*\nX215244D02*\nD03*\nX164744Y308945D02*\nD03*\nX180744D02*\nD03*\nX164602Y315244D02*\nD03*\nX180744D02*\nD03*\nX250744D02*\nD03*\nX234602D02*\nD03*\nX250744Y308945D02*\nD03*\nX234744D02*\nD03*\nX338744Y387744D02*\nD03*\nX354886D02*\nD03*\nX338744Y394043D02*\nD03*\nX354744D02*\nD03*\nX379244Y308945D02*\nD03*\nX395244D02*\nD03*\nX379102Y315244D02*\nD03*\nX395244D02*\nD03*\nX344744Y308945D02*\nD03*\nX360744D02*\nD03*\nX344602Y315244D02*\nD03*\nX360744D02*\nD03*\nX430744D02*\nD03*\nX414602D02*\nD03*\nX430744Y308945D02*\nD03*\nX414744D02*\nD03*\nD26*\nX204900Y166600D02*\nD03*\nX384900D02*\nD03*\nX204900Y346600D02*\nD03*\nX384900D02*\nD03*\nD27*\nX203091Y149479D02*\nD03*\nX187779Y164791D02*\nD03*\nX206709Y183721D02*\nD03*\nX222021Y168409D02*\nD03*\nX383091Y149479D02*\nD03*\nX367779Y164791D02*\nD03*\nX386709Y183721D02*\nD03*\nX402021Y168409D02*\nD03*\nX203091Y329479D02*\nD03*\nX187779Y344791D02*\nD03*\nX206709Y363721D02*\nD03*\nX222021Y348409D02*\nD03*\nX383091Y329479D02*\nD03*\nX367779Y344791D02*\nD03*\nX386709Y363721D02*\nD03*\nX402021Y348409D02*\nD03*\nD28*\nX201768Y150941D02*\nD03*\nX200376Y152333D02*\nD03*\nX198984Y153725D02*\nD03*\nX197592Y155116D02*\nD03*\nX196200Y156508D02*\nD03*\nX194808Y157900D02*\nD03*\nX193416Y159292D02*\nD03*\nX192025Y160684D02*\nD03*\nX190633Y162076D02*\nD03*\nX189241Y163468D02*\nD03*\nX208032Y182259D02*\nD03*\nX209424Y180867D02*\nD03*\nX210816Y179475D02*\nD03*\nX212208Y178084D02*\nD03*\nX213600Y176692D02*\nD03*\nX214992Y175300D02*\nD03*\nX216384Y173908D02*\nD03*\nX217775Y172516D02*\nD03*\nX219167Y171124D02*\nD03*\nX220559Y169732D02*\nD03*\nX381768Y150941D02*\nD03*\nX380376Y152333D02*\nD03*\nX378984Y153725D02*\nD03*\nX377592Y155116D02*\nD03*\nX376200Y156508D02*\nD03*\nX374808Y157900D02*\nD03*\nX373416Y159292D02*\nD03*\nX372025Y160684D02*\nD03*\nX370633Y162076D02*\nD03*\nX369241Y163468D02*\nD03*\nX388032Y182259D02*\nD03*\nX389424Y180867D02*\nD03*\nX390816Y179475D02*\nD03*\nX392208Y178084D02*\nD03*\nX393600Y176692D02*\nD03*\nX394992Y175300D02*\nD03*\nX396384Y173908D02*\nD03*\nX397775Y172516D02*\nD03*\nX399167Y171124D02*\nD03*\nX400559Y169732D02*\nD03*\nX201768Y330941D02*\nD03*\nX200376Y332333D02*\nD03*\nX198984Y333725D02*\nD03*\nX197592Y335116D02*\nD03*\nX196200Y336508D02*\nD03*\nX194808Y337900D02*\nD03*\nX193416Y339292D02*\nD03*\nX192025Y340684D02*\nD03*\nX190633Y342076D02*\nD03*\nX189241Y343468D02*\nD03*\nX208032Y362259D02*\nD03*\nX209424Y360867D02*\nD03*\nX210816Y359475D02*\nD03*\nX212208Y358084D02*\nD03*\nX213600Y356692D02*\nD03*\nX214992Y355300D02*\nD03*\nX216384Y353908D02*\nD03*\nX217775Y352516D02*\nD03*\nX219167Y351124D02*\nD03*\nX220559Y349732D02*\nD03*\nX381768Y330941D02*\nD03*\nX380376Y332333D02*\nD03*\nX378984Y333725D02*\nD03*\nX377592Y335116D02*\nD03*\nX376200Y336508D02*\nD03*\nX374808Y337900D02*\nD03*\nX373416Y339292D02*\nD03*\nX372025Y340684D02*\nD03*\nX370633Y342076D02*\nD03*\nX369241Y343468D02*\nD03*\nX388032Y362259D02*\nD03*\nX389424Y360867D02*\nD03*\nX390816Y359475D02*\nD03*\nX392208Y358084D02*\nD03*\nX393600Y356692D02*\nD03*\nX394992Y355300D02*\nD03*\nX396384Y353908D02*\nD03*\nX397775Y352516D02*\nD03*\nX399167Y351124D02*\nD03*\nX400559Y349732D02*\nD03*\nD29*\nX187779Y168409D02*\nD03*\nX203091Y183721D02*\nD03*\nX222021Y164791D02*\nD03*\nX367779Y168409D02*\nD03*\nX383091Y183721D02*\nD03*\nX402021Y164791D02*\nD03*\nX187779Y348409D02*\nD03*\nX203091Y363721D02*\nD03*\nX222021Y344791D02*\nD03*\nX367779Y348409D02*\nD03*\nX383091Y363721D02*\nD03*\nX402021Y344791D02*\nD03*\nD30*\nX189241Y169732D02*\nD03*\nX190633Y171124D02*\nD03*\nX192025Y172516D02*\nD03*\nX193416Y173908D02*\nD03*\nX194808Y175300D02*\nD03*\nX196200Y176692D02*\nD03*\nX197592Y178084D02*\nD03*\nX198984Y179475D02*\nD03*\nX200376Y180867D02*\nD03*\nX201768Y182259D02*\nD03*\nX220559Y163468D02*\nD03*\nX219167Y162076D02*\nD03*\nX217775Y160684D02*\nD03*\nX216384Y159292D02*\nD03*\nX214992Y157900D02*\nD03*\nX213600Y156508D02*\nD03*\nX212208Y155116D02*\nD03*\nX210816Y153725D02*\nD03*\nX209424Y152333D02*\nD03*\nX208032Y150941D02*\nD03*\nX369241Y169732D02*\nD03*\nX370633Y171124D02*\nD03*\nX372025Y172516D02*\nD03*\nX373416Y173908D02*\nD03*\nX374808Y175300D02*\nD03*\nX376200Y176692D02*\nD03*\nX377592Y178084D02*\nD03*\nX378984Y179475D02*\nD03*\nX380376Y180867D02*\nD03*\nX381768Y182259D02*\nD03*\nX400559Y163468D02*\nD03*\nX399167Y162076D02*\nD03*\nX397775Y160684D02*\nD03*\nX396384Y159292D02*\nD03*\nX394992Y157900D02*\nD03*\nX393600Y156508D02*\nD03*\nX392208Y155116D02*\nD03*\nX390816Y153725D02*\nD03*\nX389424Y152333D02*\nD03*\nX388032Y150941D02*\nD03*\nX189241Y349732D02*\nD03*\nX190633Y351124D02*\nD03*\nX192025Y352516D02*\nD03*\nX193416Y353908D02*\nD03*\nX194808Y355300D02*\nD03*\nX196200Y356692D02*\nD03*\nX197592Y358084D02*\nD03*\nX198984Y359475D02*\nD03*\nX200376Y360867D02*\nD03*\nX201768Y362259D02*\nD03*\nX220559Y343468D02*\nD03*\nX219167Y342076D02*\nD03*\nX217775Y340684D02*\nD03*\nX216384Y339292D02*\nD03*\nX214992Y337900D02*\nD03*\nX213600Y336508D02*\nD03*\nX212208Y335116D02*\nD03*\nX210816Y333725D02*\nD03*\nX209424Y332333D02*\nD03*\nX208032Y330941D02*\nD03*\nX369241Y349732D02*\nD03*\nX370633Y351124D02*\nD03*\nX372025Y352516D02*\nD03*\nX373416Y353908D02*\nD03*\nX374808Y355300D02*\nD03*\nX376200Y356692D02*\nD03*\nX377592Y358084D02*\nD03*\nX378984Y359475D02*\nD03*\nX380376Y360867D02*\nD03*\nX381768Y362259D02*\nD03*\nX400559Y343468D02*\nD03*\nX399167Y342076D02*\nD03*\nX397775Y340684D02*\nD03*\nX396384Y339292D02*\nD03*\nX394992Y337900D02*\nD03*\nX393600Y336508D02*\nD03*\nX392208Y335116D02*\nD03*\nX390816Y333725D02*\nD03*\nX389424Y332333D02*\nD03*\nX388032Y330941D02*\nD03*\nD31*\nX206709Y149479D02*\nD03*\nX386709D02*\nD03*\nX206709Y329479D02*\nD03*\nX386709D02*\nD03*\nD32*\nX145632Y228844D02*\nD03*\nX156656D02*\nD03*\nX145532Y248544D02*\nD03*\nX156556D02*\nD03*\nX325632Y228844D02*\nD03*\nX336656D02*\nD03*\nX325532Y248544D02*\nD03*\nX336556D02*\nD03*\nX145632Y408844D02*\nD03*\nX156656D02*\nD03*\nX145532Y428544D02*\nD03*\nX156556D02*\nD03*\nX325632Y408844D02*\nD03*\nX336656D02*\nD03*\nX325532Y428544D02*\nD03*\nX336556D02*\nD03*\nD33*\nX181344Y246544D02*\nD03*\nX361344D02*\nD03*\nX181344Y426544D02*\nD03*\nX361344D02*\nD03*\nD34*\nX169730Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nY237587D02*\nD03*\nX192958Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nX349730Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nY237587D02*\nD03*\nX372958Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nX169730Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nY417587D02*\nD03*\nX192958Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nX349730Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nY417587D02*\nD03*\nX372958Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nD35*\nX192958Y237587D02*\nD03*\nX372958D02*\nD03*\nX192958Y417587D02*\nD03*\nX372958D02*\nD03*\nD36*\nX259067Y172744D02*\nD03*\nX249421Y169004D02*\nD03*\nY176484D02*\nD03*\nX258567Y190244D02*\nD03*\nX248921Y186504D02*\nD03*\nY193984D02*\nD03*\nX259067Y206244D02*\nD03*\nX249421Y202504D02*\nD03*\nY209984D02*\nD03*\nX439067Y172744D02*\nD03*\nX429421Y169004D02*\nD03*\nY176484D02*\nD03*\nX438567Y190244D02*\nD03*\nX428921Y186504D02*\nD03*\nY193984D02*\nD03*\nX439067Y206244D02*\nD03*\nX429421Y202504D02*\nD03*\nY209984D02*\nD03*\nX259067Y352744D02*\nD03*\nX249421Y349004D02*\nD03*\nY356484D02*\nD03*\nX258567Y370244D02*\nD03*\nX248921Y366504D02*\nD03*\nY373984D02*\nD03*\nX259067Y386244D02*\nD03*\nX249421Y382504D02*\nD03*\nY389984D02*\nD03*\nX439067Y352744D02*\nD03*\nX429421Y349004D02*\nD03*\nY356484D02*\nD03*\nX438567Y370244D02*\nD03*\nX428921Y366504D02*\nD03*\nY373984D02*\nD03*\nX439067Y386244D02*\nD03*\nX429421Y382504D02*\nD03*\nY389984D02*\nD03*\nD37*\nX168644Y273744D02*\nD03*\nX193044Y273687D02*\nD03*\nX348644Y273744D02*\nD03*\nX373044Y273687D02*\nD03*\nX168644Y453744D02*\nD03*\nX193044Y453687D02*\nD03*\nX348644Y453744D02*\nD03*\nX373044Y453687D02*\nD03*\nD49*\nX125000Y260000D02*\nD03*\nY265000D02*\nD03*\nY255000D02*\nD03*\nY250000D02*\nD03*\nY245000D02*\nD03*\nY240000D02*\nD03*\nX124600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX290600Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX305100Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX291400Y229800D02*\nD03*\nY234800D02*\nD03*\nY239800D02*\nD03*\nY244800D02*\nD03*\nY254800D02*\nD03*\nY249800D02*\nD03*\nX304800Y229300D02*\nD03*\nY234300D02*\nD03*\nY239300D02*\nD03*\nY244300D02*\nD03*\nY254300D02*\nD03*\nY249300D02*\nD03*\nX125200Y409200D02*\nD03*\nY414200D02*\nD03*\nY419200D02*\nD03*\nY424200D02*\nD03*\nY434200D02*\nD03*\nY429200D02*\nD03*\nX291200Y338300D02*\nD03*\nY343300D02*\nD03*\nY348300D02*\nD03*\nY353300D02*\nD03*\nY363300D02*\nD03*\nY358300D02*\nD03*\nX291000Y404100D02*\nD03*\nY409100D02*\nD03*\nY414100D02*\nD03*\nY419100D02*\nD03*\nY429100D02*\nD03*\nY424100D02*\nD03*\nX304900Y404500D02*\nD03*\nY409500D02*\nD03*\nY414500D02*\nD03*\nY419500D02*\nD03*\nY429500D02*\nD03*\nY424500D02*\nD03*\nX304700Y338200D02*\nD03*\nY343200D02*\nD03*\nY348200D02*\nD03*\nY353200D02*\nD03*\nY363200D02*\nD03*\nY358200D02*\nD03*\nX471200Y401400D02*\nD03*\nY406400D02*\nD03*\nY411400D02*\nD03*\nY416400D02*\nD03*\nY426400D02*\nD03*\nY421400D02*\nD03*\nX471600Y339500D02*\nD03*\nY344500D02*\nD03*\nY349500D02*\nD03*\nY354500D02*\nD03*\nY364500D02*\nD03*\nY359500D02*\nD03*\nY216100D02*\nD03*\nY221100D02*\nD03*\nY226100D02*\nD03*\nY231100D02*\nD03*\nY241100D02*\nD03*\nY236100D02*\nD03*\nX470600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX443700Y124400D02*\nD03*\nX438700D02*\nD03*\nX433700D02*\nD03*\nX428700D02*\nD03*\nX418700D02*\nD03*\nX423700D02*\nD03*\nX357000Y124000D02*\nD03*\nX352000D02*\nD03*\nX347000D02*\nD03*\nX342000D02*\nD03*\nX332000D02*\nD03*\nX337000D02*\nD03*\nX360500Y289900D02*\nD03*\nX355500D02*\nD03*\nX350500D02*\nD03*\nX345500D02*\nD03*\nX335500D02*\nD03*\nX340500D02*\nD03*\nX432500Y290100D02*\nD03*\nX427500D02*\nD03*\nX422500D02*\nD03*\nX417500D02*\nD03*\nX407500D02*\nD03*\nX412500D02*\nD03*\nX431400Y303700D02*\nD03*\nX426400D02*\nD03*\nX421400D02*\nD03*\nX416400D02*\nD03*\nX406400D02*\nD03*\nX411400D02*\nD03*\nX360600Y304500D02*\nD03*\nX355600D02*\nD03*\nX350600D02*\nD03*\nX345600D02*\nD03*\nX335600D02*\nD03*\nX340600D02*\nD03*\nX365000Y469600D02*\nD03*\nX360000D02*\nD03*\nX355000D02*\nD03*\nX350000D02*\nD03*\nX340000D02*\nD03*\nX345000D02*\nD03*\nX435000D02*\nD03*\nX430000D02*\nD03*\nX425000D02*\nD03*\nX420000D02*\nD03*\nX410000D02*\nD03*\nX415000D02*\nD03*\nX252600D02*\nD03*\nX247600D02*\nD03*\nX242600D02*\nD03*\nX237600D02*\nD03*\nX227600D02*\nD03*\nX232600D02*\nD03*\nX183200Y469800D02*\nD03*\nX178200D02*\nD03*\nX173200D02*\nD03*\nX168200D02*\nD03*\nX158200D02*\nD03*\nX163200D02*\nD03*\nX175500Y303900D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX160500D02*\nD03*\nX150500D02*\nD03*\nX155500D02*\nD03*\nX175700Y290100D02*\nD03*\nX170700D02*\nD03*\nX165700D02*\nD03*\nX160700D02*\nD03*\nX150700D02*\nD03*\nX155700D02*\nD03*\nX260900Y303300D02*\nD03*\nX255900D02*\nD03*\nX250900D02*\nD03*\nX245900D02*\nD03*\nX235900D02*\nD03*\nX240900D02*\nD03*\nX261100Y290100D02*\nD03*\nX256100D02*\nD03*\nX251100D02*\nD03*\nX246100D02*\nD03*\nX236100D02*\nD03*\nX241100D02*\nD03*\nX261300Y123800D02*\nD03*\nX256300D02*\nD03*\nX251300D02*\nD03*\nX246300D02*\nD03*\nX236300D02*\nD03*\nX241300D02*\nD03*\nX180500Y124000D02*\nD03*\nX175500D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX155500D02*\nD03*\nX160500D02*\nD03*\nX125100Y351700D02*\nD03*\nY356700D02*\nD03*\nY346700D02*\nD03*\nY341700D02*\nD03*\nY336700D02*\nD03*\nY331700D02*\nD03*\nD50*\nX147744Y146744D02*\nD03*\nX269791D02*\nD03*\nY268791D02*\nD03*\nX147744D02*\nD03*\nX327744Y146744D02*\nD03*\nX449791D02*\nD03*\nY268791D02*\nD03*\nX327744D02*\nD03*\nX147744Y326744D02*\nD03*\nX269791D02*\nD03*\nY448791D02*\nD03*\nX147744D02*\nD03*\nX327744Y326744D02*\nD03*\nX449791D02*\nD03*\nY448791D02*\nD03*\nX327744D02*\nD03*\nD51*\nX133008Y181964D02*\nD03*\nY209524D02*\nD03*\nX313008Y181964D02*\nD03*\nY209524D02*\nD03*\nX133008Y361964D02*\nD03*\nY389524D02*\nD03*\nX313008Y361964D02*\nD03*\nY389524D02*\nD03*\nD52*\nX144031Y185901D02*\nD03*\nY205587D02*\nD03*\nX324031Y185901D02*\nD03*\nY205587D02*\nD03*\nX144031Y365901D02*\nD03*\nY385587D02*\nD03*\nX324031Y365901D02*\nD03*\nY385587D02*\nD03*\nD53*\nX132044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX235244Y252744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX312044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX415244Y252744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX132044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX235244Y432744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nX312044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX415244Y432744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nD54*\nX132044Y252344D02*\nD03*\nX312044D02*\nD03*\nX132044Y432344D02*\nD03*\nX312044D02*\nD03*\nD55*\nX141744Y166744D02*\nD03*\nY171744D02*\nD03*\nX146744Y166744D02*\nD03*\nY171744D02*\nD03*\nX151744Y166744D02*\nD03*\nY171744D02*\nD03*\nX156744Y166744D02*\nD03*\nY171744D02*\nD03*\nX161744Y166744D02*\nD03*\nX321744D02*\nD03*\nY171744D02*\nD03*\nX326744Y166744D02*\nD03*\nY171744D02*\nD03*\nX331744Y166744D02*\nD03*\nY171744D02*\nD03*\nX336744Y166744D02*\nD03*\nY171744D02*\nD03*\nX341744Y166744D02*\nD03*\nX141744Y346744D02*\nD03*\nY351744D02*\nD03*\nX146744Y346744D02*\nD03*\nY351744D02*\nD03*\nX151744Y346744D02*\nD03*\nY351744D02*\nD03*\nX156744Y346744D02*\nD03*\nY351744D02*\nD03*\nX161744Y346744D02*\nD03*\nX321744D02*\nD03*\nY351744D02*\nD03*\nX326744Y346744D02*\nD03*\nY351744D02*\nD03*\nX331744Y346744D02*\nD03*\nY351744D02*\nD03*\nX336744Y346744D02*\nD03*\nY351744D02*\nD03*\nX341744Y346744D02*\nD03*\nD56*\nX161744Y171744D02*\nD03*\nX341744D02*\nD03*\nX161744Y351744D02*\nD03*\nX341744D02*\nD03*\nD57*\nX205244Y252744D02*\nD03*\nX283500Y161200D02*\nD03*\nX385244Y252744D02*\nD03*\nX463500Y161200D02*\nD03*\nX205244Y432744D02*\nD03*\nX283500Y341200D02*\nD03*\nX385244Y432744D02*\nD03*\nX463500Y341200D02*\nD03*\nD58*\nX235744Y276244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nX235744Y456244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nM02*\n"
  },
  {
    "path": "hardware/panel.GTL",
    "content": "G04 Layer_Physical_Order=1*\nG04 Layer_Color=255*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD10R,0.03543X0.03150*%\nG04:AMPARAMS|DCode=11|XSize=31.5mil|YSize=35.43mil|CornerRadius=7.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD11*\n21,1,0.03150,0.01969,0,0,270.0*\n21,1,0.01575,0.03543,0,0,270.0*\n1,1,0.01575,-0.00984,-0.00787*\n1,1,0.01575,-0.00984,0.00787*\n1,1,0.01575,0.00984,0.00787*\n1,1,0.01575,0.00984,-0.00787*\n%\n%ADD11ROUNDEDRECTD11*%\n%ADD12R,0.07087X0.03937*%\n%ADD13R,0.03347X0.03150*%\n%ADD14R,0.06890X0.01575*%\n%ADD15R,0.09449X0.04724*%\n%ADD16R,0.12205X0.04724*%\n%ADD17R,0.04724X0.07087*%\nG04:AMPARAMS|DCode=18|XSize=31.5mil|YSize=31.5mil|CornerRadius=7.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD18*\n21,1,0.03150,0.01575,0,0,90.0*\n21,1,0.01575,0.03150,0,0,90.0*\n1,1,0.01575,0.00787,0.00787*\n1,1,0.01575,0.00787,-0.00787*\n1,1,0.01575,-0.00787,-0.00787*\n1,1,0.01575,-0.00787,0.00787*\n%\n%ADD18ROUNDEDRECTD18*%\n%ADD19R,0.03150X0.03150*%\nG04:AMPARAMS|DCode=20|XSize=27.56mil|YSize=51.18mil|CornerRadius=6.89mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD20*\n21,1,0.02756,0.03740,0,0,90.0*\n21,1,0.01378,0.05118,0,0,90.0*\n1,1,0.01378,0.01870,0.00689*\n1,1,0.01378,0.01870,-0.00689*\n1,1,0.01378,-0.01870,-0.00689*\n1,1,0.01378,-0.01870,0.00689*\n%\n%ADD20ROUNDEDRECTD20*%\n%ADD21R,0.05118X0.02756*%\nG04:AMPARAMS|DCode=22|XSize=23.62mil|YSize=35.43mil|CornerRadius=5.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD22*\n21,1,0.02362,0.02362,0,0,270.0*\n21,1,0.01181,0.03543,0,0,270.0*\n1,1,0.01181,-0.01181,-0.00591*\n1,1,0.01181,-0.01181,0.00591*\n1,1,0.01181,0.01181,0.00591*\n1,1,0.01181,0.01181,-0.00591*\n%\n%ADD22ROUNDEDRECTD22*%\n%ADD23R,0.03543X0.02362*%\n%ADD24R,0.03543X0.02953*%\nG04:AMPARAMS|DCode=25|XSize=78.74mil|YSize=39.37mil|CornerRadius=9.84mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD25*\n21,1,0.07874,0.01969,0,0,0.0*\n21,1,0.05906,0.03937,0,0,0.0*\n1,1,0.01969,0.02953,-0.00984*\n1,1,0.01969,-0.02953,-0.00984*\n1,1,0.01969,-0.02953,0.00984*\n1,1,0.01969,0.02953,0.00984*\n%\n%ADD25ROUNDEDRECTD25*%\n%ADD26P,0.28674X4X180.0*%\nG04:AMPARAMS|DCode=27|XSize=9.84mil|YSize=33.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD27*\n21,1,0.02362,0.00984,0.00000,0.00000,225.0*\n1,1,0.00984,0.00835,0.00835*\n1,1,0.00984,-0.00835,-0.00835*\n%\n%ADD27OVALD27*%\n\nG04:AMPARAMS|DCode=28|XSize=9.84mil|YSize=35.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD28*\n21,1,0.02559,0.00984,0.00000,0.00000,225.0*\n1,1,0.00984,0.00905,0.00905*\n1,1,0.00984,-0.00905,-0.00905*\n%\n%ADD28OVALD28*%\n\nG04:AMPARAMS|DCode=29|XSize=9.84mil|YSize=33.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD29*\n21,1,0.02362,0.00984,0.00000,0.00000,315.0*\n1,1,0.00984,-0.00835,0.00835*\n1,1,0.00984,0.00835,-0.00835*\n%\n%ADD29OVALD29*%\n\nG04:AMPARAMS|DCode=30|XSize=9.84mil|YSize=35.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD30*\n21,1,0.02559,0.00984,0.00000,0.00000,315.0*\n1,1,0.00984,-0.00905,0.00905*\n1,1,0.00984,0.00905,-0.00905*\n%\n%ADD30OVALD30*%\n\nG04:AMPARAMS|DCode=31|XSize=9.84mil|YSize=33.47mil|CornerRadius=2.46mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD31*\n21,1,0.00984,0.02854,0,0,225.0*\n21,1,0.00492,0.03347,0,0,225.0*\n1,1,0.00492,-0.01183,0.00835*\n1,1,0.00492,-0.00835,0.01183*\n1,1,0.00492,0.01183,-0.00835*\n1,1,0.00492,0.00835,-0.01183*\n%\n%ADD31ROUNDEDRECTD31*%\n%ADD32R,0.03937X0.06693*%\n%ADD33R,0.11811X0.11811*%\n%ADD34O,0.05512X0.01772*%\n%ADD35R,0.05512X0.01772*%\n%ADD36R,0.03740X0.02756*%\n%ADD37R,0.12500X0.04500*%\n%ADD38C,0.00600*%\n%ADD39C,0.03000*%\n%ADD40C,0.02000*%\n%ADD41C,0.04000*%\n%ADD42C,0.01600*%\n%ADD43C,0.00800*%\n%ADD44C,0.02500*%\n%ADD45C,0.01000*%\n%ADD46C,0.05000*%\n%ADD47C,0.01500*%\n%ADD48C,0.06000*%\n%ADD49C,0.01000*%\n%ADD50O,0.04724X0.09449*%\n%ADD51O,0.06102X0.03543*%\n%ADD52O,0.03740X0.04921*%\n%ADD53C,0.07000*%\n%ADD54R,0.07000X0.07000*%\n%ADD55C,0.04000*%\n%ADD56R,0.04000X0.04000*%\n%ADD57R,0.07000X0.07000*%\n%ADD58C,0.07874*%\n%ADD59C,0.02400*%\n%ADD60C,0.01969*%\nG36*\nX345359Y467825D02*\nX344887Y467209D01*\nX344705Y466770D01*\nX344600D01*\nX344093Y466669D01*\nX343663Y466381D01*\nX343375Y465951D01*\nX343274Y465444D01*\nY456994D01*\nX341394D01*\nY450494D01*\nX343109D01*\nY442544D01*\nX343247Y441500D01*\nX343650Y440527D01*\nX344291Y439691D01*\nX345127Y439050D01*\nX346100Y438647D01*\nX347144Y438510D01*\nX347315Y438532D01*\nX347691Y438202D01*\nY437390D01*\nX347124Y437277D01*\nX346550Y436894D01*\nX346376Y436838D01*\nX345986D01*\nX345846Y437046D01*\nX345020Y437599D01*\nX344044Y437793D01*\nX313644D01*\nX312669Y437599D01*\nX311842Y437046D01*\nX311706Y436844D01*\nX307544D01*\nY427844D01*\nX316544D01*\nY432695D01*\nX333588D01*\nY429496D01*\nX333407Y429227D01*\nX333272Y428544D01*\nX333407Y427861D01*\nX333588Y427592D01*\nY424238D01*\nX316130D01*\nX315975Y424614D01*\nX315253Y425554D01*\nX314313Y426275D01*\nX313219Y426728D01*\nX312044Y426883D01*\nX310869Y426728D01*\nX309775Y426275D01*\nX308835Y425554D01*\nX308113Y424614D01*\nX307660Y423519D01*\nX307529Y422528D01*\nX307029Y422561D01*\nY459566D01*\nX315788Y468325D01*\nX345190D01*\nX345359Y467825D01*\nD02*\nG37*\nG36*\nX165359D02*\nX164887Y467209D01*\nX164705Y466770D01*\nX164600D01*\nX164093Y466669D01*\nX163663Y466381D01*\nX163375Y465951D01*\nX163275Y465444D01*\nY456994D01*\nX161394D01*\nY450494D01*\nX163110D01*\nY442544D01*\nX163247Y441500D01*\nX163650Y440527D01*\nX164291Y439691D01*\nX165127Y439050D01*\nX166100Y438647D01*\nX167144Y438510D01*\nX167315Y438532D01*\nX167691Y438202D01*\nY437390D01*\nX167124Y437277D01*\nX166550Y436894D01*\nX166376Y436838D01*\nX165986D01*\nX165846Y437046D01*\nX165020Y437599D01*\nX164044Y437793D01*\nX133644D01*\nX132669Y437599D01*\nX131842Y437046D01*\nX131706Y436844D01*\nX127544D01*\nY427844D01*\nX136544D01*\nY432695D01*\nX153587D01*\nY429496D01*\nX153408Y429227D01*\nX153272Y428544D01*\nX153408Y427861D01*\nX153587Y427592D01*\nY424238D01*\nX136130D01*\nX135975Y424614D01*\nX135253Y425554D01*\nX134313Y426275D01*\nX133219Y426728D01*\nX132044Y426883D01*\nX130869Y426728D01*\nX129775Y426275D01*\nX128835Y425554D01*\nX128113Y424614D01*\nX127660Y423519D01*\nX127529Y422528D01*\nX127029Y422561D01*\nY459566D01*\nX135788Y468325D01*\nX165190D01*\nX165359Y467825D01*\nD02*\nG37*\nG36*\nX410857Y455538D02*\nX410934Y454955D01*\nX411432Y453754D01*\nX412223Y452723D01*\nX413254Y451931D01*\nX414455Y451434D01*\nX415557Y451289D01*\nX415931Y451134D01*\nX416844Y451014D01*\nX417758Y451134D01*\nX418609Y451487D01*\nX419340Y452048D01*\nX419901Y452779D01*\nX420254Y453631D01*\nX420309Y454050D01*\nX420375Y454097D01*\nX420870Y453834D01*\nX420544Y437944D01*\nY424644D01*\nX407719D01*\nX406569Y425793D01*\nY428422D01*\nX407513Y428813D01*\nX408453Y429535D01*\nX409175Y430475D01*\nX409628Y431569D01*\nX409783Y432744D01*\nX409628Y433919D01*\nX409175Y435013D01*\nX408453Y435953D01*\nX407513Y436675D01*\nX406419Y437128D01*\nX405244Y437283D01*\nX404069Y437128D01*\nX402975Y436675D01*\nX402035Y435953D01*\nX401313Y435013D01*\nX400860Y433919D01*\nX400705Y432744D01*\nX400860Y431569D01*\nX401313Y430475D01*\nX402035Y429535D01*\nX402975Y428813D01*\nX403919Y428422D01*\nY425244D01*\nX403938Y425144D01*\nX403528Y424644D01*\nX398688D01*\nX397439Y425893D01*\nY428783D01*\nX397513Y428813D01*\nX398453Y429535D01*\nX399175Y430475D01*\nX399628Y431569D01*\nX399783Y432744D01*\nX399628Y433919D01*\nX399175Y435013D01*\nX398453Y435953D01*\nX397513Y436675D01*\nX396419Y437128D01*\nX395244Y437283D01*\nX394069Y437128D01*\nX392975Y436675D01*\nX392035Y435953D01*\nX391313Y435013D01*\nX390860Y433919D01*\nX390705Y432744D01*\nX390860Y431569D01*\nX391313Y430475D01*\nX392035Y429535D01*\nX392975Y428813D01*\nX394069Y428360D01*\nX394789Y428265D01*\nY425397D01*\nX394386Y425316D01*\nX393658Y424830D01*\nX393534Y424644D01*\nX386671D01*\nX383834Y427482D01*\nX384025Y427944D01*\nX388544D01*\nX389244Y427244D01*\nX389744Y427744D01*\nY437244D01*\nX381244D01*\nX381497Y436991D01*\nY431073D01*\nX380997Y430866D01*\nX377984Y433879D01*\nX377554Y434166D01*\nX377046Y434267D01*\nX376211D01*\nX376188Y434301D01*\nX375564Y434718D01*\nX374828Y434865D01*\nX371088D01*\nX370352Y434718D01*\nX369728Y434301D01*\nX369312Y433678D01*\nX369165Y432942D01*\nX369312Y432206D01*\nX369675Y431662D01*\nX369312Y431118D01*\nX369165Y430383D01*\nX369312Y429647D01*\nX369675Y429103D01*\nX369312Y428559D01*\nX369165Y427824D01*\nX369312Y427088D01*\nX369675Y426544D01*\nX369312Y426000D01*\nX369165Y425265D01*\nX369312Y424529D01*\nX369675Y423985D01*\nX369312Y423441D01*\nX369165Y422706D01*\nX369312Y421970D01*\nX369675Y421426D01*\nX369312Y420882D01*\nX369165Y420146D01*\nX369312Y419411D01*\nX369728Y418787D01*\nX370352Y418370D01*\nX371088Y418224D01*\nX374828D01*\nX375564Y418370D01*\nX375862Y418569D01*\nX376181Y418181D01*\nX374444Y416444D01*\nY413788D01*\nX371407Y410751D01*\nX371119Y410321D01*\nX371019Y409814D01*\nY408383D01*\nX370632Y408066D01*\nX370244Y408143D01*\nX369386Y407972D01*\nX368658Y407486D01*\nX368172Y406758D01*\nX368001Y405900D01*\nX368172Y405042D01*\nX368410Y404685D01*\nX365363Y401637D01*\nX365075Y401207D01*\nX364974Y400700D01*\nY389144D01*\nX359779D01*\nX359708Y389503D01*\nX359269Y390159D01*\nX358613Y390597D01*\nX357839Y390751D01*\nX351933D01*\nX351159Y390597D01*\nX350502Y390159D01*\nX350064Y389503D01*\nX349993Y389144D01*\nX343637D01*\nX343566Y389503D01*\nX343127Y390159D01*\nX342471Y390597D01*\nX341697Y390751D01*\nX335791D01*\nX335017Y390597D01*\nX334361Y390159D01*\nX333922Y389503D01*\nX333851Y389144D01*\nX331954D01*\nX331830Y389330D01*\nX331102Y389816D01*\nX330244Y389987D01*\nX329386Y389816D01*\nX328658Y389330D01*\nX328534Y389144D01*\nX308944D01*\nX307405Y388948D01*\nX307029Y389279D01*\nY402127D01*\nX307529Y402160D01*\nX307660Y401169D01*\nX308113Y400075D01*\nX308835Y399135D01*\nX309775Y398413D01*\nX310869Y397960D01*\nX312044Y397805D01*\nX313219Y397960D01*\nX314313Y398413D01*\nX315253Y399135D01*\nX315956Y400050D01*\nX339344D01*\nX340222Y400224D01*\nX340966Y400722D01*\nX344966Y404722D01*\nX345463Y405466D01*\nX345638Y406344D01*\nY411424D01*\nX351110D01*\nY407669D01*\nX356457D01*\nY412819D01*\nX355109D01*\nY412961D01*\nX355008Y413468D01*\nX354764Y413833D01*\nY416644D01*\nX354686Y417034D01*\nX354465Y417365D01*\nX353465Y418365D01*\nX353279Y418489D01*\nX353053Y418927D01*\nX353377Y419411D01*\nX353523Y420146D01*\nX353377Y420882D01*\nX353013Y421426D01*\nX353377Y421970D01*\nX353523Y422706D01*\nX353377Y423441D01*\nX353013Y423985D01*\nX353377Y424529D01*\nX353523Y425265D01*\nX353377Y426000D01*\nX353013Y426544D01*\nX353377Y427088D01*\nX353523Y427824D01*\nX353377Y428559D01*\nX353013Y429103D01*\nX353377Y429647D01*\nX353523Y430383D01*\nX353377Y431118D01*\nX353013Y431662D01*\nX353377Y432206D01*\nX353523Y432942D01*\nX353377Y433678D01*\nX353013Y434221D01*\nX353377Y434765D01*\nX353523Y435501D01*\nX353377Y436237D01*\nX352960Y436860D01*\nX352336Y437277D01*\nX351769Y437390D01*\nY439958D01*\nX351614Y440739D01*\nX351172Y441400D01*\nX351037Y441490D01*\nX351041Y441500D01*\nX351179Y442544D01*\nY450494D01*\nX355894D01*\nY456994D01*\nX353822D01*\nX353630Y457456D01*\nX358488Y462314D01*\nX404082D01*\nX410857Y455538D01*\nD02*\nG37*\nG36*\nX230857D02*\nX230934Y454955D01*\nX231432Y453754D01*\nX232223Y452723D01*\nX233254Y451931D01*\nX234455Y451434D01*\nX235557Y451289D01*\nX235931Y451134D01*\nX236844Y451014D01*\nX237758Y451134D01*\nX238609Y451487D01*\nX239340Y452048D01*\nX239901Y452779D01*\nX240254Y453631D01*\nX240309Y454050D01*\nX240375Y454097D01*\nX240870Y453834D01*\nX240544Y437944D01*\nY424644D01*\nX227719D01*\nX226570Y425793D01*\nY428422D01*\nX227513Y428813D01*\nX228453Y429535D01*\nX229175Y430475D01*\nX229628Y431569D01*\nX229783Y432744D01*\nX229628Y433919D01*\nX229175Y435013D01*\nX228453Y435953D01*\nX227513Y436675D01*\nX226419Y437128D01*\nX225244Y437283D01*\nX224069Y437128D01*\nX222975Y436675D01*\nX222035Y435953D01*\nX221313Y435013D01*\nX220860Y433919D01*\nX220705Y432744D01*\nX220860Y431569D01*\nX221313Y430475D01*\nX222035Y429535D01*\nX222975Y428813D01*\nX223919Y428422D01*\nY425244D01*\nX223938Y425144D01*\nX223528Y424644D01*\nX218688D01*\nX217439Y425893D01*\nY428783D01*\nX217513Y428813D01*\nX218453Y429535D01*\nX219175Y430475D01*\nX219628Y431569D01*\nX219783Y432744D01*\nX219628Y433919D01*\nX219175Y435013D01*\nX218453Y435953D01*\nX217513Y436675D01*\nX216419Y437128D01*\nX215244Y437283D01*\nX214069Y437128D01*\nX212975Y436675D01*\nX212035Y435953D01*\nX211313Y435013D01*\nX210860Y433919D01*\nX210705Y432744D01*\nX210860Y431569D01*\nX211313Y430475D01*\nX212035Y429535D01*\nX212975Y428813D01*\nX214069Y428360D01*\nX214789Y428265D01*\nY425397D01*\nX214386Y425316D01*\nX213658Y424830D01*\nX213534Y424644D01*\nX206672D01*\nX203834Y427482D01*\nX204025Y427944D01*\nX208544D01*\nX209244Y427244D01*\nX209744Y427744D01*\nY437244D01*\nX201244D01*\nX201497Y436991D01*\nY431073D01*\nX200997Y430866D01*\nX197984Y433879D01*\nX197554Y434166D01*\nX197046Y434267D01*\nX196211D01*\nX196188Y434301D01*\nX195564Y434718D01*\nX194828Y434865D01*\nX191088D01*\nX190352Y434718D01*\nX189728Y434301D01*\nX189312Y433678D01*\nX189165Y432942D01*\nX189312Y432206D01*\nX189675Y431662D01*\nX189312Y431118D01*\nX189165Y430383D01*\nX189312Y429647D01*\nX189675Y429103D01*\nX189312Y428559D01*\nX189165Y427824D01*\nX189312Y427088D01*\nX189675Y426544D01*\nX189312Y426000D01*\nX189165Y425265D01*\nX189312Y424529D01*\nX189675Y423985D01*\nX189312Y423441D01*\nX189165Y422706D01*\nX189312Y421970D01*\nX189675Y421426D01*\nX189312Y420882D01*\nX189165Y420146D01*\nX189312Y419411D01*\nX189728Y418787D01*\nX190352Y418370D01*\nX191088Y418224D01*\nX194828D01*\nX195564Y418370D01*\nX195862Y418569D01*\nX196181Y418181D01*\nX194444Y416444D01*\nY413788D01*\nX191407Y410751D01*\nX191120Y410321D01*\nX191019Y409814D01*\nY408383D01*\nX190632Y408066D01*\nX190244Y408143D01*\nX189386Y407972D01*\nX188658Y407486D01*\nX188172Y406758D01*\nX188001Y405900D01*\nX188172Y405042D01*\nX188410Y404685D01*\nX185363Y401637D01*\nX185075Y401207D01*\nX184975Y400700D01*\nY389144D01*\nX179779D01*\nX179708Y389503D01*\nX179269Y390159D01*\nX178613Y390597D01*\nX177839Y390751D01*\nX171933D01*\nX171159Y390597D01*\nX170502Y390159D01*\nX170064Y389503D01*\nX169993Y389144D01*\nX163637D01*\nX163566Y389503D01*\nX163127Y390159D01*\nX162471Y390597D01*\nX161697Y390751D01*\nX155791D01*\nX155017Y390597D01*\nX154361Y390159D01*\nX153922Y389503D01*\nX153851Y389144D01*\nX151954D01*\nX151830Y389330D01*\nX151102Y389816D01*\nX150244Y389987D01*\nX149386Y389816D01*\nX148658Y389330D01*\nX148534Y389144D01*\nX128944D01*\nX127405Y388948D01*\nX127029Y389279D01*\nY402127D01*\nX127529Y402160D01*\nX127660Y401169D01*\nX128113Y400075D01*\nX128835Y399135D01*\nX129775Y398413D01*\nX130869Y397960D01*\nX132044Y397805D01*\nX133219Y397960D01*\nX134313Y398413D01*\nX135253Y399135D01*\nX135956Y400050D01*\nX159344D01*\nX160222Y400224D01*\nX160966Y400722D01*\nX164966Y404722D01*\nX165463Y405466D01*\nX165638Y406344D01*\nY411424D01*\nX171110D01*\nY407669D01*\nX176457D01*\nY412819D01*\nX175109D01*\nY412961D01*\nX175008Y413468D01*\nX174764Y413833D01*\nY416644D01*\nX174686Y417034D01*\nX174465Y417365D01*\nX173465Y418365D01*\nX173279Y418489D01*\nX173053Y418927D01*\nX173377Y419411D01*\nX173523Y420146D01*\nX173377Y420882D01*\nX173013Y421426D01*\nX173377Y421970D01*\nX173523Y422706D01*\nX173377Y423441D01*\nX173013Y423985D01*\nX173377Y424529D01*\nX173523Y425265D01*\nX173377Y426000D01*\nX173013Y426544D01*\nX173377Y427088D01*\nX173523Y427824D01*\nX173377Y428559D01*\nX173013Y429103D01*\nX173377Y429647D01*\nX173523Y430383D01*\nX173377Y431118D01*\nX173013Y431662D01*\nX173377Y432206D01*\nX173523Y432942D01*\nX173377Y433678D01*\nX173013Y434221D01*\nX173377Y434765D01*\nX173523Y435501D01*\nX173377Y436237D01*\nX172960Y436860D01*\nX172336Y437277D01*\nX171769Y437390D01*\nY439958D01*\nX171614Y440739D01*\nX171172Y441400D01*\nX171037Y441490D01*\nX171041Y441500D01*\nX171178Y442544D01*\nY450494D01*\nX175894D01*\nY456994D01*\nX173822D01*\nX173630Y457456D01*\nX178488Y462314D01*\nX224082D01*\nX230857Y455538D01*\nD02*\nG37*\nG36*\nX353244Y417144D02*\nX353744Y416644D01*\nY412444D01*\nX345638D01*\nY415244D01*\nX346746Y416352D01*\nX347244Y417096D01*\nX347273Y417246D01*\nX352644Y417644D01*\nX352744D01*\nX353244Y417144D01*\nD02*\nG37*\nG36*\nX173244D02*\nX173744Y416644D01*\nY412444D01*\nX165638D01*\nY415244D01*\nX166746Y416352D01*\nX167244Y417096D01*\nX167273Y417246D01*\nX172644Y417644D01*\nX172744D01*\nX173244Y417144D01*\nD02*\nG37*\nG36*\nX338859Y414982D02*\nY413642D01*\nX338407Y413190D01*\nX333687D01*\nY404638D01*\nX315956D01*\nX315253Y405553D01*\nX314313Y406275D01*\nX313219Y406728D01*\nX312044Y406883D01*\nX310869Y406728D01*\nX309775Y406275D01*\nX308835Y405553D01*\nX308113Y404613D01*\nX307660Y403519D01*\nX307529Y402528D01*\nX307029Y402561D01*\nY412127D01*\nX307529Y412160D01*\nX307660Y411169D01*\nX308113Y410075D01*\nX308835Y409135D01*\nX309775Y408413D01*\nX310869Y407960D01*\nX312044Y407805D01*\nX313219Y407960D01*\nX314313Y408413D01*\nX315253Y409135D01*\nX315975Y410075D01*\nX316428Y411169D01*\nX316583Y412344D01*\nX316428Y413519D01*\nX316163Y414158D01*\nX316700Y414695D01*\nX336844D01*\nX337820Y414889D01*\nX338359Y415249D01*\nX338859Y414982D01*\nD02*\nG37*\nG36*\nX158859D02*\nY413642D01*\nX158407Y413190D01*\nX153688D01*\nY404638D01*\nX135956D01*\nX135253Y405553D01*\nX134313Y406275D01*\nX133219Y406728D01*\nX132044Y406883D01*\nX130869Y406728D01*\nX129775Y406275D01*\nX128835Y405553D01*\nX128113Y404613D01*\nX127660Y403519D01*\nX127529Y402528D01*\nX127029Y402561D01*\nY412127D01*\nX127529Y412160D01*\nX127660Y411169D01*\nX128113Y410075D01*\nX128835Y409135D01*\nX129775Y408413D01*\nX130869Y407960D01*\nX132044Y407805D01*\nX133219Y407960D01*\nX134313Y408413D01*\nX135253Y409135D01*\nX135975Y410075D01*\nX136428Y411169D01*\nX136583Y412344D01*\nX136428Y413519D01*\nX136163Y414158D01*\nX136700Y414695D01*\nX156844D01*\nX157819Y414889D01*\nX158359Y415249D01*\nX158859Y414982D01*\nD02*\nG37*\nG36*\nX320488Y360390D02*\nX318520D01*\nY361965D01*\nX320488D01*\nY360390D01*\nD02*\nG37*\nG36*\nX140488D02*\nX138520D01*\nY361965D01*\nX140488D01*\nY360390D01*\nD02*\nG37*\nG36*\nX345359Y287825D02*\nX344887Y287209D01*\nX344705Y286770D01*\nX344600D01*\nX344093Y286669D01*\nX343663Y286381D01*\nX343375Y285951D01*\nX343274Y285444D01*\nY276994D01*\nX341394D01*\nY270494D01*\nX343109D01*\nY262544D01*\nX343247Y261500D01*\nX343650Y260527D01*\nX344291Y259691D01*\nX345127Y259050D01*\nX346100Y258647D01*\nX347144Y258509D01*\nX347315Y258532D01*\nX347691Y258202D01*\nY257390D01*\nX347124Y257277D01*\nX346550Y256893D01*\nX346376Y256838D01*\nX345986D01*\nX345846Y257046D01*\nX345020Y257599D01*\nX344044Y257793D01*\nX313644D01*\nX312669Y257599D01*\nX311842Y257046D01*\nX311706Y256844D01*\nX307544D01*\nY247844D01*\nX316544D01*\nY252695D01*\nX333588D01*\nY249496D01*\nX333407Y249227D01*\nX333272Y248544D01*\nX333407Y247861D01*\nX333588Y247592D01*\nY244238D01*\nX316130D01*\nX315975Y244614D01*\nX315253Y245554D01*\nX314313Y246275D01*\nX313219Y246728D01*\nX312044Y246883D01*\nX310869Y246728D01*\nX309775Y246275D01*\nX308835Y245554D01*\nX308113Y244614D01*\nX307660Y243519D01*\nX307529Y242528D01*\nX307029Y242561D01*\nY279567D01*\nX315788Y288325D01*\nX345190D01*\nX345359Y287825D01*\nD02*\nG37*\nG36*\nX165359D02*\nX164887Y287209D01*\nX164705Y286770D01*\nX164600D01*\nX164093Y286669D01*\nX163663Y286381D01*\nX163375Y285951D01*\nX163275Y285444D01*\nY276994D01*\nX161394D01*\nY270494D01*\nX163110D01*\nY262544D01*\nX163247Y261500D01*\nX163650Y260527D01*\nX164291Y259691D01*\nX165127Y259050D01*\nX166100Y258647D01*\nX167144Y258509D01*\nX167315Y258532D01*\nX167691Y258202D01*\nY257390D01*\nX167124Y257277D01*\nX166550Y256893D01*\nX166376Y256838D01*\nX165986D01*\nX165846Y257046D01*\nX165020Y257599D01*\nX164044Y257793D01*\nX133644D01*\nX132669Y257599D01*\nX131842Y257046D01*\nX131706Y256844D01*\nX127544D01*\nY247844D01*\nX136544D01*\nY252695D01*\nX153587D01*\nY249496D01*\nX153408Y249227D01*\nX153272Y248544D01*\nX153408Y247861D01*\nX153587Y247592D01*\nY244238D01*\nX136130D01*\nX135975Y244614D01*\nX135253Y245554D01*\nX134313Y246275D01*\nX133219Y246728D01*\nX132044Y246883D01*\nX130869Y246728D01*\nX129775Y246275D01*\nX128835Y245554D01*\nX128113Y244614D01*\nX127660Y243519D01*\nX127529Y242528D01*\nX127029Y242561D01*\nY279567D01*\nX135788Y288325D01*\nX165190D01*\nX165359Y287825D01*\nD02*\nG37*\nG36*\nX410857Y275538D02*\nX410934Y274955D01*\nX411432Y273754D01*\nX412223Y272723D01*\nX413254Y271932D01*\nX414455Y271434D01*\nX415557Y271289D01*\nX415931Y271134D01*\nX416844Y271014D01*\nX417758Y271134D01*\nX418609Y271487D01*\nX419340Y272048D01*\nX419901Y272779D01*\nX420254Y273631D01*\nX420309Y274050D01*\nX420375Y274096D01*\nX420870Y273834D01*\nX420544Y257944D01*\nY244644D01*\nX407719D01*\nX406569Y245793D01*\nY248422D01*\nX407513Y248813D01*\nX408453Y249535D01*\nX409175Y250475D01*\nX409628Y251569D01*\nX409783Y252744D01*\nX409628Y253919D01*\nX409175Y255013D01*\nX408453Y255953D01*\nX407513Y256675D01*\nX406419Y257128D01*\nX405244Y257283D01*\nX404069Y257128D01*\nX402975Y256675D01*\nX402035Y255953D01*\nX401313Y255013D01*\nX400860Y253919D01*\nX400705Y252744D01*\nX400860Y251569D01*\nX401313Y250475D01*\nX402035Y249535D01*\nX402975Y248813D01*\nX403919Y248422D01*\nY245244D01*\nX403938Y245144D01*\nX403528Y244644D01*\nX398688D01*\nX397439Y245893D01*\nY248783D01*\nX397513Y248813D01*\nX398453Y249535D01*\nX399175Y250475D01*\nX399628Y251569D01*\nX399783Y252744D01*\nX399628Y253919D01*\nX399175Y255013D01*\nX398453Y255953D01*\nX397513Y256675D01*\nX396419Y257128D01*\nX395244Y257283D01*\nX394069Y257128D01*\nX392975Y256675D01*\nX392035Y255953D01*\nX391313Y255013D01*\nX390860Y253919D01*\nX390705Y252744D01*\nX390860Y251569D01*\nX391313Y250475D01*\nX392035Y249535D01*\nX392975Y248813D01*\nX394069Y248360D01*\nX394789Y248265D01*\nY245397D01*\nX394386Y245316D01*\nX393658Y244830D01*\nX393534Y244644D01*\nX386671D01*\nX383834Y247482D01*\nX384025Y247944D01*\nX388544D01*\nX389244Y247244D01*\nX389744Y247744D01*\nY257244D01*\nX381244D01*\nX381497Y256991D01*\nY251073D01*\nX380997Y250866D01*\nX377984Y253879D01*\nX377554Y254166D01*\nX377046Y254267D01*\nX376211D01*\nX376188Y254301D01*\nX375564Y254718D01*\nX374828Y254865D01*\nX371088D01*\nX370352Y254718D01*\nX369728Y254301D01*\nX369312Y253678D01*\nX369165Y252942D01*\nX369312Y252206D01*\nX369675Y251662D01*\nX369312Y251118D01*\nX369165Y250383D01*\nX369312Y249647D01*\nX369675Y249103D01*\nX369312Y248559D01*\nX369165Y247824D01*\nX369312Y247088D01*\nX369675Y246544D01*\nX369312Y246000D01*\nX369165Y245265D01*\nX369312Y244529D01*\nX369675Y243985D01*\nX369312Y243441D01*\nX369165Y242706D01*\nX369312Y241970D01*\nX369675Y241426D01*\nX369312Y240882D01*\nX369165Y240146D01*\nX369312Y239411D01*\nX369728Y238787D01*\nX370352Y238370D01*\nX371088Y238224D01*\nX374828D01*\nX375564Y238370D01*\nX375862Y238569D01*\nX376181Y238181D01*\nX374444Y236444D01*\nY233788D01*\nX371407Y230751D01*\nX371119Y230321D01*\nX371019Y229814D01*\nY228383D01*\nX370632Y228066D01*\nX370244Y228143D01*\nX369386Y227972D01*\nX368658Y227486D01*\nX368172Y226758D01*\nX368001Y225900D01*\nX368172Y225042D01*\nX368410Y224685D01*\nX365363Y221637D01*\nX365075Y221207D01*\nX364974Y220700D01*\nY209144D01*\nX359779D01*\nX359708Y209503D01*\nX359269Y210159D01*\nX358613Y210597D01*\nX357839Y210751D01*\nX351933D01*\nX351159Y210597D01*\nX350502Y210159D01*\nX350064Y209503D01*\nX349993Y209144D01*\nX343637D01*\nX343566Y209503D01*\nX343127Y210159D01*\nX342471Y210597D01*\nX341697Y210751D01*\nX335791D01*\nX335017Y210597D01*\nX334361Y210159D01*\nX333922Y209503D01*\nX333851Y209144D01*\nX331954D01*\nX331830Y209330D01*\nX331102Y209816D01*\nX330244Y209987D01*\nX329386Y209816D01*\nX328658Y209330D01*\nX328534Y209144D01*\nX308944D01*\nX307405Y208948D01*\nX307029Y209279D01*\nY222127D01*\nX307529Y222160D01*\nX307660Y221169D01*\nX308113Y220075D01*\nX308835Y219135D01*\nX309775Y218413D01*\nX310869Y217960D01*\nX312044Y217805D01*\nX313219Y217960D01*\nX314313Y218413D01*\nX315253Y219135D01*\nX315956Y220050D01*\nX339344D01*\nX340222Y220224D01*\nX340966Y220722D01*\nX344966Y224722D01*\nX345463Y225466D01*\nX345638Y226344D01*\nY231424D01*\nX351110D01*\nY227669D01*\nX356457D01*\nY232819D01*\nX355109D01*\nY232961D01*\nX355008Y233468D01*\nX354764Y233833D01*\nY236644D01*\nX354686Y237034D01*\nX354465Y237365D01*\nX353465Y238365D01*\nX353279Y238489D01*\nX353053Y238927D01*\nX353377Y239411D01*\nX353523Y240146D01*\nX353377Y240882D01*\nX353013Y241426D01*\nX353377Y241970D01*\nX353523Y242706D01*\nX353377Y243441D01*\nX353013Y243985D01*\nX353377Y244529D01*\nX353523Y245265D01*\nX353377Y246000D01*\nX353013Y246544D01*\nX353377Y247088D01*\nX353523Y247824D01*\nX353377Y248559D01*\nX353013Y249103D01*\nX353377Y249647D01*\nX353523Y250383D01*\nX353377Y251118D01*\nX353013Y251662D01*\nX353377Y252206D01*\nX353523Y252942D01*\nX353377Y253678D01*\nX353013Y254221D01*\nX353377Y254765D01*\nX353523Y255501D01*\nX353377Y256237D01*\nX352960Y256860D01*\nX352336Y257277D01*\nX351769Y257390D01*\nY259958D01*\nX351614Y260739D01*\nX351172Y261400D01*\nX351037Y261490D01*\nX351041Y261500D01*\nX351179Y262544D01*\nY270494D01*\nX355894D01*\nY276994D01*\nX353822D01*\nX353630Y277456D01*\nX358488Y282314D01*\nX404082D01*\nX410857Y275538D01*\nD02*\nG37*\nG36*\nX230857D02*\nX230934Y274955D01*\nX231432Y273754D01*\nX232223Y272723D01*\nX233254Y271932D01*\nX234455Y271434D01*\nX235557Y271289D01*\nX235931Y271134D01*\nX236844Y271014D01*\nX237758Y271134D01*\nX238609Y271487D01*\nX239340Y272048D01*\nX239901Y272779D01*\nX240254Y273631D01*\nX240309Y274050D01*\nX240375Y274096D01*\nX240870Y273834D01*\nX240544Y257944D01*\nY244644D01*\nX227719D01*\nX226570Y245793D01*\nY248422D01*\nX227513Y248813D01*\nX228453Y249535D01*\nX229175Y250475D01*\nX229628Y251569D01*\nX229783Y252744D01*\nX229628Y253919D01*\nX229175Y255013D01*\nX228453Y255953D01*\nX227513Y256675D01*\nX226419Y257128D01*\nX225244Y257283D01*\nX224069Y257128D01*\nX222975Y256675D01*\nX222035Y255953D01*\nX221313Y255013D01*\nX220860Y253919D01*\nX220705Y252744D01*\nX220860Y251569D01*\nX221313Y250475D01*\nX222035Y249535D01*\nX222975Y248813D01*\nX223919Y248422D01*\nY245244D01*\nX223938Y245144D01*\nX223528Y244644D01*\nX218688D01*\nX217439Y245893D01*\nY248783D01*\nX217513Y248813D01*\nX218453Y249535D01*\nX219175Y250475D01*\nX219628Y251569D01*\nX219783Y252744D01*\nX219628Y253919D01*\nX219175Y255013D01*\nX218453Y255953D01*\nX217513Y256675D01*\nX216419Y257128D01*\nX215244Y257283D01*\nX214069Y257128D01*\nX212975Y256675D01*\nX212035Y255953D01*\nX211313Y255013D01*\nX210860Y253919D01*\nX210705Y252744D01*\nX210860Y251569D01*\nX211313Y250475D01*\nX212035Y249535D01*\nX212975Y248813D01*\nX214069Y248360D01*\nX214789Y248265D01*\nY245397D01*\nX214386Y245316D01*\nX213658Y244830D01*\nX213534Y244644D01*\nX206672D01*\nX203834Y247482D01*\nX204025Y247944D01*\nX208544D01*\nX209244Y247244D01*\nX209744Y247744D01*\nY257244D01*\nX201244D01*\nX201497Y256991D01*\nY251073D01*\nX200997Y250866D01*\nX197984Y253879D01*\nX197554Y254166D01*\nX197046Y254267D01*\nX196211D01*\nX196188Y254301D01*\nX195564Y254718D01*\nX194828Y254865D01*\nX191088D01*\nX190352Y254718D01*\nX189728Y254301D01*\nX189312Y253678D01*\nX189165Y252942D01*\nX189312Y252206D01*\nX189675Y251662D01*\nX189312Y251118D01*\nX189165Y250383D01*\nX189312Y249647D01*\nX189675Y249103D01*\nX189312Y248559D01*\nX189165Y247824D01*\nX189312Y247088D01*\nX189675Y246544D01*\nX189312Y246000D01*\nX189165Y245265D01*\nX189312Y244529D01*\nX189675Y243985D01*\nX189312Y243441D01*\nX189165Y242706D01*\nX189312Y241970D01*\nX189675Y241426D01*\nX189312Y240882D01*\nX189165Y240146D01*\nX189312Y239411D01*\nX189728Y238787D01*\nX190352Y238370D01*\nX191088Y238224D01*\nX194828D01*\nX195564Y238370D01*\nX195862Y238569D01*\nX196181Y238181D01*\nX194444Y236444D01*\nY233788D01*\nX191407Y230751D01*\nX191120Y230321D01*\nX191019Y229814D01*\nY228383D01*\nX190632Y228066D01*\nX190244Y228143D01*\nX189386Y227972D01*\nX188658Y227486D01*\nX188172Y226758D01*\nX188001Y225900D01*\nX188172Y225042D01*\nX188410Y224685D01*\nX185363Y221637D01*\nX185075Y221207D01*\nX184975Y220700D01*\nY209144D01*\nX179779D01*\nX179708Y209503D01*\nX179269Y210159D01*\nX178613Y210597D01*\nX177839Y210751D01*\nX171933D01*\nX171159Y210597D01*\nX170502Y210159D01*\nX170064Y209503D01*\nX169993Y209144D01*\nX163637D01*\nX163566Y209503D01*\nX163127Y210159D01*\nX162471Y210597D01*\nX161697Y210751D01*\nX155791D01*\nX155017Y210597D01*\nX154361Y210159D01*\nX153922Y209503D01*\nX153851Y209144D01*\nX151954D01*\nX151830Y209330D01*\nX151102Y209816D01*\nX150244Y209987D01*\nX149386Y209816D01*\nX148658Y209330D01*\nX148534Y209144D01*\nX128944D01*\nX127405Y208948D01*\nX127029Y209279D01*\nY222127D01*\nX127529Y222160D01*\nX127660Y221169D01*\nX128113Y220075D01*\nX128835Y219135D01*\nX129775Y218413D01*\nX130869Y217960D01*\nX132044Y217805D01*\nX133219Y217960D01*\nX134313Y218413D01*\nX135253Y219135D01*\nX135956Y220050D01*\nX159344D01*\nX160222Y220224D01*\nX160966Y220722D01*\nX164966Y224722D01*\nX165463Y225466D01*\nX165638Y226344D01*\nY231424D01*\nX171110D01*\nY227669D01*\nX176457D01*\nY232819D01*\nX175109D01*\nY232961D01*\nX175008Y233468D01*\nX174764Y233833D01*\nY236644D01*\nX174686Y237034D01*\nX174465Y237365D01*\nX173465Y238365D01*\nX173279Y238489D01*\nX173053Y238927D01*\nX173377Y239411D01*\nX173523Y240146D01*\nX173377Y240882D01*\nX173013Y241426D01*\nX173377Y241970D01*\nX173523Y242706D01*\nX173377Y243441D01*\nX173013Y243985D01*\nX173377Y244529D01*\nX173523Y245265D01*\nX173377Y246000D01*\nX173013Y246544D01*\nX173377Y247088D01*\nX173523Y247824D01*\nX173377Y248559D01*\nX173013Y249103D01*\nX173377Y249647D01*\nX173523Y250383D01*\nX173377Y251118D01*\nX173013Y251662D01*\nX173377Y252206D01*\nX173523Y252942D01*\nX173377Y253678D01*\nX173013Y254221D01*\nX173377Y254765D01*\nX173523Y255501D01*\nX173377Y256237D01*\nX172960Y256860D01*\nX172336Y257277D01*\nX171769Y257390D01*\nY259958D01*\nX171614Y260739D01*\nX171172Y261400D01*\nX171037Y261490D01*\nX171041Y261500D01*\nX171178Y262544D01*\nY270494D01*\nX175894D01*\nY276994D01*\nX173822D01*\nX173630Y277456D01*\nX178488Y282314D01*\nX224082D01*\nX230857Y275538D01*\nD02*\nG37*\nG36*\nX353244Y237144D02*\nX353744Y236644D01*\nY232444D01*\nX345638D01*\nY235244D01*\nX346746Y236352D01*\nX347244Y237096D01*\nX347273Y237246D01*\nX352644Y237644D01*\nX352744D01*\nX353244Y237144D01*\nD02*\nG37*\nG36*\nX173244D02*\nX173744Y236644D01*\nY232444D01*\nX165638D01*\nY235244D01*\nX166746Y236352D01*\nX167244Y237096D01*\nX167273Y237246D01*\nX172644Y237644D01*\nX172744D01*\nX173244Y237144D01*\nD02*\nG37*\nG36*\nX338859Y234982D02*\nY233642D01*\nX338407Y233190D01*\nX333687D01*\nY224638D01*\nX315956D01*\nX315253Y225553D01*\nX314313Y226275D01*\nX313219Y226728D01*\nX312044Y226883D01*\nX310869Y226728D01*\nX309775Y226275D01*\nX308835Y225553D01*\nX308113Y224613D01*\nX307660Y223519D01*\nX307529Y222528D01*\nX307029Y222561D01*\nY232127D01*\nX307529Y232160D01*\nX307660Y231169D01*\nX308113Y230075D01*\nX308835Y229135D01*\nX309775Y228413D01*\nX310869Y227960D01*\nX312044Y227805D01*\nX313219Y227960D01*\nX314313Y228413D01*\nX315253Y229135D01*\nX315975Y230075D01*\nX316428Y231169D01*\nX316583Y232344D01*\nX316428Y233519D01*\nX316163Y234158D01*\nX316700Y234695D01*\nX336844D01*\nX337820Y234889D01*\nX338359Y235249D01*\nX338859Y234982D01*\nD02*\nG37*\nG36*\nX158859D02*\nY233642D01*\nX158407Y233190D01*\nX153688D01*\nY224638D01*\nX135956D01*\nX135253Y225553D01*\nX134313Y226275D01*\nX133219Y226728D01*\nX132044Y226883D01*\nX130869Y226728D01*\nX129775Y226275D01*\nX128835Y225553D01*\nX128113Y224613D01*\nX127660Y223519D01*\nX127529Y222528D01*\nX127029Y222561D01*\nY232127D01*\nX127529Y232160D01*\nX127660Y231169D01*\nX128113Y230075D01*\nX128835Y229135D01*\nX129775Y228413D01*\nX130869Y227960D01*\nX132044Y227805D01*\nX133219Y227960D01*\nX134313Y228413D01*\nX135253Y229135D01*\nX135975Y230075D01*\nX136428Y231169D01*\nX136583Y232344D01*\nX136428Y233519D01*\nX136163Y234158D01*\nX136700Y234695D01*\nX156844D01*\nX157819Y234889D01*\nX158359Y235249D01*\nX158859Y234982D01*\nD02*\nG37*\nG36*\nX320488Y180390D02*\nX318520D01*\nY181965D01*\nX320488D01*\nY180390D01*\nD02*\nG37*\nG36*\nX140488D02*\nX138520D01*\nY181965D01*\nX140488D01*\nY180390D01*\nD02*\nG37*\n%LPC*%\nG36*\nX327744Y456719D02*\nX326197Y456567D01*\nX324710Y456116D01*\nX323340Y455383D01*\nX322138Y454397D01*\nX321152Y453196D01*\nX320420Y451825D01*\nX319968Y450338D01*\nX319816Y448791D01*\nX319968Y447245D01*\nX320420Y445757D01*\nX321152Y444387D01*\nX322138Y443186D01*\nX323340Y442200D01*\nX324710Y441467D01*\nX326197Y441016D01*\nX327744Y440864D01*\nX329291Y441016D01*\nX330778Y441467D01*\nX332149Y442200D01*\nX333350Y443186D01*\nX334336Y444387D01*\nX335068Y445757D01*\nX335520Y447245D01*\nX335672Y448791D01*\nX335520Y450338D01*\nX335068Y451825D01*\nX334336Y453196D01*\nX333350Y454397D01*\nX332149Y455383D01*\nX330778Y456116D01*\nX329291Y456567D01*\nX327744Y456719D01*\nD02*\nG37*\nG36*\nX147744D02*\nX146197Y456567D01*\nX144710Y456116D01*\nX143340Y455383D01*\nX142138Y454397D01*\nX141152Y453196D01*\nX140419Y451825D01*\nX139968Y450338D01*\nX139816Y448791D01*\nX139968Y447245D01*\nX140419Y445757D01*\nX141152Y444387D01*\nX142138Y443186D01*\nX143340Y442200D01*\nX144710Y441467D01*\nX146197Y441016D01*\nX147744Y440864D01*\nX149291Y441016D01*\nX150778Y441467D01*\nX152148Y442200D01*\nX153350Y443186D01*\nX154336Y444387D01*\nX155069Y445757D01*\nX155520Y447245D01*\nX155672Y448791D01*\nX155520Y450338D01*\nX155069Y451825D01*\nX154336Y453196D01*\nX153350Y454397D01*\nX152148Y455383D01*\nX150778Y456116D01*\nX149291Y456567D01*\nX147744Y456719D01*\nD02*\nG37*\nG36*\nX400244Y461744D02*\nX390744D01*\nY451244D01*\nX400244D01*\nY461744D01*\nD02*\nG37*\nG36*\nX380244Y456744D02*\nX365744D01*\nX366244Y450744D01*\nX380244D01*\nY456744D01*\nD02*\nG37*\nG36*\nX415244Y437283D02*\nX414069Y437128D01*\nX412975Y436675D01*\nX412035Y435953D01*\nX411313Y435013D01*\nX410860Y433919D01*\nX410705Y432744D01*\nX410860Y431569D01*\nX411313Y430475D01*\nX412035Y429535D01*\nX412975Y428813D01*\nX414069Y428360D01*\nX415244Y428205D01*\nX416419Y428360D01*\nX417513Y428813D01*\nX418453Y429535D01*\nX419175Y430475D01*\nX419628Y431569D01*\nX419783Y432744D01*\nX419628Y433919D01*\nX419175Y435013D01*\nX418453Y435953D01*\nX417513Y436675D01*\nX416419Y437128D01*\nX415244Y437283D01*\nD02*\nG37*\nG36*\nX220244Y461744D02*\nX210744D01*\nY451244D01*\nX220244D01*\nY461744D01*\nD02*\nG37*\nG36*\nX200244Y456744D02*\nX185744D01*\nX186244Y450744D01*\nX200244D01*\nY456744D01*\nD02*\nG37*\nG36*\nX235244Y437283D02*\nX234069Y437128D01*\nX232975Y436675D01*\nX232035Y435953D01*\nX231313Y435013D01*\nX230860Y433919D01*\nX230705Y432744D01*\nX230860Y431569D01*\nX231313Y430475D01*\nX232035Y429535D01*\nX232975Y428813D01*\nX234069Y428360D01*\nX235244Y428205D01*\nX236419Y428360D01*\nX237513Y428813D01*\nX238453Y429535D01*\nX239175Y430475D01*\nX239628Y431569D01*\nX239783Y432744D01*\nX239628Y433919D01*\nX239175Y435013D01*\nX238453Y435953D01*\nX237513Y436675D01*\nX236419Y437128D01*\nX235244Y437283D01*\nD02*\nG37*\nG36*\nX327744Y276719D02*\nX326197Y276567D01*\nX324710Y276116D01*\nX323340Y275383D01*\nX322138Y274397D01*\nX321152Y273196D01*\nX320420Y271825D01*\nX319968Y270338D01*\nX319816Y268791D01*\nX319968Y267245D01*\nX320420Y265757D01*\nX321152Y264387D01*\nX322138Y263186D01*\nX323340Y262200D01*\nX324710Y261467D01*\nX326197Y261016D01*\nX327744Y260863D01*\nX329291Y261016D01*\nX330778Y261467D01*\nX332149Y262200D01*\nX333350Y263186D01*\nX334336Y264387D01*\nX335068Y265757D01*\nX335520Y267245D01*\nX335672Y268791D01*\nX335520Y270338D01*\nX335068Y271825D01*\nX334336Y273196D01*\nX333350Y274397D01*\nX332149Y275383D01*\nX330778Y276116D01*\nX329291Y276567D01*\nX327744Y276719D01*\nD02*\nG37*\nG36*\nX147744D02*\nX146197Y276567D01*\nX144710Y276116D01*\nX143340Y275383D01*\nX142138Y274397D01*\nX141152Y273196D01*\nX140419Y271825D01*\nX139968Y270338D01*\nX139816Y268791D01*\nX139968Y267245D01*\nX140419Y265757D01*\nX141152Y264387D01*\nX142138Y263186D01*\nX143340Y262200D01*\nX144710Y261467D01*\nX146197Y261016D01*\nX147744Y260863D01*\nX149291Y261016D01*\nX150778Y261467D01*\nX152148Y262200D01*\nX153350Y263186D01*\nX154336Y264387D01*\nX155069Y265757D01*\nX155520Y267245D01*\nX155672Y268791D01*\nX155520Y270338D01*\nX155069Y271825D01*\nX154336Y273196D01*\nX153350Y274397D01*\nX152148Y275383D01*\nX150778Y276116D01*\nX149291Y276567D01*\nX147744Y276719D01*\nD02*\nG37*\nG36*\nX400244Y281744D02*\nX390744D01*\nY271244D01*\nX400244D01*\nY281744D01*\nD02*\nG37*\nG36*\nX380244Y276744D02*\nX365744D01*\nX366244Y270744D01*\nX380244D01*\nY276744D01*\nD02*\nG37*\nG36*\nX415244Y257283D02*\nX414069Y257128D01*\nX412975Y256675D01*\nX412035Y255953D01*\nX411313Y255013D01*\nX410860Y253919D01*\nX410705Y252744D01*\nX410860Y251569D01*\nX411313Y250475D01*\nX412035Y249535D01*\nX412975Y248813D01*\nX414069Y248360D01*\nX415244Y248205D01*\nX416419Y248360D01*\nX417513Y248813D01*\nX418453Y249535D01*\nX419175Y250475D01*\nX419628Y251569D01*\nX419783Y252744D01*\nX419628Y253919D01*\nX419175Y255013D01*\nX418453Y255953D01*\nX417513Y256675D01*\nX416419Y257128D01*\nX415244Y257283D01*\nD02*\nG37*\nG36*\nX220244Y281744D02*\nX210744D01*\nY271244D01*\nX220244D01*\nY281744D01*\nD02*\nG37*\nG36*\nX200244Y276744D02*\nX185744D01*\nX186244Y270744D01*\nX200244D01*\nY276744D01*\nD02*\nG37*\nG36*\nX235244Y257283D02*\nX234069Y257128D01*\nX232975Y256675D01*\nX232035Y255953D01*\nX231313Y255013D01*\nX230860Y253919D01*\nX230705Y252744D01*\nX230860Y251569D01*\nX231313Y250475D01*\nX232035Y249535D01*\nX232975Y248813D01*\nX234069Y248360D01*\nX235244Y248205D01*\nX236419Y248360D01*\nX237513Y248813D01*\nX238453Y249535D01*\nX239175Y250475D01*\nX239628Y251569D01*\nX239783Y252744D01*\nX239628Y253919D01*\nX239175Y255013D01*\nX238453Y255953D01*\nX237513Y256675D01*\nX236419Y257128D01*\nX235244Y257283D01*\nD02*\nG37*\n%LPD*%\nD10*\nX246583Y246681D02*\nD03*\nX255244Y250618D02*\nD03*\nX426583Y246681D02*\nD03*\nX435244Y250618D02*\nD03*\nX246583Y426681D02*\nD03*\nX255244Y430618D02*\nD03*\nX426583Y426681D02*\nD03*\nX435244Y430618D02*\nD03*\nD11*\nX255244Y242744D02*\nD03*\nX435244D02*\nD03*\nX255244Y422744D02*\nD03*\nX435244D02*\nD03*\nD12*\nX230157Y154000D02*\nD03*\nY144157D02*\nD03*\nX410157Y154000D02*\nD03*\nY144157D02*\nD03*\nX230157Y334000D02*\nD03*\nY324157D02*\nD03*\nX410157Y334000D02*\nD03*\nY324157D02*\nD03*\nD13*\nX178705Y230244D02*\nD03*\nX173783D02*\nD03*\nX242618Y144000D02*\nD03*\nX237697D02*\nD03*\nX242618Y154000D02*\nD03*\nX237697D02*\nD03*\nX358705Y230244D02*\nD03*\nX353783D02*\nD03*\nX422618Y144000D02*\nD03*\nX417697D02*\nD03*\nX422618Y154000D02*\nD03*\nX417697D02*\nD03*\nX178705Y410244D02*\nD03*\nX173783D02*\nD03*\nX242618Y324000D02*\nD03*\nX237697D02*\nD03*\nX242618Y334000D02*\nD03*\nX237697D02*\nD03*\nX358705Y410244D02*\nD03*\nX353783D02*\nD03*\nX422618Y324000D02*\nD03*\nX417697D02*\nD03*\nX422618Y334000D02*\nD03*\nX417697D02*\nD03*\nD14*\nX143244Y200862D02*\nD03*\nY198303D02*\nD03*\nY195744D02*\nD03*\nY190626D02*\nD03*\nY193185D02*\nD03*\nX323244Y200862D02*\nD03*\nY198303D02*\nD03*\nY195744D02*\nD03*\nY190626D02*\nD03*\nY193185D02*\nD03*\nX143244Y380862D02*\nD03*\nY378303D02*\nD03*\nY375744D02*\nD03*\nY370626D02*\nD03*\nY373185D02*\nD03*\nX323244Y380862D02*\nD03*\nY378303D02*\nD03*\nY375744D02*\nD03*\nY370626D02*\nD03*\nY373185D02*\nD03*\nD15*\nX131433Y200075D02*\nD03*\nY192201D02*\nD03*\nX311433Y200075D02*\nD03*\nY192201D02*\nD03*\nX131433Y380075D02*\nD03*\nY372201D02*\nD03*\nX311433Y380075D02*\nD03*\nY372201D02*\nD03*\nD16*\nX134344Y183944D02*\nD03*\nY207244D02*\nD03*\nX314344Y183944D02*\nD03*\nY207244D02*\nD03*\nX134344Y363944D02*\nD03*\nY387244D02*\nD03*\nX314344Y363944D02*\nD03*\nY387244D02*\nD03*\nD17*\nX143944Y184344D02*\nD03*\nX144057Y207187D02*\nD03*\nX323944Y184344D02*\nD03*\nX324057Y207187D02*\nD03*\nX143944Y364344D02*\nD03*\nX144057Y387187D02*\nD03*\nX323944Y364344D02*\nD03*\nX324057Y387187D02*\nD03*\nD18*\nX159744Y181244D02*\nD03*\nX169000Y157000D02*\nD03*\nX339744Y181244D02*\nD03*\nX349000Y157000D02*\nD03*\nX159744Y361244D02*\nD03*\nX169000Y337000D02*\nD03*\nX339744Y361244D02*\nD03*\nX349000Y337000D02*\nD03*\nD19*\nX165650Y181244D02*\nD03*\nX174906Y157000D02*\nD03*\nX345650Y181244D02*\nD03*\nX354906Y157000D02*\nD03*\nX165650Y361244D02*\nD03*\nX174906Y337000D02*\nD03*\nX345650Y361244D02*\nD03*\nX354906Y337000D02*\nD03*\nD20*\nX157920Y196084D02*\nD03*\nX337920D02*\nD03*\nX157920Y376084D02*\nD03*\nX337920D02*\nD03*\nD21*\nX157920Y192344D02*\nD03*\nY188604D02*\nD03*\nX167368D02*\nD03*\nY192344D02*\nD03*\nY196084D02*\nD03*\nX337920Y192344D02*\nD03*\nY188604D02*\nD03*\nX347368D02*\nD03*\nY192344D02*\nD03*\nY196084D02*\nD03*\nX157920Y372344D02*\nD03*\nY368604D02*\nD03*\nX167368D02*\nD03*\nY372344D02*\nD03*\nY376084D02*\nD03*\nX337920Y372344D02*\nD03*\nY368604D02*\nD03*\nX347368D02*\nD03*\nY372344D02*\nD03*\nY376084D02*\nD03*\nD22*\nX253824Y223760D02*\nD03*\nX433824D02*\nD03*\nX253824Y403760D02*\nD03*\nX433824D02*\nD03*\nD23*\nX253824Y227500D02*\nD03*\nY231240D02*\nD03*\nX244376D02*\nD03*\nY223760D02*\nD03*\nX433824Y227500D02*\nD03*\nY231240D02*\nD03*\nX424376D02*\nD03*\nY223760D02*\nD03*\nX253824Y407500D02*\nD03*\nY411240D02*\nD03*\nX244376D02*\nD03*\nY403760D02*\nD03*\nX433824Y407500D02*\nD03*\nY411240D02*\nD03*\nX424376D02*\nD03*\nY403760D02*\nD03*\nD24*\nX237600Y224843D02*\nD03*\nY230157D02*\nD03*\nY241157D02*\nD03*\nY235843D02*\nD03*\nX417600Y224843D02*\nD03*\nY230157D02*\nD03*\nY241157D02*\nD03*\nY235843D02*\nD03*\nX237600Y404843D02*\nD03*\nY410157D02*\nD03*\nY421157D02*\nD03*\nY415843D02*\nD03*\nX417600Y404843D02*\nD03*\nY410157D02*\nD03*\nY421157D02*\nD03*\nY415843D02*\nD03*\nD25*\nX158744Y207744D02*\nD03*\nX174886D02*\nD03*\nX158744Y214043D02*\nD03*\nX174744D02*\nD03*\nX199244Y128945D02*\nD03*\nX215244D02*\nD03*\nX199102Y135244D02*\nD03*\nX215244D02*\nD03*\nX164744Y128945D02*\nD03*\nX180744D02*\nD03*\nX164602Y135244D02*\nD03*\nX180744D02*\nD03*\nX250744D02*\nD03*\nX234602D02*\nD03*\nX250744Y128945D02*\nD03*\nX234744D02*\nD03*\nX338744Y207744D02*\nD03*\nX354886D02*\nD03*\nX338744Y214043D02*\nD03*\nX354744D02*\nD03*\nX379244Y128945D02*\nD03*\nX395244D02*\nD03*\nX379102Y135244D02*\nD03*\nX395244D02*\nD03*\nX344744Y128945D02*\nD03*\nX360744D02*\nD03*\nX344602Y135244D02*\nD03*\nX360744D02*\nD03*\nX430744D02*\nD03*\nX414602D02*\nD03*\nX430744Y128945D02*\nD03*\nX414744D02*\nD03*\nX158744Y387744D02*\nD03*\nX174886D02*\nD03*\nX158744Y394043D02*\nD03*\nX174744D02*\nD03*\nX199244Y308945D02*\nD03*\nX215244D02*\nD03*\nX199102Y315244D02*\nD03*\nX215244D02*\nD03*\nX164744Y308945D02*\nD03*\nX180744D02*\nD03*\nX164602Y315244D02*\nD03*\nX180744D02*\nD03*\nX250744D02*\nD03*\nX234602D02*\nD03*\nX250744Y308945D02*\nD03*\nX234744D02*\nD03*\nX338744Y387744D02*\nD03*\nX354886D02*\nD03*\nX338744Y394043D02*\nD03*\nX354744D02*\nD03*\nX379244Y308945D02*\nD03*\nX395244D02*\nD03*\nX379102Y315244D02*\nD03*\nX395244D02*\nD03*\nX344744Y308945D02*\nD03*\nX360744D02*\nD03*\nX344602Y315244D02*\nD03*\nX360744D02*\nD03*\nX430744D02*\nD03*\nX414602D02*\nD03*\nX430744Y308945D02*\nD03*\nX414744D02*\nD03*\nD26*\nX204900Y166600D02*\nD03*\nX384900D02*\nD03*\nX204900Y346600D02*\nD03*\nX384900D02*\nD03*\nD27*\nX203091Y149479D02*\nD03*\nX187779Y164791D02*\nD03*\nX206709Y183721D02*\nD03*\nX222021Y168409D02*\nD03*\nX383091Y149479D02*\nD03*\nX367779Y164791D02*\nD03*\nX386709Y183721D02*\nD03*\nX402021Y168409D02*\nD03*\nX203091Y329479D02*\nD03*\nX187779Y344791D02*\nD03*\nX206709Y363721D02*\nD03*\nX222021Y348409D02*\nD03*\nX383091Y329479D02*\nD03*\nX367779Y344791D02*\nD03*\nX386709Y363721D02*\nD03*\nX402021Y348409D02*\nD03*\nD28*\nX201768Y150941D02*\nD03*\nX200376Y152333D02*\nD03*\nX198984Y153725D02*\nD03*\nX197592Y155116D02*\nD03*\nX196200Y156508D02*\nD03*\nX194808Y157900D02*\nD03*\nX193416Y159292D02*\nD03*\nX192025Y160684D02*\nD03*\nX190633Y162076D02*\nD03*\nX189241Y163468D02*\nD03*\nX208032Y182259D02*\nD03*\nX209424Y180867D02*\nD03*\nX210816Y179475D02*\nD03*\nX212208Y178084D02*\nD03*\nX213600Y176692D02*\nD03*\nX214992Y175300D02*\nD03*\nX216384Y173908D02*\nD03*\nX217775Y172516D02*\nD03*\nX219167Y171124D02*\nD03*\nX220559Y169732D02*\nD03*\nX381768Y150941D02*\nD03*\nX380376Y152333D02*\nD03*\nX378984Y153725D02*\nD03*\nX377592Y155116D02*\nD03*\nX376200Y156508D02*\nD03*\nX374808Y157900D02*\nD03*\nX373416Y159292D02*\nD03*\nX372025Y160684D02*\nD03*\nX370633Y162076D02*\nD03*\nX369241Y163468D02*\nD03*\nX388032Y182259D02*\nD03*\nX389424Y180867D02*\nD03*\nX390816Y179475D02*\nD03*\nX392208Y178084D02*\nD03*\nX393600Y176692D02*\nD03*\nX394992Y175300D02*\nD03*\nX396384Y173908D02*\nD03*\nX397775Y172516D02*\nD03*\nX399167Y171124D02*\nD03*\nX400559Y169732D02*\nD03*\nX201768Y330941D02*\nD03*\nX200376Y332333D02*\nD03*\nX198984Y333725D02*\nD03*\nX197592Y335116D02*\nD03*\nX196200Y336508D02*\nD03*\nX194808Y337900D02*\nD03*\nX193416Y339292D02*\nD03*\nX192025Y340684D02*\nD03*\nX190633Y342076D02*\nD03*\nX189241Y343468D02*\nD03*\nX208032Y362259D02*\nD03*\nX209424Y360867D02*\nD03*\nX210816Y359475D02*\nD03*\nX212208Y358084D02*\nD03*\nX213600Y356692D02*\nD03*\nX214992Y355300D02*\nD03*\nX216384Y353908D02*\nD03*\nX217775Y352516D02*\nD03*\nX219167Y351124D02*\nD03*\nX220559Y349732D02*\nD03*\nX381768Y330941D02*\nD03*\nX380376Y332333D02*\nD03*\nX378984Y333725D02*\nD03*\nX377592Y335116D02*\nD03*\nX376200Y336508D02*\nD03*\nX374808Y337900D02*\nD03*\nX373416Y339292D02*\nD03*\nX372025Y340684D02*\nD03*\nX370633Y342076D02*\nD03*\nX369241Y343468D02*\nD03*\nX388032Y362259D02*\nD03*\nX389424Y360867D02*\nD03*\nX390816Y359475D02*\nD03*\nX392208Y358084D02*\nD03*\nX393600Y356692D02*\nD03*\nX394992Y355300D02*\nD03*\nX396384Y353908D02*\nD03*\nX397775Y352516D02*\nD03*\nX399167Y351124D02*\nD03*\nX400559Y349732D02*\nD03*\nD29*\nX187779Y168409D02*\nD03*\nX203091Y183721D02*\nD03*\nX222021Y164791D02*\nD03*\nX367779Y168409D02*\nD03*\nX383091Y183721D02*\nD03*\nX402021Y164791D02*\nD03*\nX187779Y348409D02*\nD03*\nX203091Y363721D02*\nD03*\nX222021Y344791D02*\nD03*\nX367779Y348409D02*\nD03*\nX383091Y363721D02*\nD03*\nX402021Y344791D02*\nD03*\nD30*\nX189241Y169732D02*\nD03*\nX190633Y171124D02*\nD03*\nX192025Y172516D02*\nD03*\nX193416Y173908D02*\nD03*\nX194808Y175300D02*\nD03*\nX196200Y176692D02*\nD03*\nX197592Y178084D02*\nD03*\nX198984Y179475D02*\nD03*\nX200376Y180867D02*\nD03*\nX201768Y182259D02*\nD03*\nX220559Y163468D02*\nD03*\nX219167Y162076D02*\nD03*\nX217775Y160684D02*\nD03*\nX216384Y159292D02*\nD03*\nX214992Y157900D02*\nD03*\nX213600Y156508D02*\nD03*\nX212208Y155116D02*\nD03*\nX210816Y153725D02*\nD03*\nX209424Y152333D02*\nD03*\nX208032Y150941D02*\nD03*\nX369241Y169732D02*\nD03*\nX370633Y171124D02*\nD03*\nX372025Y172516D02*\nD03*\nX373416Y173908D02*\nD03*\nX374808Y175300D02*\nD03*\nX376200Y176692D02*\nD03*\nX377592Y178084D02*\nD03*\nX378984Y179475D02*\nD03*\nX380376Y180867D02*\nD03*\nX381768Y182259D02*\nD03*\nX400559Y163468D02*\nD03*\nX399167Y162076D02*\nD03*\nX397775Y160684D02*\nD03*\nX396384Y159292D02*\nD03*\nX394992Y157900D02*\nD03*\nX393600Y156508D02*\nD03*\nX392208Y155116D02*\nD03*\nX390816Y153725D02*\nD03*\nX389424Y152333D02*\nD03*\nX388032Y150941D02*\nD03*\nX189241Y349732D02*\nD03*\nX190633Y351124D02*\nD03*\nX192025Y352516D02*\nD03*\nX193416Y353908D02*\nD03*\nX194808Y355300D02*\nD03*\nX196200Y356692D02*\nD03*\nX197592Y358084D02*\nD03*\nX198984Y359475D02*\nD03*\nX200376Y360867D02*\nD03*\nX201768Y362259D02*\nD03*\nX220559Y343468D02*\nD03*\nX219167Y342076D02*\nD03*\nX217775Y340684D02*\nD03*\nX216384Y339292D02*\nD03*\nX214992Y337900D02*\nD03*\nX213600Y336508D02*\nD03*\nX212208Y335116D02*\nD03*\nX210816Y333725D02*\nD03*\nX209424Y332333D02*\nD03*\nX208032Y330941D02*\nD03*\nX369241Y349732D02*\nD03*\nX370633Y351124D02*\nD03*\nX372025Y352516D02*\nD03*\nX373416Y353908D02*\nD03*\nX374808Y355300D02*\nD03*\nX376200Y356692D02*\nD03*\nX377592Y358084D02*\nD03*\nX378984Y359475D02*\nD03*\nX380376Y360867D02*\nD03*\nX381768Y362259D02*\nD03*\nX400559Y343468D02*\nD03*\nX399167Y342076D02*\nD03*\nX397775Y340684D02*\nD03*\nX396384Y339292D02*\nD03*\nX394992Y337900D02*\nD03*\nX393600Y336508D02*\nD03*\nX392208Y335116D02*\nD03*\nX390816Y333725D02*\nD03*\nX389424Y332333D02*\nD03*\nX388032Y330941D02*\nD03*\nD31*\nX206709Y149479D02*\nD03*\nX386709D02*\nD03*\nX206709Y329479D02*\nD03*\nX386709D02*\nD03*\nD32*\nX145632Y228844D02*\nD03*\nX156656D02*\nD03*\nX145532Y248544D02*\nD03*\nX156556D02*\nD03*\nX325632Y228844D02*\nD03*\nX336656D02*\nD03*\nX325532Y248544D02*\nD03*\nX336556D02*\nD03*\nX145632Y408844D02*\nD03*\nX156656D02*\nD03*\nX145532Y428544D02*\nD03*\nX156556D02*\nD03*\nX325632Y408844D02*\nD03*\nX336656D02*\nD03*\nX325532Y428544D02*\nD03*\nX336556D02*\nD03*\nD33*\nX181344Y246544D02*\nD03*\nX361344D02*\nD03*\nX181344Y426544D02*\nD03*\nX361344D02*\nD03*\nD34*\nX169730Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nY237587D02*\nD03*\nX192958Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nX349730Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nY237587D02*\nD03*\nX372958Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nX169730Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nY417587D02*\nD03*\nX192958Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nX349730Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nY417587D02*\nD03*\nX372958Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nD35*\nX192958Y237587D02*\nD03*\nX372958D02*\nD03*\nX192958Y417587D02*\nD03*\nX372958D02*\nD03*\nD36*\nX259067Y172744D02*\nD03*\nX249421Y169004D02*\nD03*\nY176484D02*\nD03*\nX258567Y190244D02*\nD03*\nX248921Y186504D02*\nD03*\nY193984D02*\nD03*\nX259067Y206244D02*\nD03*\nX249421Y202504D02*\nD03*\nY209984D02*\nD03*\nX439067Y172744D02*\nD03*\nX429421Y169004D02*\nD03*\nY176484D02*\nD03*\nX438567Y190244D02*\nD03*\nX428921Y186504D02*\nD03*\nY193984D02*\nD03*\nX439067Y206244D02*\nD03*\nX429421Y202504D02*\nD03*\nY209984D02*\nD03*\nX259067Y352744D02*\nD03*\nX249421Y349004D02*\nD03*\nY356484D02*\nD03*\nX258567Y370244D02*\nD03*\nX248921Y366504D02*\nD03*\nY373984D02*\nD03*\nX259067Y386244D02*\nD03*\nX249421Y382504D02*\nD03*\nY389984D02*\nD03*\nX439067Y352744D02*\nD03*\nX429421Y349004D02*\nD03*\nY356484D02*\nD03*\nX438567Y370244D02*\nD03*\nX428921Y366504D02*\nD03*\nY373984D02*\nD03*\nX439067Y386244D02*\nD03*\nX429421Y382504D02*\nD03*\nY389984D02*\nD03*\nD37*\nX168644Y273744D02*\nD03*\nX193044Y273687D02*\nD03*\nX348644Y273744D02*\nD03*\nX373044Y273687D02*\nD03*\nX168644Y453744D02*\nD03*\nX193044Y453687D02*\nD03*\nX348644Y453744D02*\nD03*\nX373044Y453687D02*\nD03*\nD38*\nX191744Y269244D02*\nX196187Y273687D01*\nX197044Y274544D02*\nX206744D01*\nX196187Y273687D02*\nX197044Y274544D01*\nX205244Y259744D02*\nX205244Y259744D01*\nX205244Y252744D02*\nY259744D01*\nX188000Y253800D02*\nX200800Y266600D01*\nX205244Y252744D02*\nX212744Y260244D01*\nX214832D01*\nX220044Y255032D01*\nY243141D02*\nY255032D01*\nY243141D02*\nX227343Y235843D01*\nX216114Y245344D02*\nX234382Y227076D01*\nY224843D02*\nY227076D01*\nX201000Y246744D02*\nX230700Y217044D01*\nX200709Y246744D02*\nX201000D01*\nX230700Y211200D02*\nY217044D01*\nX225244Y245244D02*\nX232244Y238244D01*\nX225244Y245244D02*\nY252744D01*\nX216114Y245344D02*\nY251874D01*\nX242618Y142900D02*\nY144000D01*\nX240218Y140500D02*\nX242618Y142900D01*\nX232600Y140500D02*\nX240218D01*\nX233455Y128945D02*\nX234744D01*\nX229700Y132700D02*\nX233455Y128945D01*\nX215244D02*\nX221045D01*\nX211300Y155800D02*\nX211524D01*\nX212208Y155116D01*\nX204900Y162424D02*\nX211524Y155800D01*\nX180244Y260744D02*\nY267744D01*\nX149344Y246444D02*\nY250100D01*\nX160644Y192344D02*\nX161500D01*\nX145632Y227500D02*\nY228844D01*\nY224900D02*\nY227500D01*\nX144055Y207082D02*\nX144056D01*\nX144031Y207083D02*\nX144055Y207082D01*\nX142992Y207100D02*\nX144031Y207083D01*\nY207100D01*\nX143944Y180244D02*\nY184344D01*\nY179544D02*\nY180244D01*\nX131100Y207100D02*\nX131400D01*\nX131756Y183944D02*\nX132900D01*\nX249400Y232205D02*\nX250364Y231240D01*\nX246583Y235022D02*\nX249400Y232205D01*\nX251900Y231240D02*\nX253824D01*\nX250364D02*\nX251900D01*\nX167144Y273744D02*\nX168644D01*\nX169544Y234044D02*\nX172444D01*\nX168956D02*\nX169544D01*\nX167000Y273744D02*\nX167144D01*\nX164600D02*\nX167000D01*\nX172444Y234044D02*\nX172700D01*\nX166644D02*\nX168956D01*\nX150244Y207744D02*\nX158744D01*\nX200246Y149418D02*\nX201768Y150941D01*\nX200246Y143076D02*\nY149418D01*\nX192414Y135244D02*\nX200246Y143076D01*\nX180744Y135244D02*\nX192414D01*\nX163900Y181244D02*\nX165650D01*\nX176244Y242983D02*\nY268744D01*\nX144031Y205587D02*\nX144056Y207082D01*\nX246583Y235022D02*\nY246681D01*\nX249400Y229705D02*\nY232205D01*\nX184500Y143895D02*\nY158727D01*\nX189241Y163468D01*\nX283500Y181200D02*\nX288300Y176400D01*\nX183987Y168409D02*\nX187779D01*\nX234382Y224843D02*\nX237600D01*\nX233941Y225283D02*\nX234382Y224843D01*\nX151744Y166744D02*\nX155385Y163103D01*\nX184812D01*\nX186500Y164791D01*\nX187779D01*\nX143244Y189356D02*\nY190626D01*\nY189356D02*\nX144031Y188569D01*\nY185901D02*\nY188569D01*\nX188700Y186400D02*\nY218700D01*\nX185500Y141665D02*\nX187425Y143590D01*\nY147875D01*\nX185700Y149600D02*\nX187425Y147875D01*\nX185700Y149600D02*\nY154360D01*\nX192025Y160684D01*\nX167300Y235700D02*\nX168956Y234044D01*\nX167300Y237587D02*\nX169730D01*\nX224628Y165100D02*\nX232600D01*\nX224318Y164791D02*\nX224628Y165100D01*\nX222021Y164791D02*\nX224318D01*\nX148788Y227500D02*\nX149644Y226644D01*\nX250744Y135244D02*\nY151189D01*\nX244533Y157400D02*\nX250744Y151189D01*\nX227090Y157400D02*\nX244533D01*\nX194906Y230200D02*\nX195700D01*\nX193600Y228894D02*\nX194906Y230200D01*\nX193400Y176708D02*\nX194808Y175300D01*\nX194800Y178092D02*\nX196200Y176692D01*\nX131400Y200075D02*\nX131433D01*\nX229700Y132700D02*\nY137300D01*\nX224818Y161400D02*\nX226418Y163000D01*\nX172056Y192344D02*\nX173100Y191300D01*\nX167368Y192344D02*\nX172056D01*\nX174744Y214043D02*\nX179800D01*\nY205300D02*\nY214043D01*\nX162400Y194100D02*\nY199400D01*\nX160644Y192344D02*\nX162400Y194100D01*\nX157920Y192344D02*\nX160644D01*\nX194700Y141400D02*\nY149440D01*\nX198984Y153725D01*\nX162500Y176921D02*\nX163177Y176244D01*\nX162500Y176921D02*\nY191344D01*\nX161500Y192344D02*\nX162500Y191344D01*\nX165044Y166256D02*\nX166000Y165300D01*\nX165044Y166256D02*\nY175044D01*\nX156700D02*\nX165044D01*\nX151300Y180444D02*\nX156700Y175044D01*\nX151300Y180444D02*\nY191185D01*\nX149300Y193185D02*\nX151300Y191185D01*\nX143244Y193185D02*\nX149300D01*\nX192600Y153100D02*\nX192792D01*\nX196200Y156508D01*\nX188900Y152400D02*\nX190500Y154000D01*\nY156376D01*\nX193416Y159292D01*\nX197900Y146186D02*\nY149856D01*\nX200376Y152333D01*\nX204900Y166600D02*\nX206292D01*\nX214992Y175300D01*\nX190000Y168800D02*\nX202700D01*\nX204900Y166600D01*\nX207900Y159200D02*\nX211300Y155800D01*\nX194808Y157900D02*\nX196108Y159200D01*\nX204900Y162424D02*\nY166600D01*\nX251900Y223760D02*\nX253824D01*\nX251100Y224560D02*\nX251900Y223760D01*\nX251100Y224560D02*\nY230440D01*\nX251900Y231240D01*\nX221045Y128945D02*\nX232600Y140500D01*\nX226188Y285800D02*\nX235744Y276244D01*\nX174906Y157000D02*\nX177600D01*\nX178000Y156600D01*\nX154600Y181244D02*\nX159744D01*\nX174700Y214043D02*\nX174744D01*\nX143944Y179544D02*\nX151744Y171744D01*\nX168430Y259958D02*\nX169730D01*\nX166744Y261644D02*\nX168430Y259958D01*\nX172700Y234044D02*\nX173783Y232961D01*\nY230244D02*\nY232961D01*\nX145532Y248544D02*\nY250100D01*\nX146400Y214043D02*\nX158744D01*\nX144057Y207187D02*\nY211700D01*\nX131433Y192201D02*\nX132900D01*\nX136200Y209524D02*\nX137775Y211098D01*\nX166844Y274044D02*\nX167000D01*\nX132244Y252544D02*\nY253844D01*\nX132044Y252344D02*\nX132244Y252544D01*\nX132044Y232344D02*\nX132244D01*\nX144057Y207100D02*\nY207187D01*\nX127200Y211000D02*\nX131100Y207100D01*\nX127200Y211000D02*\nY224900D01*\nX129500Y227200D01*\nX134000D01*\nX136300Y224900D01*\nX145632D01*\nX141244Y246244D02*\nY250244D01*\nX164600Y285444D02*\nX167944D01*\nX149244Y246344D02*\nX149344Y246444D01*\nX137600Y247200D02*\nX140944Y250544D01*\nX129100Y247200D02*\nX137600D01*\nX127200Y245300D02*\nX129100Y247200D01*\nX127200Y229300D02*\nY245300D01*\nY229300D02*\nX129000Y227500D01*\nX137700D01*\nX141044Y230844D01*\nY226544D02*\nY230844D01*\nX196244Y264744D02*\nY268744D01*\nX156556Y248544D02*\nY248600D01*\nX158744Y207744D02*\nX174886D01*\nX199102Y135244D02*\nX215244D01*\nX234602D02*\nX250744D01*\nX164602D02*\nX180744D01*\nX234744Y128945D02*\nX250744D01*\nX199244D02*\nX215244D01*\nX180744D02*\nX199244D01*\nX164744D02*\nX180744D01*\nX144031Y185087D02*\nY185901D01*\nX143944Y185000D02*\nX144031Y185087D01*\nX143944Y184344D02*\nY185000D01*\nX131433Y192201D02*\nY200075D01*\nX185675Y251700D02*\nX189476Y255501D01*\nX167368Y196084D02*\nX173404D01*\nX175244Y194244D01*\nY189296D02*\nY194244D01*\nY189296D02*\nX192025Y172516D01*\nX230157Y154000D02*\nX237697D01*\nX230157Y144157D02*\nX233800D01*\nX233957Y144000D01*\nX237697D01*\nX240400Y230157D02*\nX241483Y231240D01*\nX244376D01*\nX237600Y230157D02*\nX238630D01*\nX241300Y232827D01*\nY239400D01*\nX239543Y241157D02*\nX241300Y239400D01*\nX237600Y241157D02*\nX239543D01*\nX238630Y230157D02*\nX240400D01*\nX185675Y250875D02*\nY251700D01*\nX155056Y248600D02*\nX155112D01*\nX167000Y273888D02*\nY274044D01*\nX180100Y285800D02*\nX225588D01*\nX226188D01*\nX237600Y224843D02*\nX240400D01*\nX241483Y223760D01*\nX244376D01*\nX246300Y210784D02*\nX247100Y209984D01*\nX244376Y223760D02*\nX246300D01*\nX236800Y174900D02*\nX242696Y169004D01*\nX199300Y181944D02*\nX200376Y180867D01*\nX222021Y168409D02*\nX230500D01*\nX252200Y162700D02*\nY218500D01*\nX247500Y223200D02*\nX252200Y218500D01*\nX247500Y223200D02*\nY226500D01*\nX247300Y226700D02*\nX247500Y226500D01*\nX247300Y226700D02*\nY232607D01*\nX243900Y236007D02*\nX247300Y232607D01*\nX243900Y236007D02*\nY237200D01*\nX258744Y216444D02*\nX283500Y241200D01*\nX255100Y190400D02*\nX255256Y190244D01*\nX258567D01*\nX269100Y251200D02*\nX283500D01*\nX268518Y250618D02*\nX269100Y251200D01*\nX255244Y250618D02*\nX268518D01*\nX248921Y196721D02*\nX249100Y196900D01*\nX248921Y193984D02*\nY196721D01*\nX238900Y186044D02*\nY220700D01*\nX272900Y174500D02*\nY205200D01*\nX258567Y190244D02*\nX263444D01*\nX267300Y194100D01*\nY207700D01*\nX268065Y208465D01*\nY211097D01*\nX276000Y219032D01*\nY223700D01*\nX283500Y231200D01*\nX220559Y169732D02*\nX223323Y172496D01*\nX234404D01*\nX246500Y160400D01*\nX255100D01*\nX270733Y176033D01*\nY206900D01*\nX272418Y208585D01*\nX274047D01*\nX281461Y216000D01*\nX286300D01*\nX288300Y214000D01*\nY202100D02*\nY214000D01*\nX287400Y201200D02*\nX288300Y202100D01*\nX283500Y201200D02*\nX287400D01*\nX253824Y227500D02*\nX256500D01*\nY235800D01*\nX250900Y241400D02*\nX256500Y235800D01*\nX250900Y241400D02*\nY256300D01*\nX240600Y266600D02*\nX250900Y256300D01*\nX200800Y266600D02*\nX240600D01*\nX245900Y172900D02*\nX246900Y171900D01*\nY169004D02*\nY171900D01*\nX245500Y186600D02*\nX245596Y186504D01*\nX248921D01*\nX246216Y193984D02*\nX248921D01*\nX243400Y179988D02*\nY191168D01*\nY179988D02*\nX246904Y176484D01*\nX249421D01*\nX247100Y202504D02*\nX249421D01*\nX246100Y201504D02*\nX247100Y202504D01*\nX246100Y200700D02*\nY201504D01*\nX219167Y162076D02*\nX219439D01*\nX221415Y160100D01*\nX228900D01*\nX197361Y250383D02*\nX199244Y248500D01*\nX192958Y250383D02*\nX197361D01*\nX227100Y184600D02*\nX234700Y192200D01*\nX275500Y177100D02*\nY203200D01*\nX283500Y211200D01*\nX245941Y193710D02*\nX248921Y193984D01*\nX243951Y195700D02*\nX245941Y193710D01*\nX243951Y195700D02*\nY207635D01*\nX247100Y209984D01*\nX249421D01*\nX266700Y181800D02*\nX269533Y184633D01*\nY209785D02*\nX275032Y215285D01*\nX259067Y172744D02*\nX261400D01*\nX269533Y180877D01*\nX275032Y215285D02*\nX277585D01*\nX283500Y221200D01*\nX258744Y206244D02*\nX259067D01*\nX155056Y248544D02*\nY248600D01*\nX155112D02*\nX156556D01*\nX132244Y232344D02*\nY233844D01*\nX242696Y169004D02*\nX246900D01*\nX249421D01*\nX131756Y181188D02*\nY183944D01*\nY181188D02*\nX132700Y180244D01*\nX143944D01*\nX132900Y183944D02*\nY192201D01*\nX131400Y200075D02*\nY207100D01*\nX134344Y207244D02*\nX142992Y207100D01*\nX133008Y209524D02*\nX136200D01*\nX144031Y207100D02*\nX144057D01*\nX137775Y211098D02*\nX140488D01*\nX250744Y128900D02*\nX252700D01*\nX144057Y211700D02*\nX146400Y214043D01*\nX158744D02*\nX174700D01*\nY223100D01*\nX180244Y228644D01*\nX180200Y222600D02*\nY250900D01*\nX145632Y227500D02*\nX148788D01*\nX145532Y250100D02*\nX149344D01*\nX180244Y235700D02*\nY250875D01*\nX180200Y250900D02*\nX193800Y264500D01*\nX196108Y159200D02*\nX207900D01*\nX272900Y174500D02*\nX275500Y177100D01*\nX189476Y255501D02*\nX192900D01*\nX200244Y264744D02*\nY268744D01*\nX243400Y191168D02*\nX245941Y193710D01*\nX246216Y193984D01*\nX246300Y210784D02*\nY223760D01*\nX167000Y273744D02*\nY273888D01*\nX164600Y273744D02*\nY285444D01*\nX167300Y235700D02*\nY237587D01*\nX168344Y274044D02*\nX180100Y285800D01*\nX269533Y180877D02*\nY184633D01*\nY209785D01*\nX258744Y202700D02*\nY206244D01*\nY216444D01*\nX162400Y199400D02*\nX165244Y202244D01*\nX176744D01*\nX179800Y205300D01*\nX209424Y180867D02*\nY180924D01*\nX212744Y184244D01*\nY185744D01*\nX221744Y184836D02*\nY185244D01*\nX213600Y176692D02*\nX221744Y184836D01*\nX217744Y186404D02*\nY187244D01*\nX210816Y179475D02*\nX217744Y186404D01*\nX219844Y189344D02*\nX220244Y189744D01*\nX216384Y159292D02*\nX218432Y157244D01*\nX220200D01*\nX213600Y156508D02*\nX216864Y153244D01*\nX220886D01*\nX222300Y151830D01*\nX214992Y157900D02*\nX218148Y154744D01*\nX223244D01*\nX225900Y157400D01*\nX227090D01*\nX206709Y183721D02*\nY185509D01*\nX207744Y186544D01*\nY188744D01*\nX190800Y217300D02*\nX191600D01*\nX194800Y178092D02*\nY226100D01*\nX236800Y174900D02*\nY193070D01*\nX201330Y194300D02*\nX235570D01*\nX236800Y193070D01*\nX203091Y183721D02*\nY190091D01*\nX203244Y190244D01*\nX203744D01*\nX196444Y179232D02*\nX197592Y178084D01*\nX197644Y183599D02*\nX200376Y180867D01*\nX197644Y183599D02*\nY190614D01*\nX201330Y194300D01*\nX183244Y187244D02*\nY187941D01*\nX172823Y198362D02*\nX183244Y187941D01*\nX163900Y181244D02*\nY197826D01*\nX164437Y198362D01*\nX172823D01*\nX178744Y200744D02*\nX187244Y192244D01*\nX216384Y173908D02*\nX216408D01*\nX190744Y176580D02*\nX193416Y173908D01*\nX190744Y176580D02*\nY180944D01*\nX189744Y185244D02*\nY185356D01*\nX188700Y186400D02*\nX189744Y185356D01*\nX187244Y181244D02*\nY192244D01*\nX190744Y180944D02*\nX192244Y182444D01*\nY216656D01*\nX191600Y217300D02*\nX192244Y216656D01*\nX193600Y179944D02*\nY228894D01*\nX193400Y179744D02*\nX193600Y179944D01*\nX193400Y176708D02*\nY179744D01*\nX199744Y184283D02*\nX201768Y182259D01*\nX199744Y184283D02*\nY188244D01*\nX229571Y144744D02*\nX230157Y144157D01*\nX208032Y150941D02*\nX213229Y145744D01*\nX206709Y149479D02*\nX211645Y144544D01*\nX221901Y145744D02*\nX230157Y154000D01*\nX211645Y144544D02*\nX222398D01*\nX213229Y145744D02*\nX221901D01*\nX222398Y144544D02*\nX222599Y144744D01*\nX229571D01*\nX209424Y152333D02*\nX213012Y148744D01*\nX213244D01*\nY148244D02*\nY148744D01*\nX214744Y142244D02*\nX215244Y142744D01*\nX214744Y142244D02*\nY142244D01*\nX215244Y135244D02*\nY142744D01*\nX242618Y144000D02*\nY154000D01*\nX192600Y149500D02*\nY150124D01*\nX197592Y155116D01*\nX143244Y200862D02*\nX150362D01*\nX152244Y202744D01*\nX159087D01*\nX210816Y153725D02*\nX213696Y150844D01*\nX217144D01*\nX217744Y150244D01*\nX220559Y163468D02*\nX222627Y161400D01*\nX224818D01*\nX212208Y178084D02*\nX219644Y185520D01*\nY186114D01*\nX219844Y186314D01*\nY189344D01*\nX163177Y176244D02*\nX182729D01*\nX189241Y169732D01*\nX192958Y252942D02*\nX197046D01*\nX200444Y249544D01*\nX227343Y235843D02*\nX237600D01*\nX200444Y248706D02*\nY249544D01*\nY248706D02*\nX201205Y247944D01*\nX199244Y248208D02*\nY248500D01*\nY248208D02*\nX200709Y246744D01*\nX198224Y245049D02*\nY245265D01*\nX192958D02*\nX198224D01*\nX186300Y200600D02*\nY220700D01*\nX192958Y240146D02*\nX197842D01*\nX201744Y236244D02*\nX202244D01*\nX197842Y240146D02*\nX201744Y236244D01*\nX201205Y247944D02*\nX201497D01*\nX214244Y243244D02*\nX215244D01*\nX212744Y241744D02*\nX214244Y243244D01*\nX201497Y247944D02*\nX207697Y241744D01*\nX212744D01*\nX192958Y247824D02*\nX197932D01*\nX198224Y245049D02*\nX199744Y243529D01*\nY243244D02*\nY243529D01*\nX200274Y239744D02*\nX201244D01*\nX192958Y242706D02*\nX197313D01*\nX200274Y239744D01*\nX197932Y247824D02*\nX200411Y245344D01*\nX200614D01*\nX204744Y241214D01*\nY235774D02*\nY241214D01*\nX195070Y226100D02*\nX204744Y235774D01*\nX194800Y226100D02*\nX195070D01*\nX196444Y179232D02*\nY224444D01*\nX201244Y229244D01*\nX196774Y234244D02*\nX198744D01*\nX190244Y224644D02*\nY225900D01*\nX186300Y220700D02*\nX190244Y224644D01*\nX192344Y229814D02*\nX196774Y234244D01*\nX188700Y218700D02*\nX192344Y222344D01*\nY229814D01*\nX255244Y238753D02*\nY242744D01*\nY238753D02*\nX257700Y236297D01*\nY221679D02*\nY236297D01*\nX255244Y219223D02*\nX257700Y221679D01*\nX255244Y215244D02*\nY219223D01*\nX232244Y202744D02*\nX234744D01*\nX226744Y197244D02*\nX232244Y202744D01*\nX201188Y197244D02*\nX226744D01*\nX198544Y199889D02*\nX201188Y197244D01*\nX187087Y237587D02*\nX192958D01*\nX183744Y234244D02*\nX187087Y237587D01*\nX220744Y178244D02*\nX221744D01*\nX217775Y172516D02*\nX221404Y176144D01*\nX222614D01*\nX216408Y173908D02*\nX220744Y178244D01*\nX219167Y171124D02*\nX219291D01*\nX234700Y186533D01*\nY188100D01*\nX222614Y176144D02*\nX227100Y180630D01*\nY184600D01*\nX214992Y175300D02*\nX226244Y186552D01*\nY191244D01*\nX174065Y141665D02*\nX185500D01*\nX141744Y164632D02*\nY166744D01*\nY164632D02*\nX144132Y162244D01*\nX153486D01*\nX174065Y141665D01*\nX128244Y199944D02*\nX142300Y214000D01*\nX128244Y138744D02*\nY199944D01*\nY138744D02*\nX138043Y128945D01*\nX164744D01*\nX256244Y157844D02*\nX268744Y170344D01*\nX272900Y174500D01*\nX252700Y128900D02*\nX256244Y132444D01*\nY157844D01*\nX288300Y138500D02*\nY176400D01*\nX259244Y157244D02*\nX269744Y167744D01*\nX280044D01*\nX283500Y171200D01*\nX258744Y134244D02*\nX264244Y128744D01*\nX278544D01*\nX288300Y138500D01*\nX169000Y157000D02*\nX171744Y154256D01*\nY150744D02*\nY154256D01*\nX371744Y269244D02*\nX376187Y273687D01*\nX377044Y274544D02*\nX386744D01*\nX376187Y273687D02*\nX377044Y274544D01*\nX385244Y259744D02*\nX385244Y259744D01*\nX385244Y252744D02*\nY259744D01*\nX368000Y253800D02*\nX380800Y266600D01*\nX385244Y252744D02*\nX392744Y260244D01*\nX394832D01*\nX400044Y255032D01*\nY243141D02*\nY255032D01*\nY243141D02*\nX407343Y235843D01*\nX396114Y245344D02*\nX414382Y227076D01*\nY224843D02*\nY227076D01*\nX381000Y246744D02*\nX410700Y217044D01*\nX380709Y246744D02*\nX381000D01*\nX410700Y211200D02*\nY217044D01*\nX405244Y245244D02*\nX412244Y238244D01*\nX405244Y245244D02*\nY252744D01*\nX396114Y245344D02*\nY251874D01*\nX422618Y142900D02*\nY144000D01*\nX420218Y140500D02*\nX422618Y142900D01*\nX412600Y140500D02*\nX420218D01*\nX413455Y128945D02*\nX414744D01*\nX409700Y132700D02*\nX413455Y128945D01*\nX395244D02*\nX401045D01*\nX391300Y155800D02*\nX391524D01*\nX392208Y155116D01*\nX384900Y162424D02*\nX391524Y155800D01*\nX360244Y260744D02*\nY267744D01*\nX329344Y246444D02*\nY250100D01*\nX340644Y192344D02*\nX341500D01*\nX325632Y227500D02*\nY228844D01*\nY224900D02*\nY227500D01*\nX324055Y207082D02*\nX324056D01*\nX324031Y207083D02*\nX324055Y207082D01*\nX322992Y207100D02*\nX324031Y207083D01*\nY207100D01*\nX323944Y180244D02*\nY184344D01*\nY179544D02*\nY180244D01*\nX311100Y207100D02*\nX311400D01*\nX311756Y183944D02*\nX312900D01*\nX429400Y232205D02*\nX430364Y231240D01*\nX426583Y235022D02*\nX429400Y232205D01*\nX431900Y231240D02*\nX433824D01*\nX430364D02*\nX431900D01*\nX347144Y273744D02*\nX348644D01*\nX349544Y234044D02*\nX352444D01*\nX348956D02*\nX349544D01*\nX347000Y273744D02*\nX347144D01*\nX344600D02*\nX347000D01*\nX352444Y234044D02*\nX352700D01*\nX346644D02*\nX348956D01*\nX330244Y207744D02*\nX338744D01*\nX380246Y149418D02*\nX381768Y150941D01*\nX380246Y143076D02*\nY149418D01*\nX372414Y135244D02*\nX380246Y143076D01*\nX360744Y135244D02*\nX372414D01*\nX343900Y181244D02*\nX345650D01*\nX356244Y242983D02*\nY268744D01*\nX324031Y205587D02*\nX324056Y207082D01*\nX426583Y235022D02*\nY246681D01*\nX429400Y229705D02*\nY232205D01*\nX364500Y143895D02*\nY158727D01*\nX369241Y163468D01*\nX463500Y181200D02*\nX468300Y176400D01*\nX363987Y168409D02*\nX367779D01*\nX414382Y224843D02*\nX417600D01*\nX413941Y225283D02*\nX414382Y224843D01*\nX331744Y166744D02*\nX335385Y163103D01*\nX364812D01*\nX366500Y164791D01*\nX367779D01*\nX323244Y189356D02*\nY190626D01*\nY189356D02*\nX324031Y188569D01*\nY185901D02*\nY188569D01*\nX368700Y186400D02*\nY218700D01*\nX365500Y141665D02*\nX367425Y143590D01*\nY147875D01*\nX365700Y149600D02*\nX367425Y147875D01*\nX365700Y149600D02*\nY154360D01*\nX372025Y160684D01*\nX347300Y235700D02*\nX348956Y234044D01*\nX347300Y237587D02*\nX349730D01*\nX404628Y165100D02*\nX412600D01*\nX404318Y164791D02*\nX404628Y165100D01*\nX402021Y164791D02*\nX404318D01*\nX328788Y227500D02*\nX329644Y226644D01*\nX430744Y135244D02*\nY151189D01*\nX424533Y157400D02*\nX430744Y151189D01*\nX407090Y157400D02*\nX424533D01*\nX374906Y230200D02*\nX375700D01*\nX373600Y228894D02*\nX374906Y230200D01*\nX373400Y176708D02*\nX374808Y175300D01*\nX374800Y178092D02*\nX376200Y176692D01*\nX311400Y200075D02*\nX311433D01*\nX409700Y132700D02*\nY137300D01*\nX404818Y161400D02*\nX406418Y163000D01*\nX352056Y192344D02*\nX353100Y191300D01*\nX347368Y192344D02*\nX352056D01*\nX354744Y214043D02*\nX359800D01*\nY205300D02*\nY214043D01*\nX342400Y194100D02*\nY199400D01*\nX340644Y192344D02*\nX342400Y194100D01*\nX337920Y192344D02*\nX340644D01*\nX374700Y141400D02*\nY149440D01*\nX378984Y153725D01*\nX342500Y176921D02*\nX343177Y176244D01*\nX342500Y176921D02*\nY191344D01*\nX341500Y192344D02*\nX342500Y191344D01*\nX345044Y166256D02*\nX346000Y165300D01*\nX345044Y166256D02*\nY175044D01*\nX336700D02*\nX345044D01*\nX331300Y180444D02*\nX336700Y175044D01*\nX331300Y180444D02*\nY191185D01*\nX329300Y193185D02*\nX331300Y191185D01*\nX323244Y193185D02*\nX329300D01*\nX372600Y153100D02*\nX372792D01*\nX376200Y156508D01*\nX368900Y152400D02*\nX370500Y154000D01*\nY156376D01*\nX373416Y159292D01*\nX377900Y146186D02*\nY149856D01*\nX380376Y152333D01*\nX384900Y166600D02*\nX386292D01*\nX394992Y175300D01*\nX370000Y168800D02*\nX382700D01*\nX384900Y166600D01*\nX387900Y159200D02*\nX391300Y155800D01*\nX374808Y157900D02*\nX376108Y159200D01*\nX384900Y162424D02*\nY166600D01*\nX431900Y223760D02*\nX433824D01*\nX431100Y224560D02*\nX431900Y223760D01*\nX431100Y224560D02*\nY230440D01*\nX431900Y231240D01*\nX401045Y128945D02*\nX412600Y140500D01*\nX406188Y285800D02*\nX415744Y276244D01*\nX354906Y157000D02*\nX357600D01*\nX358000Y156600D01*\nX334600Y181244D02*\nX339744D01*\nX354700Y214043D02*\nX354744D01*\nX323944Y179544D02*\nX331744Y171744D01*\nX348430Y259958D02*\nX349730D01*\nX346744Y261644D02*\nX348430Y259958D01*\nX352700Y234044D02*\nX353783Y232961D01*\nY230244D02*\nY232961D01*\nX325532Y248544D02*\nY250100D01*\nX326400Y214043D02*\nX338744D01*\nX324057Y207187D02*\nY211700D01*\nX311433Y192201D02*\nX312900D01*\nX316200Y209524D02*\nX317775Y211098D01*\nX346844Y274044D02*\nX347000D01*\nX312244Y252544D02*\nY253844D01*\nX312044Y252344D02*\nX312244Y252544D01*\nX312044Y232344D02*\nX312244D01*\nX324057Y207100D02*\nY207187D01*\nX307200Y211000D02*\nX311100Y207100D01*\nX307200Y211000D02*\nY224900D01*\nX309500Y227200D01*\nX314000D01*\nX316300Y224900D01*\nX325632D01*\nX321244Y246244D02*\nY250244D01*\nX344600Y285444D02*\nX347944D01*\nX329244Y246344D02*\nX329344Y246444D01*\nX317600Y247200D02*\nX320944Y250544D01*\nX309100Y247200D02*\nX317600D01*\nX307200Y245300D02*\nX309100Y247200D01*\nX307200Y229300D02*\nY245300D01*\nY229300D02*\nX309000Y227500D01*\nX317700D01*\nX321044Y230844D01*\nY226544D02*\nY230844D01*\nX376244Y264744D02*\nY268744D01*\nX336556Y248544D02*\nY248600D01*\nX338744Y207744D02*\nX354886D01*\nX379102Y135244D02*\nX395244D01*\nX414602D02*\nX430744D01*\nX344602D02*\nX360744D01*\nX414744Y128945D02*\nX430744D01*\nX379244D02*\nX395244D01*\nX360744D02*\nX379244D01*\nX344744D02*\nX360744D01*\nX324031Y185087D02*\nY185901D01*\nX323944Y185000D02*\nX324031Y185087D01*\nX323944Y184344D02*\nY185000D01*\nX311433Y192201D02*\nY200075D01*\nX365675Y251700D02*\nX369476Y255501D01*\nX347368Y196084D02*\nX353404D01*\nX355244Y194244D01*\nY189296D02*\nY194244D01*\nY189296D02*\nX372025Y172516D01*\nX410157Y154000D02*\nX417697D01*\nX410157Y144157D02*\nX413800D01*\nX413957Y144000D01*\nX417697D01*\nX420400Y230157D02*\nX421483Y231240D01*\nX424376D01*\nX417600Y230157D02*\nX418630D01*\nX421300Y232827D01*\nY239400D01*\nX419543Y241157D02*\nX421300Y239400D01*\nX417600Y241157D02*\nX419543D01*\nX418630Y230157D02*\nX420400D01*\nX365675Y250875D02*\nY251700D01*\nX335056Y248600D02*\nX335112D01*\nX347000Y273888D02*\nY274044D01*\nX360100Y285800D02*\nX405588D01*\nX406188D01*\nX417600Y224843D02*\nX420400D01*\nX421483Y223760D01*\nX424376D01*\nX426300Y210784D02*\nX427100Y209984D01*\nX424376Y223760D02*\nX426300D01*\nX416800Y174900D02*\nX422696Y169004D01*\nX379300Y181944D02*\nX380376Y180867D01*\nX402021Y168409D02*\nX410500D01*\nX432200Y162700D02*\nY218500D01*\nX427500Y223200D02*\nX432200Y218500D01*\nX427500Y223200D02*\nY226500D01*\nX427300Y226700D02*\nX427500Y226500D01*\nX427300Y226700D02*\nY232607D01*\nX423900Y236007D02*\nX427300Y232607D01*\nX423900Y236007D02*\nY237200D01*\nX438744Y216444D02*\nX463500Y241200D01*\nX435100Y190400D02*\nX435256Y190244D01*\nX438567D01*\nX449100Y251200D02*\nX463500D01*\nX448518Y250618D02*\nX449100Y251200D01*\nX435244Y250618D02*\nX448518D01*\nX428921Y196721D02*\nX429100Y196900D01*\nX428921Y193984D02*\nY196721D01*\nX418900Y186044D02*\nY220700D01*\nX452900Y174500D02*\nY205200D01*\nX438567Y190244D02*\nX443444D01*\nX447300Y194100D01*\nY207700D01*\nX448065Y208465D01*\nY211097D01*\nX456000Y219032D01*\nY223700D01*\nX463500Y231200D01*\nX400559Y169732D02*\nX403323Y172496D01*\nX414404D01*\nX426500Y160400D01*\nX435100D01*\nX450733Y176033D01*\nY206900D01*\nX452418Y208585D01*\nX454047D01*\nX461461Y216000D01*\nX466300D01*\nX468300Y214000D01*\nY202100D02*\nY214000D01*\nX467400Y201200D02*\nX468300Y202100D01*\nX463500Y201200D02*\nX467400D01*\nX433824Y227500D02*\nX436500D01*\nY235800D01*\nX430900Y241400D02*\nX436500Y235800D01*\nX430900Y241400D02*\nY256300D01*\nX420600Y266600D02*\nX430900Y256300D01*\nX380800Y266600D02*\nX420600D01*\nX425900Y172900D02*\nX426900Y171900D01*\nY169004D02*\nY171900D01*\nX425500Y186600D02*\nX425596Y186504D01*\nX428921D01*\nX426216Y193984D02*\nX428921D01*\nX423400Y179988D02*\nY191168D01*\nY179988D02*\nX426904Y176484D01*\nX429421D01*\nX427100Y202504D02*\nX429421D01*\nX426100Y201504D02*\nX427100Y202504D01*\nX426100Y200700D02*\nY201504D01*\nX399167Y162076D02*\nX399439D01*\nX401415Y160100D01*\nX408900D01*\nX377361Y250383D02*\nX379244Y248500D01*\nX372958Y250383D02*\nX377361D01*\nX407100Y184600D02*\nX414700Y192200D01*\nX455500Y177100D02*\nY203200D01*\nX463500Y211200D01*\nX425941Y193710D02*\nX428921Y193984D01*\nX423951Y195700D02*\nX425941Y193710D01*\nX423951Y195700D02*\nY207635D01*\nX427100Y209984D01*\nX429421D01*\nX446700Y181800D02*\nX449533Y184633D01*\nY209785D02*\nX455032Y215285D01*\nX439067Y172744D02*\nX441400D01*\nX449533Y180877D01*\nX455032Y215285D02*\nX457585D01*\nX463500Y221200D01*\nX438744Y206244D02*\nX439067D01*\nX335056Y248544D02*\nY248600D01*\nX335112D02*\nX336556D01*\nX312244Y232344D02*\nY233844D01*\nX422696Y169004D02*\nX426900D01*\nX429421D01*\nX311756Y181188D02*\nY183944D01*\nY181188D02*\nX312700Y180244D01*\nX323944D01*\nX312900Y183944D02*\nY192201D01*\nX311400Y200075D02*\nY207100D01*\nX314344Y207244D02*\nX322992Y207100D01*\nX313008Y209524D02*\nX316200D01*\nX324031Y207100D02*\nX324057D01*\nX317775Y211098D02*\nX320488D01*\nX430744Y128900D02*\nX432700D01*\nX324057Y211700D02*\nX326400Y214043D01*\nX338744D02*\nX354700D01*\nY223100D01*\nX360244Y228644D01*\nX360200Y222600D02*\nY250900D01*\nX325632Y227500D02*\nX328788D01*\nX325532Y250100D02*\nX329344D01*\nX360244Y235700D02*\nY250875D01*\nX360200Y250900D02*\nX373800Y264500D01*\nX376108Y159200D02*\nX387900D01*\nX452900Y174500D02*\nX455500Y177100D01*\nX369476Y255501D02*\nX372900D01*\nX380244Y264744D02*\nY268744D01*\nX423400Y191168D02*\nX425941Y193710D01*\nX426216Y193984D01*\nX426300Y210784D02*\nY223760D01*\nX347000Y273744D02*\nY273888D01*\nX344600Y273744D02*\nY285444D01*\nX347300Y235700D02*\nY237587D01*\nX348344Y274044D02*\nX360100Y285800D01*\nX449533Y180877D02*\nY184633D01*\nY209785D01*\nX438744Y202700D02*\nY206244D01*\nY216444D01*\nX342400Y199400D02*\nX345244Y202244D01*\nX356744D01*\nX359800Y205300D01*\nX389424Y180867D02*\nY180924D01*\nX392744Y184244D01*\nY185744D01*\nX401744Y184836D02*\nY185244D01*\nX393600Y176692D02*\nX401744Y184836D01*\nX397744Y186404D02*\nY187244D01*\nX390816Y179475D02*\nX397744Y186404D01*\nX399844Y189344D02*\nX400244Y189744D01*\nX396384Y159292D02*\nX398432Y157244D01*\nX400200D01*\nX393600Y156508D02*\nX396864Y153244D01*\nX400886D01*\nX402300Y151830D01*\nX394992Y157900D02*\nX398148Y154744D01*\nX403244D01*\nX405900Y157400D01*\nX407090D01*\nX386709Y183721D02*\nY185509D01*\nX387744Y186544D01*\nY188744D01*\nX370800Y217300D02*\nX371600D01*\nX374800Y178092D02*\nY226100D01*\nX416800Y174900D02*\nY193070D01*\nX381330Y194300D02*\nX415570D01*\nX416800Y193070D01*\nX383091Y183721D02*\nY190091D01*\nX383244Y190244D01*\nX383744D01*\nX376444Y179232D02*\nX377592Y178084D01*\nX377644Y183599D02*\nX380376Y180867D01*\nX377644Y183599D02*\nY190614D01*\nX381330Y194300D01*\nX363244Y187244D02*\nY187941D01*\nX352823Y198362D02*\nX363244Y187941D01*\nX343900Y181244D02*\nY197826D01*\nX344437Y198362D01*\nX352823D01*\nX358744Y200744D02*\nX367244Y192244D01*\nX396384Y173908D02*\nX396408D01*\nX370744Y176580D02*\nX373416Y173908D01*\nX370744Y176580D02*\nY180944D01*\nX369744Y185244D02*\nY185356D01*\nX368700Y186400D02*\nX369744Y185356D01*\nX367244Y181244D02*\nY192244D01*\nX370744Y180944D02*\nX372244Y182444D01*\nY216656D01*\nX371600Y217300D02*\nX372244Y216656D01*\nX373600Y179944D02*\nY228894D01*\nX373400Y179744D02*\nX373600Y179944D01*\nX373400Y176708D02*\nY179744D01*\nX379744Y184283D02*\nX381768Y182259D01*\nX379744Y184283D02*\nY188244D01*\nX409571Y144744D02*\nX410157Y144157D01*\nX388032Y150941D02*\nX393229Y145744D01*\nX386709Y149479D02*\nX391645Y144544D01*\nX401901Y145744D02*\nX410157Y154000D01*\nX391645Y144544D02*\nX402398D01*\nX393229Y145744D02*\nX401901D01*\nX402398Y144544D02*\nX402598Y144744D01*\nX409571D01*\nX389424Y152333D02*\nX393012Y148744D01*\nX393244D01*\nY148244D02*\nY148744D01*\nX394744Y142244D02*\nX395244Y142744D01*\nX394744Y142244D02*\nY142244D01*\nX395244Y135244D02*\nY142744D01*\nX422618Y144000D02*\nY154000D01*\nX372600Y149500D02*\nY150124D01*\nX377592Y155116D01*\nX323244Y200862D02*\nX330362D01*\nX332244Y202744D01*\nX339087D01*\nX390816Y153725D02*\nX393696Y150844D01*\nX397144D01*\nX397744Y150244D01*\nX400559Y163468D02*\nX402627Y161400D01*\nX404818D01*\nX392208Y178084D02*\nX399644Y185520D01*\nY186114D01*\nX399844Y186314D01*\nY189344D01*\nX343177Y176244D02*\nX362729D01*\nX369241Y169732D01*\nX372958Y252942D02*\nX377046D01*\nX380444Y249544D01*\nX407343Y235843D02*\nX417600D01*\nX380444Y248706D02*\nY249544D01*\nY248706D02*\nX381206Y247944D01*\nX379244Y248208D02*\nY248500D01*\nY248208D02*\nX380709Y246744D01*\nX378224Y245049D02*\nY245265D01*\nX372958D02*\nX378224D01*\nX366300Y200600D02*\nY220700D01*\nX372958Y240146D02*\nX377842D01*\nX381744Y236244D02*\nX382244D01*\nX377842Y240146D02*\nX381744Y236244D01*\nX381206Y247944D02*\nX381497D01*\nX394244Y243244D02*\nX395244D01*\nX392744Y241744D02*\nX394244Y243244D01*\nX381497Y247944D02*\nX387697Y241744D01*\nX392744D01*\nX372958Y247824D02*\nX377932D01*\nX378224Y245049D02*\nX379744Y243529D01*\nY243244D02*\nY243529D01*\nX380274Y239744D02*\nX381244D01*\nX372958Y242706D02*\nX377313D01*\nX380274Y239744D01*\nX377932Y247824D02*\nX380411Y245344D01*\nX380614D01*\nX384744Y241214D01*\nY235774D02*\nY241214D01*\nX375070Y226100D02*\nX384744Y235774D01*\nX374800Y226100D02*\nX375070D01*\nX376444Y179232D02*\nY224444D01*\nX381244Y229244D01*\nX376774Y234244D02*\nX378744D01*\nX370244Y224644D02*\nY225900D01*\nX366300Y220700D02*\nX370244Y224644D01*\nX372344Y229814D02*\nX376774Y234244D01*\nX368700Y218700D02*\nX372344Y222344D01*\nY229814D01*\nX435244Y238753D02*\nY242744D01*\nY238753D02*\nX437700Y236297D01*\nY221679D02*\nY236297D01*\nX435244Y219223D02*\nX437700Y221679D01*\nX435244Y215244D02*\nY219223D01*\nX412244Y202744D02*\nX414744D01*\nX406744Y197244D02*\nX412244Y202744D01*\nX381189Y197244D02*\nX406744D01*\nX378544Y199889D02*\nX381189Y197244D01*\nX367087Y237587D02*\nX372958D01*\nX363744Y234244D02*\nX367087Y237587D01*\nX400744Y178244D02*\nX401744D01*\nX397775Y172516D02*\nX401404Y176144D01*\nX402614D01*\nX396408Y173908D02*\nX400744Y178244D01*\nX399167Y171124D02*\nX399291D01*\nX414700Y186533D01*\nY188100D01*\nX402614Y176144D02*\nX407100Y180630D01*\nY184600D01*\nX394992Y175300D02*\nX406244Y186552D01*\nY191244D01*\nX354065Y141665D02*\nX365500D01*\nX321744Y164632D02*\nY166744D01*\nY164632D02*\nX324132Y162244D01*\nX333486D01*\nX354065Y141665D01*\nX308244Y199944D02*\nX322300Y214000D01*\nX308244Y138744D02*\nY199944D01*\nY138744D02*\nX318043Y128945D01*\nX344744D01*\nX436244Y157844D02*\nX448744Y170344D01*\nX452900Y174500D01*\nX432700Y128900D02*\nX436244Y132444D01*\nY157844D01*\nX468300Y138500D02*\nY176400D01*\nX439244Y157244D02*\nX449744Y167744D01*\nX460044D01*\nX463500Y171200D01*\nX438744Y134244D02*\nX444244Y128744D01*\nX458544D01*\nX468300Y138500D01*\nX349000Y157000D02*\nX351744Y154256D01*\nY150744D02*\nY154256D01*\nX191744Y449244D02*\nX196187Y453687D01*\nX197044Y454544D02*\nX206744D01*\nX196187Y453687D02*\nX197044Y454544D01*\nX205244Y439744D02*\nX205244Y439744D01*\nX205244Y432744D02*\nY439744D01*\nX188000Y433800D02*\nX200800Y446600D01*\nX205244Y432744D02*\nX212744Y440244D01*\nX214832D01*\nX220044Y435032D01*\nY423141D02*\nY435032D01*\nY423141D02*\nX227343Y415843D01*\nX216114Y425344D02*\nX234382Y407076D01*\nY404843D02*\nY407076D01*\nX201000Y426744D02*\nX230700Y397044D01*\nX200709Y426744D02*\nX201000D01*\nX230700Y391200D02*\nY397044D01*\nX225244Y425244D02*\nX232244Y418244D01*\nX225244Y425244D02*\nY432744D01*\nX216114Y425344D02*\nY431874D01*\nX242618Y322900D02*\nY324000D01*\nX240218Y320500D02*\nX242618Y322900D01*\nX232600Y320500D02*\nX240218D01*\nX233455Y308945D02*\nX234744D01*\nX229700Y312700D02*\nX233455Y308945D01*\nX215244D02*\nX221045D01*\nX211300Y335800D02*\nX211524D01*\nX212208Y335116D01*\nX204900Y342424D02*\nX211524Y335800D01*\nX180244Y440744D02*\nY447744D01*\nX149344Y426444D02*\nY430100D01*\nX160644Y372344D02*\nX161500D01*\nX145632Y407500D02*\nY408844D01*\nY404900D02*\nY407500D01*\nX144055Y387082D02*\nX144056D01*\nX144031Y387083D02*\nX144055Y387082D01*\nX142992Y387100D02*\nX144031Y387083D01*\nY387100D01*\nX143944Y360244D02*\nY364344D01*\nY359544D02*\nY360244D01*\nX131100Y387100D02*\nX131400D01*\nX131756Y363944D02*\nX132900D01*\nX249400Y412205D02*\nX250364Y411240D01*\nX246583Y415022D02*\nX249400Y412205D01*\nX251900Y411240D02*\nX253824D01*\nX250364D02*\nX251900D01*\nX167144Y453744D02*\nX168644D01*\nX169544Y414044D02*\nX172444D01*\nX168956D02*\nX169544D01*\nX167000Y453744D02*\nX167144D01*\nX164600D02*\nX167000D01*\nX172444Y414044D02*\nX172700D01*\nX166644D02*\nX168956D01*\nX150244Y387744D02*\nX158744D01*\nX200246Y329418D02*\nX201768Y330941D01*\nX200246Y323076D02*\nY329418D01*\nX192414Y315244D02*\nX200246Y323076D01*\nX180744Y315244D02*\nX192414D01*\nX163900Y361244D02*\nX165650D01*\nX176244Y422983D02*\nY448744D01*\nX144031Y385587D02*\nX144056Y387082D01*\nX246583Y415022D02*\nY426681D01*\nX249400Y409705D02*\nY412205D01*\nX184500Y323895D02*\nY338727D01*\nX189241Y343468D01*\nX283500Y361200D02*\nX288300Y356400D01*\nX183987Y348409D02*\nX187779D01*\nX234382Y404843D02*\nX237600D01*\nX233941Y405283D02*\nX234382Y404843D01*\nX151744Y346744D02*\nX155385Y343103D01*\nX184812D01*\nX186500Y344791D01*\nX187779D01*\nX143244Y369356D02*\nY370626D01*\nY369356D02*\nX144031Y368569D01*\nY365901D02*\nY368569D01*\nX188700Y366400D02*\nY398700D01*\nX185500Y321665D02*\nX187425Y323590D01*\nY327875D01*\nX185700Y329600D02*\nX187425Y327875D01*\nX185700Y329600D02*\nY334360D01*\nX192025Y340684D01*\nX167300Y415700D02*\nX168956Y414044D01*\nX167300Y417587D02*\nX169730D01*\nX224628Y345100D02*\nX232600D01*\nX224318Y344791D02*\nX224628Y345100D01*\nX222021Y344791D02*\nX224318D01*\nX148788Y407500D02*\nX149644Y406644D01*\nX250744Y315244D02*\nY331189D01*\nX244533Y337400D02*\nX250744Y331189D01*\nX227090Y337400D02*\nX244533D01*\nX194906Y410200D02*\nX195700D01*\nX193600Y408894D02*\nX194906Y410200D01*\nX193400Y356708D02*\nX194808Y355300D01*\nX194800Y358092D02*\nX196200Y356692D01*\nX131400Y380075D02*\nX131433D01*\nX229700Y312700D02*\nY317300D01*\nX224818Y341400D02*\nX226418Y343000D01*\nX172056Y372344D02*\nX173100Y371300D01*\nX167368Y372344D02*\nX172056D01*\nX174744Y394043D02*\nX179800D01*\nY385300D02*\nY394043D01*\nX162400Y374100D02*\nY379400D01*\nX160644Y372344D02*\nX162400Y374100D01*\nX157920Y372344D02*\nX160644D01*\nX194700Y321400D02*\nY329440D01*\nX198984Y333725D01*\nX162500Y356921D02*\nX163177Y356244D01*\nX162500Y356921D02*\nY371344D01*\nX161500Y372344D02*\nX162500Y371344D01*\nX165044Y346256D02*\nX166000Y345300D01*\nX165044Y346256D02*\nY355044D01*\nX156700D02*\nX165044D01*\nX151300Y360444D02*\nX156700Y355044D01*\nX151300Y360444D02*\nY371185D01*\nX149300Y373185D02*\nX151300Y371185D01*\nX143244Y373185D02*\nX149300D01*\nX192600Y333100D02*\nX192792D01*\nX196200Y336508D01*\nX188900Y332400D02*\nX190500Y334000D01*\nY336376D01*\nX193416Y339292D01*\nX197900Y326186D02*\nY329856D01*\nX200376Y332333D01*\nX204900Y346600D02*\nX206292D01*\nX214992Y355300D01*\nX190000Y348800D02*\nX202700D01*\nX204900Y346600D01*\nX207900Y339200D02*\nX211300Y335800D01*\nX194808Y337900D02*\nX196108Y339200D01*\nX204900Y342424D02*\nY346600D01*\nX251900Y403760D02*\nX253824D01*\nX251100Y404560D02*\nX251900Y403760D01*\nX251100Y404560D02*\nY410440D01*\nX251900Y411240D01*\nX221045Y308945D02*\nX232600Y320500D01*\nX226188Y465800D02*\nX235744Y456244D01*\nX174906Y337000D02*\nX177600D01*\nX178000Y336600D01*\nX154600Y361244D02*\nX159744D01*\nX174700Y394043D02*\nX174744D01*\nX143944Y359544D02*\nX151744Y351744D01*\nX168430Y439958D02*\nX169730D01*\nX166744Y441644D02*\nX168430Y439958D01*\nX172700Y414044D02*\nX173783Y412961D01*\nY410244D02*\nY412961D01*\nX145532Y428544D02*\nY430100D01*\nX146400Y394043D02*\nX158744D01*\nX144057Y387187D02*\nY391700D01*\nX131433Y372201D02*\nX132900D01*\nX136200Y389524D02*\nX137775Y391098D01*\nX166844Y454044D02*\nX167000D01*\nX132244Y432544D02*\nY433844D01*\nX132044Y432344D02*\nX132244Y432544D01*\nX132044Y412344D02*\nX132244D01*\nX144057Y387100D02*\nY387187D01*\nX127200Y391000D02*\nX131100Y387100D01*\nX127200Y391000D02*\nY404900D01*\nX129500Y407200D01*\nX134000D01*\nX136300Y404900D01*\nX145632D01*\nX141244Y426244D02*\nY430244D01*\nX164600Y465444D02*\nX167944D01*\nX149244Y426344D02*\nX149344Y426444D01*\nX137600Y427200D02*\nX140944Y430544D01*\nX129100Y427200D02*\nX137600D01*\nX127200Y425300D02*\nX129100Y427200D01*\nX127200Y409300D02*\nY425300D01*\nY409300D02*\nX129000Y407500D01*\nX137700D01*\nX141044Y410844D01*\nY406544D02*\nY410844D01*\nX196244Y444744D02*\nY448744D01*\nX156556Y428544D02*\nY428600D01*\nX158744Y387744D02*\nX174886D01*\nX199102Y315244D02*\nX215244D01*\nX234602D02*\nX250744D01*\nX164602D02*\nX180744D01*\nX234744Y308945D02*\nX250744D01*\nX199244D02*\nX215244D01*\nX180744D02*\nX199244D01*\nX164744D02*\nX180744D01*\nX144031Y365087D02*\nY365901D01*\nX143944Y365000D02*\nX144031Y365087D01*\nX143944Y364344D02*\nY365000D01*\nX131433Y372201D02*\nY380075D01*\nX185675Y431700D02*\nX189476Y435501D01*\nX167368Y376084D02*\nX173404D01*\nX175244Y374244D01*\nY369296D02*\nY374244D01*\nY369296D02*\nX192025Y352516D01*\nX230157Y334000D02*\nX237697D01*\nX230157Y324157D02*\nX233800D01*\nX233957Y324000D01*\nX237697D01*\nX240400Y410157D02*\nX241483Y411240D01*\nX244376D01*\nX237600Y410157D02*\nX238630D01*\nX241300Y412827D01*\nY419400D01*\nX239543Y421157D02*\nX241300Y419400D01*\nX237600Y421157D02*\nX239543D01*\nX238630Y410157D02*\nX240400D01*\nX185675Y430875D02*\nY431700D01*\nX155056Y428600D02*\nX155112D01*\nX167000Y453888D02*\nY454044D01*\nX180100Y465800D02*\nX225588D01*\nX226188D01*\nX237600Y404843D02*\nX240400D01*\nX241483Y403760D01*\nX244376D01*\nX246300Y390784D02*\nX247100Y389984D01*\nX244376Y403760D02*\nX246300D01*\nX236800Y354900D02*\nX242696Y349004D01*\nX199300Y361944D02*\nX200376Y360867D01*\nX222021Y348409D02*\nX230500D01*\nX252200Y342700D02*\nY398500D01*\nX247500Y403200D02*\nX252200Y398500D01*\nX247500Y403200D02*\nY406500D01*\nX247300Y406700D02*\nX247500Y406500D01*\nX247300Y406700D02*\nY412607D01*\nX243900Y416007D02*\nX247300Y412607D01*\nX243900Y416007D02*\nY417200D01*\nX258744Y396444D02*\nX283500Y421200D01*\nX255100Y370400D02*\nX255256Y370244D01*\nX258567D01*\nX269100Y431200D02*\nX283500D01*\nX268518Y430618D02*\nX269100Y431200D01*\nX255244Y430618D02*\nX268518D01*\nX248921Y376721D02*\nX249100Y376900D01*\nX248921Y373984D02*\nY376721D01*\nX238900Y366044D02*\nY400700D01*\nX272900Y354500D02*\nY385200D01*\nX258567Y370244D02*\nX263444D01*\nX267300Y374100D01*\nY387700D01*\nX268065Y388465D01*\nY391097D01*\nX276000Y399032D01*\nY403700D01*\nX283500Y411200D01*\nX220559Y349732D02*\nX223323Y352496D01*\nX234404D01*\nX246500Y340400D01*\nX255100D01*\nX270733Y356033D01*\nY386900D01*\nX272418Y388585D01*\nX274047D01*\nX281461Y396000D01*\nX286300D01*\nX288300Y394000D01*\nY382100D02*\nY394000D01*\nX287400Y381200D02*\nX288300Y382100D01*\nX283500Y381200D02*\nX287400D01*\nX253824Y407500D02*\nX256500D01*\nY415800D01*\nX250900Y421400D02*\nX256500Y415800D01*\nX250900Y421400D02*\nY436300D01*\nX240600Y446600D02*\nX250900Y436300D01*\nX200800Y446600D02*\nX240600D01*\nX245900Y352900D02*\nX246900Y351900D01*\nY349004D02*\nY351900D01*\nX245500Y366600D02*\nX245596Y366504D01*\nX248921D01*\nX246216Y373984D02*\nX248921D01*\nX243400Y359988D02*\nY371168D01*\nY359988D02*\nX246904Y356484D01*\nX249421D01*\nX247100Y382504D02*\nX249421D01*\nX246100Y381504D02*\nX247100Y382504D01*\nX246100Y380700D02*\nY381504D01*\nX219167Y342076D02*\nX219439D01*\nX221415Y340100D01*\nX228900D01*\nX197361Y430383D02*\nX199244Y428500D01*\nX192958Y430383D02*\nX197361D01*\nX227100Y364600D02*\nX234700Y372200D01*\nX275500Y357100D02*\nY383200D01*\nX283500Y391200D01*\nX245941Y373710D02*\nX248921Y373984D01*\nX243951Y375700D02*\nX245941Y373710D01*\nX243951Y375700D02*\nY387635D01*\nX247100Y389984D01*\nX249421D01*\nX266700Y361800D02*\nX269533Y364633D01*\nY389785D02*\nX275032Y395285D01*\nX259067Y352744D02*\nX261400D01*\nX269533Y360877D01*\nX275032Y395285D02*\nX277585D01*\nX283500Y401200D01*\nX258744Y386244D02*\nX259067D01*\nX155056Y428544D02*\nY428600D01*\nX155112D02*\nX156556D01*\nX132244Y412344D02*\nY413844D01*\nX242696Y349004D02*\nX246900D01*\nX249421D01*\nX131756Y361188D02*\nY363944D01*\nY361188D02*\nX132700Y360244D01*\nX143944D01*\nX132900Y363944D02*\nY372201D01*\nX131400Y380075D02*\nY387100D01*\nX134344Y387244D02*\nX142992Y387100D01*\nX133008Y389524D02*\nX136200D01*\nX144031Y387100D02*\nX144057D01*\nX137775Y391098D02*\nX140488D01*\nX250744Y308900D02*\nX252700D01*\nX144057Y391700D02*\nX146400Y394043D01*\nX158744D02*\nX174700D01*\nY403100D01*\nX180244Y408644D01*\nX180200Y402600D02*\nY430900D01*\nX145632Y407500D02*\nX148788D01*\nX145532Y430100D02*\nX149344D01*\nX180244Y415700D02*\nY430875D01*\nX180200Y430900D02*\nX193800Y444500D01*\nX196108Y339200D02*\nX207900D01*\nX272900Y354500D02*\nX275500Y357100D01*\nX189476Y435501D02*\nX192900D01*\nX200244Y444744D02*\nY448744D01*\nX243400Y371168D02*\nX245941Y373710D01*\nX246216Y373984D01*\nX246300Y390784D02*\nY403760D01*\nX167000Y453744D02*\nY453888D01*\nX164600Y453744D02*\nY465444D01*\nX167300Y415700D02*\nY417587D01*\nX168344Y454044D02*\nX180100Y465800D01*\nX269533Y360877D02*\nY364633D01*\nY389785D01*\nX258744Y382700D02*\nY386244D01*\nY396444D01*\nX162400Y379400D02*\nX165244Y382244D01*\nX176744D01*\nX179800Y385300D01*\nX209424Y360867D02*\nY360924D01*\nX212744Y364244D01*\nY365744D01*\nX221744Y364836D02*\nY365244D01*\nX213600Y356692D02*\nX221744Y364836D01*\nX217744Y366404D02*\nY367244D01*\nX210816Y359475D02*\nX217744Y366404D01*\nX219844Y369344D02*\nX220244Y369744D01*\nX216384Y339292D02*\nX218432Y337244D01*\nX220200D01*\nX213600Y336508D02*\nX216864Y333244D01*\nX220886D01*\nX222300Y331830D01*\nX214992Y337900D02*\nX218148Y334744D01*\nX223244D01*\nX225900Y337400D01*\nX227090D01*\nX206709Y363721D02*\nY365509D01*\nX207744Y366544D01*\nY368744D01*\nX190800Y397300D02*\nX191600D01*\nX194800Y358092D02*\nY406100D01*\nX236800Y354900D02*\nY373070D01*\nX201330Y374300D02*\nX235570D01*\nX236800Y373070D01*\nX203091Y363721D02*\nY370091D01*\nX203244Y370244D01*\nX203744D01*\nX196444Y359232D02*\nX197592Y358084D01*\nX197644Y363599D02*\nX200376Y360867D01*\nX197644Y363599D02*\nY370614D01*\nX201330Y374300D01*\nX183244Y367244D02*\nY367941D01*\nX172823Y378362D02*\nX183244Y367941D01*\nX163900Y361244D02*\nY377826D01*\nX164437Y378362D01*\nX172823D01*\nX178744Y380744D02*\nX187244Y372244D01*\nX216384Y353908D02*\nX216408D01*\nX190744Y356580D02*\nX193416Y353908D01*\nX190744Y356580D02*\nY360944D01*\nX189744Y365244D02*\nY365356D01*\nX188700Y366400D02*\nX189744Y365356D01*\nX187244Y361244D02*\nY372244D01*\nX190744Y360944D02*\nX192244Y362444D01*\nY396656D01*\nX191600Y397300D02*\nX192244Y396656D01*\nX193600Y359944D02*\nY408894D01*\nX193400Y359744D02*\nX193600Y359944D01*\nX193400Y356708D02*\nY359744D01*\nX199744Y364283D02*\nX201768Y362259D01*\nX199744Y364283D02*\nY368244D01*\nX229571Y324744D02*\nX230157Y324157D01*\nX208032Y330941D02*\nX213229Y325744D01*\nX206709Y329479D02*\nX211645Y324544D01*\nX221901Y325744D02*\nX230157Y334000D01*\nX211645Y324544D02*\nX222398D01*\nX213229Y325744D02*\nX221901D01*\nX222398Y324544D02*\nX222599Y324744D01*\nX229571D01*\nX209424Y332333D02*\nX213012Y328744D01*\nX213244D01*\nY328244D02*\nY328744D01*\nX214744Y322244D02*\nX215244Y322744D01*\nX214744Y322244D02*\nY322244D01*\nX215244Y315244D02*\nY322744D01*\nX242618Y324000D02*\nY334000D01*\nX192600Y329500D02*\nY330124D01*\nX197592Y335116D01*\nX143244Y380862D02*\nX150362D01*\nX152244Y382744D01*\nX159087D01*\nX210816Y333725D02*\nX213696Y330844D01*\nX217144D01*\nX217744Y330244D01*\nX220559Y343468D02*\nX222627Y341400D01*\nX224818D01*\nX212208Y358084D02*\nX219644Y365520D01*\nY366114D01*\nX219844Y366314D01*\nY369344D01*\nX163177Y356244D02*\nX182729D01*\nX189241Y349732D01*\nX192958Y432942D02*\nX197046D01*\nX200444Y429544D01*\nX227343Y415843D02*\nX237600D01*\nX200444Y428706D02*\nY429544D01*\nY428706D02*\nX201205Y427944D01*\nX199244Y428208D02*\nY428500D01*\nY428208D02*\nX200709Y426744D01*\nX198224Y425049D02*\nY425265D01*\nX192958D02*\nX198224D01*\nX186300Y380600D02*\nY400700D01*\nX192958Y420146D02*\nX197842D01*\nX201744Y416244D02*\nX202244D01*\nX197842Y420146D02*\nX201744Y416244D01*\nX201205Y427944D02*\nX201497D01*\nX214244Y423244D02*\nX215244D01*\nX212744Y421744D02*\nX214244Y423244D01*\nX201497Y427944D02*\nX207697Y421744D01*\nX212744D01*\nX192958Y427824D02*\nX197932D01*\nX198224Y425049D02*\nX199744Y423529D01*\nY423244D02*\nY423529D01*\nX200274Y419744D02*\nX201244D01*\nX192958Y422706D02*\nX197313D01*\nX200274Y419744D01*\nX197932Y427824D02*\nX200411Y425344D01*\nX200614D01*\nX204744Y421214D01*\nY415774D02*\nY421214D01*\nX195070Y406100D02*\nX204744Y415774D01*\nX194800Y406100D02*\nX195070D01*\nX196444Y359232D02*\nY404444D01*\nX201244Y409244D01*\nX196774Y414244D02*\nX198744D01*\nX190244Y404644D02*\nY405900D01*\nX186300Y400700D02*\nX190244Y404644D01*\nX192344Y409814D02*\nX196774Y414244D01*\nX188700Y398700D02*\nX192344Y402344D01*\nY409814D01*\nX255244Y418753D02*\nY422744D01*\nY418753D02*\nX257700Y416297D01*\nY401679D02*\nY416297D01*\nX255244Y399223D02*\nX257700Y401679D01*\nX255244Y395244D02*\nY399223D01*\nX232244Y382744D02*\nX234744D01*\nX226744Y377244D02*\nX232244Y382744D01*\nX201188Y377244D02*\nX226744D01*\nX198544Y379889D02*\nX201188Y377244D01*\nX187087Y417587D02*\nX192958D01*\nX183744Y414244D02*\nX187087Y417587D01*\nX220744Y358244D02*\nX221744D01*\nX217775Y352516D02*\nX221404Y356144D01*\nX222614D01*\nX216408Y353908D02*\nX220744Y358244D01*\nX219167Y351124D02*\nX219291D01*\nX234700Y366533D01*\nY368100D01*\nX222614Y356144D02*\nX227100Y360630D01*\nY364600D01*\nX214992Y355300D02*\nX226244Y366552D01*\nY371244D01*\nX174065Y321665D02*\nX185500D01*\nX141744Y344632D02*\nY346744D01*\nY344632D02*\nX144132Y342244D01*\nX153486D01*\nX174065Y321665D01*\nX128244Y379944D02*\nX142300Y394000D01*\nX128244Y318744D02*\nY379944D01*\nY318744D02*\nX138043Y308945D01*\nX164744D01*\nX256244Y337844D02*\nX268744Y350344D01*\nX272900Y354500D01*\nX252700Y308900D02*\nX256244Y312444D01*\nY337844D01*\nX288300Y318500D02*\nY356400D01*\nX259244Y337244D02*\nX269744Y347744D01*\nX280044D01*\nX283500Y351200D01*\nX258744Y314244D02*\nX264244Y308744D01*\nX278544D01*\nX288300Y318500D01*\nX169000Y337000D02*\nX171744Y334256D01*\nY330744D02*\nY334256D01*\nX371744Y449244D02*\nX376187Y453687D01*\nX377044Y454544D02*\nX386744D01*\nX376187Y453687D02*\nX377044Y454544D01*\nX385244Y439744D02*\nX385244Y439744D01*\nX385244Y432744D02*\nY439744D01*\nX368000Y433800D02*\nX380800Y446600D01*\nX385244Y432744D02*\nX392744Y440244D01*\nX394832D01*\nX400044Y435032D01*\nY423141D02*\nY435032D01*\nY423141D02*\nX407343Y415843D01*\nX396114Y425344D02*\nX414382Y407076D01*\nY404843D02*\nY407076D01*\nX381000Y426744D02*\nX410700Y397044D01*\nX380709Y426744D02*\nX381000D01*\nX410700Y391200D02*\nY397044D01*\nX405244Y425244D02*\nX412244Y418244D01*\nX405244Y425244D02*\nY432744D01*\nX396114Y425344D02*\nY431874D01*\nX422618Y322900D02*\nY324000D01*\nX420218Y320500D02*\nX422618Y322900D01*\nX412600Y320500D02*\nX420218D01*\nX413455Y308945D02*\nX414744D01*\nX409700Y312700D02*\nX413455Y308945D01*\nX395244D02*\nX401045D01*\nX391300Y335800D02*\nX391524D01*\nX392208Y335116D01*\nX384900Y342424D02*\nX391524Y335800D01*\nX360244Y440744D02*\nY447744D01*\nX329344Y426444D02*\nY430100D01*\nX340644Y372344D02*\nX341500D01*\nX325632Y407500D02*\nY408844D01*\nY404900D02*\nY407500D01*\nX324055Y387082D02*\nX324056D01*\nX324031Y387083D02*\nX324055Y387082D01*\nX322992Y387100D02*\nX324031Y387083D01*\nY387100D01*\nX323944Y360244D02*\nY364344D01*\nY359544D02*\nY360244D01*\nX311100Y387100D02*\nX311400D01*\nX311756Y363944D02*\nX312900D01*\nX429400Y412205D02*\nX430364Y411240D01*\nX426583Y415022D02*\nX429400Y412205D01*\nX431900Y411240D02*\nX433824D01*\nX430364D02*\nX431900D01*\nX347144Y453744D02*\nX348644D01*\nX349544Y414044D02*\nX352444D01*\nX348956D02*\nX349544D01*\nX347000Y453744D02*\nX347144D01*\nX344600D02*\nX347000D01*\nX352444Y414044D02*\nX352700D01*\nX346644D02*\nX348956D01*\nX330244Y387744D02*\nX338744D01*\nX380246Y329418D02*\nX381768Y330941D01*\nX380246Y323076D02*\nY329418D01*\nX372414Y315244D02*\nX380246Y323076D01*\nX360744Y315244D02*\nX372414D01*\nX343900Y361244D02*\nX345650D01*\nX356244Y422983D02*\nY448744D01*\nX324031Y385587D02*\nX324056Y387082D01*\nX426583Y415022D02*\nY426681D01*\nX429400Y409705D02*\nY412205D01*\nX364500Y323895D02*\nY338727D01*\nX369241Y343468D01*\nX463500Y361200D02*\nX468300Y356400D01*\nX363987Y348409D02*\nX367779D01*\nX414382Y404843D02*\nX417600D01*\nX413941Y405283D02*\nX414382Y404843D01*\nX331744Y346744D02*\nX335385Y343103D01*\nX364812D01*\nX366500Y344791D01*\nX367779D01*\nX323244Y369356D02*\nY370626D01*\nY369356D02*\nX324031Y368569D01*\nY365901D02*\nY368569D01*\nX368700Y366400D02*\nY398700D01*\nX365500Y321665D02*\nX367425Y323590D01*\nY327875D01*\nX365700Y329600D02*\nX367425Y327875D01*\nX365700Y329600D02*\nY334360D01*\nX372025Y340684D01*\nX347300Y415700D02*\nX348956Y414044D01*\nX347300Y417587D02*\nX349730D01*\nX404628Y345100D02*\nX412600D01*\nX404318Y344791D02*\nX404628Y345100D01*\nX402021Y344791D02*\nX404318D01*\nX328788Y407500D02*\nX329644Y406644D01*\nX430744Y315244D02*\nY331189D01*\nX424533Y337400D02*\nX430744Y331189D01*\nX407090Y337400D02*\nX424533D01*\nX374906Y410200D02*\nX375700D01*\nX373600Y408894D02*\nX374906Y410200D01*\nX373400Y356708D02*\nX374808Y355300D01*\nX374800Y358092D02*\nX376200Y356692D01*\nX311400Y380075D02*\nX311433D01*\nX409700Y312700D02*\nY317300D01*\nX404818Y341400D02*\nX406418Y343000D01*\nX352056Y372344D02*\nX353100Y371300D01*\nX347368Y372344D02*\nX352056D01*\nX354744Y394043D02*\nX359800D01*\nY385300D02*\nY394043D01*\nX342400Y374100D02*\nY379400D01*\nX340644Y372344D02*\nX342400Y374100D01*\nX337920Y372344D02*\nX340644D01*\nX374700Y321400D02*\nY329440D01*\nX378984Y333725D01*\nX342500Y356921D02*\nX343177Y356244D01*\nX342500Y356921D02*\nY371344D01*\nX341500Y372344D02*\nX342500Y371344D01*\nX345044Y346256D02*\nX346000Y345300D01*\nX345044Y346256D02*\nY355044D01*\nX336700D02*\nX345044D01*\nX331300Y360444D02*\nX336700Y355044D01*\nX331300Y360444D02*\nY371185D01*\nX329300Y373185D02*\nX331300Y371185D01*\nX323244Y373185D02*\nX329300D01*\nX372600Y333100D02*\nX372792D01*\nX376200Y336508D01*\nX368900Y332400D02*\nX370500Y334000D01*\nY336376D01*\nX373416Y339292D01*\nX377900Y326186D02*\nY329856D01*\nX380376Y332333D01*\nX384900Y346600D02*\nX386292D01*\nX394992Y355300D01*\nX370000Y348800D02*\nX382700D01*\nX384900Y346600D01*\nX387900Y339200D02*\nX391300Y335800D01*\nX374808Y337900D02*\nX376108Y339200D01*\nX384900Y342424D02*\nY346600D01*\nX431900Y403760D02*\nX433824D01*\nX431100Y404560D02*\nX431900Y403760D01*\nX431100Y404560D02*\nY410440D01*\nX431900Y411240D01*\nX401045Y308945D02*\nX412600Y320500D01*\nX406188Y465800D02*\nX415744Y456244D01*\nX354906Y337000D02*\nX357600D01*\nX358000Y336600D01*\nX334600Y361244D02*\nX339744D01*\nX354700Y394043D02*\nX354744D01*\nX323944Y359544D02*\nX331744Y351744D01*\nX348430Y439958D02*\nX349730D01*\nX346744Y441644D02*\nX348430Y439958D01*\nX352700Y414044D02*\nX353783Y412961D01*\nY410244D02*\nY412961D01*\nX325532Y428544D02*\nY430100D01*\nX326400Y394043D02*\nX338744D01*\nX324057Y387187D02*\nY391700D01*\nX311433Y372201D02*\nX312900D01*\nX316200Y389524D02*\nX317775Y391098D01*\nX346844Y454044D02*\nX347000D01*\nX312244Y432544D02*\nY433844D01*\nX312044Y432344D02*\nX312244Y432544D01*\nX312044Y412344D02*\nX312244D01*\nX324057Y387100D02*\nY387187D01*\nX307200Y391000D02*\nX311100Y387100D01*\nX307200Y391000D02*\nY404900D01*\nX309500Y407200D01*\nX314000D01*\nX316300Y404900D01*\nX325632D01*\nX321244Y426244D02*\nY430244D01*\nX344600Y465444D02*\nX347944D01*\nX329244Y426344D02*\nX329344Y426444D01*\nX317600Y427200D02*\nX320944Y430544D01*\nX309100Y427200D02*\nX317600D01*\nX307200Y425300D02*\nX309100Y427200D01*\nX307200Y409300D02*\nY425300D01*\nY409300D02*\nX309000Y407500D01*\nX317700D01*\nX321044Y410844D01*\nY406544D02*\nY410844D01*\nX376244Y444744D02*\nY448744D01*\nX336556Y428544D02*\nY428600D01*\nX338744Y387744D02*\nX354886D01*\nX379102Y315244D02*\nX395244D01*\nX414602D02*\nX430744D01*\nX344602D02*\nX360744D01*\nX414744Y308945D02*\nX430744D01*\nX379244D02*\nX395244D01*\nX360744D02*\nX379244D01*\nX344744D02*\nX360744D01*\nX324031Y365087D02*\nY365901D01*\nX323944Y365000D02*\nX324031Y365087D01*\nX323944Y364344D02*\nY365000D01*\nX311433Y372201D02*\nY380075D01*\nX365675Y431700D02*\nX369476Y435501D01*\nX347368Y376084D02*\nX353404D01*\nX355244Y374244D01*\nY369296D02*\nY374244D01*\nY369296D02*\nX372025Y352516D01*\nX410157Y334000D02*\nX417697D01*\nX410157Y324157D02*\nX413800D01*\nX413957Y324000D01*\nX417697D01*\nX420400Y410157D02*\nX421483Y411240D01*\nX424376D01*\nX417600Y410157D02*\nX418630D01*\nX421300Y412827D01*\nY419400D01*\nX419543Y421157D02*\nX421300Y419400D01*\nX417600Y421157D02*\nX419543D01*\nX418630Y410157D02*\nX420400D01*\nX365675Y430875D02*\nY431700D01*\nX335056Y428600D02*\nX335112D01*\nX347000Y453888D02*\nY454044D01*\nX360100Y465800D02*\nX405588D01*\nX406188D01*\nX417600Y404843D02*\nX420400D01*\nX421483Y403760D01*\nX424376D01*\nX426300Y390784D02*\nX427100Y389984D01*\nX424376Y403760D02*\nX426300D01*\nX416800Y354900D02*\nX422696Y349004D01*\nX379300Y361944D02*\nX380376Y360867D01*\nX402021Y348409D02*\nX410500D01*\nX432200Y342700D02*\nY398500D01*\nX427500Y403200D02*\nX432200Y398500D01*\nX427500Y403200D02*\nY406500D01*\nX427300Y406700D02*\nX427500Y406500D01*\nX427300Y406700D02*\nY412607D01*\nX423900Y416007D02*\nX427300Y412607D01*\nX423900Y416007D02*\nY417200D01*\nX438744Y396444D02*\nX463500Y421200D01*\nX435100Y370400D02*\nX435256Y370244D01*\nX438567D01*\nX449100Y431200D02*\nX463500D01*\nX448518Y430618D02*\nX449100Y431200D01*\nX435244Y430618D02*\nX448518D01*\nX428921Y376721D02*\nX429100Y376900D01*\nX428921Y373984D02*\nY376721D01*\nX418900Y366044D02*\nY400700D01*\nX452900Y354500D02*\nY385200D01*\nX438567Y370244D02*\nX443444D01*\nX447300Y374100D01*\nY387700D01*\nX448065Y388465D01*\nY391097D01*\nX456000Y399032D01*\nY403700D01*\nX463500Y411200D01*\nX400559Y349732D02*\nX403323Y352496D01*\nX414404D01*\nX426500Y340400D01*\nX435100D01*\nX450733Y356033D01*\nY386900D01*\nX452418Y388585D01*\nX454047D01*\nX461461Y396000D01*\nX466300D01*\nX468300Y394000D01*\nY382100D02*\nY394000D01*\nX467400Y381200D02*\nX468300Y382100D01*\nX463500Y381200D02*\nX467400D01*\nX433824Y407500D02*\nX436500D01*\nY415800D01*\nX430900Y421400D02*\nX436500Y415800D01*\nX430900Y421400D02*\nY436300D01*\nX420600Y446600D02*\nX430900Y436300D01*\nX380800Y446600D02*\nX420600D01*\nX425900Y352900D02*\nX426900Y351900D01*\nY349004D02*\nY351900D01*\nX425500Y366600D02*\nX425596Y366504D01*\nX428921D01*\nX426216Y373984D02*\nX428921D01*\nX423400Y359988D02*\nY371168D01*\nY359988D02*\nX426904Y356484D01*\nX429421D01*\nX427100Y382504D02*\nX429421D01*\nX426100Y381504D02*\nX427100Y382504D01*\nX426100Y380700D02*\nY381504D01*\nX399167Y342076D02*\nX399439D01*\nX401415Y340100D01*\nX408900D01*\nX377361Y430383D02*\nX379244Y428500D01*\nX372958Y430383D02*\nX377361D01*\nX407100Y364600D02*\nX414700Y372200D01*\nX455500Y357100D02*\nY383200D01*\nX463500Y391200D01*\nX425941Y373710D02*\nX428921Y373984D01*\nX423951Y375700D02*\nX425941Y373710D01*\nX423951Y375700D02*\nY387635D01*\nX427100Y389984D01*\nX429421D01*\nX446700Y361800D02*\nX449533Y364633D01*\nY389785D02*\nX455032Y395285D01*\nX439067Y352744D02*\nX441400D01*\nX449533Y360877D01*\nX455032Y395285D02*\nX457585D01*\nX463500Y401200D01*\nX438744Y386244D02*\nX439067D01*\nX335056Y428544D02*\nY428600D01*\nX335112D02*\nX336556D01*\nX312244Y412344D02*\nY413844D01*\nX422696Y349004D02*\nX426900D01*\nX429421D01*\nX311756Y361188D02*\nY363944D01*\nY361188D02*\nX312700Y360244D01*\nX323944D01*\nX312900Y363944D02*\nY372201D01*\nX311400Y380075D02*\nY387100D01*\nX314344Y387244D02*\nX322992Y387100D01*\nX313008Y389524D02*\nX316200D01*\nX324031Y387100D02*\nX324057D01*\nX317775Y391098D02*\nX320488D01*\nX430744Y308900D02*\nX432700D01*\nX324057Y391700D02*\nX326400Y394043D01*\nX338744D02*\nX354700D01*\nY403100D01*\nX360244Y408644D01*\nX360200Y402600D02*\nY430900D01*\nX325632Y407500D02*\nX328788D01*\nX325532Y430100D02*\nX329344D01*\nX360244Y415700D02*\nY430875D01*\nX360200Y430900D02*\nX373800Y444500D01*\nX376108Y339200D02*\nX387900D01*\nX452900Y354500D02*\nX455500Y357100D01*\nX369476Y435501D02*\nX372900D01*\nX380244Y444744D02*\nY448744D01*\nX423400Y371168D02*\nX425941Y373710D01*\nX426216Y373984D01*\nX426300Y390784D02*\nY403760D01*\nX347000Y453744D02*\nY453888D01*\nX344600Y453744D02*\nY465444D01*\nX347300Y415700D02*\nY417587D01*\nX348344Y454044D02*\nX360100Y465800D01*\nX449533Y360877D02*\nY364633D01*\nY389785D01*\nX438744Y382700D02*\nY386244D01*\nY396444D01*\nX342400Y379400D02*\nX345244Y382244D01*\nX356744D01*\nX359800Y385300D01*\nX389424Y360867D02*\nY360924D01*\nX392744Y364244D01*\nY365744D01*\nX401744Y364836D02*\nY365244D01*\nX393600Y356692D02*\nX401744Y364836D01*\nX397744Y366404D02*\nY367244D01*\nX390816Y359475D02*\nX397744Y366404D01*\nX399844Y369344D02*\nX400244Y369744D01*\nX396384Y339292D02*\nX398432Y337244D01*\nX400200D01*\nX393600Y336508D02*\nX396864Y333244D01*\nX400886D01*\nX402300Y331830D01*\nX394992Y337900D02*\nX398148Y334744D01*\nX403244D01*\nX405900Y337400D01*\nX407090D01*\nX386709Y363721D02*\nY365509D01*\nX387744Y366544D01*\nY368744D01*\nX370800Y397300D02*\nX371600D01*\nX374800Y358092D02*\nY406100D01*\nX416800Y354900D02*\nY373070D01*\nX381330Y374300D02*\nX415570D01*\nX416800Y373070D01*\nX383091Y363721D02*\nY370091D01*\nX383244Y370244D01*\nX383744D01*\nX376444Y359232D02*\nX377592Y358084D01*\nX377644Y363599D02*\nX380376Y360867D01*\nX377644Y363599D02*\nY370614D01*\nX381330Y374300D01*\nX363244Y367244D02*\nY367941D01*\nX352823Y378362D02*\nX363244Y367941D01*\nX343900Y361244D02*\nY377826D01*\nX344437Y378362D01*\nX352823D01*\nX358744Y380744D02*\nX367244Y372244D01*\nX396384Y353908D02*\nX396408D01*\nX370744Y356580D02*\nX373416Y353908D01*\nX370744Y356580D02*\nY360944D01*\nX369744Y365244D02*\nY365356D01*\nX368700Y366400D02*\nX369744Y365356D01*\nX367244Y361244D02*\nY372244D01*\nX370744Y360944D02*\nX372244Y362444D01*\nY396656D01*\nX371600Y397300D02*\nX372244Y396656D01*\nX373600Y359944D02*\nY408894D01*\nX373400Y359744D02*\nX373600Y359944D01*\nX373400Y356708D02*\nY359744D01*\nX379744Y364283D02*\nX381768Y362259D01*\nX379744Y364283D02*\nY368244D01*\nX409571Y324744D02*\nX410157Y324157D01*\nX388032Y330941D02*\nX393229Y325744D01*\nX386709Y329479D02*\nX391645Y324544D01*\nX401901Y325744D02*\nX410157Y334000D01*\nX391645Y324544D02*\nX402398D01*\nX393229Y325744D02*\nX401901D01*\nX402398Y324544D02*\nX402598Y324744D01*\nX409571D01*\nX389424Y332333D02*\nX393012Y328744D01*\nX393244D01*\nY328244D02*\nY328744D01*\nX394744Y322244D02*\nX395244Y322744D01*\nX394744Y322244D02*\nY322244D01*\nX395244Y315244D02*\nY322744D01*\nX422618Y324000D02*\nY334000D01*\nX372600Y329500D02*\nY330124D01*\nX377592Y335116D01*\nX323244Y380862D02*\nX330362D01*\nX332244Y382744D01*\nX339087D01*\nX390816Y333725D02*\nX393696Y330844D01*\nX397144D01*\nX397744Y330244D01*\nX400559Y343468D02*\nX402627Y341400D01*\nX404818D01*\nX392208Y358084D02*\nX399644Y365520D01*\nY366114D01*\nX399844Y366314D01*\nY369344D01*\nX343177Y356244D02*\nX362729D01*\nX369241Y349732D01*\nX372958Y432942D02*\nX377046D01*\nX380444Y429544D01*\nX407343Y415843D02*\nX417600D01*\nX380444Y428706D02*\nY429544D01*\nY428706D02*\nX381206Y427944D01*\nX379244Y428208D02*\nY428500D01*\nY428208D02*\nX380709Y426744D01*\nX378224Y425049D02*\nY425265D01*\nX372958D02*\nX378224D01*\nX366300Y380600D02*\nY400700D01*\nX372958Y420146D02*\nX377842D01*\nX381744Y416244D02*\nX382244D01*\nX377842Y420146D02*\nX381744Y416244D01*\nX381206Y427944D02*\nX381497D01*\nX394244Y423244D02*\nX395244D01*\nX392744Y421744D02*\nX394244Y423244D01*\nX381497Y427944D02*\nX387697Y421744D01*\nX392744D01*\nX372958Y427824D02*\nX377932D01*\nX378224Y425049D02*\nX379744Y423529D01*\nY423244D02*\nY423529D01*\nX380274Y419744D02*\nX381244D01*\nX372958Y422706D02*\nX377313D01*\nX380274Y419744D01*\nX377932Y427824D02*\nX380411Y425344D01*\nX380614D01*\nX384744Y421214D01*\nY415774D02*\nY421214D01*\nX375070Y406100D02*\nX384744Y415774D01*\nX374800Y406100D02*\nX375070D01*\nX376444Y359232D02*\nY404444D01*\nX381244Y409244D01*\nX376774Y414244D02*\nX378744D01*\nX370244Y404644D02*\nY405900D01*\nX366300Y400700D02*\nX370244Y404644D01*\nX372344Y409814D02*\nX376774Y414244D01*\nX368700Y398700D02*\nX372344Y402344D01*\nY409814D01*\nX435244Y418753D02*\nY422744D01*\nY418753D02*\nX437700Y416297D01*\nY401679D02*\nY416297D01*\nX435244Y399223D02*\nX437700Y401679D01*\nX435244Y395244D02*\nY399223D01*\nX412244Y382744D02*\nX414744D01*\nX406744Y377244D02*\nX412244Y382744D01*\nX381189Y377244D02*\nX406744D01*\nX378544Y379889D02*\nX381189Y377244D01*\nX367087Y417587D02*\nX372958D01*\nX363744Y414244D02*\nX367087Y417587D01*\nX400744Y358244D02*\nX401744D01*\nX397775Y352516D02*\nX401404Y356144D01*\nX402614D01*\nX396408Y353908D02*\nX400744Y358244D01*\nX399167Y351124D02*\nX399291D01*\nX414700Y366533D01*\nY368100D01*\nX402614Y356144D02*\nX407100Y360630D01*\nY364600D01*\nX394992Y355300D02*\nX406244Y366552D01*\nY371244D01*\nX354065Y321665D02*\nX365500D01*\nX321744Y344632D02*\nY346744D01*\nY344632D02*\nX324132Y342244D01*\nX333486D01*\nX354065Y321665D01*\nX308244Y379944D02*\nX322300Y394000D01*\nX308244Y318744D02*\nY379944D01*\nY318744D02*\nX318043Y308945D01*\nX344744D01*\nX436244Y337844D02*\nX448744Y350344D01*\nX452900Y354500D01*\nX432700Y308900D02*\nX436244Y312444D01*\nY337844D01*\nX468300Y318500D02*\nY356400D01*\nX439244Y337244D02*\nX449744Y347744D01*\nX460044D01*\nX463500Y351200D01*\nX438744Y314244D02*\nX444244Y308744D01*\nX458544D01*\nX468300Y318500D01*\nX349000Y337000D02*\nX351744Y334256D01*\nY330744D02*\nY334256D01*\nD39*\nX184244Y273744D02*\nX184301Y273687D01*\nX193044D02*\nX196187D01*\nX205187D02*\nX205244Y273744D01*\nX132244Y233844D02*\nX135644Y237244D01*\nX156844D01*\nX133644Y255244D02*\nX164044D01*\nX364244Y273744D02*\nX364301Y273687D01*\nX373044D02*\nX376187D01*\nX385187D02*\nX385244Y273744D01*\nX312244Y233844D02*\nX315644Y237244D01*\nX336844D01*\nX313644Y255244D02*\nX344044D01*\nX184244Y453744D02*\nX184301Y453687D01*\nX193044D02*\nX196187D01*\nX205187D02*\nX205244Y453744D01*\nX132244Y413844D02*\nX135644Y417244D01*\nX156844D01*\nX133644Y435244D02*\nX164044D01*\nX364244Y453744D02*\nX364301Y453687D01*\nX373044D02*\nX376187D01*\nX385187D02*\nX385244Y453744D01*\nX312244Y413844D02*\nX315644Y417244D01*\nX336844D01*\nX313644Y435244D02*\nX344044D01*\nD40*\nX184301Y273687D02*\nX193044D01*\nX196187D02*\nX205187D01*\nX207744Y276244D02*\nX215744D01*\nX221244D01*\nX169730Y255501D02*\nY259958D01*\nX156895Y250383D02*\nX169730D01*\nX364301Y273687D02*\nX373044D01*\nX376187D02*\nX385187D01*\nX387744Y276244D02*\nX395744D01*\nX401244D01*\nX349730Y255501D02*\nY259958D01*\nX336895Y250383D02*\nX349730D01*\nX184301Y453687D02*\nX193044D01*\nX196187D02*\nX205187D01*\nX207744Y456244D02*\nX215744D01*\nX221244D01*\nX169730Y435501D02*\nY439958D01*\nX156895Y430383D02*\nX169730D01*\nX364301Y453687D02*\nX373044D01*\nX376187D02*\nX385187D01*\nX387744Y456244D02*\nX395744D01*\nX401244D01*\nX349730Y435501D02*\nY439958D01*\nX336895Y430383D02*\nX349730D01*\nD41*\nX207244Y276744D02*\nX207744Y276244D01*\nX387244Y276744D02*\nX387744Y276244D01*\nX207244Y456744D02*\nX207744Y456244D01*\nX387244Y456744D02*\nX387744Y456244D01*\nD42*\nX165124Y237974D02*\nX165574D01*\nX162858Y243617D02*\nX164506Y245265D01*\nX169730D01*\nX165694Y242706D02*\nX169730D01*\nX160694Y237705D02*\nX165694Y242706D01*\nX166246Y240146D02*\nX169730D01*\nX165574Y239474D02*\nX166246Y240146D01*\nX156656Y228844D02*\nX160694Y232882D01*\nY237705D01*\nX156844Y237244D02*\nX162858Y243258D01*\nY243617D01*\nX157344Y241944D02*\nX161165Y245765D01*\nY247265D01*\nX161724Y247824D01*\nX165574Y237974D02*\nY239474D01*\nX132044Y242344D02*\nX132444Y241944D01*\nX161724Y247824D02*\nX169730D01*\nX164044Y255244D02*\nX166346Y252942D01*\nX169730D01*\nX345124Y237974D02*\nX345574D01*\nX342858Y243617D02*\nX344506Y245265D01*\nX349730D01*\nX345694Y242706D02*\nX349730D01*\nX340694Y237705D02*\nX345694Y242706D01*\nX346246Y240146D02*\nX349730D01*\nX345574Y239474D02*\nX346246Y240146D01*\nX336656Y228844D02*\nX340694Y232882D01*\nY237705D01*\nX336844Y237244D02*\nX342858Y243258D01*\nY243617D01*\nX337344Y241944D02*\nX341165Y245765D01*\nY247265D01*\nX341724Y247824D01*\nX345574Y237974D02*\nY239474D01*\nX312044Y242344D02*\nX312444Y241944D01*\nX341724Y247824D02*\nX349730D01*\nX344044Y255244D02*\nX346346Y252942D01*\nX349730D01*\nX165124Y417974D02*\nX165574D01*\nX162858Y423617D02*\nX164506Y425265D01*\nX169730D01*\nX165694Y422706D02*\nX169730D01*\nX160694Y417705D02*\nX165694Y422706D01*\nX166246Y420146D02*\nX169730D01*\nX165574Y419474D02*\nX166246Y420146D01*\nX156656Y408844D02*\nX160694Y412882D01*\nY417705D01*\nX156844Y417244D02*\nX162858Y423258D01*\nY423617D01*\nX157344Y421944D02*\nX161165Y425765D01*\nY427265D01*\nX161724Y427824D01*\nX165574Y417974D02*\nY419474D01*\nX132044Y422344D02*\nX132444Y421944D01*\nX161724Y427824D02*\nX169730D01*\nX164044Y435244D02*\nX166346Y432942D01*\nX169730D01*\nX345124Y417974D02*\nX345574D01*\nX342858Y423617D02*\nX344506Y425265D01*\nX349730D01*\nX345694Y422706D02*\nX349730D01*\nX340694Y417705D02*\nX345694Y422706D01*\nX346246Y420146D02*\nX349730D01*\nX345574Y419474D02*\nX346246Y420146D01*\nX336656Y408844D02*\nX340694Y412882D01*\nY417705D01*\nX336844Y417244D02*\nX342858Y423258D01*\nY423617D01*\nX337344Y421944D02*\nX341165Y425765D01*\nY427265D01*\nX341724Y427824D01*\nX345574Y417974D02*\nY419474D01*\nX312044Y422344D02*\nX312444Y421944D01*\nX341724Y427824D02*\nX349730D01*\nX344044Y435244D02*\nX346346Y432942D01*\nX349730D01*\nD43*\nX167368Y188604D02*\nX173153D01*\nX190633Y171124D01*\nX155701Y198303D02*\nX157920Y196084D01*\nX143244Y198303D02*\nX155701D01*\nX143244Y195744D02*\nX148744D01*\nX155884Y188604D01*\nX157920D01*\nX167320Y328992D02*\nX170652D01*\nX168986D01*\nY323994D01*\nX173151D02*\nX174817D01*\nX175650Y324827D01*\nY326493D01*\nX174817Y327326D01*\nX173151D01*\nX172318Y326493D01*\nY324827D01*\nX173151Y323994D01*\nX177316Y322328D02*\nY327326D01*\nX179816D01*\nX180649Y326493D01*\nY324827D01*\nX179816Y323994D01*\nX177316D01*\nX190646Y328159D02*\nX189812Y328992D01*\nX188146D01*\nX187313Y328159D01*\nY324827D01*\nX188146Y323994D01*\nX189812D01*\nX190646Y324827D01*\nX193145Y323994D02*\nX194811D01*\nX195644Y324827D01*\nY326493D01*\nX194811Y327326D01*\nX193145D01*\nX192312Y326493D01*\nY324827D01*\nX193145Y323994D01*\nX197310Y322328D02*\nY327326D01*\nX199809D01*\nX200642Y326493D01*\nY324827D01*\nX199809Y323994D01*\nX197310D01*\nX202308Y322328D02*\nY327326D01*\nX204807D01*\nX205641Y326493D01*\nY324827D01*\nX204807Y323994D01*\nX202308D01*\nX209806D02*\nX208140D01*\nX207307Y324827D01*\nY326493D01*\nX208140Y327326D01*\nX209806D01*\nX210639Y326493D01*\nY325660D01*\nX207307D01*\nX212305Y327326D02*\nY323994D01*\nY325660D01*\nX213138Y326493D01*\nX213971Y327326D01*\nX214804D01*\nX347368Y188604D02*\nX353153D01*\nX370633Y171124D01*\nX335701Y198303D02*\nX337920Y196084D01*\nX323244Y198303D02*\nX335701D01*\nX323244Y195744D02*\nX328744D01*\nX335884Y188604D01*\nX337920D01*\nX347320Y328992D02*\nX350652D01*\nX348986D01*\nY323994D01*\nX353151D02*\nX354817D01*\nX355650Y324827D01*\nY326493D01*\nX354817Y327326D01*\nX353151D01*\nX352318Y326493D01*\nY324827D01*\nX353151Y323994D01*\nX357316Y322328D02*\nY327326D01*\nX359816D01*\nX360649Y326493D01*\nY324827D01*\nX359816Y323994D01*\nX357316D01*\nX370645Y328159D02*\nX369812Y328992D01*\nX368146D01*\nX367313Y328159D01*\nY324827D01*\nX368146Y323994D01*\nX369812D01*\nX370645Y324827D01*\nX373145Y323994D02*\nX374811D01*\nX375644Y324827D01*\nY326493D01*\nX374811Y327326D01*\nX373145D01*\nX372312Y326493D01*\nY324827D01*\nX373145Y323994D01*\nX377310Y322328D02*\nY327326D01*\nX379809D01*\nX380642Y326493D01*\nY324827D01*\nX379809Y323994D01*\nX377310D01*\nX382308Y322328D02*\nY327326D01*\nX384807D01*\nX385641Y326493D01*\nY324827D01*\nX384807Y323994D01*\nX382308D01*\nX389806D02*\nX388140D01*\nX387307Y324827D01*\nY326493D01*\nX388140Y327326D01*\nX389806D01*\nX390639Y326493D01*\nY325660D01*\nX387307D01*\nX392305Y327326D02*\nY323994D01*\nY325660D01*\nX393138Y326493D01*\nX393971Y327326D01*\nX394804D01*\nX167368Y368604D02*\nX173153D01*\nX190633Y351124D01*\nX155701Y378303D02*\nX157920Y376084D01*\nX143244Y378303D02*\nX155701D01*\nX143244Y375744D02*\nX148744D01*\nX155884Y368604D01*\nX157920D01*\nX167320Y508992D02*\nX170652D01*\nX168986D01*\nY503994D01*\nX173151D02*\nX174817D01*\nX175650Y504827D01*\nY506493D01*\nX174817Y507326D01*\nX173151D01*\nX172318Y506493D01*\nY504827D01*\nX173151Y503994D01*\nX177316Y502328D02*\nY507326D01*\nX179816D01*\nX180649Y506493D01*\nY504827D01*\nX179816Y503994D01*\nX177316D01*\nX190646Y508159D02*\nX189812Y508992D01*\nX188146D01*\nX187313Y508159D01*\nY504827D01*\nX188146Y503994D01*\nX189812D01*\nX190646Y504827D01*\nX193145Y503994D02*\nX194811D01*\nX195644Y504827D01*\nY506493D01*\nX194811Y507326D01*\nX193145D01*\nX192312Y506493D01*\nY504827D01*\nX193145Y503994D01*\nX197310Y502328D02*\nY507326D01*\nX199809D01*\nX200642Y506493D01*\nY504827D01*\nX199809Y503994D01*\nX197310D01*\nX202308Y502328D02*\nY507326D01*\nX204807D01*\nX205641Y506493D01*\nY504827D01*\nX204807Y503994D01*\nX202308D01*\nX209806D02*\nX208140D01*\nX207307Y504827D01*\nY506493D01*\nX208140Y507326D01*\nX209806D01*\nX210639Y506493D01*\nY505660D01*\nX207307D01*\nX212305Y507326D02*\nY503994D01*\nY505660D01*\nX213138Y506493D01*\nX213971Y507326D01*\nX214804D01*\nX347368Y368604D02*\nX353153D01*\nX370633Y351124D01*\nX335701Y378303D02*\nX337920Y376084D01*\nX323244Y378303D02*\nX335701D01*\nX323244Y375744D02*\nX328744D01*\nX335884Y368604D01*\nX337920D01*\nX347320Y508992D02*\nX350652D01*\nX348986D01*\nY503994D01*\nX353151D02*\nX354817D01*\nX355650Y504827D01*\nY506493D01*\nX354817Y507326D01*\nX353151D01*\nX352318Y506493D01*\nY504827D01*\nX353151Y503994D01*\nX357316Y502328D02*\nY507326D01*\nX359816D01*\nX360649Y506493D01*\nY504827D01*\nX359816Y503994D01*\nX357316D01*\nX370645Y508159D02*\nX369812Y508992D01*\nX368146D01*\nX367313Y508159D01*\nY504827D01*\nX368146Y503994D01*\nX369812D01*\nX370645Y504827D01*\nX373145Y503994D02*\nX374811D01*\nX375644Y504827D01*\nY506493D01*\nX374811Y507326D01*\nX373145D01*\nX372312Y506493D01*\nY504827D01*\nX373145Y503994D01*\nX377310Y502328D02*\nY507326D01*\nX379809D01*\nX380642Y506493D01*\nY504827D01*\nX379809Y503994D01*\nX377310D01*\nX382308Y502328D02*\nY507326D01*\nX384807D01*\nX385641Y506493D01*\nY504827D01*\nX384807Y503994D01*\nX382308D01*\nX389806D02*\nX388140D01*\nX387307Y504827D01*\nY506493D01*\nX388140Y507326D01*\nX389806D01*\nX390639Y506493D01*\nY505660D01*\nX387307D01*\nX392305Y507326D02*\nY503994D01*\nY505660D01*\nX393138Y506493D01*\nX393971Y507326D01*\nX394804D01*\nD44*\nX163344Y236194D02*\nX165124Y237974D01*\nX163344Y226344D02*\nY236194D01*\nX132444Y241944D02*\nX157344D01*\nX132044Y222344D02*\nX159344D01*\nX163344Y226344D01*\nX343344Y236194D02*\nX345124Y237974D01*\nX343344Y226344D02*\nY236194D01*\nX312444Y241944D02*\nX337344D01*\nX312044Y222344D02*\nX339344D01*\nX343344Y226344D01*\nX163344Y416194D02*\nX165124Y417974D01*\nX163344Y406344D02*\nY416194D01*\nX132444Y421944D02*\nX157344D01*\nX132044Y402344D02*\nX159344D01*\nX163344Y406344D01*\nX343344Y416194D02*\nX345124Y417974D01*\nX343344Y406344D02*\nY416194D01*\nX312444Y421944D02*\nX337344D01*\nX312044Y402344D02*\nX339344D01*\nX343344Y406344D01*\nD45*\nX169271Y239687D02*\nX169730Y240146D01*\nX167151Y239687D02*\nX169271D01*\nX132244Y253844D02*\nX133644Y255244D01*\nX349271Y239687D02*\nX349730Y240146D01*\nX347151Y239687D02*\nX349271D01*\nX312244Y253844D02*\nX313644Y255244D01*\nX169271Y419687D02*\nX169730Y420146D01*\nX167151Y419687D02*\nX169271D01*\nX132244Y433844D02*\nX133644Y435244D01*\nX349271Y419687D02*\nX349730Y420146D01*\nX347151Y419687D02*\nX349271D01*\nX312244Y433844D02*\nX313644Y435244D01*\nD46*\nX168344Y285844D02*\nX225544D01*\nX168344Y274044D02*\nY285844D01*\nX167944Y285444D02*\nX168344Y285844D01*\nX166844Y274044D02*\nX167000Y273888D01*\nX167144Y273744D01*\nX225544Y285844D02*\nX225588Y285800D01*\nX235444Y275944D02*\nX236844Y274544D01*\nX235444Y275944D02*\nX235444Y275944D01*\nX225588Y285800D02*\nX235444Y275944D01*\nX348344Y285844D02*\nX405544D01*\nX348344Y274044D02*\nY285844D01*\nX347944Y285444D02*\nX348344Y285844D01*\nX346844Y274044D02*\nX347000Y273888D01*\nX347144Y273744D01*\nX405544Y285844D02*\nX405588Y285800D01*\nX415444Y275944D02*\nX416844Y274544D01*\nX415444Y275944D02*\nX415444Y275944D01*\nX405588Y285800D02*\nX415444Y275944D01*\nX168344Y465844D02*\nX225544D01*\nX168344Y454044D02*\nY465844D01*\nX167944Y465444D02*\nX168344Y465844D01*\nX166844Y454044D02*\nX167000Y453888D01*\nX167144Y453744D01*\nX225544Y465844D02*\nX225588Y465800D01*\nX235444Y455944D02*\nX236844Y454544D01*\nX235444Y455944D02*\nX235444Y455944D01*\nX225588Y465800D02*\nX235444Y455944D01*\nX348344Y465844D02*\nX405544D01*\nX348344Y454044D02*\nY465844D01*\nX347944Y465444D02*\nX348344Y465844D01*\nX346844Y454044D02*\nX347000Y453888D01*\nX347144Y453744D01*\nX405544Y465844D02*\nX405588Y465800D01*\nX415444Y455944D02*\nX416844Y454544D01*\nX415444Y455944D02*\nX415444Y455944D01*\nX405588Y465800D02*\nX415444Y455944D01*\nD47*\nX155056Y248544D02*\nX155112Y248600D01*\nX156895Y250383D01*\nX335056Y248544D02*\nX335112Y248600D01*\nX336895Y250383D01*\nX155056Y428544D02*\nX155112Y428600D01*\nX156895Y430383D01*\nX335056Y428544D02*\nX335112Y428600D01*\nX336895Y430383D01*\nD48*\nX167144Y262544D02*\nY273744D01*\nX347144Y262544D02*\nY273744D01*\nX167144Y442544D02*\nY453744D01*\nX347144Y442544D02*\nY453744D01*\nD49*\nX125000Y260000D02*\nD03*\nY265000D02*\nD03*\nY255000D02*\nD03*\nY250000D02*\nD03*\nY245000D02*\nD03*\nY240000D02*\nD03*\nX124600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX290600Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX305100Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX291400Y229800D02*\nD03*\nY234800D02*\nD03*\nY239800D02*\nD03*\nY244800D02*\nD03*\nY254800D02*\nD03*\nY249800D02*\nD03*\nX304800Y229300D02*\nD03*\nY234300D02*\nD03*\nY239300D02*\nD03*\nY244300D02*\nD03*\nY254300D02*\nD03*\nY249300D02*\nD03*\nX125200Y409200D02*\nD03*\nY414200D02*\nD03*\nY419200D02*\nD03*\nY424200D02*\nD03*\nY434200D02*\nD03*\nY429200D02*\nD03*\nX291200Y338300D02*\nD03*\nY343300D02*\nD03*\nY348300D02*\nD03*\nY353300D02*\nD03*\nY363300D02*\nD03*\nY358300D02*\nD03*\nX291000Y404100D02*\nD03*\nY409100D02*\nD03*\nY414100D02*\nD03*\nY419100D02*\nD03*\nY429100D02*\nD03*\nY424100D02*\nD03*\nX304900Y404500D02*\nD03*\nY409500D02*\nD03*\nY414500D02*\nD03*\nY419500D02*\nD03*\nY429500D02*\nD03*\nY424500D02*\nD03*\nX304700Y338200D02*\nD03*\nY343200D02*\nD03*\nY348200D02*\nD03*\nY353200D02*\nD03*\nY363200D02*\nD03*\nY358200D02*\nD03*\nX471200Y401400D02*\nD03*\nY406400D02*\nD03*\nY411400D02*\nD03*\nY416400D02*\nD03*\nY426400D02*\nD03*\nY421400D02*\nD03*\nX471600Y339500D02*\nD03*\nY344500D02*\nD03*\nY349500D02*\nD03*\nY354500D02*\nD03*\nY364500D02*\nD03*\nY359500D02*\nD03*\nY216100D02*\nD03*\nY221100D02*\nD03*\nY226100D02*\nD03*\nY231100D02*\nD03*\nY241100D02*\nD03*\nY236100D02*\nD03*\nX470600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX443700Y124400D02*\nD03*\nX438700D02*\nD03*\nX433700D02*\nD03*\nX428700D02*\nD03*\nX418700D02*\nD03*\nX423700D02*\nD03*\nX357000Y124000D02*\nD03*\nX352000D02*\nD03*\nX347000D02*\nD03*\nX342000D02*\nD03*\nX332000D02*\nD03*\nX337000D02*\nD03*\nX360500Y289900D02*\nD03*\nX355500D02*\nD03*\nX350500D02*\nD03*\nX345500D02*\nD03*\nX335500D02*\nD03*\nX340500D02*\nD03*\nX432500Y290100D02*\nD03*\nX427500D02*\nD03*\nX422500D02*\nD03*\nX417500D02*\nD03*\nX407500D02*\nD03*\nX412500D02*\nD03*\nX431400Y303700D02*\nD03*\nX426400D02*\nD03*\nX421400D02*\nD03*\nX416400D02*\nD03*\nX406400D02*\nD03*\nX411400D02*\nD03*\nX360600Y304500D02*\nD03*\nX355600D02*\nD03*\nX350600D02*\nD03*\nX345600D02*\nD03*\nX335600D02*\nD03*\nX340600D02*\nD03*\nX365000Y469600D02*\nD03*\nX360000D02*\nD03*\nX355000D02*\nD03*\nX350000D02*\nD03*\nX340000D02*\nD03*\nX345000D02*\nD03*\nX435000D02*\nD03*\nX430000D02*\nD03*\nX425000D02*\nD03*\nX420000D02*\nD03*\nX410000D02*\nD03*\nX415000D02*\nD03*\nX252600D02*\nD03*\nX247600D02*\nD03*\nX242600D02*\nD03*\nX237600D02*\nD03*\nX227600D02*\nD03*\nX232600D02*\nD03*\nX183200Y469800D02*\nD03*\nX178200D02*\nD03*\nX173200D02*\nD03*\nX168200D02*\nD03*\nX158200D02*\nD03*\nX163200D02*\nD03*\nX175500Y303900D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX160500D02*\nD03*\nX150500D02*\nD03*\nX155500D02*\nD03*\nX175700Y290100D02*\nD03*\nX170700D02*\nD03*\nX165700D02*\nD03*\nX160700D02*\nD03*\nX150700D02*\nD03*\nX155700D02*\nD03*\nX260900Y303300D02*\nD03*\nX255900D02*\nD03*\nX250900D02*\nD03*\nX245900D02*\nD03*\nX235900D02*\nD03*\nX240900D02*\nD03*\nX261100Y290100D02*\nD03*\nX256100D02*\nD03*\nX251100D02*\nD03*\nX246100D02*\nD03*\nX236100D02*\nD03*\nX241100D02*\nD03*\nX261300Y123800D02*\nD03*\nX256300D02*\nD03*\nX251300D02*\nD03*\nX246300D02*\nD03*\nX236300D02*\nD03*\nX241300D02*\nD03*\nX180500Y124000D02*\nD03*\nX175500D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX155500D02*\nD03*\nX160500D02*\nD03*\nX125100Y351700D02*\nD03*\nY356700D02*\nD03*\nY346700D02*\nD03*\nY341700D02*\nD03*\nY336700D02*\nD03*\nY331700D02*\nD03*\nD50*\nX147744Y146744D02*\nD03*\nX269791D02*\nD03*\nY268791D02*\nD03*\nX147744D02*\nD03*\nX327744Y146744D02*\nD03*\nX449791D02*\nD03*\nY268791D02*\nD03*\nX327744D02*\nD03*\nX147744Y326744D02*\nD03*\nX269791D02*\nD03*\nY448791D02*\nD03*\nX147744D02*\nD03*\nX327744Y326744D02*\nD03*\nX449791D02*\nD03*\nY448791D02*\nD03*\nX327744D02*\nD03*\nD51*\nX133008Y181964D02*\nD03*\nY209524D02*\nD03*\nX313008Y181964D02*\nD03*\nY209524D02*\nD03*\nX133008Y361964D02*\nD03*\nY389524D02*\nD03*\nX313008Y361964D02*\nD03*\nY389524D02*\nD03*\nD52*\nX144031Y185901D02*\nD03*\nY205587D02*\nD03*\nX324031Y185901D02*\nD03*\nY205587D02*\nD03*\nX144031Y365901D02*\nD03*\nY385587D02*\nD03*\nX324031Y365901D02*\nD03*\nY385587D02*\nD03*\nD53*\nX132044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX235244Y252744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX312044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX415244Y252744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX132044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX235244Y432744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nX312044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX415244Y432744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nD54*\nX132044Y252344D02*\nD03*\nX312044D02*\nD03*\nX132044Y432344D02*\nD03*\nX312044D02*\nD03*\nD55*\nX141744Y166744D02*\nD03*\nY171744D02*\nD03*\nX146744Y166744D02*\nD03*\nY171744D02*\nD03*\nX151744Y166744D02*\nD03*\nY171744D02*\nD03*\nX156744Y166744D02*\nD03*\nY171744D02*\nD03*\nX161744Y166744D02*\nD03*\nX321744D02*\nD03*\nY171744D02*\nD03*\nX326744Y166744D02*\nD03*\nY171744D02*\nD03*\nX331744Y166744D02*\nD03*\nY171744D02*\nD03*\nX336744Y166744D02*\nD03*\nY171744D02*\nD03*\nX341744Y166744D02*\nD03*\nX141744Y346744D02*\nD03*\nY351744D02*\nD03*\nX146744Y346744D02*\nD03*\nY351744D02*\nD03*\nX151744Y346744D02*\nD03*\nY351744D02*\nD03*\nX156744Y346744D02*\nD03*\nY351744D02*\nD03*\nX161744Y346744D02*\nD03*\nX321744D02*\nD03*\nY351744D02*\nD03*\nX326744Y346744D02*\nD03*\nY351744D02*\nD03*\nX331744Y346744D02*\nD03*\nY351744D02*\nD03*\nX336744Y346744D02*\nD03*\nY351744D02*\nD03*\nX341744Y346744D02*\nD03*\nD56*\nX161744Y171744D02*\nD03*\nX341744D02*\nD03*\nX161744Y351744D02*\nD03*\nX341744D02*\nD03*\nD57*\nX205244Y252744D02*\nD03*\nX283500Y161200D02*\nD03*\nX385244Y252744D02*\nD03*\nX463500Y161200D02*\nD03*\nX205244Y432744D02*\nD03*\nX283500Y341200D02*\nD03*\nX385244Y432744D02*\nD03*\nX463500Y341200D02*\nD03*\nD58*\nX235744Y276244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nX235744Y456244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nD59*\nX150244Y207744D02*\nD03*\nX249400Y229705D02*\nD03*\nX184500Y143895D02*\nD03*\nX190800Y217300D02*\nD03*\nX183987Y168409D02*\nD03*\nX233941Y225283D02*\nD03*\nX232600Y165100D02*\nD03*\nX195700Y230200D02*\nD03*\nX186300Y200600D02*\nD03*\nX226418Y163000D02*\nD03*\nX173100Y191300D02*\nD03*\nX194700Y141400D02*\nD03*\nX166000Y165300D02*\nD03*\nX192600Y153100D02*\nD03*\nX188900Y152400D02*\nD03*\nX197900Y146186D02*\nD03*\nX192600Y149500D02*\nD03*\nX178000Y156600D02*\nD03*\nX154600Y181244D02*\nD03*\nX141244Y246244D02*\nD03*\nX141044Y226544D02*\nD03*\nX149244Y246344D02*\nD03*\nX149644Y226644D02*\nD03*\nX172444Y234044D02*\nD03*\nX166644D02*\nD03*\nX166744Y261644D02*\nD03*\nX167044Y268444D02*\nD03*\nX166644Y264944D02*\nD03*\nX169544Y234044D02*\nD03*\nX180244Y260744D02*\nD03*\nX188244D02*\nD03*\nX196244Y264744D02*\nD03*\nX176244Y268744D02*\nD03*\nX192244D02*\nD03*\nX196244D02*\nD03*\nX200244Y264744D02*\nD03*\nX230500Y168409D02*\nD03*\nX252200Y162700D02*\nD03*\nX243900Y237200D02*\nD03*\nX258744Y202700D02*\nD03*\nX255100Y190400D02*\nD03*\nX249100Y196900D02*\nD03*\nX238900Y220700D02*\nD03*\nY186044D02*\nD03*\nX234700Y188100D02*\nD03*\nX272900Y205200D02*\nD03*\nX245900Y172900D02*\nD03*\nX245500Y186600D02*\nD03*\nX246100Y200700D02*\nD03*\nX228900Y160100D02*\nD03*\nX230700Y211200D02*\nD03*\nX234700Y192200D02*\nD03*\nX266700Y181800D02*\nD03*\nX175244Y202244D02*\nD03*\nX159087Y202744D02*\nD03*\nX212744Y185744D02*\nD03*\nX220244Y189744D02*\nD03*\nX221744Y185244D02*\nD03*\nX217744Y187244D02*\nD03*\nY150244D02*\nD03*\nX222300Y151830D02*\nD03*\nX220200Y157244D02*\nD03*\nX207744Y188744D02*\nD03*\nX203744Y178244D02*\nD03*\nX224400Y227244D02*\nD03*\nX203744Y190244D02*\nD03*\nX199744Y188244D02*\nD03*\nX183244Y187244D02*\nD03*\nX187244Y181244D02*\nD03*\nX178744Y200744D02*\nD03*\nX202400Y165244D02*\nD03*\nX189744Y185244D02*\nD03*\nX213244Y148744D02*\nD03*\nX214744Y142244D02*\nD03*\nX242618Y148744D02*\nD03*\nX215244Y243244D02*\nD03*\nX201244Y239744D02*\nD03*\nX202244Y236244D02*\nD03*\nX199744Y243244D02*\nD03*\nX201244Y229244D02*\nD03*\nX198744Y234244D02*\nD03*\nX190244Y225900D02*\nD03*\nX232244Y238244D02*\nD03*\nX255244Y215244D02*\nD03*\nX234744Y202744D02*\nD03*\nX198544Y199889D02*\nD03*\nX141244Y232244D02*\nD03*\nX150244D02*\nD03*\nX141244Y251244D02*\nD03*\nX182744Y256744D02*\nD03*\nX180244Y268744D02*\nD03*\nX184244Y264744D02*\nD03*\nX176744Y236744D02*\nD03*\nX186244Y236650D02*\nD03*\nX188244Y234244D02*\nD03*\nY230744D02*\nD03*\nX183744D02*\nD03*\nY225244D02*\nD03*\nX192244Y260744D02*\nD03*\nX178744Y234244D02*\nD03*\nX183744D02*\nD03*\nX185744Y227744D02*\nD03*\nX172744Y225244D02*\nD03*\nX168744D02*\nD03*\nX181744Y221244D02*\nD03*\nX140744Y217244D02*\nD03*\nX136244Y260244D02*\nD03*\nY269244D02*\nD03*\nX135744Y277244D02*\nD03*\nX143744Y283744D02*\nD03*\nX150744D02*\nD03*\nX158744Y283244D02*\nD03*\nX159744Y262244D02*\nD03*\nX147744Y217244D02*\nD03*\nX151744Y128744D02*\nD03*\nX206744Y128945D02*\nD03*\nX268744Y170344D02*\nD03*\nX242744Y128945D02*\nD03*\nX221744Y178244D02*\nD03*\nX226244Y191244D02*\nD03*\nX258744Y134244D02*\nD03*\nX259244Y157244D02*\nD03*\nX171744Y150744D02*\nD03*\nX330244Y207744D02*\nD03*\nX429400Y229705D02*\nD03*\nX364500Y143895D02*\nD03*\nX370800Y217300D02*\nD03*\nX363987Y168409D02*\nD03*\nX413941Y225283D02*\nD03*\nX412600Y165100D02*\nD03*\nX375700Y230200D02*\nD03*\nX366300Y200600D02*\nD03*\nX406418Y163000D02*\nD03*\nX353100Y191300D02*\nD03*\nX374700Y141400D02*\nD03*\nX346000Y165300D02*\nD03*\nX372600Y153100D02*\nD03*\nX368900Y152400D02*\nD03*\nX377900Y146186D02*\nD03*\nX372600Y149500D02*\nD03*\nX358000Y156600D02*\nD03*\nX334600Y181244D02*\nD03*\nX321244Y246244D02*\nD03*\nX321044Y226544D02*\nD03*\nX329244Y246344D02*\nD03*\nX329644Y226644D02*\nD03*\nX352444Y234044D02*\nD03*\nX346644D02*\nD03*\nX346744Y261644D02*\nD03*\nX347044Y268444D02*\nD03*\nX346644Y264944D02*\nD03*\nX349544Y234044D02*\nD03*\nX360244Y260744D02*\nD03*\nX368244D02*\nD03*\nX376244Y264744D02*\nD03*\nX356244Y268744D02*\nD03*\nX372244D02*\nD03*\nX376244D02*\nD03*\nX380244Y264744D02*\nD03*\nX410500Y168409D02*\nD03*\nX432200Y162700D02*\nD03*\nX423900Y237200D02*\nD03*\nX438744Y202700D02*\nD03*\nX435100Y190400D02*\nD03*\nX429100Y196900D02*\nD03*\nX418900Y220700D02*\nD03*\nY186044D02*\nD03*\nX414700Y188100D02*\nD03*\nX452900Y205200D02*\nD03*\nX425900Y172900D02*\nD03*\nX425500Y186600D02*\nD03*\nX426100Y200700D02*\nD03*\nX408900Y160100D02*\nD03*\nX410700Y211200D02*\nD03*\nX414700Y192200D02*\nD03*\nX446700Y181800D02*\nD03*\nX355244Y202244D02*\nD03*\nX339087Y202744D02*\nD03*\nX392744Y185744D02*\nD03*\nX400244Y189744D02*\nD03*\nX401744Y185244D02*\nD03*\nX397744Y187244D02*\nD03*\nY150244D02*\nD03*\nX402300Y151830D02*\nD03*\nX400200Y157244D02*\nD03*\nX387744Y188744D02*\nD03*\nX383744Y178244D02*\nD03*\nX404400Y227244D02*\nD03*\nX383744Y190244D02*\nD03*\nX379744Y188244D02*\nD03*\nX363244Y187244D02*\nD03*\nX367244Y181244D02*\nD03*\nX358744Y200744D02*\nD03*\nX382400Y165244D02*\nD03*\nX369744Y185244D02*\nD03*\nX393244Y148744D02*\nD03*\nX394744Y142244D02*\nD03*\nX422618Y148744D02*\nD03*\nX395244Y243244D02*\nD03*\nX381244Y239744D02*\nD03*\nX382244Y236244D02*\nD03*\nX379744Y243244D02*\nD03*\nX381244Y229244D02*\nD03*\nX378744Y234244D02*\nD03*\nX370244Y225900D02*\nD03*\nX412244Y238244D02*\nD03*\nX435244Y215244D02*\nD03*\nX414744Y202744D02*\nD03*\nX378544Y199889D02*\nD03*\nX321244Y232244D02*\nD03*\nX330244D02*\nD03*\nX321244Y251244D02*\nD03*\nX362744Y256744D02*\nD03*\nX360244Y268744D02*\nD03*\nX364244Y264744D02*\nD03*\nX356744Y236744D02*\nD03*\nX366244Y236650D02*\nD03*\nX368244Y234244D02*\nD03*\nY230744D02*\nD03*\nX363744D02*\nD03*\nY225244D02*\nD03*\nX372244Y260744D02*\nD03*\nX358744Y234244D02*\nD03*\nX363744D02*\nD03*\nX365744Y227744D02*\nD03*\nX352744Y225244D02*\nD03*\nX348744D02*\nD03*\nX361744Y221244D02*\nD03*\nX320744Y217244D02*\nD03*\nX316244Y260244D02*\nD03*\nY269244D02*\nD03*\nX315744Y277244D02*\nD03*\nX323744Y283744D02*\nD03*\nX330744D02*\nD03*\nX338744Y283244D02*\nD03*\nX339744Y262244D02*\nD03*\nX327744Y217244D02*\nD03*\nX331744Y128744D02*\nD03*\nX386744Y128945D02*\nD03*\nX448744Y170344D02*\nD03*\nX422744Y128945D02*\nD03*\nX401744Y178244D02*\nD03*\nX406244Y191244D02*\nD03*\nX438744Y134244D02*\nD03*\nX439244Y157244D02*\nD03*\nX351744Y150744D02*\nD03*\nX150244Y387744D02*\nD03*\nX249400Y409705D02*\nD03*\nX184500Y323895D02*\nD03*\nX190800Y397300D02*\nD03*\nX183987Y348409D02*\nD03*\nX233941Y405283D02*\nD03*\nX232600Y345100D02*\nD03*\nX195700Y410200D02*\nD03*\nX186300Y380600D02*\nD03*\nX226418Y343000D02*\nD03*\nX173100Y371300D02*\nD03*\nX194700Y321400D02*\nD03*\nX166000Y345300D02*\nD03*\nX192600Y333100D02*\nD03*\nX188900Y332400D02*\nD03*\nX197900Y326186D02*\nD03*\nX192600Y329500D02*\nD03*\nX178000Y336600D02*\nD03*\nX154600Y361244D02*\nD03*\nX141244Y426244D02*\nD03*\nX141044Y406544D02*\nD03*\nX149244Y426344D02*\nD03*\nX149644Y406644D02*\nD03*\nX172444Y414044D02*\nD03*\nX166644D02*\nD03*\nX166744Y441644D02*\nD03*\nX167044Y448444D02*\nD03*\nX166644Y444944D02*\nD03*\nX169544Y414044D02*\nD03*\nX180244Y440744D02*\nD03*\nX188244D02*\nD03*\nX196244Y444744D02*\nD03*\nX176244Y448744D02*\nD03*\nX192244D02*\nD03*\nX196244D02*\nD03*\nX200244Y444744D02*\nD03*\nX230500Y348409D02*\nD03*\nX252200Y342700D02*\nD03*\nX243900Y417200D02*\nD03*\nX258744Y382700D02*\nD03*\nX255100Y370400D02*\nD03*\nX249100Y376900D02*\nD03*\nX238900Y400700D02*\nD03*\nY366044D02*\nD03*\nX234700Y368100D02*\nD03*\nX272900Y385200D02*\nD03*\nX245900Y352900D02*\nD03*\nX245500Y366600D02*\nD03*\nX246100Y380700D02*\nD03*\nX228900Y340100D02*\nD03*\nX230700Y391200D02*\nD03*\nX234700Y372200D02*\nD03*\nX266700Y361800D02*\nD03*\nX175244Y382244D02*\nD03*\nX159087Y382744D02*\nD03*\nX212744Y365744D02*\nD03*\nX220244Y369744D02*\nD03*\nX221744Y365244D02*\nD03*\nX217744Y367244D02*\nD03*\nY330244D02*\nD03*\nX222300Y331830D02*\nD03*\nX220200Y337244D02*\nD03*\nX207744Y368744D02*\nD03*\nX203744Y358244D02*\nD03*\nX224400Y407244D02*\nD03*\nX203744Y370244D02*\nD03*\nX199744Y368244D02*\nD03*\nX183244Y367244D02*\nD03*\nX187244Y361244D02*\nD03*\nX178744Y380744D02*\nD03*\nX202400Y345244D02*\nD03*\nX189744Y365244D02*\nD03*\nX213244Y328744D02*\nD03*\nX214744Y322244D02*\nD03*\nX242618Y328744D02*\nD03*\nX215244Y423244D02*\nD03*\nX201244Y419744D02*\nD03*\nX202244Y416244D02*\nD03*\nX199744Y423244D02*\nD03*\nX201244Y409244D02*\nD03*\nX198744Y414244D02*\nD03*\nX190244Y405900D02*\nD03*\nX232244Y418244D02*\nD03*\nX255244Y395244D02*\nD03*\nX234744Y382744D02*\nD03*\nX198544Y379889D02*\nD03*\nX141244Y412244D02*\nD03*\nX150244D02*\nD03*\nX141244Y431244D02*\nD03*\nX182744Y436744D02*\nD03*\nX180244Y448744D02*\nD03*\nX184244Y444744D02*\nD03*\nX176744Y416744D02*\nD03*\nX186244Y416650D02*\nD03*\nX188244Y414244D02*\nD03*\nY410744D02*\nD03*\nX183744D02*\nD03*\nY405244D02*\nD03*\nX192244Y440744D02*\nD03*\nX178744Y414244D02*\nD03*\nX183744D02*\nD03*\nX185744Y407744D02*\nD03*\nX172744Y405244D02*\nD03*\nX168744D02*\nD03*\nX181744Y401244D02*\nD03*\nX140744Y397244D02*\nD03*\nX136244Y440244D02*\nD03*\nY449244D02*\nD03*\nX135744Y457244D02*\nD03*\nX143744Y463744D02*\nD03*\nX150744D02*\nD03*\nX158744Y463244D02*\nD03*\nX159744Y442244D02*\nD03*\nX147744Y397244D02*\nD03*\nX151744Y308744D02*\nD03*\nX206744Y308945D02*\nD03*\nX268744Y350344D02*\nD03*\nX242744Y308945D02*\nD03*\nX221744Y358244D02*\nD03*\nX226244Y371244D02*\nD03*\nX258744Y314244D02*\nD03*\nX259244Y337244D02*\nD03*\nX171744Y330744D02*\nD03*\nX330244Y387744D02*\nD03*\nX429400Y409705D02*\nD03*\nX364500Y323895D02*\nD03*\nX370800Y397300D02*\nD03*\nX363987Y348409D02*\nD03*\nX413941Y405283D02*\nD03*\nX412600Y345100D02*\nD03*\nX375700Y410200D02*\nD03*\nX366300Y380600D02*\nD03*\nX406418Y343000D02*\nD03*\nX353100Y371300D02*\nD03*\nX374700Y321400D02*\nD03*\nX346000Y345300D02*\nD03*\nX372600Y333100D02*\nD03*\nX368900Y332400D02*\nD03*\nX377900Y326186D02*\nD03*\nX372600Y329500D02*\nD03*\nX358000Y336600D02*\nD03*\nX334600Y361244D02*\nD03*\nX321244Y426244D02*\nD03*\nX321044Y406544D02*\nD03*\nX329244Y426344D02*\nD03*\nX329644Y406644D02*\nD03*\nX352444Y414044D02*\nD03*\nX346644D02*\nD03*\nX346744Y441644D02*\nD03*\nX347044Y448444D02*\nD03*\nX346644Y444944D02*\nD03*\nX349544Y414044D02*\nD03*\nX360244Y440744D02*\nD03*\nX368244D02*\nD03*\nX376244Y444744D02*\nD03*\nX356244Y448744D02*\nD03*\nX372244D02*\nD03*\nX376244D02*\nD03*\nX380244Y444744D02*\nD03*\nX410500Y348409D02*\nD03*\nX432200Y342700D02*\nD03*\nX423900Y417200D02*\nD03*\nX438744Y382700D02*\nD03*\nX435100Y370400D02*\nD03*\nX429100Y376900D02*\nD03*\nX418900Y400700D02*\nD03*\nY366044D02*\nD03*\nX414700Y368100D02*\nD03*\nX452900Y385200D02*\nD03*\nX425900Y352900D02*\nD03*\nX425500Y366600D02*\nD03*\nX426100Y380700D02*\nD03*\nX408900Y340100D02*\nD03*\nX410700Y391200D02*\nD03*\nX414700Y372200D02*\nD03*\nX446700Y361800D02*\nD03*\nX355244Y382244D02*\nD03*\nX339087Y382744D02*\nD03*\nX392744Y365744D02*\nD03*\nX400244Y369744D02*\nD03*\nX401744Y365244D02*\nD03*\nX397744Y367244D02*\nD03*\nY330244D02*\nD03*\nX402300Y331830D02*\nD03*\nX400200Y337244D02*\nD03*\nX387744Y368744D02*\nD03*\nX383744Y358244D02*\nD03*\nX404400Y407244D02*\nD03*\nX383744Y370244D02*\nD03*\nX379744Y368244D02*\nD03*\nX363244Y367244D02*\nD03*\nX367244Y361244D02*\nD03*\nX358744Y380744D02*\nD03*\nX382400Y345244D02*\nD03*\nX369744Y365244D02*\nD03*\nX393244Y328744D02*\nD03*\nX394744Y322244D02*\nD03*\nX422618Y328744D02*\nD03*\nX395244Y423244D02*\nD03*\nX381244Y419744D02*\nD03*\nX382244Y416244D02*\nD03*\nX379744Y423244D02*\nD03*\nX381244Y409244D02*\nD03*\nX378744Y414244D02*\nD03*\nX370244Y405900D02*\nD03*\nX412244Y418244D02*\nD03*\nX435244Y395244D02*\nD03*\nX414744Y382744D02*\nD03*\nX378544Y379889D02*\nD03*\nX321244Y412244D02*\nD03*\nX330244D02*\nD03*\nX321244Y431244D02*\nD03*\nX362744Y436744D02*\nD03*\nX360244Y448744D02*\nD03*\nX364244Y444744D02*\nD03*\nX356744Y416744D02*\nD03*\nX366244Y416650D02*\nD03*\nX368244Y414244D02*\nD03*\nY410744D02*\nD03*\nX363744D02*\nD03*\nY405244D02*\nD03*\nX372244Y440744D02*\nD03*\nX358744Y414244D02*\nD03*\nX363744D02*\nD03*\nX365744Y407744D02*\nD03*\nX352744Y405244D02*\nD03*\nX348744D02*\nD03*\nX361744Y401244D02*\nD03*\nX320744Y397244D02*\nD03*\nX316244Y440244D02*\nD03*\nY449244D02*\nD03*\nX315744Y457244D02*\nD03*\nX323744Y463744D02*\nD03*\nX330744D02*\nD03*\nX338744Y463244D02*\nD03*\nX339744Y442244D02*\nD03*\nX327744Y397244D02*\nD03*\nX331744Y308744D02*\nD03*\nX386744Y308945D02*\nD03*\nX448744Y350344D02*\nD03*\nX422744Y308945D02*\nD03*\nX401744Y358244D02*\nD03*\nX406244Y371244D02*\nD03*\nX438744Y314244D02*\nD03*\nX439244Y337244D02*\nD03*\nX351744Y330744D02*\nD03*\nD60*\nX177013Y250875D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX177013Y246544D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX177013Y242213D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX357013Y250875D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nX357013Y246544D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nX357013Y242213D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nX177013Y430875D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX177013Y426544D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX177013Y422213D02*\nD03*\nX181344D02*\nD03*\nX185675D02*\nD03*\nX357013Y430875D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nX357013Y426544D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nX357013Y422213D02*\nD03*\nX361344D02*\nD03*\nX365675D02*\nD03*\nM02*\n"
  },
  {
    "path": "hardware/panel.GTO",
    "content": "G04 Layer_Color=65535*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD43C,0.00800*%\n%ADD45C,0.01000*%\n%ADD67C,0.00984*%\n%ADD68C,0.00500*%\n%ADD69C,0.00787*%\n%ADD70C,0.01400*%\nD43*\nX193044Y273687D02*\nG03*\nX193044Y273687I-12400J0D01*\nG01*\nX249243Y142743D02*\nX248744Y143243D01*\nX247744D01*\nX247244Y142743D01*\nY142243D01*\nX247744Y141744D01*\nX248744D01*\nX249243Y141244D01*\nY140744D01*\nX248744Y140244D01*\nX247744D01*\nX247244Y140744D01*\nX250243Y143243D02*\nY140244D01*\nX251243Y141244D01*\nX252242Y140244D01*\nY143243D01*\nX254742Y140244D02*\nY143243D01*\nX253242Y141744D01*\nX255241D01*\nX251743Y263743D02*\nX250744D01*\nX251244D01*\nY261244D01*\nX250744Y260744D01*\nX250244D01*\nX249744Y261244D01*\nX252743Y263243D02*\nX253243Y263743D01*\nX254243D01*\nX254743Y263243D01*\nY262743D01*\nX254243Y262244D01*\nX253743D01*\nX254243D01*\nX254743Y261744D01*\nY261244D01*\nX254243Y260744D01*\nX253243D01*\nX252743Y261244D01*\nX151199Y182299D02*\nX150200D01*\nX150699D01*\nY179800D01*\nX150200Y179300D01*\nX149700D01*\nX149200Y179800D01*\nX154198Y182299D02*\nX152199D01*\nY180799D01*\nX153199Y181299D01*\nX153699D01*\nX154198Y180799D01*\nY179800D01*\nX153699Y179300D01*\nX152699D01*\nX152199Y179800D01*\nX156743Y279743D02*\nX156244Y280243D01*\nX155244D01*\nX154744Y279743D01*\nY277744D01*\nX155244Y277244D01*\nX156244D01*\nX156743Y277744D01*\nX159742Y277244D02*\nX157743D01*\nX159742Y279243D01*\nY279743D01*\nX159243Y280243D01*\nX158243D01*\nX157743Y279743D01*\nX160742Y277244D02*\nX161742D01*\nX161242D01*\nY280243D01*\nX160742Y279743D01*\nX228200Y162199D02*\nY161699D01*\nX229200Y160699D01*\nX230199Y161699D01*\nY162199D01*\nX229200Y160699D02*\nY159200D01*\nX231199D02*\nX232199D01*\nX231699D01*\nY162199D01*\nX231199Y161699D01*\nX149345Y190844D02*\nX151844D01*\nX152344Y191344D01*\nY192344D01*\nX151844Y192843D01*\nX149345D01*\nX149845Y195843D02*\nX149345Y195343D01*\nY194343D01*\nX149845Y193843D01*\nX150345D01*\nX150845Y194343D01*\nY195343D01*\nX151344Y195843D01*\nX151844D01*\nX152344Y195343D01*\nY194343D01*\nX151844Y193843D01*\nX149345Y196842D02*\nX152344D01*\nY198342D01*\nX151844Y198842D01*\nX151344D01*\nX150845Y198342D01*\nY196842D01*\nY198342D01*\nX150345Y198842D01*\nX149845D01*\nX149345Y198342D01*\nY196842D01*\nX152344Y199841D02*\nY200841D01*\nY200341D01*\nX149345D01*\nX149845Y199841D01*\nX187000Y181699D02*\nY179200D01*\nX187500Y178700D01*\nX188499D01*\nX188999Y179200D01*\nY181699D01*\nX189999Y181199D02*\nX190499Y181699D01*\nX191499D01*\nX191998Y181199D01*\nY180699D01*\nX191499Y180200D01*\nX191998Y179700D01*\nY179200D01*\nX191499Y178700D01*\nX190499D01*\nX189999Y179200D01*\nY179700D01*\nX190499Y180200D01*\nX189999Y180699D01*\nY181199D01*\nX190499Y180200D02*\nX191499D01*\nX172544Y189143D02*\nY186644D01*\nX173044Y186144D01*\nX174044D01*\nX174543Y186644D01*\nY189143D01*\nX175543D02*\nX177542D01*\nY188643D01*\nX175543Y186644D01*\nY186144D01*\nX248244Y238243D02*\nY235744D01*\nX248744Y235244D01*\nX249744D01*\nX250243Y235744D01*\nY238243D01*\nX253242Y235244D02*\nX251243D01*\nX253242Y237243D01*\nY237743D01*\nX252743Y238243D01*\nX251743D01*\nX251243Y237743D01*\nX146743Y218243D02*\nX146244Y218743D01*\nX145244D01*\nX144744Y218243D01*\nY217743D01*\nX145244Y217244D01*\nX146244D01*\nX146743Y216744D01*\nY216244D01*\nX146244Y215744D01*\nX145244D01*\nX144744Y216244D01*\nX147743Y218743D02*\nY215744D01*\nX148743Y216744D01*\nX149742Y215744D01*\nY218743D01*\nX152742D02*\nX150742D01*\nY217244D01*\nX151742Y217743D01*\nX152242D01*\nX152742Y217244D01*\nY216244D01*\nX152242Y215744D01*\nX151242D01*\nX150742Y216244D01*\nX244100Y236500D02*\nX241101D01*\nY238000D01*\nX241601Y238499D01*\nX242600D01*\nX243100Y238000D01*\nY236500D01*\nY237500D02*\nX244100Y238499D01*\nY241498D02*\nY239499D01*\nX242101Y241498D01*\nX241601D01*\nX241101Y240999D01*\nY239999D01*\nX241601Y239499D01*\nX234244Y227744D02*\nX231245D01*\nY229244D01*\nX231745Y229743D01*\nX232745D01*\nX233244Y229244D01*\nY227744D01*\nY228744D02*\nX234244Y229743D01*\nY230743D02*\nY231743D01*\nY231243D01*\nX231245D01*\nX231745Y230743D01*\nX153600Y159899D02*\nY156900D01*\nX155599D01*\nX158598Y159899D02*\nX156599D01*\nY156900D01*\nX158598D01*\nX156599Y158399D02*\nX157599D01*\nX159598Y159899D02*\nY156900D01*\nX161098D01*\nX161597Y157400D01*\nY159399D01*\nX161098Y159899D01*\nX159598D01*\nX164596Y156900D02*\nX162597D01*\nX164596Y158899D01*\nY159399D01*\nX164097Y159899D01*\nX163097D01*\nX162597Y159399D01*\nX169644Y182943D02*\nY179944D01*\nX171643D01*\nX174643Y182943D02*\nX172643D01*\nY179944D01*\nX174643D01*\nX172643Y181444D02*\nX173643D01*\nX175642Y182943D02*\nY179944D01*\nX177142D01*\nX177641Y180444D01*\nY182443D01*\nX177142Y182943D01*\nX175642D01*\nX178641Y179944D02*\nX179641D01*\nX179141D01*\nY182943D01*\nX178641Y182443D01*\nX242444Y253243D02*\nY250244D01*\nX243944D01*\nX244443Y250744D01*\nY252743D01*\nX243944Y253243D01*\nX242444D01*\nX245443Y250244D02*\nX246443D01*\nX245943D01*\nY253243D01*\nX245443Y252743D01*\nX247099Y156699D02*\nX246600Y157199D01*\nX245600D01*\nX245100Y156699D01*\nY154700D01*\nX245600Y154200D01*\nX246600D01*\nX247099Y154700D01*\nX248099Y154200D02*\nX249099D01*\nX248599D01*\nY157199D01*\nX248099Y156699D01*\nX250598D02*\nX251098Y157199D01*\nX252098D01*\nX252598Y156699D01*\nY156199D01*\nX252098Y155700D01*\nX252598Y155200D01*\nY154700D01*\nX252098Y154200D01*\nX251098D01*\nX250598Y154700D01*\nY155200D01*\nX251098Y155700D01*\nX250598Y156199D01*\nY156699D01*\nX251098Y155700D02*\nX252098D01*\nX238999Y149399D02*\nX238499Y149899D01*\nX237500D01*\nX237000Y149399D01*\nY147400D01*\nX237500Y146900D01*\nX238499D01*\nX238999Y147400D01*\nX239999Y146900D02*\nX240999D01*\nX240499D01*\nY149899D01*\nX239999Y149399D01*\nX242498Y149899D02*\nX244498D01*\nY149399D01*\nX242498Y147400D01*\nY146900D01*\nX164743Y230243D02*\nX164244Y230743D01*\nX163244D01*\nX162744Y230243D01*\nY228244D01*\nX163244Y227744D01*\nX164244D01*\nX164743Y228244D01*\nX165743Y227744D02*\nX166743D01*\nX166243D01*\nY230743D01*\nX165743Y230243D01*\nX168242D02*\nX168742Y230743D01*\nX169742D01*\nX170242Y230243D01*\nY229743D01*\nX169742Y229244D01*\nX169242D01*\nX169742D01*\nX170242Y228744D01*\nY228244D01*\nX169742Y227744D01*\nX168742D01*\nX168242Y228244D01*\nX197244Y259244D02*\nX197744D01*\nX198244Y259744D01*\nY262243D01*\nX200243Y260244D02*\nX201243D01*\nX200743D01*\nY263243D01*\nX200243Y262743D01*\nX129500Y260400D02*\nX130000D01*\nX130500Y260900D01*\nY263399D01*\nX134498Y264399D02*\nX133499Y263899D01*\nX132499Y262899D01*\nY261900D01*\nX132999Y261400D01*\nX133999D01*\nX134498Y261900D01*\nY262400D01*\nX133999Y262899D01*\nX132499D01*\nX147400Y235600D02*\nY238599D01*\nX148899D01*\nX149399Y238099D01*\nY237100D01*\nX148899Y236600D01*\nX147400D01*\nX148400D02*\nX149399Y235600D01*\nX150399D02*\nX151399D01*\nX150899D01*\nY238599D01*\nX150399Y238099D01*\nX152898D02*\nX153398Y238599D01*\nX154398D01*\nX154898Y238099D01*\nY236100D01*\nX154398Y235600D01*\nX153398D01*\nX152898Y236100D01*\nY238099D01*\nX147800Y255300D02*\nY258299D01*\nX149300D01*\nX149799Y257799D01*\nY256800D01*\nX149300Y256300D01*\nX147800D01*\nX148800D02*\nX149799Y255300D01*\nX150799D02*\nX151799D01*\nX151299D01*\nY258299D01*\nX150799Y257799D01*\nX153298Y255300D02*\nX154298D01*\nX153798D01*\nY258299D01*\nX153298Y257799D01*\nX170543Y141243D02*\nX170044Y141743D01*\nX169044D01*\nX168544Y141243D01*\nY140743D01*\nX169044Y140244D01*\nX170044D01*\nX170543Y139744D01*\nY139244D01*\nX170044Y138744D01*\nX169044D01*\nX168544Y139244D01*\nX171543Y141743D02*\nY138744D01*\nX172543Y139744D01*\nX173542Y138744D01*\nY141743D01*\nX174542Y138744D02*\nX175542D01*\nX175042D01*\nY141743D01*\nX174542Y141243D01*\nX161244Y258743D02*\nY256244D01*\nX161744Y255744D01*\nX162744D01*\nX163243Y256244D01*\nY258743D01*\nX164243Y255744D02*\nX165243D01*\nX164743D01*\nY258743D01*\nX164243Y258243D01*\nX204743Y141743D02*\nX204244Y142243D01*\nX203244D01*\nX202744Y141743D01*\nY141243D01*\nX203244Y140744D01*\nX204244D01*\nX204743Y140244D01*\nY139744D01*\nX204244Y139244D01*\nX203244D01*\nX202744Y139744D01*\nX205743Y142243D02*\nY139244D01*\nX206743Y140244D01*\nX207743Y139244D01*\nY142243D01*\nX208742Y141743D02*\nX209242Y142243D01*\nX210242D01*\nX210741Y141743D01*\nY141243D01*\nX210242Y140744D01*\nX209742D01*\nX210242D01*\nX210741Y140244D01*\nY139744D01*\nX210242Y139244D01*\nX209242D01*\nX208742Y139744D01*\nX244743Y205244D02*\nY207243D01*\nX244244Y207743D01*\nX243244D01*\nX242744Y207243D01*\nY205244D01*\nX243244Y204744D01*\nX244244D01*\nX243744Y205744D02*\nX244743Y204744D01*\nX244244D02*\nX244743Y205244D01*\nX245743Y204744D02*\nX246743D01*\nX246243D01*\nY207743D01*\nX245743Y207243D01*\nX242743Y188744D02*\nY190743D01*\nX242244Y191243D01*\nX241244D01*\nX240744Y190743D01*\nY188744D01*\nX241244Y188244D01*\nX242244D01*\nX241744Y189244D02*\nX242743Y188244D01*\nX242244D02*\nX242743Y188744D01*\nX243743Y190743D02*\nX244243Y191243D01*\nX245243D01*\nX245743Y190743D01*\nY190243D01*\nX245243Y189744D01*\nX244743D01*\nX245243D01*\nX245743Y189244D01*\nY188744D01*\nX245243Y188244D01*\nX244243D01*\nX243743Y188744D01*\nX241743Y172244D02*\nY174243D01*\nX241244Y174743D01*\nX240244D01*\nX239744Y174243D01*\nY172244D01*\nX240244Y171744D01*\nX241244D01*\nX240744Y172744D02*\nX241743Y171744D01*\nX241244D02*\nX241743Y172244D01*\nX244243Y171744D02*\nY174743D01*\nX242743Y173244D01*\nX244742D01*\nX284243Y262743D02*\nX283244D01*\nX283744D01*\nY260244D01*\nX283244Y259744D01*\nX282744D01*\nX282244Y260244D01*\nX287243Y259744D02*\nX285243D01*\nX287243Y261743D01*\nY262243D01*\nX286743Y262743D01*\nX285743D01*\nX285243Y262243D01*\nX165720Y330492D02*\nX169052D01*\nX167386D01*\nY325494D01*\nX171551D02*\nX173217D01*\nX174050Y326327D01*\nY327993D01*\nX173217Y328826D01*\nX171551D01*\nX170718Y327993D01*\nY326327D01*\nX171551Y325494D01*\nX175716Y323828D02*\nY328826D01*\nX178216D01*\nX179049Y327993D01*\nY326327D01*\nX178216Y325494D01*\nX175716D01*\nX189046Y329659D02*\nX188212Y330492D01*\nX186546D01*\nX185713Y329659D01*\nY328826D01*\nX186546Y327993D01*\nX188212D01*\nX189046Y327160D01*\nY326327D01*\nX188212Y325494D01*\nX186546D01*\nX185713Y326327D01*\nX190712Y325494D02*\nX192378D01*\nX191545D01*\nY328826D01*\nX190712D01*\nX194877Y325494D02*\nX196543D01*\nX195710D01*\nY330492D01*\nX194877D01*\nX199042Y325494D02*\nY330492D01*\nY327160D02*\nX201541Y328826D01*\nX199042Y327160D02*\nX201541Y325494D01*\nX204041D02*\nX206540D01*\nX207373Y326327D01*\nX206540Y327160D01*\nX204874D01*\nX204041Y327993D01*\nX204874Y328826D01*\nX207373D01*\nX212371D02*\nX209872D01*\nX209039Y327993D01*\nY326327D01*\nX209872Y325494D01*\nX212371D01*\nX214037Y328826D02*\nY325494D01*\nY327160D01*\nX214870Y327993D01*\nX215704Y328826D01*\nX216537D01*\nX221535Y325494D02*\nX219869D01*\nX219036Y326327D01*\nY327993D01*\nX219869Y328826D01*\nX221535D01*\nX222368Y327993D01*\nY327160D01*\nX219036D01*\nX226533Y325494D02*\nX224867D01*\nX224034Y326327D01*\nY327993D01*\nX224867Y328826D01*\nX226533D01*\nX227366Y327993D01*\nY327160D01*\nX224034D01*\nX229032Y325494D02*\nY328826D01*\nX231532D01*\nX232365Y327993D01*\nY325494D01*\nX261744Y253617D02*\nY251618D01*\nX262744Y250618D01*\nX263743Y251618D01*\nY253617D01*\nX264743D02*\nX265743D01*\nX265243D01*\nY250618D01*\nX264743D01*\nX265743D01*\nX267242D02*\nY253617D01*\nX269242Y250618D01*\nY253617D01*\nX263243Y243243D02*\nX262744Y243743D01*\nX261744D01*\nX261244Y243243D01*\nY242743D01*\nX261744Y242244D01*\nX262744D01*\nX263243Y241744D01*\nY241244D01*\nX262744Y240744D01*\nX261744D01*\nX261244Y241244D01*\nX264243Y243743D02*\nX266243D01*\nX265243D01*\nY240744D01*\nX267242D02*\nY243743D01*\nX268742D01*\nX269241Y243243D01*\nY242244D01*\nX268742Y241744D01*\nX267242D01*\nX261244Y232243D02*\nY229244D01*\nX262744D01*\nX263243Y229744D01*\nY231743D01*\nX262744Y232243D01*\nX261244D01*\nX264243D02*\nX265243D01*\nX264743D01*\nY229244D01*\nX264243D01*\nX265243D01*\nX266742D02*\nY232243D01*\nX268242D01*\nX268742Y231743D01*\nY230744D01*\nX268242Y230244D01*\nX266742D01*\nX267742D02*\nX268742Y229244D01*\nX263744Y202243D02*\nY199244D01*\nX265244D01*\nX265743Y199744D01*\nY201743D01*\nX265244Y202243D01*\nX263744D01*\nX266743Y201743D02*\nX267243Y202243D01*\nX268243D01*\nX268742Y201743D01*\nY201243D01*\nX268243Y200744D01*\nX267743D01*\nX268243D01*\nX268742Y200244D01*\nY199744D01*\nX268243Y199244D01*\nX267243D01*\nX266743Y199744D01*\nX260123Y185865D02*\nX261537Y184451D01*\nX262951D01*\nX262951Y185865D01*\nX261537Y187278D01*\nX262597Y187632D02*\nY188339D01*\nX263304Y189046D01*\nX264011Y189046D01*\nX264365Y188692D01*\nY187985D01*\nX264011Y187632D01*\nX264365Y187985D01*\nX265072Y187985D01*\nX265425Y187632D01*\nX265425Y186925D01*\nX264718Y186218D01*\nX264011D01*\nX266485Y187985D02*\nX266132Y188339D01*\nX266485Y188692D01*\nX266839Y188339D01*\nX266485Y187985D01*\nY191520D02*\nY192227D01*\nX267192Y192933D01*\nX267899Y192933D01*\nX268253Y192580D01*\nY191873D01*\nX267899Y191520D01*\nX268253Y191873D01*\nX268959D01*\nX269313Y191520D01*\nY190813D01*\nX268606Y190106D01*\nX267899D01*\nX263744Y181243D02*\nX265743D01*\nX264744D01*\nY178244D01*\nX266743Y181243D02*\nX268742Y178244D01*\nY181243D02*\nX266743Y178244D01*\nX263744Y169044D02*\nY172043D01*\nX265244D01*\nX265743Y171543D01*\nY170544D01*\nX265244Y170044D01*\nX263744D01*\nX264744D02*\nX265743Y169044D01*\nX266743Y172043D02*\nX268742Y169044D01*\nY172043D02*\nX266743Y169044D01*\nX263743Y212243D02*\nX263244Y212743D01*\nX262244D01*\nX261744Y212243D01*\nY210244D01*\nX262244Y209744D01*\nX263244D01*\nX263743Y210244D01*\nY211244D01*\nX262744D01*\nX264743Y209744D02*\nY212743D01*\nX266742Y209744D01*\nY212743D01*\nX267742D02*\nY209744D01*\nX269242D01*\nX269742Y210244D01*\nY212243D01*\nX269242Y212743D01*\nX267742D01*\nX258243Y221743D02*\nX256244D01*\nY218744D01*\nX258243D01*\nX256244Y220244D02*\nX257244D01*\nX259243Y218744D02*\nY221743D01*\nX260743D01*\nX261243Y221243D01*\nY220244D01*\nX260743Y219744D01*\nX259243D01*\nX260243D02*\nX261243Y218744D01*\nX262242D02*\nY221743D01*\nX263742D01*\nX264242Y221243D01*\nY220244D01*\nX263742Y219744D01*\nX262242D01*\nX263242D02*\nX264242Y218744D01*\nX266741Y221743D02*\nX265741D01*\nX265241Y221243D01*\nY219244D01*\nX265741Y218744D01*\nX266741D01*\nX267241Y219244D01*\nY221243D01*\nX266741Y221743D01*\nX268240Y218744D02*\nY221743D01*\nX269740D01*\nX270240Y221243D01*\nY220244D01*\nX269740Y219744D01*\nX268240D01*\nX269240D02*\nX270240Y218744D01*\nX262743Y162243D02*\nX262244Y162743D01*\nX261244D01*\nX260744Y162243D01*\nY160244D01*\nX261244Y159744D01*\nX262244D01*\nX262743Y160244D01*\nY161244D01*\nX261744D01*\nX263743Y159744D02*\nY162743D01*\nX265742Y159744D01*\nY162743D01*\nX266742D02*\nY159744D01*\nX268242D01*\nX268741Y160244D01*\nY162243D01*\nX268242Y162743D01*\nX266742D01*\nX373044Y273687D02*\nG03*\nX373044Y273687I-12400J0D01*\nG01*\nX429243Y142743D02*\nX428744Y143243D01*\nX427744D01*\nX427244Y142743D01*\nY142243D01*\nX427744Y141744D01*\nX428744D01*\nX429243Y141244D01*\nY140744D01*\nX428744Y140244D01*\nX427744D01*\nX427244Y140744D01*\nX430243Y143243D02*\nY140244D01*\nX431243Y141244D01*\nX432242Y140244D01*\nY143243D01*\nX434742Y140244D02*\nY143243D01*\nX433242Y141744D01*\nX435242D01*\nX431743Y263743D02*\nX430744D01*\nX431244D01*\nY261244D01*\nX430744Y260744D01*\nX430244D01*\nX429744Y261244D01*\nX432743Y263243D02*\nX433243Y263743D01*\nX434243D01*\nX434742Y263243D01*\nY262743D01*\nX434243Y262244D01*\nX433743D01*\nX434243D01*\nX434742Y261744D01*\nY261244D01*\nX434243Y260744D01*\nX433243D01*\nX432743Y261244D01*\nX331199Y182299D02*\nX330200D01*\nX330699D01*\nY179800D01*\nX330200Y179300D01*\nX329700D01*\nX329200Y179800D01*\nX334198Y182299D02*\nX332199D01*\nY180799D01*\nX333199Y181299D01*\nX333699D01*\nX334198Y180799D01*\nY179800D01*\nX333699Y179300D01*\nX332699D01*\nX332199Y179800D01*\nX336743Y279743D02*\nX336244Y280243D01*\nX335244D01*\nX334744Y279743D01*\nY277744D01*\nX335244Y277244D01*\nX336244D01*\nX336743Y277744D01*\nX339742Y277244D02*\nX337743D01*\nX339742Y279243D01*\nY279743D01*\nX339243Y280243D01*\nX338243D01*\nX337743Y279743D01*\nX340742Y277244D02*\nX341742D01*\nX341242D01*\nY280243D01*\nX340742Y279743D01*\nX408200Y162199D02*\nY161699D01*\nX409200Y160699D01*\nX410199Y161699D01*\nY162199D01*\nX409200Y160699D02*\nY159200D01*\nX411199D02*\nX412199D01*\nX411699D01*\nY162199D01*\nX411199Y161699D01*\nX329345Y190844D02*\nX331844D01*\nX332344Y191344D01*\nY192344D01*\nX331844Y192843D01*\nX329345D01*\nX329845Y195843D02*\nX329345Y195343D01*\nY194343D01*\nX329845Y193843D01*\nX330345D01*\nX330845Y194343D01*\nY195343D01*\nX331344Y195843D01*\nX331844D01*\nX332344Y195343D01*\nY194343D01*\nX331844Y193843D01*\nX329345Y196842D02*\nX332344D01*\nY198342D01*\nX331844Y198842D01*\nX331344D01*\nX330845Y198342D01*\nY196842D01*\nY198342D01*\nX330345Y198842D01*\nX329845D01*\nX329345Y198342D01*\nY196842D01*\nX332344Y199841D02*\nY200841D01*\nY200341D01*\nX329345D01*\nX329845Y199841D01*\nX367000Y181699D02*\nY179200D01*\nX367500Y178700D01*\nX368499D01*\nX368999Y179200D01*\nY181699D01*\nX369999Y181199D02*\nX370499Y181699D01*\nX371498D01*\nX371998Y181199D01*\nY180699D01*\nX371498Y180200D01*\nX371998Y179700D01*\nY179200D01*\nX371498Y178700D01*\nX370499D01*\nX369999Y179200D01*\nY179700D01*\nX370499Y180200D01*\nX369999Y180699D01*\nY181199D01*\nX370499Y180200D02*\nX371498D01*\nX352544Y189143D02*\nY186644D01*\nX353044Y186144D01*\nX354044D01*\nX354543Y186644D01*\nY189143D01*\nX355543D02*\nX357542D01*\nY188643D01*\nX355543Y186644D01*\nY186144D01*\nX428244Y238243D02*\nY235744D01*\nX428744Y235244D01*\nX429744D01*\nX430243Y235744D01*\nY238243D01*\nX433243Y235244D02*\nX431243D01*\nX433243Y237243D01*\nY237743D01*\nX432743Y238243D01*\nX431743D01*\nX431243Y237743D01*\nX326743Y218243D02*\nX326244Y218743D01*\nX325244D01*\nX324744Y218243D01*\nY217743D01*\nX325244Y217244D01*\nX326244D01*\nX326743Y216744D01*\nY216244D01*\nX326244Y215744D01*\nX325244D01*\nX324744Y216244D01*\nX327743Y218743D02*\nY215744D01*\nX328743Y216744D01*\nX329743Y215744D01*\nY218743D01*\nX332741D02*\nX330742D01*\nY217244D01*\nX331742Y217743D01*\nX332242D01*\nX332741Y217244D01*\nY216244D01*\nX332242Y215744D01*\nX331242D01*\nX330742Y216244D01*\nX424100Y236500D02*\nX421101D01*\nY238000D01*\nX421601Y238499D01*\nX422601D01*\nX423100Y238000D01*\nY236500D01*\nY237500D02*\nX424100Y238499D01*\nY241498D02*\nY239499D01*\nX422101Y241498D01*\nX421601D01*\nX421101Y240999D01*\nY239999D01*\nX421601Y239499D01*\nX414244Y227744D02*\nX411245D01*\nY229244D01*\nX411745Y229743D01*\nX412745D01*\nX413244Y229244D01*\nY227744D01*\nY228744D02*\nX414244Y229743D01*\nY230743D02*\nY231743D01*\nY231243D01*\nX411245D01*\nX411745Y230743D01*\nX333600Y159899D02*\nY156900D01*\nX335599D01*\nX338598Y159899D02*\nX336599D01*\nY156900D01*\nX338598D01*\nX336599Y158399D02*\nX337599D01*\nX339598Y159899D02*\nY156900D01*\nX341098D01*\nX341597Y157400D01*\nY159399D01*\nX341098Y159899D01*\nX339598D01*\nX344596Y156900D02*\nX342597D01*\nX344596Y158899D01*\nY159399D01*\nX344097Y159899D01*\nX343097D01*\nX342597Y159399D01*\nX349644Y182943D02*\nY179944D01*\nX351643D01*\nX354643Y182943D02*\nX352643D01*\nY179944D01*\nX354643D01*\nX352643Y181444D02*\nX353643D01*\nX355642Y182943D02*\nY179944D01*\nX357142D01*\nX357642Y180444D01*\nY182443D01*\nX357142Y182943D01*\nX355642D01*\nX358641Y179944D02*\nX359641D01*\nX359141D01*\nY182943D01*\nX358641Y182443D01*\nX422444Y253243D02*\nY250244D01*\nX423944D01*\nX424443Y250744D01*\nY252743D01*\nX423944Y253243D01*\nX422444D01*\nX425443Y250244D02*\nX426443D01*\nX425943D01*\nY253243D01*\nX425443Y252743D01*\nX427099Y156699D02*\nX426600Y157199D01*\nX425600D01*\nX425100Y156699D01*\nY154700D01*\nX425600Y154200D01*\nX426600D01*\nX427099Y154700D01*\nX428099Y154200D02*\nX429099D01*\nX428599D01*\nY157199D01*\nX428099Y156699D01*\nX430598D02*\nX431098Y157199D01*\nX432098D01*\nX432598Y156699D01*\nY156199D01*\nX432098Y155700D01*\nX432598Y155200D01*\nY154700D01*\nX432098Y154200D01*\nX431098D01*\nX430598Y154700D01*\nY155200D01*\nX431098Y155700D01*\nX430598Y156199D01*\nY156699D01*\nX431098Y155700D02*\nX432098D01*\nX418999Y149399D02*\nX418500Y149899D01*\nX417500D01*\nX417000Y149399D01*\nY147400D01*\nX417500Y146900D01*\nX418500D01*\nX418999Y147400D01*\nX419999Y146900D02*\nX420999D01*\nX420499D01*\nY149899D01*\nX419999Y149399D01*\nX422498Y149899D02*\nX424498D01*\nY149399D01*\nX422498Y147400D01*\nY146900D01*\nX344743Y230243D02*\nX344244Y230743D01*\nX343244D01*\nX342744Y230243D01*\nY228244D01*\nX343244Y227744D01*\nX344244D01*\nX344743Y228244D01*\nX345743Y227744D02*\nX346743D01*\nX346243D01*\nY230743D01*\nX345743Y230243D01*\nX348242D02*\nX348742Y230743D01*\nX349742D01*\nX350242Y230243D01*\nY229743D01*\nX349742Y229244D01*\nX349242D01*\nX349742D01*\nX350242Y228744D01*\nY228244D01*\nX349742Y227744D01*\nX348742D01*\nX348242Y228244D01*\nX377244Y259244D02*\nX377744D01*\nX378244Y259744D01*\nY262243D01*\nX380243Y260244D02*\nX381243D01*\nX380743D01*\nY263243D01*\nX380243Y262743D01*\nX309500Y260400D02*\nX310000D01*\nX310500Y260900D01*\nY263399D01*\nX314498Y264399D02*\nX313499Y263899D01*\nX312499Y262899D01*\nY261900D01*\nX312999Y261400D01*\nX313999D01*\nX314498Y261900D01*\nY262400D01*\nX313999Y262899D01*\nX312499D01*\nX327400Y235600D02*\nY238599D01*\nX328900D01*\nX329399Y238099D01*\nY237100D01*\nX328900Y236600D01*\nX327400D01*\nX328400D02*\nX329399Y235600D01*\nX330399D02*\nX331399D01*\nX330899D01*\nY238599D01*\nX330399Y238099D01*\nX332898D02*\nX333398Y238599D01*\nX334398D01*\nX334898Y238099D01*\nY236100D01*\nX334398Y235600D01*\nX333398D01*\nX332898Y236100D01*\nY238099D01*\nX327800Y255300D02*\nY258299D01*\nX329299D01*\nX329799Y257799D01*\nY256800D01*\nX329299Y256300D01*\nX327800D01*\nX328800D02*\nX329799Y255300D01*\nX330799D02*\nX331799D01*\nX331299D01*\nY258299D01*\nX330799Y257799D01*\nX333298Y255300D02*\nX334298D01*\nX333798D01*\nY258299D01*\nX333298Y257799D01*\nX350543Y141243D02*\nX350044Y141743D01*\nX349044D01*\nX348544Y141243D01*\nY140743D01*\nX349044Y140244D01*\nX350044D01*\nX350543Y139744D01*\nY139244D01*\nX350044Y138744D01*\nX349044D01*\nX348544Y139244D01*\nX351543Y141743D02*\nY138744D01*\nX352543Y139744D01*\nX353542Y138744D01*\nY141743D01*\nX354542Y138744D02*\nX355542D01*\nX355042D01*\nY141743D01*\nX354542Y141243D01*\nX341244Y258743D02*\nY256244D01*\nX341744Y255744D01*\nX342744D01*\nX343243Y256244D01*\nY258743D01*\nX344243Y255744D02*\nX345243D01*\nX344743D01*\nY258743D01*\nX344243Y258243D01*\nX384743Y141743D02*\nX384244Y142243D01*\nX383244D01*\nX382744Y141743D01*\nY141243D01*\nX383244Y140744D01*\nX384244D01*\nX384743Y140244D01*\nY139744D01*\nX384244Y139244D01*\nX383244D01*\nX382744Y139744D01*\nX385743Y142243D02*\nY139244D01*\nX386743Y140244D01*\nX387742Y139244D01*\nY142243D01*\nX388742Y141743D02*\nX389242Y142243D01*\nX390242D01*\nX390741Y141743D01*\nY141243D01*\nX390242Y140744D01*\nX389742D01*\nX390242D01*\nX390741Y140244D01*\nY139744D01*\nX390242Y139244D01*\nX389242D01*\nX388742Y139744D01*\nX424743Y205244D02*\nY207243D01*\nX424244Y207743D01*\nX423244D01*\nX422744Y207243D01*\nY205244D01*\nX423244Y204744D01*\nX424244D01*\nX423744Y205744D02*\nX424743Y204744D01*\nX424244D02*\nX424743Y205244D01*\nX425743Y204744D02*\nX426743D01*\nX426243D01*\nY207743D01*\nX425743Y207243D01*\nX422743Y188744D02*\nY190743D01*\nX422244Y191243D01*\nX421244D01*\nX420744Y190743D01*\nY188744D01*\nX421244Y188244D01*\nX422244D01*\nX421744Y189244D02*\nX422743Y188244D01*\nX422244D02*\nX422743Y188744D01*\nX423743Y190743D02*\nX424243Y191243D01*\nX425243D01*\nX425742Y190743D01*\nY190243D01*\nX425243Y189744D01*\nX424743D01*\nX425243D01*\nX425742Y189244D01*\nY188744D01*\nX425243Y188244D01*\nX424243D01*\nX423743Y188744D01*\nX421743Y172244D02*\nY174243D01*\nX421244Y174743D01*\nX420244D01*\nX419744Y174243D01*\nY172244D01*\nX420244Y171744D01*\nX421244D01*\nX420744Y172744D02*\nX421743Y171744D01*\nX421244D02*\nX421743Y172244D01*\nX424243Y171744D02*\nY174743D01*\nX422743Y173244D01*\nX424743D01*\nX464243Y262743D02*\nX463244D01*\nX463744D01*\nY260244D01*\nX463244Y259744D01*\nX462744D01*\nX462244Y260244D01*\nX467242Y259744D02*\nX465243D01*\nX467242Y261743D01*\nY262243D01*\nX466743Y262743D01*\nX465743D01*\nX465243Y262243D01*\nX345720Y330492D02*\nX349052D01*\nX347386D01*\nY325494D01*\nX351551D02*\nX353217D01*\nX354050Y326327D01*\nY327993D01*\nX353217Y328826D01*\nX351551D01*\nX350718Y327993D01*\nY326327D01*\nX351551Y325494D01*\nX355716Y323828D02*\nY328826D01*\nX358216D01*\nX359049Y327993D01*\nY326327D01*\nX358216Y325494D01*\nX355716D01*\nX369045Y329659D02*\nX368212Y330492D01*\nX366546D01*\nX365713Y329659D01*\nY328826D01*\nX366546Y327993D01*\nX368212D01*\nX369045Y327160D01*\nY326327D01*\nX368212Y325494D01*\nX366546D01*\nX365713Y326327D01*\nX370712Y325494D02*\nX372378D01*\nX371545D01*\nY328826D01*\nX370712D01*\nX374877Y325494D02*\nX376543D01*\nX375710D01*\nY330492D01*\nX374877D01*\nX379042Y325494D02*\nY330492D01*\nY327160D02*\nX381541Y328826D01*\nX379042Y327160D02*\nX381541Y325494D01*\nX384041D02*\nX386540D01*\nX387373Y326327D01*\nX386540Y327160D01*\nX384874D01*\nX384041Y327993D01*\nX384874Y328826D01*\nX387373D01*\nX392371D02*\nX389872D01*\nX389039Y327993D01*\nY326327D01*\nX389872Y325494D01*\nX392371D01*\nX394037Y328826D02*\nY325494D01*\nY327160D01*\nX394870Y327993D01*\nX395704Y328826D01*\nX396537D01*\nX401535Y325494D02*\nX399869D01*\nX399036Y326327D01*\nY327993D01*\nX399869Y328826D01*\nX401535D01*\nX402368Y327993D01*\nY327160D01*\nX399036D01*\nX406533Y325494D02*\nX404867D01*\nX404034Y326327D01*\nY327993D01*\nX404867Y328826D01*\nX406533D01*\nX407366Y327993D01*\nY327160D01*\nX404034D01*\nX409032Y325494D02*\nY328826D01*\nX411532D01*\nX412365Y327993D01*\nY325494D01*\nX441744Y253617D02*\nY251618D01*\nX442744Y250618D01*\nX443743Y251618D01*\nY253617D01*\nX444743D02*\nX445743D01*\nX445243D01*\nY250618D01*\nX444743D01*\nX445743D01*\nX447242D02*\nY253617D01*\nX449242Y250618D01*\nY253617D01*\nX443243Y243243D02*\nX442744Y243743D01*\nX441744D01*\nX441244Y243243D01*\nY242743D01*\nX441744Y242244D01*\nX442744D01*\nX443243Y241744D01*\nY241244D01*\nX442744Y240744D01*\nX441744D01*\nX441244Y241244D01*\nX444243Y243743D02*\nX446243D01*\nX445243D01*\nY240744D01*\nX447242D02*\nY243743D01*\nX448742D01*\nX449241Y243243D01*\nY242244D01*\nX448742Y241744D01*\nX447242D01*\nX441244Y232243D02*\nY229244D01*\nX442744D01*\nX443243Y229744D01*\nY231743D01*\nX442744Y232243D01*\nX441244D01*\nX444243D02*\nX445243D01*\nX444743D01*\nY229244D01*\nX444243D01*\nX445243D01*\nX446742D02*\nY232243D01*\nX448242D01*\nX448742Y231743D01*\nY230744D01*\nX448242Y230244D01*\nX446742D01*\nX447742D02*\nX448742Y229244D01*\nX443744Y202243D02*\nY199244D01*\nX445244D01*\nX445743Y199744D01*\nY201743D01*\nX445244Y202243D01*\nX443744D01*\nX446743Y201743D02*\nX447243Y202243D01*\nX448243D01*\nX448742Y201743D01*\nY201243D01*\nX448243Y200744D01*\nX447743D01*\nX448243D01*\nX448742Y200244D01*\nY199744D01*\nX448243Y199244D01*\nX447243D01*\nX446743Y199744D01*\nX440124Y185865D02*\nX441537Y184451D01*\nX442951D01*\nX442951Y185865D01*\nX441537Y187278D01*\nX442597Y187632D02*\nY188339D01*\nX443304Y189046D01*\nX444011Y189046D01*\nX444365Y188692D01*\nY187985D01*\nX444011Y187632D01*\nX444365Y187985D01*\nX445072Y187985D01*\nX445425Y187632D01*\nX445425Y186925D01*\nX444718Y186218D01*\nX444011D01*\nX446485Y187985D02*\nX446132Y188339D01*\nX446485Y188692D01*\nX446839Y188339D01*\nX446485Y187985D01*\nY191520D02*\nY192227D01*\nX447192Y192933D01*\nX447899Y192933D01*\nX448252Y192580D01*\nY191873D01*\nX447899Y191520D01*\nX448252Y191873D01*\nX448959D01*\nX449313Y191520D01*\nY190813D01*\nX448606Y190106D01*\nX447899D01*\nX443744Y181243D02*\nX445743D01*\nX444744D01*\nY178244D01*\nX446743Y181243D02*\nX448742Y178244D01*\nY181243D02*\nX446743Y178244D01*\nX443744Y169044D02*\nY172043D01*\nX445244D01*\nX445743Y171543D01*\nY170544D01*\nX445244Y170044D01*\nX443744D01*\nX444744D02*\nX445743Y169044D01*\nX446743Y172043D02*\nX448742Y169044D01*\nY172043D02*\nX446743Y169044D01*\nX443743Y212243D02*\nX443244Y212743D01*\nX442244D01*\nX441744Y212243D01*\nY210244D01*\nX442244Y209744D01*\nX443244D01*\nX443743Y210244D01*\nY211244D01*\nX442744D01*\nX444743Y209744D02*\nY212743D01*\nX446742Y209744D01*\nY212743D01*\nX447742D02*\nY209744D01*\nX449242D01*\nX449742Y210244D01*\nY212243D01*\nX449242Y212743D01*\nX447742D01*\nX438243Y221743D02*\nX436244D01*\nY218744D01*\nX438243D01*\nX436244Y220244D02*\nX437244D01*\nX439243Y218744D02*\nY221743D01*\nX440743D01*\nX441243Y221243D01*\nY220244D01*\nX440743Y219744D01*\nX439243D01*\nX440243D02*\nX441243Y218744D01*\nX442242D02*\nY221743D01*\nX443742D01*\nX444242Y221243D01*\nY220244D01*\nX443742Y219744D01*\nX442242D01*\nX443242D02*\nX444242Y218744D01*\nX446741Y221743D02*\nX445741D01*\nX445241Y221243D01*\nY219244D01*\nX445741Y218744D01*\nX446741D01*\nX447240Y219244D01*\nY221243D01*\nX446741Y221743D01*\nX448240Y218744D02*\nY221743D01*\nX449740D01*\nX450240Y221243D01*\nY220244D01*\nX449740Y219744D01*\nX448240D01*\nX449240D02*\nX450240Y218744D01*\nX442743Y162243D02*\nX442244Y162743D01*\nX441244D01*\nX440744Y162243D01*\nY160244D01*\nX441244Y159744D01*\nX442244D01*\nX442743Y160244D01*\nY161244D01*\nX441744D01*\nX443743Y159744D02*\nY162743D01*\nX445743Y159744D01*\nY162743D01*\nX446742D02*\nY159744D01*\nX448242D01*\nX448741Y160244D01*\nY162243D01*\nX448242Y162743D01*\nX446742D01*\nX193044Y453687D02*\nG03*\nX193044Y453687I-12400J0D01*\nG01*\nX249243Y322743D02*\nX248744Y323243D01*\nX247744D01*\nX247244Y322743D01*\nY322243D01*\nX247744Y321744D01*\nX248744D01*\nX249243Y321244D01*\nY320744D01*\nX248744Y320244D01*\nX247744D01*\nX247244Y320744D01*\nX250243Y323243D02*\nY320244D01*\nX251243Y321244D01*\nX252242Y320244D01*\nY323243D01*\nX254742Y320244D02*\nY323243D01*\nX253242Y321744D01*\nX255241D01*\nX251743Y443743D02*\nX250744D01*\nX251244D01*\nY441244D01*\nX250744Y440744D01*\nX250244D01*\nX249744Y441244D01*\nX252743Y443243D02*\nX253243Y443743D01*\nX254243D01*\nX254743Y443243D01*\nY442743D01*\nX254243Y442244D01*\nX253743D01*\nX254243D01*\nX254743Y441744D01*\nY441244D01*\nX254243Y440744D01*\nX253243D01*\nX252743Y441244D01*\nX151199Y362299D02*\nX150200D01*\nX150699D01*\nY359800D01*\nX150200Y359300D01*\nX149700D01*\nX149200Y359800D01*\nX154198Y362299D02*\nX152199D01*\nY360800D01*\nX153199Y361299D01*\nX153699D01*\nX154198Y360800D01*\nY359800D01*\nX153699Y359300D01*\nX152699D01*\nX152199Y359800D01*\nX156743Y459743D02*\nX156244Y460243D01*\nX155244D01*\nX154744Y459743D01*\nY457744D01*\nX155244Y457244D01*\nX156244D01*\nX156743Y457744D01*\nX159742Y457244D02*\nX157743D01*\nX159742Y459243D01*\nY459743D01*\nX159243Y460243D01*\nX158243D01*\nX157743Y459743D01*\nX160742Y457244D02*\nX161742D01*\nX161242D01*\nY460243D01*\nX160742Y459743D01*\nX228200Y342199D02*\nY341699D01*\nX229200Y340700D01*\nX230199Y341699D01*\nY342199D01*\nX229200Y340700D02*\nY339200D01*\nX231199D02*\nX232199D01*\nX231699D01*\nY342199D01*\nX231199Y341699D01*\nX149345Y370844D02*\nX151844D01*\nX152344Y371344D01*\nY372344D01*\nX151844Y372843D01*\nX149345D01*\nX149845Y375842D02*\nX149345Y375343D01*\nY374343D01*\nX149845Y373843D01*\nX150345D01*\nX150845Y374343D01*\nY375343D01*\nX151344Y375842D01*\nX151844D01*\nX152344Y375343D01*\nY374343D01*\nX151844Y373843D01*\nX149345Y376842D02*\nX152344D01*\nY378342D01*\nX151844Y378841D01*\nX151344D01*\nX150845Y378342D01*\nY376842D01*\nY378342D01*\nX150345Y378841D01*\nX149845D01*\nX149345Y378342D01*\nY376842D01*\nX152344Y379841D02*\nY380841D01*\nY380341D01*\nX149345D01*\nX149845Y379841D01*\nX187000Y361699D02*\nY359200D01*\nX187500Y358700D01*\nX188499D01*\nX188999Y359200D01*\nY361699D01*\nX189999Y361199D02*\nX190499Y361699D01*\nX191499D01*\nX191998Y361199D01*\nY360699D01*\nX191499Y360199D01*\nX191998Y359700D01*\nY359200D01*\nX191499Y358700D01*\nX190499D01*\nX189999Y359200D01*\nY359700D01*\nX190499Y360199D01*\nX189999Y360699D01*\nY361199D01*\nX190499Y360199D02*\nX191499D01*\nX172544Y369143D02*\nY366644D01*\nX173044Y366144D01*\nX174044D01*\nX174543Y366644D01*\nY369143D01*\nX175543D02*\nX177542D01*\nY368643D01*\nX175543Y366644D01*\nY366144D01*\nX248244Y418243D02*\nY415744D01*\nX248744Y415244D01*\nX249744D01*\nX250243Y415744D01*\nY418243D01*\nX253242Y415244D02*\nX251243D01*\nX253242Y417243D01*\nY417743D01*\nX252743Y418243D01*\nX251743D01*\nX251243Y417743D01*\nX146743Y398243D02*\nX146244Y398743D01*\nX145244D01*\nX144744Y398243D01*\nY397743D01*\nX145244Y397244D01*\nX146244D01*\nX146743Y396744D01*\nY396244D01*\nX146244Y395744D01*\nX145244D01*\nX144744Y396244D01*\nX147743Y398743D02*\nY395744D01*\nX148743Y396744D01*\nX149742Y395744D01*\nY398743D01*\nX152742D02*\nX150742D01*\nY397244D01*\nX151742Y397743D01*\nX152242D01*\nX152742Y397244D01*\nY396244D01*\nX152242Y395744D01*\nX151242D01*\nX150742Y396244D01*\nX244100Y416500D02*\nX241101D01*\nY418000D01*\nX241601Y418499D01*\nX242600D01*\nX243100Y418000D01*\nY416500D01*\nY417500D02*\nX244100Y418499D01*\nY421498D02*\nY419499D01*\nX242101Y421498D01*\nX241601D01*\nX241101Y420998D01*\nY419999D01*\nX241601Y419499D01*\nX234244Y407744D02*\nX231245D01*\nY409244D01*\nX231745Y409743D01*\nX232745D01*\nX233244Y409244D01*\nY407744D01*\nY408744D02*\nX234244Y409743D01*\nY410743D02*\nY411743D01*\nY411243D01*\nX231245D01*\nX231745Y410743D01*\nX153600Y339899D02*\nY336900D01*\nX155599D01*\nX158598Y339899D02*\nX156599D01*\nY336900D01*\nX158598D01*\nX156599Y338400D02*\nX157599D01*\nX159598Y339899D02*\nY336900D01*\nX161098D01*\nX161597Y337400D01*\nY339399D01*\nX161098Y339899D01*\nX159598D01*\nX164596Y336900D02*\nX162597D01*\nX164596Y338899D01*\nY339399D01*\nX164097Y339899D01*\nX163097D01*\nX162597Y339399D01*\nX169644Y362943D02*\nY359944D01*\nX171643D01*\nX174643Y362943D02*\nX172643D01*\nY359944D01*\nX174643D01*\nX172643Y361444D02*\nX173643D01*\nX175642Y362943D02*\nY359944D01*\nX177142D01*\nX177641Y360444D01*\nY362443D01*\nX177142Y362943D01*\nX175642D01*\nX178641Y359944D02*\nX179641D01*\nX179141D01*\nY362943D01*\nX178641Y362443D01*\nX242444Y433243D02*\nY430244D01*\nX243944D01*\nX244443Y430744D01*\nY432743D01*\nX243944Y433243D01*\nX242444D01*\nX245443Y430244D02*\nX246443D01*\nX245943D01*\nY433243D01*\nX245443Y432743D01*\nX247099Y336699D02*\nX246600Y337199D01*\nX245600D01*\nX245100Y336699D01*\nY334700D01*\nX245600Y334200D01*\nX246600D01*\nX247099Y334700D01*\nX248099Y334200D02*\nX249099D01*\nX248599D01*\nY337199D01*\nX248099Y336699D01*\nX250598D02*\nX251098Y337199D01*\nX252098D01*\nX252598Y336699D01*\nY336199D01*\nX252098Y335700D01*\nX252598Y335200D01*\nY334700D01*\nX252098Y334200D01*\nX251098D01*\nX250598Y334700D01*\nY335200D01*\nX251098Y335700D01*\nX250598Y336199D01*\nY336699D01*\nX251098Y335700D02*\nX252098D01*\nX238999Y329399D02*\nX238499Y329899D01*\nX237500D01*\nX237000Y329399D01*\nY327400D01*\nX237500Y326900D01*\nX238499D01*\nX238999Y327400D01*\nX239999Y326900D02*\nX240999D01*\nX240499D01*\nY329899D01*\nX239999Y329399D01*\nX242498Y329899D02*\nX244498D01*\nY329399D01*\nX242498Y327400D01*\nY326900D01*\nX164743Y410243D02*\nX164244Y410743D01*\nX163244D01*\nX162744Y410243D01*\nY408244D01*\nX163244Y407744D01*\nX164244D01*\nX164743Y408244D01*\nX165743Y407744D02*\nX166743D01*\nX166243D01*\nY410743D01*\nX165743Y410243D01*\nX168242D02*\nX168742Y410743D01*\nX169742D01*\nX170242Y410243D01*\nY409743D01*\nX169742Y409244D01*\nX169242D01*\nX169742D01*\nX170242Y408744D01*\nY408244D01*\nX169742Y407744D01*\nX168742D01*\nX168242Y408244D01*\nX197244Y439244D02*\nX197744D01*\nX198244Y439744D01*\nY442243D01*\nX200243Y440244D02*\nX201243D01*\nX200743D01*\nY443243D01*\nX200243Y442743D01*\nX129500Y440400D02*\nX130000D01*\nX130500Y440900D01*\nY443399D01*\nX134498Y444399D02*\nX133499Y443899D01*\nX132499Y442900D01*\nY441900D01*\nX132999Y441400D01*\nX133999D01*\nX134498Y441900D01*\nY442400D01*\nX133999Y442900D01*\nX132499D01*\nX147400Y415600D02*\nY418599D01*\nX148899D01*\nX149399Y418099D01*\nY417100D01*\nX148899Y416600D01*\nX147400D01*\nX148400D02*\nX149399Y415600D01*\nX150399D02*\nX151399D01*\nX150899D01*\nY418599D01*\nX150399Y418099D01*\nX152898D02*\nX153398Y418599D01*\nX154398D01*\nX154898Y418099D01*\nY416100D01*\nX154398Y415600D01*\nX153398D01*\nX152898Y416100D01*\nY418099D01*\nX147800Y435300D02*\nY438299D01*\nX149300D01*\nX149799Y437799D01*\nY436799D01*\nX149300Y436300D01*\nX147800D01*\nX148800D02*\nX149799Y435300D01*\nX150799D02*\nX151799D01*\nX151299D01*\nY438299D01*\nX150799Y437799D01*\nX153298Y435300D02*\nX154298D01*\nX153798D01*\nY438299D01*\nX153298Y437799D01*\nX170543Y321243D02*\nX170044Y321743D01*\nX169044D01*\nX168544Y321243D01*\nY320743D01*\nX169044Y320244D01*\nX170044D01*\nX170543Y319744D01*\nY319244D01*\nX170044Y318744D01*\nX169044D01*\nX168544Y319244D01*\nX171543Y321743D02*\nY318744D01*\nX172543Y319744D01*\nX173542Y318744D01*\nY321743D01*\nX174542Y318744D02*\nX175542D01*\nX175042D01*\nY321743D01*\nX174542Y321243D01*\nX161244Y438743D02*\nY436244D01*\nX161744Y435744D01*\nX162744D01*\nX163243Y436244D01*\nY438743D01*\nX164243Y435744D02*\nX165243D01*\nX164743D01*\nY438743D01*\nX164243Y438243D01*\nX204743Y321743D02*\nX204244Y322243D01*\nX203244D01*\nX202744Y321743D01*\nY321243D01*\nX203244Y320744D01*\nX204244D01*\nX204743Y320244D01*\nY319744D01*\nX204244Y319244D01*\nX203244D01*\nX202744Y319744D01*\nX205743Y322243D02*\nY319244D01*\nX206743Y320244D01*\nX207743Y319244D01*\nY322243D01*\nX208742Y321743D02*\nX209242Y322243D01*\nX210242D01*\nX210741Y321743D01*\nY321243D01*\nX210242Y320744D01*\nX209742D01*\nX210242D01*\nX210741Y320244D01*\nY319744D01*\nX210242Y319244D01*\nX209242D01*\nX208742Y319744D01*\nX244743Y385244D02*\nY387243D01*\nX244244Y387743D01*\nX243244D01*\nX242744Y387243D01*\nY385244D01*\nX243244Y384744D01*\nX244244D01*\nX243744Y385744D02*\nX244743Y384744D01*\nX244244D02*\nX244743Y385244D01*\nX245743Y384744D02*\nX246743D01*\nX246243D01*\nY387743D01*\nX245743Y387243D01*\nX242743Y368744D02*\nY370743D01*\nX242244Y371243D01*\nX241244D01*\nX240744Y370743D01*\nY368744D01*\nX241244Y368244D01*\nX242244D01*\nX241744Y369244D02*\nX242743Y368244D01*\nX242244D02*\nX242743Y368744D01*\nX243743Y370743D02*\nX244243Y371243D01*\nX245243D01*\nX245743Y370743D01*\nY370243D01*\nX245243Y369744D01*\nX244743D01*\nX245243D01*\nX245743Y369244D01*\nY368744D01*\nX245243Y368244D01*\nX244243D01*\nX243743Y368744D01*\nX241743Y352244D02*\nY354243D01*\nX241244Y354743D01*\nX240244D01*\nX239744Y354243D01*\nY352244D01*\nX240244Y351744D01*\nX241244D01*\nX240744Y352744D02*\nX241743Y351744D01*\nX241244D02*\nX241743Y352244D01*\nX244243Y351744D02*\nY354743D01*\nX242743Y353244D01*\nX244742D01*\nX284243Y442743D02*\nX283244D01*\nX283744D01*\nY440244D01*\nX283244Y439744D01*\nX282744D01*\nX282244Y440244D01*\nX287243Y439744D02*\nX285243D01*\nX287243Y441743D01*\nY442243D01*\nX286743Y442743D01*\nX285743D01*\nX285243Y442243D01*\nX165720Y510492D02*\nX169052D01*\nX167386D01*\nY505494D01*\nX171551D02*\nX173217D01*\nX174050Y506327D01*\nY507993D01*\nX173217Y508826D01*\nX171551D01*\nX170718Y507993D01*\nY506327D01*\nX171551Y505494D01*\nX175716Y503828D02*\nY508826D01*\nX178216D01*\nX179049Y507993D01*\nY506327D01*\nX178216Y505494D01*\nX175716D01*\nX189046Y509659D02*\nX188212Y510492D01*\nX186546D01*\nX185713Y509659D01*\nY508826D01*\nX186546Y507993D01*\nX188212D01*\nX189046Y507160D01*\nY506327D01*\nX188212Y505494D01*\nX186546D01*\nX185713Y506327D01*\nX190712Y505494D02*\nX192378D01*\nX191545D01*\nY508826D01*\nX190712D01*\nX194877Y505494D02*\nX196543D01*\nX195710D01*\nY510492D01*\nX194877D01*\nX199042Y505494D02*\nY510492D01*\nY507160D02*\nX201541Y508826D01*\nX199042Y507160D02*\nX201541Y505494D01*\nX204041D02*\nX206540D01*\nX207373Y506327D01*\nX206540Y507160D01*\nX204874D01*\nX204041Y507993D01*\nX204874Y508826D01*\nX207373D01*\nX212371D02*\nX209872D01*\nX209039Y507993D01*\nY506327D01*\nX209872Y505494D01*\nX212371D01*\nX214037Y508826D02*\nY505494D01*\nY507160D01*\nX214870Y507993D01*\nX215704Y508826D01*\nX216537D01*\nX221535Y505494D02*\nX219869D01*\nX219036Y506327D01*\nY507993D01*\nX219869Y508826D01*\nX221535D01*\nX222368Y507993D01*\nY507160D01*\nX219036D01*\nX226533Y505494D02*\nX224867D01*\nX224034Y506327D01*\nY507993D01*\nX224867Y508826D01*\nX226533D01*\nX227366Y507993D01*\nY507160D01*\nX224034D01*\nX229032Y505494D02*\nY508826D01*\nX231532D01*\nX232365Y507993D01*\nY505494D01*\nX261744Y433617D02*\nY431618D01*\nX262744Y430618D01*\nX263743Y431618D01*\nY433617D01*\nX264743D02*\nX265743D01*\nX265243D01*\nY430618D01*\nX264743D01*\nX265743D01*\nX267242D02*\nY433617D01*\nX269242Y430618D01*\nY433617D01*\nX263243Y423243D02*\nX262744Y423743D01*\nX261744D01*\nX261244Y423243D01*\nY422743D01*\nX261744Y422244D01*\nX262744D01*\nX263243Y421744D01*\nY421244D01*\nX262744Y420744D01*\nX261744D01*\nX261244Y421244D01*\nX264243Y423743D02*\nX266243D01*\nX265243D01*\nY420744D01*\nX267242D02*\nY423743D01*\nX268742D01*\nX269241Y423243D01*\nY422244D01*\nX268742Y421744D01*\nX267242D01*\nX261244Y412243D02*\nY409244D01*\nX262744D01*\nX263243Y409744D01*\nY411743D01*\nX262744Y412243D01*\nX261244D01*\nX264243D02*\nX265243D01*\nX264743D01*\nY409244D01*\nX264243D01*\nX265243D01*\nX266742D02*\nY412243D01*\nX268242D01*\nX268742Y411743D01*\nY410744D01*\nX268242Y410244D01*\nX266742D01*\nX267742D02*\nX268742Y409244D01*\nX263744Y382243D02*\nY379244D01*\nX265244D01*\nX265743Y379744D01*\nY381743D01*\nX265244Y382243D01*\nX263744D01*\nX266743Y381743D02*\nX267243Y382243D01*\nX268243D01*\nX268742Y381743D01*\nY381243D01*\nX268243Y380744D01*\nX267743D01*\nX268243D01*\nX268742Y380244D01*\nY379744D01*\nX268243Y379244D01*\nX267243D01*\nX266743Y379744D01*\nX260123Y365865D02*\nX261537Y364451D01*\nX262951D01*\nX262951Y365865D01*\nX261537Y367279D01*\nX262597Y367632D02*\nY368339D01*\nX263304Y369046D01*\nX264011Y369046D01*\nX264365Y368692D01*\nY367985D01*\nX264011Y367632D01*\nX264365Y367985D01*\nX265072Y367985D01*\nX265425Y367632D01*\nX265425Y366925D01*\nX264718Y366218D01*\nX264011D01*\nX266485Y367985D02*\nX266132Y368339D01*\nX266485Y368692D01*\nX266839Y368339D01*\nX266485Y367985D01*\nY371520D02*\nY372227D01*\nX267192Y372934D01*\nX267899Y372934D01*\nX268253Y372580D01*\nY371873D01*\nX267899Y371520D01*\nX268253Y371873D01*\nX268959D01*\nX269313Y371520D01*\nY370813D01*\nX268606Y370106D01*\nX267899D01*\nX263744Y361243D02*\nX265743D01*\nX264744D01*\nY358244D01*\nX266743Y361243D02*\nX268742Y358244D01*\nY361243D02*\nX266743Y358244D01*\nX263744Y349044D02*\nY352043D01*\nX265244D01*\nX265743Y351543D01*\nY350544D01*\nX265244Y350044D01*\nX263744D01*\nX264744D02*\nX265743Y349044D01*\nX266743Y352043D02*\nX268742Y349044D01*\nY352043D02*\nX266743Y349044D01*\nX263743Y392243D02*\nX263244Y392743D01*\nX262244D01*\nX261744Y392243D01*\nY390244D01*\nX262244Y389744D01*\nX263244D01*\nX263743Y390244D01*\nY391244D01*\nX262744D01*\nX264743Y389744D02*\nY392743D01*\nX266742Y389744D01*\nY392743D01*\nX267742D02*\nY389744D01*\nX269242D01*\nX269742Y390244D01*\nY392243D01*\nX269242Y392743D01*\nX267742D01*\nX258243Y401743D02*\nX256244D01*\nY398744D01*\nX258243D01*\nX256244Y400244D02*\nX257244D01*\nX259243Y398744D02*\nY401743D01*\nX260743D01*\nX261243Y401243D01*\nY400244D01*\nX260743Y399744D01*\nX259243D01*\nX260243D02*\nX261243Y398744D01*\nX262242D02*\nY401743D01*\nX263742D01*\nX264242Y401243D01*\nY400244D01*\nX263742Y399744D01*\nX262242D01*\nX263242D02*\nX264242Y398744D01*\nX266741Y401743D02*\nX265741D01*\nX265241Y401243D01*\nY399244D01*\nX265741Y398744D01*\nX266741D01*\nX267241Y399244D01*\nY401243D01*\nX266741Y401743D01*\nX268240Y398744D02*\nY401743D01*\nX269740D01*\nX270240Y401243D01*\nY400244D01*\nX269740Y399744D01*\nX268240D01*\nX269240D02*\nX270240Y398744D01*\nX262743Y342243D02*\nX262244Y342743D01*\nX261244D01*\nX260744Y342243D01*\nY340244D01*\nX261244Y339744D01*\nX262244D01*\nX262743Y340244D01*\nY341244D01*\nX261744D01*\nX263743Y339744D02*\nY342743D01*\nX265742Y339744D01*\nY342743D01*\nX266742D02*\nY339744D01*\nX268242D01*\nX268741Y340244D01*\nY342243D01*\nX268242Y342743D01*\nX266742D01*\nX373044Y453687D02*\nG03*\nX373044Y453687I-12400J0D01*\nG01*\nX429243Y322743D02*\nX428744Y323243D01*\nX427744D01*\nX427244Y322743D01*\nY322243D01*\nX427744Y321744D01*\nX428744D01*\nX429243Y321244D01*\nY320744D01*\nX428744Y320244D01*\nX427744D01*\nX427244Y320744D01*\nX430243Y323243D02*\nY320244D01*\nX431243Y321244D01*\nX432242Y320244D01*\nY323243D01*\nX434742Y320244D02*\nY323243D01*\nX433242Y321744D01*\nX435242D01*\nX431743Y443743D02*\nX430744D01*\nX431244D01*\nY441244D01*\nX430744Y440744D01*\nX430244D01*\nX429744Y441244D01*\nX432743Y443243D02*\nX433243Y443743D01*\nX434243D01*\nX434742Y443243D01*\nY442743D01*\nX434243Y442244D01*\nX433743D01*\nX434243D01*\nX434742Y441744D01*\nY441244D01*\nX434243Y440744D01*\nX433243D01*\nX432743Y441244D01*\nX331199Y362299D02*\nX330200D01*\nX330699D01*\nY359800D01*\nX330200Y359300D01*\nX329700D01*\nX329200Y359800D01*\nX334198Y362299D02*\nX332199D01*\nY360800D01*\nX333199Y361299D01*\nX333699D01*\nX334198Y360800D01*\nY359800D01*\nX333699Y359300D01*\nX332699D01*\nX332199Y359800D01*\nX336743Y459743D02*\nX336244Y460243D01*\nX335244D01*\nX334744Y459743D01*\nY457744D01*\nX335244Y457244D01*\nX336244D01*\nX336743Y457744D01*\nX339742Y457244D02*\nX337743D01*\nX339742Y459243D01*\nY459743D01*\nX339243Y460243D01*\nX338243D01*\nX337743Y459743D01*\nX340742Y457244D02*\nX341742D01*\nX341242D01*\nY460243D01*\nX340742Y459743D01*\nX408200Y342199D02*\nY341699D01*\nX409200Y340700D01*\nX410199Y341699D01*\nY342199D01*\nX409200Y340700D02*\nY339200D01*\nX411199D02*\nX412199D01*\nX411699D01*\nY342199D01*\nX411199Y341699D01*\nX329345Y370844D02*\nX331844D01*\nX332344Y371344D01*\nY372344D01*\nX331844Y372843D01*\nX329345D01*\nX329845Y375842D02*\nX329345Y375343D01*\nY374343D01*\nX329845Y373843D01*\nX330345D01*\nX330845Y374343D01*\nY375343D01*\nX331344Y375842D01*\nX331844D01*\nX332344Y375343D01*\nY374343D01*\nX331844Y373843D01*\nX329345Y376842D02*\nX332344D01*\nY378342D01*\nX331844Y378841D01*\nX331344D01*\nX330845Y378342D01*\nY376842D01*\nY378342D01*\nX330345Y378841D01*\nX329845D01*\nX329345Y378342D01*\nY376842D01*\nX332344Y379841D02*\nY380841D01*\nY380341D01*\nX329345D01*\nX329845Y379841D01*\nX367000Y361699D02*\nY359200D01*\nX367500Y358700D01*\nX368499D01*\nX368999Y359200D01*\nY361699D01*\nX369999Y361199D02*\nX370499Y361699D01*\nX371498D01*\nX371998Y361199D01*\nY360699D01*\nX371498Y360199D01*\nX371998Y359700D01*\nY359200D01*\nX371498Y358700D01*\nX370499D01*\nX369999Y359200D01*\nY359700D01*\nX370499Y360199D01*\nX369999Y360699D01*\nY361199D01*\nX370499Y360199D02*\nX371498D01*\nX352544Y369143D02*\nY366644D01*\nX353044Y366144D01*\nX354044D01*\nX354543Y366644D01*\nY369143D01*\nX355543D02*\nX357542D01*\nY368643D01*\nX355543Y366644D01*\nY366144D01*\nX428244Y418243D02*\nY415744D01*\nX428744Y415244D01*\nX429744D01*\nX430243Y415744D01*\nY418243D01*\nX433243Y415244D02*\nX431243D01*\nX433243Y417243D01*\nY417743D01*\nX432743Y418243D01*\nX431743D01*\nX431243Y417743D01*\nX326743Y398243D02*\nX326244Y398743D01*\nX325244D01*\nX324744Y398243D01*\nY397743D01*\nX325244Y397244D01*\nX326244D01*\nX326743Y396744D01*\nY396244D01*\nX326244Y395744D01*\nX325244D01*\nX324744Y396244D01*\nX327743Y398743D02*\nY395744D01*\nX328743Y396744D01*\nX329743Y395744D01*\nY398743D01*\nX332741D02*\nX330742D01*\nY397244D01*\nX331742Y397743D01*\nX332242D01*\nX332741Y397244D01*\nY396244D01*\nX332242Y395744D01*\nX331242D01*\nX330742Y396244D01*\nX424100Y416500D02*\nX421101D01*\nY418000D01*\nX421601Y418499D01*\nX422601D01*\nX423100Y418000D01*\nY416500D01*\nY417500D02*\nX424100Y418499D01*\nY421498D02*\nY419499D01*\nX422101Y421498D01*\nX421601D01*\nX421101Y420998D01*\nY419999D01*\nX421601Y419499D01*\nX414244Y407744D02*\nX411245D01*\nY409244D01*\nX411745Y409743D01*\nX412745D01*\nX413244Y409244D01*\nY407744D01*\nY408744D02*\nX414244Y409743D01*\nY410743D02*\nY411743D01*\nY411243D01*\nX411245D01*\nX411745Y410743D01*\nX333600Y339899D02*\nY336900D01*\nX335599D01*\nX338598Y339899D02*\nX336599D01*\nY336900D01*\nX338598D01*\nX336599Y338400D02*\nX337599D01*\nX339598Y339899D02*\nY336900D01*\nX341098D01*\nX341597Y337400D01*\nY339399D01*\nX341098Y339899D01*\nX339598D01*\nX344596Y336900D02*\nX342597D01*\nX344596Y338899D01*\nY339399D01*\nX344097Y339899D01*\nX343097D01*\nX342597Y339399D01*\nX349644Y362943D02*\nY359944D01*\nX351643D01*\nX354643Y362943D02*\nX352643D01*\nY359944D01*\nX354643D01*\nX352643Y361444D02*\nX353643D01*\nX355642Y362943D02*\nY359944D01*\nX357142D01*\nX357642Y360444D01*\nY362443D01*\nX357142Y362943D01*\nX355642D01*\nX358641Y359944D02*\nX359641D01*\nX359141D01*\nY362943D01*\nX358641Y362443D01*\nX422444Y433243D02*\nY430244D01*\nX423944D01*\nX424443Y430744D01*\nY432743D01*\nX423944Y433243D01*\nX422444D01*\nX425443Y430244D02*\nX426443D01*\nX425943D01*\nY433243D01*\nX425443Y432743D01*\nX427099Y336699D02*\nX426600Y337199D01*\nX425600D01*\nX425100Y336699D01*\nY334700D01*\nX425600Y334200D01*\nX426600D01*\nX427099Y334700D01*\nX428099Y334200D02*\nX429099D01*\nX428599D01*\nY337199D01*\nX428099Y336699D01*\nX430598D02*\nX431098Y337199D01*\nX432098D01*\nX432598Y336699D01*\nY336199D01*\nX432098Y335700D01*\nX432598Y335200D01*\nY334700D01*\nX432098Y334200D01*\nX431098D01*\nX430598Y334700D01*\nY335200D01*\nX431098Y335700D01*\nX430598Y336199D01*\nY336699D01*\nX431098Y335700D02*\nX432098D01*\nX418999Y329399D02*\nX418500Y329899D01*\nX417500D01*\nX417000Y329399D01*\nY327400D01*\nX417500Y326900D01*\nX418500D01*\nX418999Y327400D01*\nX419999Y326900D02*\nX420999D01*\nX420499D01*\nY329899D01*\nX419999Y329399D01*\nX422498Y329899D02*\nX424498D01*\nY329399D01*\nX422498Y327400D01*\nY326900D01*\nX344743Y410243D02*\nX344244Y410743D01*\nX343244D01*\nX342744Y410243D01*\nY408244D01*\nX343244Y407744D01*\nX344244D01*\nX344743Y408244D01*\nX345743Y407744D02*\nX346743D01*\nX346243D01*\nY410743D01*\nX345743Y410243D01*\nX348242D02*\nX348742Y410743D01*\nX349742D01*\nX350242Y410243D01*\nY409743D01*\nX349742Y409244D01*\nX349242D01*\nX349742D01*\nX350242Y408744D01*\nY408244D01*\nX349742Y407744D01*\nX348742D01*\nX348242Y408244D01*\nX377244Y439244D02*\nX377744D01*\nX378244Y439744D01*\nY442243D01*\nX380243Y440244D02*\nX381243D01*\nX380743D01*\nY443243D01*\nX380243Y442743D01*\nX309500Y440400D02*\nX310000D01*\nX310500Y440900D01*\nY443399D01*\nX314498Y444399D02*\nX313499Y443899D01*\nX312499Y442900D01*\nY441900D01*\nX312999Y441400D01*\nX313999D01*\nX314498Y441900D01*\nY442400D01*\nX313999Y442900D01*\nX312499D01*\nX327400Y415600D02*\nY418599D01*\nX328900D01*\nX329399Y418099D01*\nY417100D01*\nX328900Y416600D01*\nX327400D01*\nX328400D02*\nX329399Y415600D01*\nX330399D02*\nX331399D01*\nX330899D01*\nY418599D01*\nX330399Y418099D01*\nX332898D02*\nX333398Y418599D01*\nX334398D01*\nX334898Y418099D01*\nY416100D01*\nX334398Y415600D01*\nX333398D01*\nX332898Y416100D01*\nY418099D01*\nX327800Y435300D02*\nY438299D01*\nX329299D01*\nX329799Y437799D01*\nY436799D01*\nX329299Y436300D01*\nX327800D01*\nX328800D02*\nX329799Y435300D01*\nX330799D02*\nX331799D01*\nX331299D01*\nY438299D01*\nX330799Y437799D01*\nX333298Y435300D02*\nX334298D01*\nX333798D01*\nY438299D01*\nX333298Y437799D01*\nX350543Y321243D02*\nX350044Y321743D01*\nX349044D01*\nX348544Y321243D01*\nY320743D01*\nX349044Y320244D01*\nX350044D01*\nX350543Y319744D01*\nY319244D01*\nX350044Y318744D01*\nX349044D01*\nX348544Y319244D01*\nX351543Y321743D02*\nY318744D01*\nX352543Y319744D01*\nX353542Y318744D01*\nY321743D01*\nX354542Y318744D02*\nX355542D01*\nX355042D01*\nY321743D01*\nX354542Y321243D01*\nX341244Y438743D02*\nY436244D01*\nX341744Y435744D01*\nX342744D01*\nX343243Y436244D01*\nY438743D01*\nX344243Y435744D02*\nX345243D01*\nX344743D01*\nY438743D01*\nX344243Y438243D01*\nX384743Y321743D02*\nX384244Y322243D01*\nX383244D01*\nX382744Y321743D01*\nY321243D01*\nX383244Y320744D01*\nX384244D01*\nX384743Y320244D01*\nY319744D01*\nX384244Y319244D01*\nX383244D01*\nX382744Y319744D01*\nX385743Y322243D02*\nY319244D01*\nX386743Y320244D01*\nX387742Y319244D01*\nY322243D01*\nX388742Y321743D02*\nX389242Y322243D01*\nX390242D01*\nX390741Y321743D01*\nY321243D01*\nX390242Y320744D01*\nX389742D01*\nX390242D01*\nX390741Y320244D01*\nY319744D01*\nX390242Y319244D01*\nX389242D01*\nX388742Y319744D01*\nX424743Y385244D02*\nY387243D01*\nX424244Y387743D01*\nX423244D01*\nX422744Y387243D01*\nY385244D01*\nX423244Y384744D01*\nX424244D01*\nX423744Y385744D02*\nX424743Y384744D01*\nX424244D02*\nX424743Y385244D01*\nX425743Y384744D02*\nX426743D01*\nX426243D01*\nY387743D01*\nX425743Y387243D01*\nX422743Y368744D02*\nY370743D01*\nX422244Y371243D01*\nX421244D01*\nX420744Y370743D01*\nY368744D01*\nX421244Y368244D01*\nX422244D01*\nX421744Y369244D02*\nX422743Y368244D01*\nX422244D02*\nX422743Y368744D01*\nX423743Y370743D02*\nX424243Y371243D01*\nX425243D01*\nX425742Y370743D01*\nY370243D01*\nX425243Y369744D01*\nX424743D01*\nX425243D01*\nX425742Y369244D01*\nY368744D01*\nX425243Y368244D01*\nX424243D01*\nX423743Y368744D01*\nX421743Y352244D02*\nY354243D01*\nX421244Y354743D01*\nX420244D01*\nX419744Y354243D01*\nY352244D01*\nX420244Y351744D01*\nX421244D01*\nX420744Y352744D02*\nX421743Y351744D01*\nX421244D02*\nX421743Y352244D01*\nX424243Y351744D02*\nY354743D01*\nX422743Y353244D01*\nX424743D01*\nX464243Y442743D02*\nX463244D01*\nX463744D01*\nY440244D01*\nX463244Y439744D01*\nX462744D01*\nX462244Y440244D01*\nX467242Y439744D02*\nX465243D01*\nX467242Y441743D01*\nY442243D01*\nX466743Y442743D01*\nX465743D01*\nX465243Y442243D01*\nX345720Y510492D02*\nX349052D01*\nX347386D01*\nY505494D01*\nX351551D02*\nX353217D01*\nX354050Y506327D01*\nY507993D01*\nX353217Y508826D01*\nX351551D01*\nX350718Y507993D01*\nY506327D01*\nX351551Y505494D01*\nX355716Y503828D02*\nY508826D01*\nX358216D01*\nX359049Y507993D01*\nY506327D01*\nX358216Y505494D01*\nX355716D01*\nX369045Y509659D02*\nX368212Y510492D01*\nX366546D01*\nX365713Y509659D01*\nY508826D01*\nX366546Y507993D01*\nX368212D01*\nX369045Y507160D01*\nY506327D01*\nX368212Y505494D01*\nX366546D01*\nX365713Y506327D01*\nX370712Y505494D02*\nX372378D01*\nX371545D01*\nY508826D01*\nX370712D01*\nX374877Y505494D02*\nX376543D01*\nX375710D01*\nY510492D01*\nX374877D01*\nX379042Y505494D02*\nY510492D01*\nY507160D02*\nX381541Y508826D01*\nX379042Y507160D02*\nX381541Y505494D01*\nX384041D02*\nX386540D01*\nX387373Y506327D01*\nX386540Y507160D01*\nX384874D01*\nX384041Y507993D01*\nX384874Y508826D01*\nX387373D01*\nX392371D02*\nX389872D01*\nX389039Y507993D01*\nY506327D01*\nX389872Y505494D01*\nX392371D01*\nX394037Y508826D02*\nY505494D01*\nY507160D01*\nX394870Y507993D01*\nX395704Y508826D01*\nX396537D01*\nX401535Y505494D02*\nX399869D01*\nX399036Y506327D01*\nY507993D01*\nX399869Y508826D01*\nX401535D01*\nX402368Y507993D01*\nY507160D01*\nX399036D01*\nX406533Y505494D02*\nX404867D01*\nX404034Y506327D01*\nY507993D01*\nX404867Y508826D01*\nX406533D01*\nX407366Y507993D01*\nY507160D01*\nX404034D01*\nX409032Y505494D02*\nY508826D01*\nX411532D01*\nX412365Y507993D01*\nY505494D01*\nX441744Y433617D02*\nY431618D01*\nX442744Y430618D01*\nX443743Y431618D01*\nY433617D01*\nX444743D02*\nX445743D01*\nX445243D01*\nY430618D01*\nX444743D01*\nX445743D01*\nX447242D02*\nY433617D01*\nX449242Y430618D01*\nY433617D01*\nX443243Y423243D02*\nX442744Y423743D01*\nX441744D01*\nX441244Y423243D01*\nY422743D01*\nX441744Y422244D01*\nX442744D01*\nX443243Y421744D01*\nY421244D01*\nX442744Y420744D01*\nX441744D01*\nX441244Y421244D01*\nX444243Y423743D02*\nX446243D01*\nX445243D01*\nY420744D01*\nX447242D02*\nY423743D01*\nX448742D01*\nX449241Y423243D01*\nY422244D01*\nX448742Y421744D01*\nX447242D01*\nX441244Y412243D02*\nY409244D01*\nX442744D01*\nX443243Y409744D01*\nY411743D01*\nX442744Y412243D01*\nX441244D01*\nX444243D02*\nX445243D01*\nX444743D01*\nY409244D01*\nX444243D01*\nX445243D01*\nX446742D02*\nY412243D01*\nX448242D01*\nX448742Y411743D01*\nY410744D01*\nX448242Y410244D01*\nX446742D01*\nX447742D02*\nX448742Y409244D01*\nX443744Y382243D02*\nY379244D01*\nX445244D01*\nX445743Y379744D01*\nY381743D01*\nX445244Y382243D01*\nX443744D01*\nX446743Y381743D02*\nX447243Y382243D01*\nX448243D01*\nX448742Y381743D01*\nY381243D01*\nX448243Y380744D01*\nX447743D01*\nX448243D01*\nX448742Y380244D01*\nY379744D01*\nX448243Y379244D01*\nX447243D01*\nX446743Y379744D01*\nX440124Y365865D02*\nX441537Y364451D01*\nX442951D01*\nX442951Y365865D01*\nX441537Y367279D01*\nX442597Y367632D02*\nY368339D01*\nX443304Y369046D01*\nX444011Y369046D01*\nX444365Y368692D01*\nY367985D01*\nX444011Y367632D01*\nX444365Y367985D01*\nX445072Y367985D01*\nX445425Y367632D01*\nX445425Y366925D01*\nX444718Y366218D01*\nX444011D01*\nX446485Y367985D02*\nX446132Y368339D01*\nX446485Y368692D01*\nX446839Y368339D01*\nX446485Y367985D01*\nY371520D02*\nY372227D01*\nX447192Y372934D01*\nX447899Y372934D01*\nX448252Y372580D01*\nY371873D01*\nX447899Y371520D01*\nX448252Y371873D01*\nX448959D01*\nX449313Y371520D01*\nY370813D01*\nX448606Y370106D01*\nX447899D01*\nX443744Y361243D02*\nX445743D01*\nX444744D01*\nY358244D01*\nX446743Y361243D02*\nX448742Y358244D01*\nY361243D02*\nX446743Y358244D01*\nX443744Y349044D02*\nY352043D01*\nX445244D01*\nX445743Y351543D01*\nY350544D01*\nX445244Y350044D01*\nX443744D01*\nX444744D02*\nX445743Y349044D01*\nX446743Y352043D02*\nX448742Y349044D01*\nY352043D02*\nX446743Y349044D01*\nX443743Y392243D02*\nX443244Y392743D01*\nX442244D01*\nX441744Y392243D01*\nY390244D01*\nX442244Y389744D01*\nX443244D01*\nX443743Y390244D01*\nY391244D01*\nX442744D01*\nX444743Y389744D02*\nY392743D01*\nX446742Y389744D01*\nY392743D01*\nX447742D02*\nY389744D01*\nX449242D01*\nX449742Y390244D01*\nY392243D01*\nX449242Y392743D01*\nX447742D01*\nX438243Y401743D02*\nX436244D01*\nY398744D01*\nX438243D01*\nX436244Y400244D02*\nX437244D01*\nX439243Y398744D02*\nY401743D01*\nX440743D01*\nX441243Y401243D01*\nY400244D01*\nX440743Y399744D01*\nX439243D01*\nX440243D02*\nX441243Y398744D01*\nX442242D02*\nY401743D01*\nX443742D01*\nX444242Y401243D01*\nY400244D01*\nX443742Y399744D01*\nX442242D01*\nX443242D02*\nX444242Y398744D01*\nX446741Y401743D02*\nX445741D01*\nX445241Y401243D01*\nY399244D01*\nX445741Y398744D01*\nX446741D01*\nX447240Y399244D01*\nY401243D01*\nX446741Y401743D01*\nX448240Y398744D02*\nY401743D01*\nX449740D01*\nX450240Y401243D01*\nY400244D01*\nX449740Y399744D01*\nX448240D01*\nX449240D02*\nX450240Y398744D01*\nX442743Y342243D02*\nX442244Y342743D01*\nX441244D01*\nX440744Y342243D01*\nY340244D01*\nX441244Y339744D01*\nX442244D01*\nX442743Y340244D01*\nY341244D01*\nX441744D01*\nX443743Y339744D02*\nY342743D01*\nX445743Y339744D01*\nY342743D01*\nX446742D02*\nY339744D01*\nX448242D01*\nX448741Y340244D01*\nY342243D01*\nX448242Y342743D01*\nX446742D01*\nD45*\nX125527Y195744D02*\nY212279D01*\nX147968D01*\nX125527Y179209D02*\nX147968D01*\nY180390D01*\nY188657D01*\nX125527Y179209D02*\nY195744D01*\nX147968Y202831D02*\nY212279D01*\nX176823Y162494D02*\nY175994D01*\nX126665Y162494D02*\nX176823D01*\nX126665D02*\nY175844D01*\nX156744Y175949D02*\nX176823Y175994D01*\nX126665Y175844D02*\nX146844D01*\nX207244Y206244D02*\nX210244Y209244D01*\nX207244D02*\nX210244Y206244D01*\nX271295Y155295D02*\nY257105D01*\nY155295D02*\nX295705D01*\nY256995D01*\nX291500Y161200D02*\nX295500D01*\nX291500D02*\nX293500Y163200D01*\nX291500Y161200D02*\nX293500Y159200D01*\nX291705Y171200D02*\nX293705Y169200D01*\nX291705Y171200D02*\nX293705Y173200D01*\nX291705Y171200D02*\nX295705D01*\nX291705Y181200D02*\nX293705Y179200D01*\nX291705Y181200D02*\nX293705Y183200D01*\nX291705Y181200D02*\nX295705D01*\nX291705Y191200D02*\nX293705Y189200D01*\nX291705Y191200D02*\nX293705Y193200D01*\nX291705Y191200D02*\nX295705D01*\nX291705Y201200D02*\nX293705Y199200D01*\nX291705Y201200D02*\nX293705Y203200D01*\nX291705Y201200D02*\nX295705D01*\nX291705Y211200D02*\nX293705Y209200D01*\nX291705Y211200D02*\nX293705Y213200D01*\nX291705Y211200D02*\nX295705D01*\nX291705Y221200D02*\nX293705Y219200D01*\nX291705Y221200D02*\nX293705Y223200D01*\nX291705Y221200D02*\nX295705D01*\nX291705Y231200D02*\nX293705Y229200D01*\nX291705Y231200D02*\nX293705Y233200D01*\nX291705Y231200D02*\nX295705D01*\nX271295Y257105D02*\nX295595D01*\nX291500Y241400D02*\nX295500D01*\nX291500D02*\nX293500Y243400D01*\nX291500Y241400D02*\nX293500Y239400D01*\nX291600Y251900D02*\nX295600D01*\nX291600D02*\nX293600Y253900D01*\nX291600Y251900D02*\nX293600Y249900D01*\nX203776Y259709D02*\nX247713D01*\nY289630D01*\nX203776Y259709D02*\nY288055D01*\nX204134Y289630D02*\nX247713D01*\nX203776Y289272D02*\nX204134Y289630D01*\nX203776Y288055D02*\nY289272D01*\nX241213Y282209D02*\nY289630D01*\nX230713Y282209D02*\nX241213D01*\nX230713D02*\nY289630D01*\nX220713Y282209D02*\nY289709D01*\nX211713Y282209D02*\nX220713D01*\nX211713D02*\nY289630D01*\nX195644Y277744D02*\nY287244D01*\nX169644D02*\nX195644D01*\nX165644Y283244D02*\nX169644Y287244D01*\nX165644Y277744D02*\nY283244D01*\nY265744D02*\nY269744D01*\nY265744D02*\nX169644Y261744D01*\nX195644D01*\nY268744D01*\nY269744D01*\nX157244Y218744D02*\nY222680D01*\nX159212D01*\nX159868Y222024D01*\nY220712D01*\nX159212Y220056D01*\nX157244D01*\nX158556D02*\nX159868Y218744D01*\nX163804Y222680D02*\nX161180D01*\nY218744D01*\nX163804D01*\nX161180Y220712D02*\nX162492D01*\nX167739Y222024D02*\nX167083Y222680D01*\nX165771D01*\nX165116Y222024D01*\nY221368D01*\nX165771Y220712D01*\nX167083D01*\nX167739Y220056D01*\nY219400D01*\nX167083Y218744D01*\nX165771D01*\nX165116Y219400D01*\nX171675Y222680D02*\nX169051D01*\nY218744D01*\nX171675D01*\nX169051Y220712D02*\nX170363D01*\nX172987Y222680D02*\nX175611D01*\nX174299D01*\nY218744D01*\nX185244Y216244D02*\nY221242D01*\nX186910Y219576D01*\nX188576Y221242D01*\nY216244D01*\nX190243D02*\nX191909D01*\nX191076D01*\nY219576D01*\nX190243D01*\nX194408Y216244D02*\nX196907D01*\nX197740Y217077D01*\nX196907Y217910D01*\nX195241D01*\nX194408Y218743D01*\nX195241Y219576D01*\nX197740D01*\nX200239Y216244D02*\nY220409D01*\nY218743D01*\nX199406D01*\nX201072D01*\nX200239D01*\nY220409D01*\nX201072Y221242D01*\nX203572Y216244D02*\nX205238D01*\nX204404D01*\nY219576D01*\nX203572D01*\nX208570Y220409D02*\nY219576D01*\nX207737D01*\nX209403D01*\nX208570D01*\nY217077D01*\nX209403Y216244D01*\nX216900Y221242D02*\nX220233D01*\nX218567D01*\nY216244D01*\nX224398D02*\nX222732D01*\nX221899Y217077D01*\nY218743D01*\nX222732Y219576D01*\nX224398D01*\nX225231Y218743D01*\nY217910D01*\nX221899D01*\nX230229Y219576D02*\nX227730D01*\nX226897Y218743D01*\nY217077D01*\nX227730Y216244D01*\nX230229D01*\nX231896Y221242D02*\nY216244D01*\nY218743D01*\nX232729Y219576D01*\nX234395D01*\nX235228Y218743D01*\nY216244D01*\nX192344Y225910D02*\nX193010Y225244D01*\nX194343D01*\nX195010Y225910D01*\nY228576D01*\nX194343Y229243D01*\nX193010D01*\nX192344Y228576D01*\nY227910D01*\nX193010Y227243D01*\nX195010D01*\nX196343Y225244D02*\nX199009Y227910D01*\nX203007Y225244D02*\nX200342D01*\nX203007Y227910D01*\nY228576D01*\nX202341Y229243D01*\nX201008D01*\nX200342Y228576D01*\nX204340Y225910D02*\nX205007Y225244D01*\nX206340D01*\nX207006Y225910D01*\nY228576D01*\nX206340Y229243D01*\nX205007D01*\nX204340Y228576D01*\nY227910D01*\nX205007Y227243D01*\nX207006D01*\nX208339Y225244D02*\nX211005Y227910D01*\nX215003Y225244D02*\nX212338D01*\nX215003Y227910D01*\nY228576D01*\nX214337Y229243D01*\nX213004D01*\nX212338Y228576D01*\nX216336D02*\nX217003Y229243D01*\nX218336D01*\nX219002Y228576D01*\nY225910D01*\nX218336Y225244D01*\nX217003D01*\nX216336Y225910D01*\nY228576D01*\nX220335Y225244D02*\nX221668D01*\nX221002D01*\nY229243D01*\nX220335Y228576D01*\nX226333Y229243D02*\nX225000Y228576D01*\nX223667Y227243D01*\nY225910D01*\nX224334Y225244D01*\nX225667D01*\nX226333Y225910D01*\nY226577D01*\nX225667Y227243D01*\nX223667D01*\nX179244Y194744D02*\nY198743D01*\nX181910Y194744D01*\nY198743D01*\nX183909Y197410D02*\nX185242D01*\nX185909Y196743D01*\nY194744D01*\nX183909D01*\nX183243Y195411D01*\nX183909Y196077D01*\nX185909D01*\nX187241Y194744D02*\nY197410D01*\nX189241D01*\nX189907Y196743D01*\nY194744D01*\nX191907D02*\nX193240D01*\nX193906Y195411D01*\nY196743D01*\nX193240Y197410D01*\nX191907D01*\nX191240Y196743D01*\nY195411D01*\nX191907Y194744D01*\nX199238Y198743D02*\nX201903D01*\nY198076D01*\nX199238Y195411D01*\nY194744D01*\nX201903D01*\nX205236D02*\nX203903D01*\nX203236Y195411D01*\nY196743D01*\nX203903Y197410D01*\nX205236D01*\nX205902Y196743D01*\nY196077D01*\nX203236D01*\nX207235Y197410D02*\nY194744D01*\nY196077D01*\nX207902Y196743D01*\nX208568Y197410D01*\nX209234D01*\nX211900Y194744D02*\nX213233D01*\nX213900Y195411D01*\nY196743D01*\nX213233Y197410D01*\nX211900D01*\nX211234Y196743D01*\nY195411D01*\nX211900Y194744D01*\nX221897Y198076D02*\nX221231Y198743D01*\nX219898D01*\nX219231Y198076D01*\nY197410D01*\nX219898Y196743D01*\nX221231D01*\nX221897Y196077D01*\nY195411D01*\nX221231Y194744D01*\nX219898D01*\nX219231Y195411D01*\nX223896Y198076D02*\nY197410D01*\nX223230D01*\nX224563D01*\nX223896D01*\nY195411D01*\nX224563Y194744D01*\nX228561D02*\nX227229D01*\nX226562Y195411D01*\nY196743D01*\nX227229Y197410D01*\nX228561D01*\nX229228Y196743D01*\nY196077D01*\nX226562D01*\nX230561Y193411D02*\nY197410D01*\nX232560D01*\nX233227Y196743D01*\nY195411D01*\nX232560Y194744D01*\nX230561D01*\nX234560Y193411D02*\nY197410D01*\nX236559D01*\nX237225Y196743D01*\nY195411D01*\nX236559Y194744D01*\nX234560D01*\nX240558D02*\nX239225D01*\nX238558Y195411D01*\nY196743D01*\nX239225Y197410D01*\nX240558D01*\nX241224Y196743D01*\nY196077D01*\nX238558D01*\nX242557Y197410D02*\nY194744D01*\nY196077D01*\nX243224Y196743D01*\nX243890Y197410D01*\nX244556D01*\nX305527Y195744D02*\nY212279D01*\nX327968D01*\nX305527Y179209D02*\nX327968D01*\nY180390D01*\nY188657D01*\nX305527Y179209D02*\nY195744D01*\nX327968Y202831D02*\nY212279D01*\nX356823Y162494D02*\nY175994D01*\nX306665Y162494D02*\nX356823D01*\nX306665D02*\nY175844D01*\nX336744Y175949D02*\nX356823Y175994D01*\nX306665Y175844D02*\nX326844D01*\nX387244Y206244D02*\nX390244Y209244D01*\nX387244D02*\nX390244Y206244D01*\nX451295Y155295D02*\nY257105D01*\nY155295D02*\nX475705D01*\nY256995D01*\nX471500Y161200D02*\nX475500D01*\nX471500D02*\nX473500Y163200D01*\nX471500Y161200D02*\nX473500Y159200D01*\nX471705Y171200D02*\nX473705Y169200D01*\nX471705Y171200D02*\nX473705Y173200D01*\nX471705Y171200D02*\nX475705D01*\nX471705Y181200D02*\nX473705Y179200D01*\nX471705Y181200D02*\nX473705Y183200D01*\nX471705Y181200D02*\nX475705D01*\nX471705Y191200D02*\nX473705Y189200D01*\nX471705Y191200D02*\nX473705Y193200D01*\nX471705Y191200D02*\nX475705D01*\nX471705Y201200D02*\nX473705Y199200D01*\nX471705Y201200D02*\nX473705Y203200D01*\nX471705Y201200D02*\nX475705D01*\nX471705Y211200D02*\nX473705Y209200D01*\nX471705Y211200D02*\nX473705Y213200D01*\nX471705Y211200D02*\nX475705D01*\nX471705Y221200D02*\nX473705Y219200D01*\nX471705Y221200D02*\nX473705Y223200D01*\nX471705Y221200D02*\nX475705D01*\nX471705Y231200D02*\nX473705Y229200D01*\nX471705Y231200D02*\nX473705Y233200D01*\nX471705Y231200D02*\nX475705D01*\nX451295Y257105D02*\nX475595D01*\nX471500Y241400D02*\nX475500D01*\nX471500D02*\nX473500Y243400D01*\nX471500Y241400D02*\nX473500Y239400D01*\nX471600Y251900D02*\nX475600D01*\nX471600D02*\nX473600Y253900D01*\nX471600Y251900D02*\nX473600Y249900D01*\nX383776Y259709D02*\nX427713D01*\nY289630D01*\nX383776Y259709D02*\nY288055D01*\nX384134Y289630D02*\nX427713D01*\nX383776Y289272D02*\nX384134Y289630D01*\nX383776Y288055D02*\nY289272D01*\nX421213Y282209D02*\nY289630D01*\nX410713Y282209D02*\nX421213D01*\nX410713D02*\nY289630D01*\nX400713Y282209D02*\nY289709D01*\nX391713Y282209D02*\nX400713D01*\nX391713D02*\nY289630D01*\nX375644Y277744D02*\nY287244D01*\nX349644D02*\nX375644D01*\nX345644Y283244D02*\nX349644Y287244D01*\nX345644Y277744D02*\nY283244D01*\nY265744D02*\nY269744D01*\nY265744D02*\nX349644Y261744D01*\nX375644D01*\nY268744D01*\nY269744D01*\nX337244Y218744D02*\nY222680D01*\nX339212D01*\nX339868Y222024D01*\nY220712D01*\nX339212Y220056D01*\nX337244D01*\nX338556D02*\nX339868Y218744D01*\nX343804Y222680D02*\nX341180D01*\nY218744D01*\nX343804D01*\nX341180Y220712D02*\nX342492D01*\nX347739Y222024D02*\nX347083Y222680D01*\nX345772D01*\nX345116Y222024D01*\nY221368D01*\nX345772Y220712D01*\nX347083D01*\nX347739Y220056D01*\nY219400D01*\nX347083Y218744D01*\nX345772D01*\nX345116Y219400D01*\nX351675Y222680D02*\nX349051D01*\nY218744D01*\nX351675D01*\nX349051Y220712D02*\nX350363D01*\nX352987Y222680D02*\nX355611D01*\nX354299D01*\nY218744D01*\nX365244Y216244D02*\nY221242D01*\nX366910Y219576D01*\nX368576Y221242D01*\nY216244D01*\nX370243D02*\nX371909D01*\nX371076D01*\nY219576D01*\nX370243D01*\nX374408Y216244D02*\nX376907D01*\nX377740Y217077D01*\nX376907Y217910D01*\nX375241D01*\nX374408Y218743D01*\nX375241Y219576D01*\nX377740D01*\nX380239Y216244D02*\nY220409D01*\nY218743D01*\nX379406D01*\nX381072D01*\nX380239D01*\nY220409D01*\nX381072Y221242D01*\nX383572Y216244D02*\nX385238D01*\nX384405D01*\nY219576D01*\nX383572D01*\nX388570Y220409D02*\nY219576D01*\nX387737D01*\nX389403D01*\nX388570D01*\nY217077D01*\nX389403Y216244D01*\nX396901Y221242D02*\nX400233D01*\nX398567D01*\nY216244D01*\nX404398D02*\nX402732D01*\nX401899Y217077D01*\nY218743D01*\nX402732Y219576D01*\nX404398D01*\nX405231Y218743D01*\nY217910D01*\nX401899D01*\nX410229Y219576D02*\nX407730D01*\nX406897Y218743D01*\nY217077D01*\nX407730Y216244D01*\nX410229D01*\nX411896Y221242D02*\nY216244D01*\nY218743D01*\nX412729Y219576D01*\nX414395D01*\nX415228Y218743D01*\nY216244D01*\nX372344Y225910D02*\nX373010Y225244D01*\nX374343D01*\nX375010Y225910D01*\nY228576D01*\nX374343Y229243D01*\nX373010D01*\nX372344Y228576D01*\nY227910D01*\nX373010Y227243D01*\nX375010D01*\nX376343Y225244D02*\nX379009Y227910D01*\nX383007Y225244D02*\nX380342D01*\nX383007Y227910D01*\nY228576D01*\nX382341Y229243D01*\nX381008D01*\nX380342Y228576D01*\nX384340Y225910D02*\nX385007Y225244D01*\nX386340D01*\nX387006Y225910D01*\nY228576D01*\nX386340Y229243D01*\nX385007D01*\nX384340Y228576D01*\nY227910D01*\nX385007Y227243D01*\nX387006D01*\nX388339Y225244D02*\nX391005Y227910D01*\nX395003Y225244D02*\nX392338D01*\nX395003Y227910D01*\nY228576D01*\nX394337Y229243D01*\nX393004D01*\nX392338Y228576D01*\nX396336D02*\nX397003Y229243D01*\nX398336D01*\nX399002Y228576D01*\nY225910D01*\nX398336Y225244D01*\nX397003D01*\nX396336Y225910D01*\nY228576D01*\nX400335Y225244D02*\nX401668D01*\nX401002D01*\nY229243D01*\nX400335Y228576D01*\nX406333Y229243D02*\nX405000Y228576D01*\nX403667Y227243D01*\nY225910D01*\nX404334Y225244D01*\nX405667D01*\nX406333Y225910D01*\nY226577D01*\nX405667Y227243D01*\nX403667D01*\nX359244Y194744D02*\nY198743D01*\nX361910Y194744D01*\nY198743D01*\nX363909Y197410D02*\nX365242D01*\nX365909Y196743D01*\nY194744D01*\nX363909D01*\nX363243Y195411D01*\nX363909Y196077D01*\nX365909D01*\nX367242Y194744D02*\nY197410D01*\nX369241D01*\nX369907Y196743D01*\nY194744D01*\nX371907D02*\nX373240D01*\nX373906Y195411D01*\nY196743D01*\nX373240Y197410D01*\nX371907D01*\nX371240Y196743D01*\nY195411D01*\nX371907Y194744D01*\nX379238Y198743D02*\nX381903D01*\nY198076D01*\nX379238Y195411D01*\nY194744D01*\nX381903D01*\nX385236D02*\nX383903D01*\nX383236Y195411D01*\nY196743D01*\nX383903Y197410D01*\nX385236D01*\nX385902Y196743D01*\nY196077D01*\nX383236D01*\nX387235Y197410D02*\nY194744D01*\nY196077D01*\nX387901Y196743D01*\nX388568Y197410D01*\nX389234D01*\nX391900Y194744D02*\nX393233D01*\nX393900Y195411D01*\nY196743D01*\nX393233Y197410D01*\nX391900D01*\nX391234Y196743D01*\nY195411D01*\nX391900Y194744D01*\nX401897Y198076D02*\nX401230Y198743D01*\nX399898D01*\nX399231Y198076D01*\nY197410D01*\nX399898Y196743D01*\nX401230D01*\nX401897Y196077D01*\nY195411D01*\nX401230Y194744D01*\nX399898D01*\nX399231Y195411D01*\nX403896Y198076D02*\nY197410D01*\nX403230D01*\nX404563D01*\nX403896D01*\nY195411D01*\nX404563Y194744D01*\nX408562D02*\nX407229D01*\nX406562Y195411D01*\nY196743D01*\nX407229Y197410D01*\nX408562D01*\nX409228Y196743D01*\nY196077D01*\nX406562D01*\nX410561Y193411D02*\nY197410D01*\nX412560D01*\nX413227Y196743D01*\nY195411D01*\nX412560Y194744D01*\nX410561D01*\nX414560Y193411D02*\nY197410D01*\nX416559D01*\nX417225Y196743D01*\nY195411D01*\nX416559Y194744D01*\nX414560D01*\nX420558D02*\nX419225D01*\nX418558Y195411D01*\nY196743D01*\nX419225Y197410D01*\nX420558D01*\nX421224Y196743D01*\nY196077D01*\nX418558D01*\nX422557Y197410D02*\nY194744D01*\nY196077D01*\nX423223Y196743D01*\nX423890Y197410D01*\nX424556D01*\nX125527Y375744D02*\nY392279D01*\nX147968D01*\nX125527Y359209D02*\nX147968D01*\nY360390D01*\nY368657D01*\nX125527Y359209D02*\nY375744D01*\nX147968Y382831D02*\nY392279D01*\nX176823Y342494D02*\nY355994D01*\nX126665Y342494D02*\nX176823D01*\nX126665D02*\nY355844D01*\nX156744Y355949D02*\nX176823Y355994D01*\nX126665Y355844D02*\nX146844D01*\nX207244Y386244D02*\nX210244Y389244D01*\nX207244D02*\nX210244Y386244D01*\nX271295Y335295D02*\nY437106D01*\nY335295D02*\nX295705D01*\nY436995D01*\nX291500Y341200D02*\nX295500D01*\nX291500D02*\nX293500Y343200D01*\nX291500Y341200D02*\nX293500Y339200D01*\nX291705Y351200D02*\nX293705Y349200D01*\nX291705Y351200D02*\nX293705Y353200D01*\nX291705Y351200D02*\nX295705D01*\nX291705Y361200D02*\nX293705Y359200D01*\nX291705Y361200D02*\nX293705Y363200D01*\nX291705Y361200D02*\nX295705D01*\nX291705Y371200D02*\nX293705Y369200D01*\nX291705Y371200D02*\nX293705Y373200D01*\nX291705Y371200D02*\nX295705D01*\nX291705Y381200D02*\nX293705Y379200D01*\nX291705Y381200D02*\nX293705Y383200D01*\nX291705Y381200D02*\nX295705D01*\nX291705Y391200D02*\nX293705Y389200D01*\nX291705Y391200D02*\nX293705Y393200D01*\nX291705Y391200D02*\nX295705D01*\nX291705Y401200D02*\nX293705Y399200D01*\nX291705Y401200D02*\nX293705Y403200D01*\nX291705Y401200D02*\nX295705D01*\nX291705Y411200D02*\nX293705Y409200D01*\nX291705Y411200D02*\nX293705Y413200D01*\nX291705Y411200D02*\nX295705D01*\nX271295Y437106D02*\nX295595D01*\nX291500Y421400D02*\nX295500D01*\nX291500D02*\nX293500Y423400D01*\nX291500Y421400D02*\nX293500Y419400D01*\nX291600Y431900D02*\nX295600D01*\nX291600D02*\nX293600Y433900D01*\nX291600Y431900D02*\nX293600Y429900D01*\nX203776Y439709D02*\nX247713D01*\nY469630D01*\nX203776Y439709D02*\nY468055D01*\nX204134Y469630D02*\nX247713D01*\nX203776Y469272D02*\nX204134Y469630D01*\nX203776Y468055D02*\nY469272D01*\nX241213Y462209D02*\nY469630D01*\nX230713Y462209D02*\nX241213D01*\nX230713D02*\nY469630D01*\nX220713Y462209D02*\nY469709D01*\nX211713Y462209D02*\nX220713D01*\nX211713D02*\nY469630D01*\nX195644Y457744D02*\nY467244D01*\nX169644D02*\nX195644D01*\nX165644Y463244D02*\nX169644Y467244D01*\nX165644Y457744D02*\nY463244D01*\nY445744D02*\nY449744D01*\nY445744D02*\nX169644Y441744D01*\nX195644D01*\nY448744D01*\nY449744D01*\nX157244Y398744D02*\nY402680D01*\nX159212D01*\nX159868Y402024D01*\nY400712D01*\nX159212Y400056D01*\nX157244D01*\nX158556D02*\nX159868Y398744D01*\nX163804Y402680D02*\nX161180D01*\nY398744D01*\nX163804D01*\nX161180Y400712D02*\nX162492D01*\nX167739Y402024D02*\nX167083Y402680D01*\nX165771D01*\nX165116Y402024D01*\nY401368D01*\nX165771Y400712D01*\nX167083D01*\nX167739Y400056D01*\nY399400D01*\nX167083Y398744D01*\nX165771D01*\nX165116Y399400D01*\nX171675Y402680D02*\nX169051D01*\nY398744D01*\nX171675D01*\nX169051Y400712D02*\nX170363D01*\nX172987Y402680D02*\nX175611D01*\nX174299D01*\nY398744D01*\nX185244Y396244D02*\nY401242D01*\nX186910Y399576D01*\nX188576Y401242D01*\nY396244D01*\nX190243D02*\nX191909D01*\nX191076D01*\nY399576D01*\nX190243D01*\nX194408Y396244D02*\nX196907D01*\nX197740Y397077D01*\nX196907Y397910D01*\nX195241D01*\nX194408Y398743D01*\nX195241Y399576D01*\nX197740D01*\nX200239Y396244D02*\nY400409D01*\nY398743D01*\nX199406D01*\nX201072D01*\nX200239D01*\nY400409D01*\nX201072Y401242D01*\nX203572Y396244D02*\nX205238D01*\nX204404D01*\nY399576D01*\nX203572D01*\nX208570Y400409D02*\nY399576D01*\nX207737D01*\nX209403D01*\nX208570D01*\nY397077D01*\nX209403Y396244D01*\nX216900Y401242D02*\nX220233D01*\nX218567D01*\nY396244D01*\nX224398D02*\nX222732D01*\nX221899Y397077D01*\nY398743D01*\nX222732Y399576D01*\nX224398D01*\nX225231Y398743D01*\nY397910D01*\nX221899D01*\nX230229Y399576D02*\nX227730D01*\nX226897Y398743D01*\nY397077D01*\nX227730Y396244D01*\nX230229D01*\nX231896Y401242D02*\nY396244D01*\nY398743D01*\nX232729Y399576D01*\nX234395D01*\nX235228Y398743D01*\nY396244D01*\nX192344Y405910D02*\nX193010Y405244D01*\nX194343D01*\nX195010Y405910D01*\nY408576D01*\nX194343Y409243D01*\nX193010D01*\nX192344Y408576D01*\nY407910D01*\nX193010Y407243D01*\nX195010D01*\nX196343Y405244D02*\nX199009Y407910D01*\nX203007Y405244D02*\nX200342D01*\nX203007Y407910D01*\nY408576D01*\nX202341Y409243D01*\nX201008D01*\nX200342Y408576D01*\nX204340Y405910D02*\nX205007Y405244D01*\nX206340D01*\nX207006Y405910D01*\nY408576D01*\nX206340Y409243D01*\nX205007D01*\nX204340Y408576D01*\nY407910D01*\nX205007Y407243D01*\nX207006D01*\nX208339Y405244D02*\nX211005Y407910D01*\nX215003Y405244D02*\nX212338D01*\nX215003Y407910D01*\nY408576D01*\nX214337Y409243D01*\nX213004D01*\nX212338Y408576D01*\nX216336D02*\nX217003Y409243D01*\nX218336D01*\nX219002Y408576D01*\nY405910D01*\nX218336Y405244D01*\nX217003D01*\nX216336Y405910D01*\nY408576D01*\nX220335Y405244D02*\nX221668D01*\nX221002D01*\nY409243D01*\nX220335Y408576D01*\nX226333Y409243D02*\nX225000Y408576D01*\nX223667Y407243D01*\nY405910D01*\nX224334Y405244D01*\nX225667D01*\nX226333Y405910D01*\nY406577D01*\nX225667Y407243D01*\nX223667D01*\nX179244Y374744D02*\nY378743D01*\nX181910Y374744D01*\nY378743D01*\nX183909Y377410D02*\nX185242D01*\nX185909Y376743D01*\nY374744D01*\nX183909D01*\nX183243Y375411D01*\nX183909Y376077D01*\nX185909D01*\nX187241Y374744D02*\nY377410D01*\nX189241D01*\nX189907Y376743D01*\nY374744D01*\nX191907D02*\nX193240D01*\nX193906Y375411D01*\nY376743D01*\nX193240Y377410D01*\nX191907D01*\nX191240Y376743D01*\nY375411D01*\nX191907Y374744D01*\nX199238Y378743D02*\nX201903D01*\nY378076D01*\nX199238Y375411D01*\nY374744D01*\nX201903D01*\nX205236D02*\nX203903D01*\nX203236Y375411D01*\nY376743D01*\nX203903Y377410D01*\nX205236D01*\nX205902Y376743D01*\nY376077D01*\nX203236D01*\nX207235Y377410D02*\nY374744D01*\nY376077D01*\nX207902Y376743D01*\nX208568Y377410D01*\nX209234D01*\nX211900Y374744D02*\nX213233D01*\nX213900Y375411D01*\nY376743D01*\nX213233Y377410D01*\nX211900D01*\nX211234Y376743D01*\nY375411D01*\nX211900Y374744D01*\nX221897Y378076D02*\nX221231Y378743D01*\nX219898D01*\nX219231Y378076D01*\nY377410D01*\nX219898Y376743D01*\nX221231D01*\nX221897Y376077D01*\nY375411D01*\nX221231Y374744D01*\nX219898D01*\nX219231Y375411D01*\nX223896Y378076D02*\nY377410D01*\nX223230D01*\nX224563D01*\nX223896D01*\nY375411D01*\nX224563Y374744D01*\nX228561D02*\nX227229D01*\nX226562Y375411D01*\nY376743D01*\nX227229Y377410D01*\nX228561D01*\nX229228Y376743D01*\nY376077D01*\nX226562D01*\nX230561Y373411D02*\nY377410D01*\nX232560D01*\nX233227Y376743D01*\nY375411D01*\nX232560Y374744D01*\nX230561D01*\nX234560Y373411D02*\nY377410D01*\nX236559D01*\nX237225Y376743D01*\nY375411D01*\nX236559Y374744D01*\nX234560D01*\nX240558D02*\nX239225D01*\nX238558Y375411D01*\nY376743D01*\nX239225Y377410D01*\nX240558D01*\nX241224Y376743D01*\nY376077D01*\nX238558D01*\nX242557Y377410D02*\nY374744D01*\nY376077D01*\nX243224Y376743D01*\nX243890Y377410D01*\nX244556D01*\nX305527Y375744D02*\nY392279D01*\nX327968D01*\nX305527Y359209D02*\nX327968D01*\nY360390D01*\nY368657D01*\nX305527Y359209D02*\nY375744D01*\nX327968Y382831D02*\nY392279D01*\nX356823Y342494D02*\nY355994D01*\nX306665Y342494D02*\nX356823D01*\nX306665D02*\nY355844D01*\nX336744Y355949D02*\nX356823Y355994D01*\nX306665Y355844D02*\nX326844D01*\nX387244Y386244D02*\nX390244Y389244D01*\nX387244D02*\nX390244Y386244D01*\nX451295Y335295D02*\nY437106D01*\nY335295D02*\nX475705D01*\nY436995D01*\nX471500Y341200D02*\nX475500D01*\nX471500D02*\nX473500Y343200D01*\nX471500Y341200D02*\nX473500Y339200D01*\nX471705Y351200D02*\nX473705Y349200D01*\nX471705Y351200D02*\nX473705Y353200D01*\nX471705Y351200D02*\nX475705D01*\nX471705Y361200D02*\nX473705Y359200D01*\nX471705Y361200D02*\nX473705Y363200D01*\nX471705Y361200D02*\nX475705D01*\nX471705Y371200D02*\nX473705Y369200D01*\nX471705Y371200D02*\nX473705Y373200D01*\nX471705Y371200D02*\nX475705D01*\nX471705Y381200D02*\nX473705Y379200D01*\nX471705Y381200D02*\nX473705Y383200D01*\nX471705Y381200D02*\nX475705D01*\nX471705Y391200D02*\nX473705Y389200D01*\nX471705Y391200D02*\nX473705Y393200D01*\nX471705Y391200D02*\nX475705D01*\nX471705Y401200D02*\nX473705Y399200D01*\nX471705Y401200D02*\nX473705Y403200D01*\nX471705Y401200D02*\nX475705D01*\nX471705Y411200D02*\nX473705Y409200D01*\nX471705Y411200D02*\nX473705Y413200D01*\nX471705Y411200D02*\nX475705D01*\nX451295Y437106D02*\nX475595D01*\nX471500Y421400D02*\nX475500D01*\nX471500D02*\nX473500Y423400D01*\nX471500Y421400D02*\nX473500Y419400D01*\nX471600Y431900D02*\nX475600D01*\nX471600D02*\nX473600Y433900D01*\nX471600Y431900D02*\nX473600Y429900D01*\nX383776Y439709D02*\nX427713D01*\nY469630D01*\nX383776Y439709D02*\nY468055D01*\nX384134Y469630D02*\nX427713D01*\nX383776Y469272D02*\nX384134Y469630D01*\nX383776Y468055D02*\nY469272D01*\nX421213Y462209D02*\nY469630D01*\nX410713Y462209D02*\nX421213D01*\nX410713D02*\nY469630D01*\nX400713Y462209D02*\nY469709D01*\nX391713Y462209D02*\nX400713D01*\nX391713D02*\nY469630D01*\nX375644Y457744D02*\nY467244D01*\nX349644D02*\nX375644D01*\nX345644Y463244D02*\nX349644Y467244D01*\nX345644Y457744D02*\nY463244D01*\nY445744D02*\nY449744D01*\nY445744D02*\nX349644Y441744D01*\nX375644D01*\nY448744D01*\nY449744D01*\nX337244Y398744D02*\nY402680D01*\nX339212D01*\nX339868Y402024D01*\nY400712D01*\nX339212Y400056D01*\nX337244D01*\nX338556D02*\nX339868Y398744D01*\nX343804Y402680D02*\nX341180D01*\nY398744D01*\nX343804D01*\nX341180Y400712D02*\nX342492D01*\nX347739Y402024D02*\nX347083Y402680D01*\nX345772D01*\nX345116Y402024D01*\nY401368D01*\nX345772Y400712D01*\nX347083D01*\nX347739Y400056D01*\nY399400D01*\nX347083Y398744D01*\nX345772D01*\nX345116Y399400D01*\nX351675Y402680D02*\nX349051D01*\nY398744D01*\nX351675D01*\nX349051Y400712D02*\nX350363D01*\nX352987Y402680D02*\nX355611D01*\nX354299D01*\nY398744D01*\nX365244Y396244D02*\nY401242D01*\nX366910Y399576D01*\nX368576Y401242D01*\nY396244D01*\nX370243D02*\nX371909D01*\nX371076D01*\nY399576D01*\nX370243D01*\nX374408Y396244D02*\nX376907D01*\nX377740Y397077D01*\nX376907Y397910D01*\nX375241D01*\nX374408Y398743D01*\nX375241Y399576D01*\nX377740D01*\nX380239Y396244D02*\nY400409D01*\nY398743D01*\nX379406D01*\nX381072D01*\nX380239D01*\nY400409D01*\nX381072Y401242D01*\nX383572Y396244D02*\nX385238D01*\nX384405D01*\nY399576D01*\nX383572D01*\nX388570Y400409D02*\nY399576D01*\nX387737D01*\nX389403D01*\nX388570D01*\nY397077D01*\nX389403Y396244D01*\nX396901Y401242D02*\nX400233D01*\nX398567D01*\nY396244D01*\nX404398D02*\nX402732D01*\nX401899Y397077D01*\nY398743D01*\nX402732Y399576D01*\nX404398D01*\nX405231Y398743D01*\nY397910D01*\nX401899D01*\nX410229Y399576D02*\nX407730D01*\nX406897Y398743D01*\nY397077D01*\nX407730Y396244D01*\nX410229D01*\nX411896Y401242D02*\nY396244D01*\nY398743D01*\nX412729Y399576D01*\nX414395D01*\nX415228Y398743D01*\nY396244D01*\nX372344Y405910D02*\nX373010Y405244D01*\nX374343D01*\nX375010Y405910D01*\nY408576D01*\nX374343Y409243D01*\nX373010D01*\nX372344Y408576D01*\nY407910D01*\nX373010Y407243D01*\nX375010D01*\nX376343Y405244D02*\nX379009Y407910D01*\nX383007Y405244D02*\nX380342D01*\nX383007Y407910D01*\nY408576D01*\nX382341Y409243D01*\nX381008D01*\nX380342Y408576D01*\nX384340Y405910D02*\nX385007Y405244D01*\nX386340D01*\nX387006Y405910D01*\nY408576D01*\nX386340Y409243D01*\nX385007D01*\nX384340Y408576D01*\nY407910D01*\nX385007Y407243D01*\nX387006D01*\nX388339Y405244D02*\nX391005Y407910D01*\nX395003Y405244D02*\nX392338D01*\nX395003Y407910D01*\nY408576D01*\nX394337Y409243D01*\nX393004D01*\nX392338Y408576D01*\nX396336D02*\nX397003Y409243D01*\nX398336D01*\nX399002Y408576D01*\nY405910D01*\nX398336Y405244D01*\nX397003D01*\nX396336Y405910D01*\nY408576D01*\nX400335Y405244D02*\nX401668D01*\nX401002D01*\nY409243D01*\nX400335Y408576D01*\nX406333Y409243D02*\nX405000Y408576D01*\nX403667Y407243D01*\nY405910D01*\nX404334Y405244D01*\nX405667D01*\nX406333Y405910D01*\nY406577D01*\nX405667Y407243D01*\nX403667D01*\nX359244Y374744D02*\nY378743D01*\nX361910Y374744D01*\nY378743D01*\nX363909Y377410D02*\nX365242D01*\nX365909Y376743D01*\nY374744D01*\nX363909D01*\nX363243Y375411D01*\nX363909Y376077D01*\nX365909D01*\nX367242Y374744D02*\nY377410D01*\nX369241D01*\nX369907Y376743D01*\nY374744D01*\nX371907D02*\nX373240D01*\nX373906Y375411D01*\nY376743D01*\nX373240Y377410D01*\nX371907D01*\nX371240Y376743D01*\nY375411D01*\nX371907Y374744D01*\nX379238Y378743D02*\nX381903D01*\nY378076D01*\nX379238Y375411D01*\nY374744D01*\nX381903D01*\nX385236D02*\nX383903D01*\nX383236Y375411D01*\nY376743D01*\nX383903Y377410D01*\nX385236D01*\nX385902Y376743D01*\nY376077D01*\nX383236D01*\nX387235Y377410D02*\nY374744D01*\nY376077D01*\nX387901Y376743D01*\nX388568Y377410D01*\nX389234D01*\nX391900Y374744D02*\nX393233D01*\nX393900Y375411D01*\nY376743D01*\nX393233Y377410D01*\nX391900D01*\nX391234Y376743D01*\nY375411D01*\nX391900Y374744D01*\nX401897Y378076D02*\nX401230Y378743D01*\nX399898D01*\nX399231Y378076D01*\nY377410D01*\nX399898Y376743D01*\nX401230D01*\nX401897Y376077D01*\nY375411D01*\nX401230Y374744D01*\nX399898D01*\nX399231Y375411D01*\nX403896Y378076D02*\nY377410D01*\nX403230D01*\nX404563D01*\nX403896D01*\nY375411D01*\nX404563Y374744D01*\nX408562D02*\nX407229D01*\nX406562Y375411D01*\nY376743D01*\nX407229Y377410D01*\nX408562D01*\nX409228Y376743D01*\nY376077D01*\nX406562D01*\nX410561Y373411D02*\nY377410D01*\nX412560D01*\nX413227Y376743D01*\nY375411D01*\nX412560Y374744D01*\nX410561D01*\nX414560Y373411D02*\nY377410D01*\nX416559D01*\nX417225Y376743D01*\nY375411D01*\nX416559Y374744D01*\nX414560D01*\nX420558D02*\nX419225D01*\nX418558Y375411D01*\nY376743D01*\nX419225Y377410D01*\nX420558D01*\nX421224Y376743D01*\nY376077D01*\nX418558D01*\nX422557Y377410D02*\nY374744D01*\nY376077D01*\nX423223Y376743D01*\nX423890Y377410D01*\nX424556D01*\nD67*\nX158412Y199628D02*\nG03*\nX158412Y199628I-492J0D01*\nG01*\nX250584Y223500D02*\nG03*\nX250584Y223500I-492J0D01*\nG01*\nX207619Y144886D02*\nG03*\nX207619Y144886I-492J0D01*\nG01*\nX193450Y234536D02*\nG03*\nX193450Y234536I-492J0D01*\nG01*\nX249913Y180028D02*\nG03*\nX249913Y180028I-492J0D01*\nG01*\nX249413Y197528D02*\nG03*\nX249413Y197528I-492J0D01*\nG01*\nX249913Y213528D02*\nG03*\nX249913Y213528I-492J0D01*\nG01*\nX338412Y199628D02*\nG03*\nX338412Y199628I-492J0D01*\nG01*\nX430584Y223500D02*\nG03*\nX430584Y223500I-492J0D01*\nG01*\nX387619Y144886D02*\nG03*\nX387619Y144886I-492J0D01*\nG01*\nX373450Y234536D02*\nG03*\nX373450Y234536I-492J0D01*\nG01*\nX429913Y180028D02*\nG03*\nX429913Y180028I-492J0D01*\nG01*\nX429413Y197528D02*\nG03*\nX429413Y197528I-492J0D01*\nG01*\nX429913Y213528D02*\nG03*\nX429913Y213528I-492J0D01*\nG01*\nX158412Y379628D02*\nG03*\nX158412Y379628I-492J0D01*\nG01*\nX250584Y403500D02*\nG03*\nX250584Y403500I-492J0D01*\nG01*\nX207619Y324886D02*\nG03*\nX207619Y324886I-492J0D01*\nG01*\nX193450Y414536D02*\nG03*\nX193450Y414536I-492J0D01*\nG01*\nX249913Y360028D02*\nG03*\nX249913Y360028I-492J0D01*\nG01*\nX249413Y377528D02*\nG03*\nX249413Y377528I-492J0D01*\nG01*\nX249913Y393528D02*\nG03*\nX249913Y393528I-492J0D01*\nG01*\nX338412Y379628D02*\nG03*\nX338412Y379628I-492J0D01*\nG01*\nX430584Y403500D02*\nG03*\nX430584Y403500I-492J0D01*\nG01*\nX387619Y324886D02*\nG03*\nX387619Y324886I-492J0D01*\nG01*\nX373450Y414536D02*\nG03*\nX373450Y414536I-492J0D01*\nG01*\nX429913Y360028D02*\nG03*\nX429913Y360028I-492J0D01*\nG01*\nX429413Y377528D02*\nG03*\nX429413Y377528I-492J0D01*\nG01*\nX429913Y393528D02*\nG03*\nX429913Y393528I-492J0D01*\nG01*\nD68*\nX248945Y252193D02*\nX252882D01*\nX248945Y241169D02*\nX252882D01*\nX248945D02*\nY252193D01*\nX252882Y241169D02*\nY252193D01*\nX127044Y257344D02*\nX132044D01*\nX127044Y217394D02*\nY257344D01*\nX137044Y217394D02*\nY257344D01*\nX132044D02*\nX137044D01*\nX133594Y217394D02*\nX137044D01*\nX127044D02*\nX133594D01*\nX200244Y247744D02*\nY252744D01*\nY247744D02*\nX240194D01*\nX200244Y257744D02*\nX240194D01*\nX200244Y252744D02*\nY257744D01*\nX240194Y254294D02*\nY257744D01*\nY247744D02*\nY254294D01*\nX428945Y252193D02*\nX432882D01*\nX428945Y241169D02*\nX432882D01*\nX428945D02*\nY252193D01*\nX432882Y241169D02*\nY252193D01*\nX307044Y257344D02*\nX312044D01*\nX307044Y217394D02*\nY257344D01*\nX317044Y217394D02*\nY257344D01*\nX312044D02*\nX317044D01*\nX313594Y217394D02*\nX317044D01*\nX307044D02*\nX313594D01*\nX380244Y247744D02*\nY252744D01*\nY247744D02*\nX420194D01*\nX380244Y257744D02*\nX420194D01*\nX380244Y252744D02*\nY257744D01*\nX420194Y254294D02*\nY257744D01*\nY247744D02*\nY254294D01*\nX248945Y432193D02*\nX252882D01*\nX248945Y421169D02*\nX252882D01*\nX248945D02*\nY432193D01*\nX252882Y421169D02*\nY432193D01*\nX127044Y437344D02*\nX132044D01*\nX127044Y397394D02*\nY437344D01*\nX137044Y397394D02*\nY437344D01*\nX132044D02*\nX137044D01*\nX133594Y397394D02*\nX137044D01*\nX127044D02*\nX133594D01*\nX200244Y427744D02*\nY432744D01*\nY427744D02*\nX240194D01*\nX200244Y437744D02*\nX240194D01*\nX200244Y432744D02*\nY437744D01*\nX240194Y434294D02*\nY437744D01*\nY427744D02*\nY434294D01*\nX428945Y432193D02*\nX432882D01*\nX428945Y421169D02*\nX432882D01*\nX428945D02*\nY432193D01*\nX432882Y421169D02*\nY432193D01*\nX307044Y437344D02*\nX312044D01*\nX307044Y397394D02*\nY437344D01*\nX317044Y397394D02*\nY437344D01*\nX312044D02*\nX317044D01*\nX313594Y397394D02*\nX317044D01*\nX307044D02*\nX313594D01*\nX380244Y427744D02*\nY432744D01*\nY427744D02*\nX420194D01*\nX380244Y437744D02*\nX420194D01*\nX380244Y432744D02*\nY437744D01*\nX420194Y434294D02*\nY437744D01*\nY427744D02*\nY434294D01*\nD69*\nX161909Y182425D02*\nX163484D01*\nX161909Y180063D02*\nX163484D01*\nX157382D02*\nY182425D01*\nX162053Y198446D02*\nX163235D01*\nX162053Y186242D02*\nX163235D01*\nX162053D02*\nY198446D01*\nX163235Y186242D02*\nY198446D01*\nX247722Y221791D02*\nX250478D01*\nX247722Y233209D02*\nX250478D01*\nY221791D02*\nY233209D01*\nX247722Y221791D02*\nY233209D01*\nX236222Y227106D02*\nY227894D01*\nX238978Y227106D02*\nY227894D01*\nY238106D02*\nY238894D01*\nX236222Y238106D02*\nY238894D01*\nX171165Y158181D02*\nX172740D01*\nX171165Y155819D02*\nX172740D01*\nX166638D02*\nY158181D01*\nX224178Y167644D02*\nX225222Y166600D01*\nX224178Y165556D02*\nX225222Y166600D01*\nX204900Y186922D02*\nX205944Y185878D01*\nX203856Y185878D02*\nX204900Y186922D01*\nX184578Y166600D02*\nX185622Y167644D01*\nX184578Y166600D02*\nX185622Y165556D01*\nX203856Y147322D02*\nX204900Y146278D01*\nX205944Y147322D01*\nX149176Y231797D02*\nX153113D01*\nX149176Y225891D02*\nX153113D01*\nX149076Y251497D02*\nX153013D01*\nX149076Y245591D02*\nX153013D01*\nX174061Y256583D02*\nX188628D01*\nX174061Y236505D02*\nX188628D01*\nX257197Y166642D02*\nY169791D01*\nX252866Y166642D02*\nX257197D01*\nY175697D02*\nY178846D01*\nX252866D02*\nX257197D01*\nX256697Y184142D02*\nY187291D01*\nX252366Y184142D02*\nX256697D01*\nY193197D02*\nY196346D01*\nX252366D02*\nX256697D01*\nX257197Y200142D02*\nY203291D01*\nX252866Y200142D02*\nX257197D01*\nY209197D02*\nY212346D01*\nX252866D02*\nX257197D01*\nX341909Y182425D02*\nX343484D01*\nX341909Y180063D02*\nX343484D01*\nX337382D02*\nY182425D01*\nX342053Y198446D02*\nX343235D01*\nX342053Y186242D02*\nX343235D01*\nX342053D02*\nY198446D01*\nX343235Y186242D02*\nY198446D01*\nX427722Y221791D02*\nX430478D01*\nX427722Y233209D02*\nX430478D01*\nY221791D02*\nY233209D01*\nX427722Y221791D02*\nY233209D01*\nX416222Y227106D02*\nY227894D01*\nX418978Y227106D02*\nY227894D01*\nY238106D02*\nY238894D01*\nX416222Y238106D02*\nY238894D01*\nX351165Y158181D02*\nX352740D01*\nX351165Y155819D02*\nX352740D01*\nX346638D02*\nY158181D01*\nX404178Y167644D02*\nX405222Y166600D01*\nX404178Y165556D02*\nX405222Y166600D01*\nX384900Y186922D02*\nX385944Y185878D01*\nX383856Y185878D02*\nX384900Y186922D01*\nX364578Y166600D02*\nX365622Y167644D01*\nX364578Y166600D02*\nX365622Y165556D01*\nX383856Y147322D02*\nX384900Y146278D01*\nX385944Y147322D01*\nX329176Y231797D02*\nX333113D01*\nX329176Y225891D02*\nX333113D01*\nX329076Y251497D02*\nX333013D01*\nX329076Y245591D02*\nX333013D01*\nX354061Y256583D02*\nX368628D01*\nX354061Y236505D02*\nX368628D01*\nX437197Y166642D02*\nY169791D01*\nX432866Y166642D02*\nX437197D01*\nY175697D02*\nY178846D01*\nX432866D02*\nX437197D01*\nX436697Y184142D02*\nY187291D01*\nX432366Y184142D02*\nX436697D01*\nY193197D02*\nY196346D01*\nX432366D02*\nX436697D01*\nX437197Y200142D02*\nY203291D01*\nX432866Y200142D02*\nX437197D01*\nY209197D02*\nY212346D01*\nX432866D02*\nX437197D01*\nX161909Y362425D02*\nX163484D01*\nX161909Y360063D02*\nX163484D01*\nX157382D02*\nY362425D01*\nX162053Y378446D02*\nX163235D01*\nX162053Y366242D02*\nX163235D01*\nX162053D02*\nY378446D01*\nX163235Y366242D02*\nY378446D01*\nX247722Y401791D02*\nX250478D01*\nX247722Y413209D02*\nX250478D01*\nY401791D02*\nY413209D01*\nX247722Y401791D02*\nY413209D01*\nX236222Y407106D02*\nY407894D01*\nX238978Y407106D02*\nY407894D01*\nY418106D02*\nY418894D01*\nX236222Y418106D02*\nY418894D01*\nX171165Y338181D02*\nX172740D01*\nX171165Y335819D02*\nX172740D01*\nX166638D02*\nY338181D01*\nX224178Y347644D02*\nX225222Y346600D01*\nX224178Y345556D02*\nX225222Y346600D01*\nX204900Y366922D02*\nX205944Y365878D01*\nX203856Y365878D02*\nX204900Y366922D01*\nX184578Y346600D02*\nX185622Y347644D01*\nX184578Y346600D02*\nX185622Y345556D01*\nX203856Y327322D02*\nX204900Y326278D01*\nX205944Y327322D01*\nX149176Y411797D02*\nX153113D01*\nX149176Y405891D02*\nX153113D01*\nX149076Y431497D02*\nX153013D01*\nX149076Y425591D02*\nX153013D01*\nX174061Y436583D02*\nX188628D01*\nX174061Y416505D02*\nX188628D01*\nX257197Y346642D02*\nY349791D01*\nX252866Y346642D02*\nX257197D01*\nY355697D02*\nY358846D01*\nX252866D02*\nX257197D01*\nX256697Y364142D02*\nY367291D01*\nX252366Y364142D02*\nX256697D01*\nY373197D02*\nY376346D01*\nX252366D02*\nX256697D01*\nX257197Y380142D02*\nY383291D01*\nX252866Y380142D02*\nX257197D01*\nY389197D02*\nY392346D01*\nX252866D02*\nX257197D01*\nX341909Y362425D02*\nX343484D01*\nX341909Y360063D02*\nX343484D01*\nX337382D02*\nY362425D01*\nX342053Y378446D02*\nX343235D01*\nX342053Y366242D02*\nX343235D01*\nX342053D02*\nY378446D01*\nX343235Y366242D02*\nY378446D01*\nX427722Y401791D02*\nX430478D01*\nX427722Y413209D02*\nX430478D01*\nY401791D02*\nY413209D01*\nX427722Y401791D02*\nY413209D01*\nX416222Y407106D02*\nY407894D01*\nX418978Y407106D02*\nY407894D01*\nY418106D02*\nY418894D01*\nX416222Y418106D02*\nY418894D01*\nX351165Y338181D02*\nX352740D01*\nX351165Y335819D02*\nX352740D01*\nX346638D02*\nY338181D01*\nX404178Y347644D02*\nX405222Y346600D01*\nX404178Y345556D02*\nX405222Y346600D01*\nX384900Y366922D02*\nX385944Y365878D01*\nX383856Y365878D02*\nX384900Y366922D01*\nX364578Y346600D02*\nX365622Y347644D01*\nX364578Y346600D02*\nX365622Y345556D01*\nX383856Y327322D02*\nX384900Y326278D01*\nX385944Y327322D01*\nX329176Y411797D02*\nX333113D01*\nX329176Y405891D02*\nX333113D01*\nX329076Y431497D02*\nX333013D01*\nX329076Y425591D02*\nX333013D01*\nX354061Y436583D02*\nX368628D01*\nX354061Y416505D02*\nX368628D01*\nX437197Y346642D02*\nY349791D01*\nX432866Y346642D02*\nX437197D01*\nY355697D02*\nY358846D01*\nX432866D02*\nX437197D01*\nX436697Y364142D02*\nY367291D01*\nX432366Y364142D02*\nX436697D01*\nY373197D02*\nY376346D01*\nX432366D02*\nX436697D01*\nX437197Y380142D02*\nY383291D01*\nX432866Y380142D02*\nX437197D01*\nY389197D02*\nY392346D01*\nX432866D02*\nX437197D01*\nD70*\nX197244Y285743D02*\nX201909D01*\nX251744Y284243D02*\nX257076D01*\nX254410Y286909D02*\nY281577D01*\nX377244Y285743D02*\nX381909D01*\nX431744Y284243D02*\nX437076D01*\nX434410Y286909D02*\nY281577D01*\nX197244Y465743D02*\nX201909D01*\nX251744Y464243D02*\nX257076D01*\nX254410Y466909D02*\nY461577D01*\nX377244Y465743D02*\nX381909D01*\nX431744Y464243D02*\nX437076D01*\nX434410Y466909D02*\nY461577D01*\nM02*\n"
  },
  {
    "path": "hardware/panel.GTP",
    "content": "G04 Layer_Color=8421504*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD10R,0.03543X0.03150*%\nG04:AMPARAMS|DCode=11|XSize=31.5mil|YSize=35.43mil|CornerRadius=7.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD11*\n21,1,0.03150,0.01969,0,0,270.0*\n21,1,0.01575,0.03543,0,0,270.0*\n1,1,0.01575,-0.00984,-0.00787*\n1,1,0.01575,-0.00984,0.00787*\n1,1,0.01575,0.00984,0.00787*\n1,1,0.01575,0.00984,-0.00787*\n%\n%ADD11ROUNDEDRECTD11*%\n%ADD12R,0.07087X0.03937*%\n%ADD13R,0.03347X0.03150*%\n%ADD14R,0.06890X0.01575*%\n%ADD15R,0.09449X0.04724*%\n%ADD16R,0.12205X0.04724*%\n%ADD17R,0.04724X0.07087*%\nG04:AMPARAMS|DCode=18|XSize=31.5mil|YSize=31.5mil|CornerRadius=7.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD18*\n21,1,0.03150,0.01575,0,0,90.0*\n21,1,0.01575,0.03150,0,0,90.0*\n1,1,0.01575,0.00787,0.00787*\n1,1,0.01575,0.00787,-0.00787*\n1,1,0.01575,-0.00787,-0.00787*\n1,1,0.01575,-0.00787,0.00787*\n%\n%ADD18ROUNDEDRECTD18*%\n%ADD19R,0.03150X0.03150*%\nG04:AMPARAMS|DCode=20|XSize=27.56mil|YSize=51.18mil|CornerRadius=6.89mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD20*\n21,1,0.02756,0.03740,0,0,90.0*\n21,1,0.01378,0.05118,0,0,90.0*\n1,1,0.01378,0.01870,0.00689*\n1,1,0.01378,0.01870,-0.00689*\n1,1,0.01378,-0.01870,-0.00689*\n1,1,0.01378,-0.01870,0.00689*\n%\n%ADD20ROUNDEDRECTD20*%\n%ADD21R,0.05118X0.02756*%\nG04:AMPARAMS|DCode=22|XSize=23.62mil|YSize=35.43mil|CornerRadius=5.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD22*\n21,1,0.02362,0.02362,0,0,270.0*\n21,1,0.01181,0.03543,0,0,270.0*\n1,1,0.01181,-0.01181,-0.00591*\n1,1,0.01181,-0.01181,0.00591*\n1,1,0.01181,0.01181,0.00591*\n1,1,0.01181,0.01181,-0.00591*\n%\n%ADD22ROUNDEDRECTD22*%\n%ADD23R,0.03543X0.02362*%\n%ADD24R,0.03543X0.02953*%\nG04:AMPARAMS|DCode=25|XSize=78.74mil|YSize=39.37mil|CornerRadius=9.84mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD25*\n21,1,0.07874,0.01969,0,0,0.0*\n21,1,0.05906,0.03937,0,0,0.0*\n1,1,0.01969,0.02953,-0.00984*\n1,1,0.01969,-0.02953,-0.00984*\n1,1,0.01969,-0.02953,0.00984*\n1,1,0.01969,0.02953,0.00984*\n%\n%ADD25ROUNDEDRECTD25*%\n%ADD26P,0.28674X4X180.0*%\nG04:AMPARAMS|DCode=27|XSize=9.84mil|YSize=33.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD27*\n21,1,0.02362,0.00984,0.00000,0.00000,225.0*\n1,1,0.00984,0.00835,0.00835*\n1,1,0.00984,-0.00835,-0.00835*\n%\n%ADD27OVALD27*%\n\nG04:AMPARAMS|DCode=28|XSize=9.84mil|YSize=35.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD28*\n21,1,0.02559,0.00984,0.00000,0.00000,225.0*\n1,1,0.00984,0.00905,0.00905*\n1,1,0.00984,-0.00905,-0.00905*\n%\n%ADD28OVALD28*%\n\nG04:AMPARAMS|DCode=29|XSize=9.84mil|YSize=33.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD29*\n21,1,0.02362,0.00984,0.00000,0.00000,315.0*\n1,1,0.00984,-0.00835,0.00835*\n1,1,0.00984,0.00835,-0.00835*\n%\n%ADD29OVALD29*%\n\nG04:AMPARAMS|DCode=30|XSize=9.84mil|YSize=35.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD30*\n21,1,0.02559,0.00984,0.00000,0.00000,315.0*\n1,1,0.00984,-0.00905,0.00905*\n1,1,0.00984,0.00905,-0.00905*\n%\n%ADD30OVALD30*%\n\nG04:AMPARAMS|DCode=31|XSize=9.84mil|YSize=33.47mil|CornerRadius=2.46mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD31*\n21,1,0.00984,0.02854,0,0,225.0*\n21,1,0.00492,0.03347,0,0,225.0*\n1,1,0.00492,-0.01183,0.00835*\n1,1,0.00492,-0.00835,0.01183*\n1,1,0.00492,0.01183,-0.00835*\n1,1,0.00492,0.00835,-0.01183*\n%\n%ADD31ROUNDEDRECTD31*%\n%ADD32R,0.03937X0.06693*%\n%ADD33R,0.11811X0.11811*%\n%ADD34O,0.05512X0.01772*%\n%ADD35R,0.05512X0.01772*%\n%ADD36R,0.03740X0.02756*%\n%ADD37R,0.12500X0.04500*%\n%ADD43C,0.00800*%\nD10*\nX246583Y246681D02*\nD03*\nX255244Y250618D02*\nD03*\nX426583Y246681D02*\nD03*\nX435244Y250618D02*\nD03*\nX246583Y426681D02*\nD03*\nX255244Y430618D02*\nD03*\nX426583Y426681D02*\nD03*\nX435244Y430618D02*\nD03*\nD11*\nX255244Y242744D02*\nD03*\nX435244D02*\nD03*\nX255244Y422744D02*\nD03*\nX435244D02*\nD03*\nD12*\nX230157Y154000D02*\nD03*\nY144157D02*\nD03*\nX410157Y154000D02*\nD03*\nY144157D02*\nD03*\nX230157Y334000D02*\nD03*\nY324157D02*\nD03*\nX410157Y334000D02*\nD03*\nY324157D02*\nD03*\nD13*\nX178705Y230244D02*\nD03*\nX173783D02*\nD03*\nX242618Y144000D02*\nD03*\nX237697D02*\nD03*\nX242618Y154000D02*\nD03*\nX237697D02*\nD03*\nX358705Y230244D02*\nD03*\nX353783D02*\nD03*\nX422618Y144000D02*\nD03*\nX417697D02*\nD03*\nX422618Y154000D02*\nD03*\nX417697D02*\nD03*\nX178705Y410244D02*\nD03*\nX173783D02*\nD03*\nX242618Y324000D02*\nD03*\nX237697D02*\nD03*\nX242618Y334000D02*\nD03*\nX237697D02*\nD03*\nX358705Y410244D02*\nD03*\nX353783D02*\nD03*\nX422618Y324000D02*\nD03*\nX417697D02*\nD03*\nX422618Y334000D02*\nD03*\nX417697D02*\nD03*\nD14*\nX143244Y200862D02*\nD03*\nY198303D02*\nD03*\nY195744D02*\nD03*\nY190626D02*\nD03*\nY193185D02*\nD03*\nX323244Y200862D02*\nD03*\nY198303D02*\nD03*\nY195744D02*\nD03*\nY190626D02*\nD03*\nY193185D02*\nD03*\nX143244Y380862D02*\nD03*\nY378303D02*\nD03*\nY375744D02*\nD03*\nY370626D02*\nD03*\nY373185D02*\nD03*\nX323244Y380862D02*\nD03*\nY378303D02*\nD03*\nY375744D02*\nD03*\nY370626D02*\nD03*\nY373185D02*\nD03*\nD15*\nX131433Y200075D02*\nD03*\nY192201D02*\nD03*\nX311433Y200075D02*\nD03*\nY192201D02*\nD03*\nX131433Y380075D02*\nD03*\nY372201D02*\nD03*\nX311433Y380075D02*\nD03*\nY372201D02*\nD03*\nD16*\nX134344Y183944D02*\nD03*\nY207244D02*\nD03*\nX314344Y183944D02*\nD03*\nY207244D02*\nD03*\nX134344Y363944D02*\nD03*\nY387244D02*\nD03*\nX314344Y363944D02*\nD03*\nY387244D02*\nD03*\nD17*\nX143944Y184344D02*\nD03*\nX144057Y207187D02*\nD03*\nX323944Y184344D02*\nD03*\nX324057Y207187D02*\nD03*\nX143944Y364344D02*\nD03*\nX144057Y387187D02*\nD03*\nX323944Y364344D02*\nD03*\nX324057Y387187D02*\nD03*\nD18*\nX159744Y181244D02*\nD03*\nX169000Y157000D02*\nD03*\nX339744Y181244D02*\nD03*\nX349000Y157000D02*\nD03*\nX159744Y361244D02*\nD03*\nX169000Y337000D02*\nD03*\nX339744Y361244D02*\nD03*\nX349000Y337000D02*\nD03*\nD19*\nX165650Y181244D02*\nD03*\nX174906Y157000D02*\nD03*\nX345650Y181244D02*\nD03*\nX354906Y157000D02*\nD03*\nX165650Y361244D02*\nD03*\nX174906Y337000D02*\nD03*\nX345650Y361244D02*\nD03*\nX354906Y337000D02*\nD03*\nD20*\nX157920Y196084D02*\nD03*\nX337920D02*\nD03*\nX157920Y376084D02*\nD03*\nX337920D02*\nD03*\nD21*\nX157920Y192344D02*\nD03*\nY188604D02*\nD03*\nX167368D02*\nD03*\nY192344D02*\nD03*\nY196084D02*\nD03*\nX337920Y192344D02*\nD03*\nY188604D02*\nD03*\nX347368D02*\nD03*\nY192344D02*\nD03*\nY196084D02*\nD03*\nX157920Y372344D02*\nD03*\nY368604D02*\nD03*\nX167368D02*\nD03*\nY372344D02*\nD03*\nY376084D02*\nD03*\nX337920Y372344D02*\nD03*\nY368604D02*\nD03*\nX347368D02*\nD03*\nY372344D02*\nD03*\nY376084D02*\nD03*\nD22*\nX253824Y223760D02*\nD03*\nX433824D02*\nD03*\nX253824Y403760D02*\nD03*\nX433824D02*\nD03*\nD23*\nX253824Y227500D02*\nD03*\nY231240D02*\nD03*\nX244376D02*\nD03*\nY223760D02*\nD03*\nX433824Y227500D02*\nD03*\nY231240D02*\nD03*\nX424376D02*\nD03*\nY223760D02*\nD03*\nX253824Y407500D02*\nD03*\nY411240D02*\nD03*\nX244376D02*\nD03*\nY403760D02*\nD03*\nX433824Y407500D02*\nD03*\nY411240D02*\nD03*\nX424376D02*\nD03*\nY403760D02*\nD03*\nD24*\nX237600Y224843D02*\nD03*\nY230157D02*\nD03*\nY241157D02*\nD03*\nY235843D02*\nD03*\nX417600Y224843D02*\nD03*\nY230157D02*\nD03*\nY241157D02*\nD03*\nY235843D02*\nD03*\nX237600Y404843D02*\nD03*\nY410157D02*\nD03*\nY421157D02*\nD03*\nY415843D02*\nD03*\nX417600Y404843D02*\nD03*\nY410157D02*\nD03*\nY421157D02*\nD03*\nY415843D02*\nD03*\nD25*\nX158744Y207744D02*\nD03*\nX174886D02*\nD03*\nX158744Y214043D02*\nD03*\nX174744D02*\nD03*\nX199244Y128945D02*\nD03*\nX215244D02*\nD03*\nX199102Y135244D02*\nD03*\nX215244D02*\nD03*\nX164744Y128945D02*\nD03*\nX180744D02*\nD03*\nX164602Y135244D02*\nD03*\nX180744D02*\nD03*\nX250744D02*\nD03*\nX234602D02*\nD03*\nX250744Y128945D02*\nD03*\nX234744D02*\nD03*\nX338744Y207744D02*\nD03*\nX354886D02*\nD03*\nX338744Y214043D02*\nD03*\nX354744D02*\nD03*\nX379244Y128945D02*\nD03*\nX395244D02*\nD03*\nX379102Y135244D02*\nD03*\nX395244D02*\nD03*\nX344744Y128945D02*\nD03*\nX360744D02*\nD03*\nX344602Y135244D02*\nD03*\nX360744D02*\nD03*\nX430744D02*\nD03*\nX414602D02*\nD03*\nX430744Y128945D02*\nD03*\nX414744D02*\nD03*\nX158744Y387744D02*\nD03*\nX174886D02*\nD03*\nX158744Y394043D02*\nD03*\nX174744D02*\nD03*\nX199244Y308945D02*\nD03*\nX215244D02*\nD03*\nX199102Y315244D02*\nD03*\nX215244D02*\nD03*\nX164744Y308945D02*\nD03*\nX180744D02*\nD03*\nX164602Y315244D02*\nD03*\nX180744D02*\nD03*\nX250744D02*\nD03*\nX234602D02*\nD03*\nX250744Y308945D02*\nD03*\nX234744D02*\nD03*\nX338744Y387744D02*\nD03*\nX354886D02*\nD03*\nX338744Y394043D02*\nD03*\nX354744D02*\nD03*\nX379244Y308945D02*\nD03*\nX395244D02*\nD03*\nX379102Y315244D02*\nD03*\nX395244D02*\nD03*\nX344744Y308945D02*\nD03*\nX360744D02*\nD03*\nX344602Y315244D02*\nD03*\nX360744D02*\nD03*\nX430744D02*\nD03*\nX414602D02*\nD03*\nX430744Y308945D02*\nD03*\nX414744D02*\nD03*\nD26*\nX204900Y166600D02*\nD03*\nX384900D02*\nD03*\nX204900Y346600D02*\nD03*\nX384900D02*\nD03*\nD27*\nX203091Y149479D02*\nD03*\nX187779Y164791D02*\nD03*\nX206709Y183721D02*\nD03*\nX222021Y168409D02*\nD03*\nX383091Y149479D02*\nD03*\nX367779Y164791D02*\nD03*\nX386709Y183721D02*\nD03*\nX402021Y168409D02*\nD03*\nX203091Y329479D02*\nD03*\nX187779Y344791D02*\nD03*\nX206709Y363721D02*\nD03*\nX222021Y348409D02*\nD03*\nX383091Y329479D02*\nD03*\nX367779Y344791D02*\nD03*\nX386709Y363721D02*\nD03*\nX402021Y348409D02*\nD03*\nD28*\nX201768Y150941D02*\nD03*\nX200376Y152333D02*\nD03*\nX198984Y153725D02*\nD03*\nX197592Y155116D02*\nD03*\nX196200Y156508D02*\nD03*\nX194808Y157900D02*\nD03*\nX193416Y159292D02*\nD03*\nX192025Y160684D02*\nD03*\nX190633Y162076D02*\nD03*\nX189241Y163468D02*\nD03*\nX208032Y182259D02*\nD03*\nX209424Y180867D02*\nD03*\nX210816Y179475D02*\nD03*\nX212208Y178084D02*\nD03*\nX213600Y176692D02*\nD03*\nX214992Y175300D02*\nD03*\nX216384Y173908D02*\nD03*\nX217775Y172516D02*\nD03*\nX219167Y171124D02*\nD03*\nX220559Y169732D02*\nD03*\nX381768Y150941D02*\nD03*\nX380376Y152333D02*\nD03*\nX378984Y153725D02*\nD03*\nX377592Y155116D02*\nD03*\nX376200Y156508D02*\nD03*\nX374808Y157900D02*\nD03*\nX373416Y159292D02*\nD03*\nX372025Y160684D02*\nD03*\nX370633Y162076D02*\nD03*\nX369241Y163468D02*\nD03*\nX388032Y182259D02*\nD03*\nX389424Y180867D02*\nD03*\nX390816Y179475D02*\nD03*\nX392208Y178084D02*\nD03*\nX393600Y176692D02*\nD03*\nX394992Y175300D02*\nD03*\nX396384Y173908D02*\nD03*\nX397775Y172516D02*\nD03*\nX399167Y171124D02*\nD03*\nX400559Y169732D02*\nD03*\nX201768Y330941D02*\nD03*\nX200376Y332333D02*\nD03*\nX198984Y333725D02*\nD03*\nX197592Y335116D02*\nD03*\nX196200Y336508D02*\nD03*\nX194808Y337900D02*\nD03*\nX193416Y339292D02*\nD03*\nX192025Y340684D02*\nD03*\nX190633Y342076D02*\nD03*\nX189241Y343468D02*\nD03*\nX208032Y362259D02*\nD03*\nX209424Y360867D02*\nD03*\nX210816Y359475D02*\nD03*\nX212208Y358084D02*\nD03*\nX213600Y356692D02*\nD03*\nX214992Y355300D02*\nD03*\nX216384Y353908D02*\nD03*\nX217775Y352516D02*\nD03*\nX219167Y351124D02*\nD03*\nX220559Y349732D02*\nD03*\nX381768Y330941D02*\nD03*\nX380376Y332333D02*\nD03*\nX378984Y333725D02*\nD03*\nX377592Y335116D02*\nD03*\nX376200Y336508D02*\nD03*\nX374808Y337900D02*\nD03*\nX373416Y339292D02*\nD03*\nX372025Y340684D02*\nD03*\nX370633Y342076D02*\nD03*\nX369241Y343468D02*\nD03*\nX388032Y362259D02*\nD03*\nX389424Y360867D02*\nD03*\nX390816Y359475D02*\nD03*\nX392208Y358084D02*\nD03*\nX393600Y356692D02*\nD03*\nX394992Y355300D02*\nD03*\nX396384Y353908D02*\nD03*\nX397775Y352516D02*\nD03*\nX399167Y351124D02*\nD03*\nX400559Y349732D02*\nD03*\nD29*\nX187779Y168409D02*\nD03*\nX203091Y183721D02*\nD03*\nX222021Y164791D02*\nD03*\nX367779Y168409D02*\nD03*\nX383091Y183721D02*\nD03*\nX402021Y164791D02*\nD03*\nX187779Y348409D02*\nD03*\nX203091Y363721D02*\nD03*\nX222021Y344791D02*\nD03*\nX367779Y348409D02*\nD03*\nX383091Y363721D02*\nD03*\nX402021Y344791D02*\nD03*\nD30*\nX189241Y169732D02*\nD03*\nX190633Y171124D02*\nD03*\nX192025Y172516D02*\nD03*\nX193416Y173908D02*\nD03*\nX194808Y175300D02*\nD03*\nX196200Y176692D02*\nD03*\nX197592Y178084D02*\nD03*\nX198984Y179475D02*\nD03*\nX200376Y180867D02*\nD03*\nX201768Y182259D02*\nD03*\nX220559Y163468D02*\nD03*\nX219167Y162076D02*\nD03*\nX217775Y160684D02*\nD03*\nX216384Y159292D02*\nD03*\nX214992Y157900D02*\nD03*\nX213600Y156508D02*\nD03*\nX212208Y155116D02*\nD03*\nX210816Y153725D02*\nD03*\nX209424Y152333D02*\nD03*\nX208032Y150941D02*\nD03*\nX369241Y169732D02*\nD03*\nX370633Y171124D02*\nD03*\nX372025Y172516D02*\nD03*\nX373416Y173908D02*\nD03*\nX374808Y175300D02*\nD03*\nX376200Y176692D02*\nD03*\nX377592Y178084D02*\nD03*\nX378984Y179475D02*\nD03*\nX380376Y180867D02*\nD03*\nX381768Y182259D02*\nD03*\nX400559Y163468D02*\nD03*\nX399167Y162076D02*\nD03*\nX397775Y160684D02*\nD03*\nX396384Y159292D02*\nD03*\nX394992Y157900D02*\nD03*\nX393600Y156508D02*\nD03*\nX392208Y155116D02*\nD03*\nX390816Y153725D02*\nD03*\nX389424Y152333D02*\nD03*\nX388032Y150941D02*\nD03*\nX189241Y349732D02*\nD03*\nX190633Y351124D02*\nD03*\nX192025Y352516D02*\nD03*\nX193416Y353908D02*\nD03*\nX194808Y355300D02*\nD03*\nX196200Y356692D02*\nD03*\nX197592Y358084D02*\nD03*\nX198984Y359475D02*\nD03*\nX200376Y360867D02*\nD03*\nX201768Y362259D02*\nD03*\nX220559Y343468D02*\nD03*\nX219167Y342076D02*\nD03*\nX217775Y340684D02*\nD03*\nX216384Y339292D02*\nD03*\nX214992Y337900D02*\nD03*\nX213600Y336508D02*\nD03*\nX212208Y335116D02*\nD03*\nX210816Y333725D02*\nD03*\nX209424Y332333D02*\nD03*\nX208032Y330941D02*\nD03*\nX369241Y349732D02*\nD03*\nX370633Y351124D02*\nD03*\nX372025Y352516D02*\nD03*\nX373416Y353908D02*\nD03*\nX374808Y355300D02*\nD03*\nX376200Y356692D02*\nD03*\nX377592Y358084D02*\nD03*\nX378984Y359475D02*\nD03*\nX380376Y360867D02*\nD03*\nX381768Y362259D02*\nD03*\nX400559Y343468D02*\nD03*\nX399167Y342076D02*\nD03*\nX397775Y340684D02*\nD03*\nX396384Y339292D02*\nD03*\nX394992Y337900D02*\nD03*\nX393600Y336508D02*\nD03*\nX392208Y335116D02*\nD03*\nX390816Y333725D02*\nD03*\nX389424Y332333D02*\nD03*\nX388032Y330941D02*\nD03*\nD31*\nX206709Y149479D02*\nD03*\nX386709D02*\nD03*\nX206709Y329479D02*\nD03*\nX386709D02*\nD03*\nD32*\nX145632Y228844D02*\nD03*\nX156656D02*\nD03*\nX145532Y248544D02*\nD03*\nX156556D02*\nD03*\nX325632Y228844D02*\nD03*\nX336656D02*\nD03*\nX325532Y248544D02*\nD03*\nX336556D02*\nD03*\nX145632Y408844D02*\nD03*\nX156656D02*\nD03*\nX145532Y428544D02*\nD03*\nX156556D02*\nD03*\nX325632Y408844D02*\nD03*\nX336656D02*\nD03*\nX325532Y428544D02*\nD03*\nX336556D02*\nD03*\nD33*\nX181344Y246544D02*\nD03*\nX361344D02*\nD03*\nX181344Y426544D02*\nD03*\nX361344D02*\nD03*\nD34*\nX169730Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nY237587D02*\nD03*\nX192958Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nX349730Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nY237587D02*\nD03*\nX372958Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nX169730Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nY417587D02*\nD03*\nX192958Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nX349730Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nY417587D02*\nD03*\nX372958Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nD35*\nX192958Y237587D02*\nD03*\nX372958D02*\nD03*\nX192958Y417587D02*\nD03*\nX372958D02*\nD03*\nD36*\nX259067Y172744D02*\nD03*\nX249421Y169004D02*\nD03*\nY176484D02*\nD03*\nX258567Y190244D02*\nD03*\nX248921Y186504D02*\nD03*\nY193984D02*\nD03*\nX259067Y206244D02*\nD03*\nX249421Y202504D02*\nD03*\nY209984D02*\nD03*\nX439067Y172744D02*\nD03*\nX429421Y169004D02*\nD03*\nY176484D02*\nD03*\nX438567Y190244D02*\nD03*\nX428921Y186504D02*\nD03*\nY193984D02*\nD03*\nX439067Y206244D02*\nD03*\nX429421Y202504D02*\nD03*\nY209984D02*\nD03*\nX259067Y352744D02*\nD03*\nX249421Y349004D02*\nD03*\nY356484D02*\nD03*\nX258567Y370244D02*\nD03*\nX248921Y366504D02*\nD03*\nY373984D02*\nD03*\nX259067Y386244D02*\nD03*\nX249421Y382504D02*\nD03*\nY389984D02*\nD03*\nX439067Y352744D02*\nD03*\nX429421Y349004D02*\nD03*\nY356484D02*\nD03*\nX438567Y370244D02*\nD03*\nX428921Y366504D02*\nD03*\nY373984D02*\nD03*\nX439067Y386244D02*\nD03*\nX429421Y382504D02*\nD03*\nY389984D02*\nD03*\nD37*\nX168644Y273744D02*\nD03*\nX193044Y273687D02*\nD03*\nX348644Y273744D02*\nD03*\nX373044Y273687D02*\nD03*\nX168644Y453744D02*\nD03*\nX193044Y453687D02*\nD03*\nX348644Y453744D02*\nD03*\nX373044Y453687D02*\nD03*\nD43*\nX177920Y328192D02*\nX181252D01*\nX179586D01*\nY323194D01*\nX183751D02*\nX185417D01*\nX186250Y324027D01*\nY325693D01*\nX185417Y326526D01*\nX183751D01*\nX182918Y325693D01*\nY324027D01*\nX183751Y323194D01*\nX187917Y321528D02*\nY326526D01*\nX190416D01*\nX191249Y325693D01*\nY324027D01*\nX190416Y323194D01*\nX187917D01*\nX197913D02*\nY328192D01*\nX200412D01*\nX201245Y327359D01*\nY325693D01*\nX200412Y324860D01*\nX197913D01*\nX203745Y326526D02*\nX205411D01*\nX206244Y325693D01*\nY323194D01*\nX203745D01*\nX202912Y324027D01*\nX203745Y324860D01*\nX206244D01*\nX207910Y323194D02*\nX210409D01*\nX211242Y324027D01*\nX210409Y324860D01*\nX208743D01*\nX207910Y325693D01*\nX208743Y326526D01*\nX211242D01*\nX213741Y327359D02*\nY326526D01*\nX212908D01*\nX214575D01*\nX213741D01*\nY324027D01*\nX214575Y323194D01*\nX219573D02*\nX217907D01*\nX217074Y324027D01*\nY325693D01*\nX217907Y326526D01*\nX219573D01*\nX220406Y325693D01*\nY324860D01*\nX217074D01*\nX357920Y328192D02*\nX361252D01*\nX359586D01*\nY323194D01*\nX363751D02*\nX365417D01*\nX366250Y324027D01*\nY325693D01*\nX365417Y326526D01*\nX363751D01*\nX362918Y325693D01*\nY324027D01*\nX363751Y323194D01*\nX367916Y321528D02*\nY326526D01*\nX370416D01*\nX371249Y325693D01*\nY324027D01*\nX370416Y323194D01*\nX367916D01*\nX377913D02*\nY328192D01*\nX380412D01*\nX381245Y327359D01*\nY325693D01*\nX380412Y324860D01*\nX377913D01*\nX383745Y326526D02*\nX385411D01*\nX386244Y325693D01*\nY323194D01*\nX383745D01*\nX382912Y324027D01*\nX383745Y324860D01*\nX386244D01*\nX387910Y323194D02*\nX390409D01*\nX391242Y324027D01*\nX390409Y324860D01*\nX388743D01*\nX387910Y325693D01*\nX388743Y326526D01*\nX391242D01*\nX393741Y327359D02*\nY326526D01*\nX392908D01*\nX394574D01*\nX393741D01*\nY324027D01*\nX394574Y323194D01*\nX399573D02*\nX397907D01*\nX397074Y324027D01*\nY325693D01*\nX397907Y326526D01*\nX399573D01*\nX400406Y325693D01*\nY324860D01*\nX397074D01*\nX177920Y508192D02*\nX181252D01*\nX179586D01*\nY503194D01*\nX183751D02*\nX185417D01*\nX186250Y504027D01*\nY505693D01*\nX185417Y506526D01*\nX183751D01*\nX182918Y505693D01*\nY504027D01*\nX183751Y503194D01*\nX187917Y501528D02*\nY506526D01*\nX190416D01*\nX191249Y505693D01*\nY504027D01*\nX190416Y503194D01*\nX187917D01*\nX197913D02*\nY508192D01*\nX200412D01*\nX201245Y507359D01*\nY505693D01*\nX200412Y504860D01*\nX197913D01*\nX203745Y506526D02*\nX205411D01*\nX206244Y505693D01*\nY503194D01*\nX203745D01*\nX202912Y504027D01*\nX203745Y504860D01*\nX206244D01*\nX207910Y503194D02*\nX210409D01*\nX211242Y504027D01*\nX210409Y504860D01*\nX208743D01*\nX207910Y505693D01*\nX208743Y506526D01*\nX211242D01*\nX213741Y507359D02*\nY506526D01*\nX212908D01*\nX214575D01*\nX213741D01*\nY504027D01*\nX214575Y503194D01*\nX219573D02*\nX217907D01*\nX217074Y504027D01*\nY505693D01*\nX217907Y506526D01*\nX219573D01*\nX220406Y505693D01*\nY504860D01*\nX217074D01*\nX357920Y508192D02*\nX361252D01*\nX359586D01*\nY503194D01*\nX363751D02*\nX365417D01*\nX366250Y504027D01*\nY505693D01*\nX365417Y506526D01*\nX363751D01*\nX362918Y505693D01*\nY504027D01*\nX363751Y503194D01*\nX367916Y501528D02*\nY506526D01*\nX370416D01*\nX371249Y505693D01*\nY504027D01*\nX370416Y503194D01*\nX367916D01*\nX377913D02*\nY508192D01*\nX380412D01*\nX381245Y507359D01*\nY505693D01*\nX380412Y504860D01*\nX377913D01*\nX383745Y506526D02*\nX385411D01*\nX386244Y505693D01*\nY503194D01*\nX383745D01*\nX382912Y504027D01*\nX383745Y504860D01*\nX386244D01*\nX387910Y503194D02*\nX390409D01*\nX391242Y504027D01*\nX390409Y504860D01*\nX388743D01*\nX387910Y505693D01*\nX388743Y506526D01*\nX391242D01*\nX393741Y507359D02*\nY506526D01*\nX392908D01*\nX394574D01*\nX393741D01*\nY504027D01*\nX394574Y503194D01*\nX399573D02*\nX397907D01*\nX397074Y504027D01*\nY505693D01*\nX397907Y506526D01*\nX399573D01*\nX400406Y505693D01*\nY504860D01*\nX397074D01*\nM02*\n"
  },
  {
    "path": "hardware/panel.GTS",
    "content": "G04 Layer_Color=8388736*\n%FSLAX25Y25*%\n%MOIN*%\nG70*\nG01*\nG75*\n%ADD43C,0.00800*%\n%ADD71R,0.04343X0.03950*%\nG04:AMPARAMS|DCode=72|XSize=39.5mil|YSize=43.43mil|CornerRadius=11.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD72*\n21,1,0.03950,0.01969,0,0,270.0*\n21,1,0.01575,0.04343,0,0,270.0*\n1,1,0.02375,-0.00984,-0.00787*\n1,1,0.02375,-0.00984,0.00787*\n1,1,0.02375,0.00984,0.00787*\n1,1,0.02375,0.00984,-0.00787*\n%\n%ADD72ROUNDEDRECTD72*%\n%ADD73R,0.07887X0.04737*%\n%ADD74R,0.04147X0.03950*%\n%ADD75R,0.07690X0.02375*%\n%ADD76R,0.10249X0.05524*%\n%ADD77R,0.13005X0.05524*%\n%ADD78R,0.05524X0.07887*%\nG04:AMPARAMS|DCode=79|XSize=39.5mil|YSize=39.5mil|CornerRadius=11.87mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD79*\n21,1,0.03950,0.01575,0,0,90.0*\n21,1,0.01575,0.03950,0,0,90.0*\n1,1,0.02375,0.00787,0.00787*\n1,1,0.02375,0.00787,-0.00787*\n1,1,0.02375,-0.00787,-0.00787*\n1,1,0.02375,-0.00787,0.00787*\n%\n%ADD79ROUNDEDRECTD79*%\n%ADD80R,0.03950X0.03950*%\nG04:AMPARAMS|DCode=81|XSize=35.56mil|YSize=59.18mil|CornerRadius=10.89mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=90.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD81*\n21,1,0.03556,0.03740,0,0,90.0*\n21,1,0.01378,0.05918,0,0,90.0*\n1,1,0.02178,0.01870,0.00689*\n1,1,0.02178,0.01870,-0.00689*\n1,1,0.02178,-0.01870,-0.00689*\n1,1,0.02178,-0.01870,0.00689*\n%\n%ADD81ROUNDEDRECTD81*%\n%ADD82R,0.05918X0.03556*%\nG04:AMPARAMS|DCode=83|XSize=31.62mil|YSize=43.43mil|CornerRadius=9.91mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=270.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD83*\n21,1,0.03162,0.02362,0,0,270.0*\n21,1,0.01181,0.04343,0,0,270.0*\n1,1,0.01981,-0.01181,-0.00591*\n1,1,0.01981,-0.01181,0.00591*\n1,1,0.01981,0.01181,0.00591*\n1,1,0.01981,0.01181,-0.00591*\n%\n%ADD83ROUNDEDRECTD83*%\n%ADD84R,0.04343X0.03162*%\n%ADD85R,0.04343X0.03753*%\nG04:AMPARAMS|DCode=86|XSize=86.74mil|YSize=47.37mil|CornerRadius=13.84mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=0.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD86*\n21,1,0.08674,0.01969,0,0,0.0*\n21,1,0.05906,0.04737,0,0,0.0*\n1,1,0.02769,0.02953,-0.00984*\n1,1,0.02769,-0.02953,-0.00984*\n1,1,0.02769,-0.02953,0.00984*\n1,1,0.02769,0.02953,0.00984*\n%\n%ADD86ROUNDEDRECTD86*%\n%ADD87P,0.29805X4X180.0*%\nG04:AMPARAMS|DCode=88|XSize=17.84mil|YSize=41.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD88*\n21,1,0.02362,0.01784,0.00000,0.00000,225.0*\n1,1,0.01784,0.00835,0.00835*\n1,1,0.01784,-0.00835,-0.00835*\n%\n%ADD88OVALD88*%\n\nG04:AMPARAMS|DCode=89|XSize=17.84mil|YSize=43.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=135.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD89*\n21,1,0.02559,0.01784,0.00000,0.00000,225.0*\n1,1,0.01784,0.00905,0.00905*\n1,1,0.01784,-0.00905,-0.00905*\n%\n%ADD89OVALD89*%\n\nG04:AMPARAMS|DCode=90|XSize=17.84mil|YSize=41.47mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD90*\n21,1,0.02362,0.01784,0.00000,0.00000,315.0*\n1,1,0.01784,-0.00835,0.00835*\n1,1,0.01784,0.00835,-0.00835*\n%\n%ADD90OVALD90*%\n\nG04:AMPARAMS|DCode=91|XSize=17.84mil|YSize=43.43mil|CornerRadius=0mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=Round|*\n%AMOVALD91*\n21,1,0.02559,0.01784,0.00000,0.00000,315.0*\n1,1,0.01784,-0.00905,0.00905*\n1,1,0.01784,0.00905,-0.00905*\n%\n%ADD91OVALD91*%\n\nG04:AMPARAMS|DCode=92|XSize=17.84mil|YSize=41.47mil|CornerRadius=6.46mil|HoleSize=0mil|Usage=FLASHONLY|Rotation=225.000|XOffset=0mil|YOffset=0mil|HoleType=Round|Shape=RoundedRectangle|*\n%AMROUNDEDRECTD92*\n21,1,0.01784,0.02854,0,0,225.0*\n21,1,0.00492,0.04147,0,0,225.0*\n1,1,0.01292,-0.01183,0.00835*\n1,1,0.01292,-0.00835,0.01183*\n1,1,0.01292,0.01183,-0.00835*\n1,1,0.01292,0.00835,-0.01183*\n%\n%ADD92ROUNDEDRECTD92*%\n%ADD93R,0.04737X0.07493*%\n%ADD94R,0.12611X0.12611*%\n%ADD95O,0.06312X0.02572*%\n%ADD96R,0.06312X0.02572*%\n%ADD97R,0.04540X0.03556*%\n%ADD98R,0.13300X0.05300*%\n%ADD99C,0.01800*%\n%ADD100O,0.05524X0.10249*%\n%ADD101O,0.06902X0.04343*%\n%ADD102O,0.04540X0.05721*%\n%ADD103C,0.07800*%\n%ADD104R,0.07800X0.07800*%\n%ADD105C,0.04800*%\n%ADD106R,0.04800X0.04800*%\n%ADD107R,0.07800X0.07800*%\n%ADD108C,0.08674*%\nD43*\nX171120Y329692D02*\nX174452D01*\nX172786D01*\nY324694D01*\nX176951D02*\nX178617D01*\nX179450Y325527D01*\nY327193D01*\nX178617Y328026D01*\nX176951D01*\nX176118Y327193D01*\nY325527D01*\nX176951Y324694D01*\nX181116Y323028D02*\nY328026D01*\nX183616D01*\nX184449Y327193D01*\nY325527D01*\nX183616Y324694D01*\nX181116D01*\nX194446Y328859D02*\nX193612Y329692D01*\nX191946D01*\nX191113Y328859D01*\nY328026D01*\nX191946Y327193D01*\nX193612D01*\nX194446Y326360D01*\nY325527D01*\nX193612Y324694D01*\nX191946D01*\nX191113Y325527D01*\nX196945Y324694D02*\nX198611D01*\nX199444Y325527D01*\nY327193D01*\nX198611Y328026D01*\nX196945D01*\nX196112Y327193D01*\nY325527D01*\nX196945Y324694D01*\nX201110D02*\nX202776D01*\nX201943D01*\nY329692D01*\nX201110D01*\nX208608D02*\nY324694D01*\nX206108D01*\nX205275Y325527D01*\nY327193D01*\nX206108Y328026D01*\nX208608D01*\nX212773Y324694D02*\nX211107D01*\nX210274Y325527D01*\nY327193D01*\nX211107Y328026D01*\nX212773D01*\nX213606Y327193D01*\nY326360D01*\nX210274D01*\nX215272Y328026D02*\nY324694D01*\nY326360D01*\nX216105Y327193D01*\nX216938Y328026D01*\nX217771D01*\nX351120Y329692D02*\nX354452D01*\nX352786D01*\nY324694D01*\nX356951D02*\nX358617D01*\nX359450Y325527D01*\nY327193D01*\nX358617Y328026D01*\nX356951D01*\nX356118Y327193D01*\nY325527D01*\nX356951Y324694D01*\nX361116Y323028D02*\nY328026D01*\nX363616D01*\nX364449Y327193D01*\nY325527D01*\nX363616Y324694D01*\nX361116D01*\nX374446Y328859D02*\nX373612Y329692D01*\nX371946D01*\nX371113Y328859D01*\nY328026D01*\nX371946Y327193D01*\nX373612D01*\nX374446Y326360D01*\nY325527D01*\nX373612Y324694D01*\nX371946D01*\nX371113Y325527D01*\nX376945Y324694D02*\nX378611D01*\nX379444Y325527D01*\nY327193D01*\nX378611Y328026D01*\nX376945D01*\nX376112Y327193D01*\nY325527D01*\nX376945Y324694D01*\nX381110D02*\nX382776D01*\nX381943D01*\nY329692D01*\nX381110D01*\nX388608D02*\nY324694D01*\nX386108D01*\nX385275Y325527D01*\nY327193D01*\nX386108Y328026D01*\nX388608D01*\nX392773Y324694D02*\nX391107D01*\nX390274Y325527D01*\nY327193D01*\nX391107Y328026D01*\nX392773D01*\nX393606Y327193D01*\nY326360D01*\nX390274D01*\nX395272Y328026D02*\nY324694D01*\nY326360D01*\nX396105Y327193D01*\nX396938Y328026D01*\nX397771D01*\nX171120Y509692D02*\nX174452D01*\nX172786D01*\nY504694D01*\nX176951D02*\nX178617D01*\nX179450Y505527D01*\nY507193D01*\nX178617Y508026D01*\nX176951D01*\nX176118Y507193D01*\nY505527D01*\nX176951Y504694D01*\nX181116Y503028D02*\nY508026D01*\nX183616D01*\nX184449Y507193D01*\nY505527D01*\nX183616Y504694D01*\nX181116D01*\nX194446Y508859D02*\nX193612Y509692D01*\nX191946D01*\nX191113Y508859D01*\nY508026D01*\nX191946Y507193D01*\nX193612D01*\nX194446Y506360D01*\nY505527D01*\nX193612Y504694D01*\nX191946D01*\nX191113Y505527D01*\nX196945Y504694D02*\nX198611D01*\nX199444Y505527D01*\nY507193D01*\nX198611Y508026D01*\nX196945D01*\nX196112Y507193D01*\nY505527D01*\nX196945Y504694D01*\nX201110D02*\nX202776D01*\nX201943D01*\nY509692D01*\nX201110D01*\nX208608D02*\nY504694D01*\nX206108D01*\nX205275Y505527D01*\nY507193D01*\nX206108Y508026D01*\nX208608D01*\nX212773Y504694D02*\nX211107D01*\nX210274Y505527D01*\nY507193D01*\nX211107Y508026D01*\nX212773D01*\nX213606Y507193D01*\nY506360D01*\nX210274D01*\nX215272Y508026D02*\nY504694D01*\nY506360D01*\nX216105Y507193D01*\nX216938Y508026D01*\nX217771D01*\nX351120Y509692D02*\nX354452D01*\nX352786D01*\nY504694D01*\nX356951D02*\nX358617D01*\nX359450Y505527D01*\nY507193D01*\nX358617Y508026D01*\nX356951D01*\nX356118Y507193D01*\nY505527D01*\nX356951Y504694D01*\nX361116Y503028D02*\nY508026D01*\nX363616D01*\nX364449Y507193D01*\nY505527D01*\nX363616Y504694D01*\nX361116D01*\nX374446Y508859D02*\nX373612Y509692D01*\nX371946D01*\nX371113Y508859D01*\nY508026D01*\nX371946Y507193D01*\nX373612D01*\nX374446Y506360D01*\nY505527D01*\nX373612Y504694D01*\nX371946D01*\nX371113Y505527D01*\nX376945Y504694D02*\nX378611D01*\nX379444Y505527D01*\nY507193D01*\nX378611Y508026D01*\nX376945D01*\nX376112Y507193D01*\nY505527D01*\nX376945Y504694D01*\nX381110D02*\nX382776D01*\nX381943D01*\nY509692D01*\nX381110D01*\nX388608D02*\nY504694D01*\nX386108D01*\nX385275Y505527D01*\nY507193D01*\nX386108Y508026D01*\nX388608D01*\nX392773Y504694D02*\nX391107D01*\nX390274Y505527D01*\nY507193D01*\nX391107Y508026D01*\nX392773D01*\nX393606Y507193D01*\nY506360D01*\nX390274D01*\nX395272Y508026D02*\nY504694D01*\nY506360D01*\nX396105Y507193D01*\nX396938Y508026D01*\nX397771D01*\nD71*\nX246583Y246681D02*\nD03*\nX255244Y250618D02*\nD03*\nX426583Y246681D02*\nD03*\nX435244Y250618D02*\nD03*\nX246583Y426681D02*\nD03*\nX255244Y430618D02*\nD03*\nX426583Y426681D02*\nD03*\nX435244Y430618D02*\nD03*\nD72*\nX255244Y242744D02*\nD03*\nX435244D02*\nD03*\nX255244Y422744D02*\nD03*\nX435244D02*\nD03*\nD73*\nX230157Y154000D02*\nD03*\nY144157D02*\nD03*\nX410157Y154000D02*\nD03*\nY144157D02*\nD03*\nX230157Y334000D02*\nD03*\nY324157D02*\nD03*\nX410157Y334000D02*\nD03*\nY324157D02*\nD03*\nD74*\nX178705Y230244D02*\nD03*\nX173783D02*\nD03*\nX242618Y144000D02*\nD03*\nX237697D02*\nD03*\nX242618Y154000D02*\nD03*\nX237697D02*\nD03*\nX358705Y230244D02*\nD03*\nX353783D02*\nD03*\nX422618Y144000D02*\nD03*\nX417697D02*\nD03*\nX422618Y154000D02*\nD03*\nX417697D02*\nD03*\nX178705Y410244D02*\nD03*\nX173783D02*\nD03*\nX242618Y324000D02*\nD03*\nX237697D02*\nD03*\nX242618Y334000D02*\nD03*\nX237697D02*\nD03*\nX358705Y410244D02*\nD03*\nX353783D02*\nD03*\nX422618Y324000D02*\nD03*\nX417697D02*\nD03*\nX422618Y334000D02*\nD03*\nX417697D02*\nD03*\nD75*\nX143244Y200862D02*\nD03*\nY198303D02*\nD03*\nY195744D02*\nD03*\nY190626D02*\nD03*\nY193185D02*\nD03*\nX323244Y200862D02*\nD03*\nY198303D02*\nD03*\nY195744D02*\nD03*\nY190626D02*\nD03*\nY193185D02*\nD03*\nX143244Y380862D02*\nD03*\nY378303D02*\nD03*\nY375744D02*\nD03*\nY370626D02*\nD03*\nY373185D02*\nD03*\nX323244Y380862D02*\nD03*\nY378303D02*\nD03*\nY375744D02*\nD03*\nY370626D02*\nD03*\nY373185D02*\nD03*\nD76*\nX131433Y200075D02*\nD03*\nY192201D02*\nD03*\nX311433Y200075D02*\nD03*\nY192201D02*\nD03*\nX131433Y380075D02*\nD03*\nY372201D02*\nD03*\nX311433Y380075D02*\nD03*\nY372201D02*\nD03*\nD77*\nX134344Y183944D02*\nD03*\nY207244D02*\nD03*\nX314344Y183944D02*\nD03*\nY207244D02*\nD03*\nX134344Y363944D02*\nD03*\nY387244D02*\nD03*\nX314344Y363944D02*\nD03*\nY387244D02*\nD03*\nD78*\nX143944Y184344D02*\nD03*\nX144057Y207187D02*\nD03*\nX323944Y184344D02*\nD03*\nX324057Y207187D02*\nD03*\nX143944Y364344D02*\nD03*\nX144057Y387187D02*\nD03*\nX323944Y364344D02*\nD03*\nX324057Y387187D02*\nD03*\nD79*\nX159744Y181244D02*\nD03*\nX169000Y157000D02*\nD03*\nX339744Y181244D02*\nD03*\nX349000Y157000D02*\nD03*\nX159744Y361244D02*\nD03*\nX169000Y337000D02*\nD03*\nX339744Y361244D02*\nD03*\nX349000Y337000D02*\nD03*\nD80*\nX165650Y181244D02*\nD03*\nX174906Y157000D02*\nD03*\nX345650Y181244D02*\nD03*\nX354906Y157000D02*\nD03*\nX165650Y361244D02*\nD03*\nX174906Y337000D02*\nD03*\nX345650Y361244D02*\nD03*\nX354906Y337000D02*\nD03*\nD81*\nX157920Y196084D02*\nD03*\nX337920D02*\nD03*\nX157920Y376084D02*\nD03*\nX337920D02*\nD03*\nD82*\nX157920Y192344D02*\nD03*\nY188604D02*\nD03*\nX167368D02*\nD03*\nY192344D02*\nD03*\nY196084D02*\nD03*\nX337920Y192344D02*\nD03*\nY188604D02*\nD03*\nX347368D02*\nD03*\nY192344D02*\nD03*\nY196084D02*\nD03*\nX157920Y372344D02*\nD03*\nY368604D02*\nD03*\nX167368D02*\nD03*\nY372344D02*\nD03*\nY376084D02*\nD03*\nX337920Y372344D02*\nD03*\nY368604D02*\nD03*\nX347368D02*\nD03*\nY372344D02*\nD03*\nY376084D02*\nD03*\nD83*\nX253824Y223760D02*\nD03*\nX433824D02*\nD03*\nX253824Y403760D02*\nD03*\nX433824D02*\nD03*\nD84*\nX253824Y227500D02*\nD03*\nY231240D02*\nD03*\nX244376D02*\nD03*\nY223760D02*\nD03*\nX433824Y227500D02*\nD03*\nY231240D02*\nD03*\nX424376D02*\nD03*\nY223760D02*\nD03*\nX253824Y407500D02*\nD03*\nY411240D02*\nD03*\nX244376D02*\nD03*\nY403760D02*\nD03*\nX433824Y407500D02*\nD03*\nY411240D02*\nD03*\nX424376D02*\nD03*\nY403760D02*\nD03*\nD85*\nX237600Y224843D02*\nD03*\nY230157D02*\nD03*\nY241157D02*\nD03*\nY235843D02*\nD03*\nX417600Y224843D02*\nD03*\nY230157D02*\nD03*\nY241157D02*\nD03*\nY235843D02*\nD03*\nX237600Y404843D02*\nD03*\nY410157D02*\nD03*\nY421157D02*\nD03*\nY415843D02*\nD03*\nX417600Y404843D02*\nD03*\nY410157D02*\nD03*\nY421157D02*\nD03*\nY415843D02*\nD03*\nD86*\nX158744Y207744D02*\nD03*\nX174886D02*\nD03*\nX158744Y214043D02*\nD03*\nX174744D02*\nD03*\nX199244Y128945D02*\nD03*\nX215244D02*\nD03*\nX199102Y135244D02*\nD03*\nX215244D02*\nD03*\nX164744Y128945D02*\nD03*\nX180744D02*\nD03*\nX164602Y135244D02*\nD03*\nX180744D02*\nD03*\nX250744D02*\nD03*\nX234602D02*\nD03*\nX250744Y128945D02*\nD03*\nX234744D02*\nD03*\nX338744Y207744D02*\nD03*\nX354886D02*\nD03*\nX338744Y214043D02*\nD03*\nX354744D02*\nD03*\nX379244Y128945D02*\nD03*\nX395244D02*\nD03*\nX379102Y135244D02*\nD03*\nX395244D02*\nD03*\nX344744Y128945D02*\nD03*\nX360744D02*\nD03*\nX344602Y135244D02*\nD03*\nX360744D02*\nD03*\nX430744D02*\nD03*\nX414602D02*\nD03*\nX430744Y128945D02*\nD03*\nX414744D02*\nD03*\nX158744Y387744D02*\nD03*\nX174886D02*\nD03*\nX158744Y394043D02*\nD03*\nX174744D02*\nD03*\nX199244Y308945D02*\nD03*\nX215244D02*\nD03*\nX199102Y315244D02*\nD03*\nX215244D02*\nD03*\nX164744Y308945D02*\nD03*\nX180744D02*\nD03*\nX164602Y315244D02*\nD03*\nX180744D02*\nD03*\nX250744D02*\nD03*\nX234602D02*\nD03*\nX250744Y308945D02*\nD03*\nX234744D02*\nD03*\nX338744Y387744D02*\nD03*\nX354886D02*\nD03*\nX338744Y394043D02*\nD03*\nX354744D02*\nD03*\nX379244Y308945D02*\nD03*\nX395244D02*\nD03*\nX379102Y315244D02*\nD03*\nX395244D02*\nD03*\nX344744Y308945D02*\nD03*\nX360744D02*\nD03*\nX344602Y315244D02*\nD03*\nX360744D02*\nD03*\nX430744D02*\nD03*\nX414602D02*\nD03*\nX430744Y308945D02*\nD03*\nX414744D02*\nD03*\nD87*\nX204900Y166600D02*\nD03*\nX384900D02*\nD03*\nX204900Y346600D02*\nD03*\nX384900D02*\nD03*\nD88*\nX203091Y149479D02*\nD03*\nX187779Y164791D02*\nD03*\nX206709Y183721D02*\nD03*\nX222021Y168409D02*\nD03*\nX383091Y149479D02*\nD03*\nX367779Y164791D02*\nD03*\nX386709Y183721D02*\nD03*\nX402021Y168409D02*\nD03*\nX203091Y329479D02*\nD03*\nX187779Y344791D02*\nD03*\nX206709Y363721D02*\nD03*\nX222021Y348409D02*\nD03*\nX383091Y329479D02*\nD03*\nX367779Y344791D02*\nD03*\nX386709Y363721D02*\nD03*\nX402021Y348409D02*\nD03*\nD89*\nX201768Y150941D02*\nD03*\nX200376Y152333D02*\nD03*\nX198984Y153725D02*\nD03*\nX197592Y155116D02*\nD03*\nX196200Y156508D02*\nD03*\nX194808Y157900D02*\nD03*\nX193416Y159292D02*\nD03*\nX192025Y160684D02*\nD03*\nX190633Y162076D02*\nD03*\nX189241Y163468D02*\nD03*\nX208032Y182259D02*\nD03*\nX209424Y180867D02*\nD03*\nX210816Y179475D02*\nD03*\nX212208Y178084D02*\nD03*\nX213600Y176692D02*\nD03*\nX214992Y175300D02*\nD03*\nX216384Y173908D02*\nD03*\nX217775Y172516D02*\nD03*\nX219167Y171124D02*\nD03*\nX220559Y169732D02*\nD03*\nX381768Y150941D02*\nD03*\nX380376Y152333D02*\nD03*\nX378984Y153725D02*\nD03*\nX377592Y155116D02*\nD03*\nX376200Y156508D02*\nD03*\nX374808Y157900D02*\nD03*\nX373416Y159292D02*\nD03*\nX372025Y160684D02*\nD03*\nX370633Y162076D02*\nD03*\nX369241Y163468D02*\nD03*\nX388032Y182259D02*\nD03*\nX389424Y180867D02*\nD03*\nX390816Y179475D02*\nD03*\nX392208Y178084D02*\nD03*\nX393600Y176692D02*\nD03*\nX394992Y175300D02*\nD03*\nX396384Y173908D02*\nD03*\nX397775Y172516D02*\nD03*\nX399167Y171124D02*\nD03*\nX400559Y169732D02*\nD03*\nX201768Y330941D02*\nD03*\nX200376Y332333D02*\nD03*\nX198984Y333725D02*\nD03*\nX197592Y335116D02*\nD03*\nX196200Y336508D02*\nD03*\nX194808Y337900D02*\nD03*\nX193416Y339292D02*\nD03*\nX192025Y340684D02*\nD03*\nX190633Y342076D02*\nD03*\nX189241Y343468D02*\nD03*\nX208032Y362259D02*\nD03*\nX209424Y360867D02*\nD03*\nX210816Y359475D02*\nD03*\nX212208Y358084D02*\nD03*\nX213600Y356692D02*\nD03*\nX214992Y355300D02*\nD03*\nX216384Y353908D02*\nD03*\nX217775Y352516D02*\nD03*\nX219167Y351124D02*\nD03*\nX220559Y349732D02*\nD03*\nX381768Y330941D02*\nD03*\nX380376Y332333D02*\nD03*\nX378984Y333725D02*\nD03*\nX377592Y335116D02*\nD03*\nX376200Y336508D02*\nD03*\nX374808Y337900D02*\nD03*\nX373416Y339292D02*\nD03*\nX372025Y340684D02*\nD03*\nX370633Y342076D02*\nD03*\nX369241Y343468D02*\nD03*\nX388032Y362259D02*\nD03*\nX389424Y360867D02*\nD03*\nX390816Y359475D02*\nD03*\nX392208Y358084D02*\nD03*\nX393600Y356692D02*\nD03*\nX394992Y355300D02*\nD03*\nX396384Y353908D02*\nD03*\nX397775Y352516D02*\nD03*\nX399167Y351124D02*\nD03*\nX400559Y349732D02*\nD03*\nD90*\nX187779Y168409D02*\nD03*\nX203091Y183721D02*\nD03*\nX222021Y164791D02*\nD03*\nX367779Y168409D02*\nD03*\nX383091Y183721D02*\nD03*\nX402021Y164791D02*\nD03*\nX187779Y348409D02*\nD03*\nX203091Y363721D02*\nD03*\nX222021Y344791D02*\nD03*\nX367779Y348409D02*\nD03*\nX383091Y363721D02*\nD03*\nX402021Y344791D02*\nD03*\nD91*\nX189241Y169732D02*\nD03*\nX190633Y171124D02*\nD03*\nX192025Y172516D02*\nD03*\nX193416Y173908D02*\nD03*\nX194808Y175300D02*\nD03*\nX196200Y176692D02*\nD03*\nX197592Y178084D02*\nD03*\nX198984Y179475D02*\nD03*\nX200376Y180867D02*\nD03*\nX201768Y182259D02*\nD03*\nX220559Y163468D02*\nD03*\nX219167Y162076D02*\nD03*\nX217775Y160684D02*\nD03*\nX216384Y159292D02*\nD03*\nX214992Y157900D02*\nD03*\nX213600Y156508D02*\nD03*\nX212208Y155116D02*\nD03*\nX210816Y153725D02*\nD03*\nX209424Y152333D02*\nD03*\nX208032Y150941D02*\nD03*\nX369241Y169732D02*\nD03*\nX370633Y171124D02*\nD03*\nX372025Y172516D02*\nD03*\nX373416Y173908D02*\nD03*\nX374808Y175300D02*\nD03*\nX376200Y176692D02*\nD03*\nX377592Y178084D02*\nD03*\nX378984Y179475D02*\nD03*\nX380376Y180867D02*\nD03*\nX381768Y182259D02*\nD03*\nX400559Y163468D02*\nD03*\nX399167Y162076D02*\nD03*\nX397775Y160684D02*\nD03*\nX396384Y159292D02*\nD03*\nX394992Y157900D02*\nD03*\nX393600Y156508D02*\nD03*\nX392208Y155116D02*\nD03*\nX390816Y153725D02*\nD03*\nX389424Y152333D02*\nD03*\nX388032Y150941D02*\nD03*\nX189241Y349732D02*\nD03*\nX190633Y351124D02*\nD03*\nX192025Y352516D02*\nD03*\nX193416Y353908D02*\nD03*\nX194808Y355300D02*\nD03*\nX196200Y356692D02*\nD03*\nX197592Y358084D02*\nD03*\nX198984Y359475D02*\nD03*\nX200376Y360867D02*\nD03*\nX201768Y362259D02*\nD03*\nX220559Y343468D02*\nD03*\nX219167Y342076D02*\nD03*\nX217775Y340684D02*\nD03*\nX216384Y339292D02*\nD03*\nX214992Y337900D02*\nD03*\nX213600Y336508D02*\nD03*\nX212208Y335116D02*\nD03*\nX210816Y333725D02*\nD03*\nX209424Y332333D02*\nD03*\nX208032Y330941D02*\nD03*\nX369241Y349732D02*\nD03*\nX370633Y351124D02*\nD03*\nX372025Y352516D02*\nD03*\nX373416Y353908D02*\nD03*\nX374808Y355300D02*\nD03*\nX376200Y356692D02*\nD03*\nX377592Y358084D02*\nD03*\nX378984Y359475D02*\nD03*\nX380376Y360867D02*\nD03*\nX381768Y362259D02*\nD03*\nX400559Y343468D02*\nD03*\nX399167Y342076D02*\nD03*\nX397775Y340684D02*\nD03*\nX396384Y339292D02*\nD03*\nX394992Y337900D02*\nD03*\nX393600Y336508D02*\nD03*\nX392208Y335116D02*\nD03*\nX390816Y333725D02*\nD03*\nX389424Y332333D02*\nD03*\nX388032Y330941D02*\nD03*\nD92*\nX206709Y149479D02*\nD03*\nX386709D02*\nD03*\nX206709Y329479D02*\nD03*\nX386709D02*\nD03*\nD93*\nX145632Y228844D02*\nD03*\nX156656D02*\nD03*\nX145532Y248544D02*\nD03*\nX156556D02*\nD03*\nX325632Y228844D02*\nD03*\nX336656D02*\nD03*\nX325532Y248544D02*\nD03*\nX336556D02*\nD03*\nX145632Y408844D02*\nD03*\nX156656D02*\nD03*\nX145532Y428544D02*\nD03*\nX156556D02*\nD03*\nX325632Y408844D02*\nD03*\nX336656D02*\nD03*\nX325532Y428544D02*\nD03*\nX336556D02*\nD03*\nD94*\nX181344Y246544D02*\nD03*\nX361344D02*\nD03*\nX181344Y426544D02*\nD03*\nX361344D02*\nD03*\nD95*\nX169730Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nY237587D02*\nD03*\nX192958Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nX349730Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nY237587D02*\nD03*\nX372958Y255501D02*\nD03*\nY252942D02*\nD03*\nY250383D02*\nD03*\nY247824D02*\nD03*\nY245265D02*\nD03*\nY242706D02*\nD03*\nY240146D02*\nD03*\nX169730Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nY417587D02*\nD03*\nX192958Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nX349730Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nY417587D02*\nD03*\nX372958Y435501D02*\nD03*\nY432942D02*\nD03*\nY430383D02*\nD03*\nY427824D02*\nD03*\nY425265D02*\nD03*\nY422706D02*\nD03*\nY420146D02*\nD03*\nD96*\nX192958Y237587D02*\nD03*\nX372958D02*\nD03*\nX192958Y417587D02*\nD03*\nX372958D02*\nD03*\nD97*\nX259067Y172744D02*\nD03*\nX249421Y169004D02*\nD03*\nY176484D02*\nD03*\nX258567Y190244D02*\nD03*\nX248921Y186504D02*\nD03*\nY193984D02*\nD03*\nX259067Y206244D02*\nD03*\nX249421Y202504D02*\nD03*\nY209984D02*\nD03*\nX439067Y172744D02*\nD03*\nX429421Y169004D02*\nD03*\nY176484D02*\nD03*\nX438567Y190244D02*\nD03*\nX428921Y186504D02*\nD03*\nY193984D02*\nD03*\nX439067Y206244D02*\nD03*\nX429421Y202504D02*\nD03*\nY209984D02*\nD03*\nX259067Y352744D02*\nD03*\nX249421Y349004D02*\nD03*\nY356484D02*\nD03*\nX258567Y370244D02*\nD03*\nX248921Y366504D02*\nD03*\nY373984D02*\nD03*\nX259067Y386244D02*\nD03*\nX249421Y382504D02*\nD03*\nY389984D02*\nD03*\nX439067Y352744D02*\nD03*\nX429421Y349004D02*\nD03*\nY356484D02*\nD03*\nX438567Y370244D02*\nD03*\nX428921Y366504D02*\nD03*\nY373984D02*\nD03*\nX439067Y386244D02*\nD03*\nX429421Y382504D02*\nD03*\nY389984D02*\nD03*\nD98*\nX168644Y273744D02*\nD03*\nX193044Y273687D02*\nD03*\nX348644Y273744D02*\nD03*\nX373044Y273687D02*\nD03*\nX168644Y453744D02*\nD03*\nX193044Y453687D02*\nD03*\nX348644Y453744D02*\nD03*\nX373044Y453687D02*\nD03*\nD99*\nX125000Y260000D02*\nD03*\nY265000D02*\nD03*\nY255000D02*\nD03*\nY250000D02*\nD03*\nY245000D02*\nD03*\nY240000D02*\nD03*\nX124600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX290600Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX305100Y150000D02*\nD03*\nY155000D02*\nD03*\nY160000D02*\nD03*\nY165000D02*\nD03*\nY175000D02*\nD03*\nY170000D02*\nD03*\nX291400Y229800D02*\nD03*\nY234800D02*\nD03*\nY239800D02*\nD03*\nY244800D02*\nD03*\nY254800D02*\nD03*\nY249800D02*\nD03*\nX304800Y229300D02*\nD03*\nY234300D02*\nD03*\nY239300D02*\nD03*\nY244300D02*\nD03*\nY254300D02*\nD03*\nY249300D02*\nD03*\nX125200Y409200D02*\nD03*\nY414200D02*\nD03*\nY419200D02*\nD03*\nY424200D02*\nD03*\nY434200D02*\nD03*\nY429200D02*\nD03*\nX291200Y338300D02*\nD03*\nY343300D02*\nD03*\nY348300D02*\nD03*\nY353300D02*\nD03*\nY363300D02*\nD03*\nY358300D02*\nD03*\nX291000Y404100D02*\nD03*\nY409100D02*\nD03*\nY414100D02*\nD03*\nY419100D02*\nD03*\nY429100D02*\nD03*\nY424100D02*\nD03*\nX304900Y404500D02*\nD03*\nY409500D02*\nD03*\nY414500D02*\nD03*\nY419500D02*\nD03*\nY429500D02*\nD03*\nY424500D02*\nD03*\nX304700Y338200D02*\nD03*\nY343200D02*\nD03*\nY348200D02*\nD03*\nY353200D02*\nD03*\nY363200D02*\nD03*\nY358200D02*\nD03*\nX471200Y401400D02*\nD03*\nY406400D02*\nD03*\nY411400D02*\nD03*\nY416400D02*\nD03*\nY426400D02*\nD03*\nY421400D02*\nD03*\nX471600Y339500D02*\nD03*\nY344500D02*\nD03*\nY349500D02*\nD03*\nY354500D02*\nD03*\nY364500D02*\nD03*\nY359500D02*\nD03*\nY216100D02*\nD03*\nY221100D02*\nD03*\nY226100D02*\nD03*\nY231100D02*\nD03*\nY241100D02*\nD03*\nY236100D02*\nD03*\nX470600Y152500D02*\nD03*\nY157500D02*\nD03*\nY162500D02*\nD03*\nY167500D02*\nD03*\nY177500D02*\nD03*\nY172500D02*\nD03*\nX443700Y124400D02*\nD03*\nX438700D02*\nD03*\nX433700D02*\nD03*\nX428700D02*\nD03*\nX418700D02*\nD03*\nX423700D02*\nD03*\nX357000Y124000D02*\nD03*\nX352000D02*\nD03*\nX347000D02*\nD03*\nX342000D02*\nD03*\nX332000D02*\nD03*\nX337000D02*\nD03*\nX360500Y289900D02*\nD03*\nX355500D02*\nD03*\nX350500D02*\nD03*\nX345500D02*\nD03*\nX335500D02*\nD03*\nX340500D02*\nD03*\nX432500Y290100D02*\nD03*\nX427500D02*\nD03*\nX422500D02*\nD03*\nX417500D02*\nD03*\nX407500D02*\nD03*\nX412500D02*\nD03*\nX431400Y303700D02*\nD03*\nX426400D02*\nD03*\nX421400D02*\nD03*\nX416400D02*\nD03*\nX406400D02*\nD03*\nX411400D02*\nD03*\nX360600Y304500D02*\nD03*\nX355600D02*\nD03*\nX350600D02*\nD03*\nX345600D02*\nD03*\nX335600D02*\nD03*\nX340600D02*\nD03*\nX365000Y469600D02*\nD03*\nX360000D02*\nD03*\nX355000D02*\nD03*\nX350000D02*\nD03*\nX340000D02*\nD03*\nX345000D02*\nD03*\nX435000D02*\nD03*\nX430000D02*\nD03*\nX425000D02*\nD03*\nX420000D02*\nD03*\nX410000D02*\nD03*\nX415000D02*\nD03*\nX252600D02*\nD03*\nX247600D02*\nD03*\nX242600D02*\nD03*\nX237600D02*\nD03*\nX227600D02*\nD03*\nX232600D02*\nD03*\nX183200Y469800D02*\nD03*\nX178200D02*\nD03*\nX173200D02*\nD03*\nX168200D02*\nD03*\nX158200D02*\nD03*\nX163200D02*\nD03*\nX175500Y303900D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX160500D02*\nD03*\nX150500D02*\nD03*\nX155500D02*\nD03*\nX175700Y290100D02*\nD03*\nX170700D02*\nD03*\nX165700D02*\nD03*\nX160700D02*\nD03*\nX150700D02*\nD03*\nX155700D02*\nD03*\nX260900Y303300D02*\nD03*\nX255900D02*\nD03*\nX250900D02*\nD03*\nX245900D02*\nD03*\nX235900D02*\nD03*\nX240900D02*\nD03*\nX261100Y290100D02*\nD03*\nX256100D02*\nD03*\nX251100D02*\nD03*\nX246100D02*\nD03*\nX236100D02*\nD03*\nX241100D02*\nD03*\nX261300Y123800D02*\nD03*\nX256300D02*\nD03*\nX251300D02*\nD03*\nX246300D02*\nD03*\nX236300D02*\nD03*\nX241300D02*\nD03*\nX180500Y124000D02*\nD03*\nX175500D02*\nD03*\nX170500D02*\nD03*\nX165500D02*\nD03*\nX155500D02*\nD03*\nX160500D02*\nD03*\nX125100Y351700D02*\nD03*\nY356700D02*\nD03*\nY346700D02*\nD03*\nY341700D02*\nD03*\nY336700D02*\nD03*\nY331700D02*\nD03*\nD100*\nX147744Y146744D02*\nD03*\nX269791D02*\nD03*\nY268791D02*\nD03*\nX147744D02*\nD03*\nX327744Y146744D02*\nD03*\nX449791D02*\nD03*\nY268791D02*\nD03*\nX327744D02*\nD03*\nX147744Y326744D02*\nD03*\nX269791D02*\nD03*\nY448791D02*\nD03*\nX147744D02*\nD03*\nX327744Y326744D02*\nD03*\nX449791D02*\nD03*\nY448791D02*\nD03*\nX327744D02*\nD03*\nD101*\nX133008Y181964D02*\nD03*\nY209524D02*\nD03*\nX313008Y181964D02*\nD03*\nY209524D02*\nD03*\nX133008Y361964D02*\nD03*\nY389524D02*\nD03*\nX313008Y361964D02*\nD03*\nY389524D02*\nD03*\nD102*\nX144031Y185901D02*\nD03*\nY205587D02*\nD03*\nX324031Y185901D02*\nD03*\nY205587D02*\nD03*\nX144031Y365901D02*\nD03*\nY385587D02*\nD03*\nX324031Y365901D02*\nD03*\nY385587D02*\nD03*\nD103*\nX132044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX235244Y252744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX312044Y222344D02*\nD03*\nY232344D02*\nD03*\nY242344D02*\nD03*\nX415244Y252744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y171200D02*\nD03*\nY181200D02*\nD03*\nY191200D02*\nD03*\nY201200D02*\nD03*\nY211200D02*\nD03*\nY221200D02*\nD03*\nY231200D02*\nD03*\nY241200D02*\nD03*\nY251200D02*\nD03*\nX132044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX235244Y432744D02*\nD03*\nX225244D02*\nD03*\nX215244D02*\nD03*\nX283500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nX312044Y402344D02*\nD03*\nY412344D02*\nD03*\nY422344D02*\nD03*\nX415244Y432744D02*\nD03*\nX405244D02*\nD03*\nX395244D02*\nD03*\nX463500Y351200D02*\nD03*\nY361200D02*\nD03*\nY371200D02*\nD03*\nY381200D02*\nD03*\nY391200D02*\nD03*\nY401200D02*\nD03*\nY411200D02*\nD03*\nY421200D02*\nD03*\nY431200D02*\nD03*\nD104*\nX132044Y252344D02*\nD03*\nX312044D02*\nD03*\nX132044Y432344D02*\nD03*\nX312044D02*\nD03*\nD105*\nX141744Y166744D02*\nD03*\nY171744D02*\nD03*\nX146744Y166744D02*\nD03*\nY171744D02*\nD03*\nX151744Y166744D02*\nD03*\nY171744D02*\nD03*\nX156744Y166744D02*\nD03*\nY171744D02*\nD03*\nX161744Y166744D02*\nD03*\nX321744D02*\nD03*\nY171744D02*\nD03*\nX326744Y166744D02*\nD03*\nY171744D02*\nD03*\nX331744Y166744D02*\nD03*\nY171744D02*\nD03*\nX336744Y166744D02*\nD03*\nY171744D02*\nD03*\nX341744Y166744D02*\nD03*\nX141744Y346744D02*\nD03*\nY351744D02*\nD03*\nX146744Y346744D02*\nD03*\nY351744D02*\nD03*\nX151744Y346744D02*\nD03*\nY351744D02*\nD03*\nX156744Y346744D02*\nD03*\nY351744D02*\nD03*\nX161744Y346744D02*\nD03*\nX321744D02*\nD03*\nY351744D02*\nD03*\nX326744Y346744D02*\nD03*\nY351744D02*\nD03*\nX331744Y346744D02*\nD03*\nY351744D02*\nD03*\nX336744Y346744D02*\nD03*\nY351744D02*\nD03*\nX341744Y346744D02*\nD03*\nD106*\nX161744Y171744D02*\nD03*\nX341744D02*\nD03*\nX161744Y351744D02*\nD03*\nX341744D02*\nD03*\nD107*\nX205244Y252744D02*\nD03*\nX283500Y161200D02*\nD03*\nX385244Y252744D02*\nD03*\nX463500Y161200D02*\nD03*\nX205244Y432744D02*\nD03*\nX283500Y341200D02*\nD03*\nX385244Y432744D02*\nD03*\nX463500Y341200D02*\nD03*\nD108*\nX235744Y276244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nX235744Y456244D02*\nD03*\nX215744D02*\nD03*\nX415744D02*\nD03*\nX395744D02*\nD03*\nM02*\n"
  },
  {
    "path": "hardware/panel.LDP",
    "content": "Layer Pairs Export File for PCB: C:\\Users\\TSTERN\\Google Drive\\projects\\Stepper_feedback\\hardware\\NZS_A4954_R2.0\\panel.PcbDoc\nLayersSetName=Top_Bot_Thru_Holes|DrillFile=panel-roundholes.txt|DrillLayers=gtl,gbl\nLayersSetName=Top_Bot_Slot_Holes|DrillFile=panel-slotholes.txt|DrillLayers=gtl,gbl\n"
  },
  {
    "path": "hardware/panel.REP",
    "content": "*************************************************************\nFileName = panel.GBR\nAutoAperture = True\n*************************************************************\nGenerating : Top Layer\n      File : panel.GTL\n\n    Adding Layer      : Top Layer\n\n    Adding Layer      : Multi-Layer\n\n\nUsed DCodes :\n    D10\n    D11\n    D12\n    D13\n    D14\n    D15\n    D16\n    D17\n    D18\n    D19\n    D20\n    D21\n    D22\n    D23\n    D24\n    D25\n    D26\n    D27\n    D28\n    D29\n    D30\n    D31\n    D32\n    D33\n    D34\n    D35\n    D36\n    D37\n    D38\n    D39\n    D40\n    D41\n    D42\n    D43\n    D44\n    D45\n    D46\n    D47\n    D48\n    D49\n    D50\n    D51\n    D52\n    D53\n    D54\n    D55\n    D56\n    D57\n    D58\n    D59\n    D60\n*************************************************************\n\n*************************************************************\nGenerating : Bottom Layer\n      File : panel.GBL\n\n    Adding Layer      : Bottom Layer\n\n    Adding Layer      : Multi-Layer\n\n\nUsed DCodes :\n    D13\n    D24\n    D38\n    D40\n    D41\n    D43\n    D48\n    D49\n    D50\n    D51\n    D52\n    D53\n    D54\n    D55\n    D56\n    D57\n    D58\n    D59\n    D60\n    D61\n    D62\n    D63\n    D64\n    D65\n    D66\n*************************************************************\n\n*************************************************************\nGenerating : Bottom Pad Master\n      File : panel.GPB\n\n    Adding Layer      : Bottom Layer\n\n    Adding Layer      : Multi-Layer\n\n\nUsed DCodes :\n    D13\n    D24\n    D49\n    D50\n    D51\n    D52\n    D53\n    D54\n    D55\n    D56\n    D57\n    D58\n    D61\n    D62\n    D63\n    D64\n    D65\n    D66\n*************************************************************\n\n*************************************************************\nGenerating : Top Pad Master\n      File : panel.GPT\n\n    Adding Layer      : Top Layer\n\n    Adding Layer      : Multi-Layer\n\n\nUsed DCodes :\n    D10\n    D11\n    D12\n    D13\n    D14\n    D15\n    D16\n    D17\n    D18\n    D19\n    D20\n    D21\n    D22\n    D23\n    D24\n    D25\n    D26\n    D27\n    D28\n    D29\n    D30\n    D31\n    D32\n    D33\n    D34\n    D35\n    D36\n    D37\n    D49\n    D50\n    D51\n    D52\n    D53\n    D54\n    D55\n    D56\n    D57\n    D58\n*************************************************************\n\n*************************************************************\nGenerating : Top Overlay\n      File : panel.GTO\n\n    Adding Layer      : Top Overlay\n\n\nUsed DCodes :\n    D43\n    D45\n    D67\n    D68\n    D69\n    D70\n*************************************************************\n\n*************************************************************\nGenerating : Top Paste\n      File : panel.GTP\n\n    Adding Layer      : Top Paste\n\n    Adding Layer      : Top Layer\n\n    Adding Layer      : Multi-Layer\n\n\nUsed DCodes :\n    D10\n    D11\n    D12\n    D13\n    D14\n    D15\n    D16\n    D17\n    D18\n    D19\n    D20\n    D21\n    D22\n    D23\n    D24\n    D25\n    D26\n    D27\n    D28\n    D29\n    D30\n    D31\n    D32\n    D33\n    D34\n    D35\n    D36\n    D37\n    D43\n*************************************************************\n\n*************************************************************\nGenerating : Top Solder\n      File : panel.GTS\n\n    Adding Layer      : Top Solder\n\n    Adding Layer      : Top Layer\n\n    Adding Layer      : Multi-Layer\n\n\nUsed DCodes :\n    D43\n    D71\n    D72\n    D73\n    D74\n    D75\n    D76\n    D77\n    D78\n    D79\n    D80\n    D81\n    D82\n    D83\n    D84\n    D85\n    D86\n    D87\n    D88\n    D89\n    D90\n    D91\n    D92\n    D93\n    D94\n    D95\n    D96\n    D97\n    D98\n    D99\n    D100\n    D101\n    D102\n    D103\n    D104\n    D105\n    D106\n    D107\n    D108\n*************************************************************\n\n*************************************************************\nGenerating : Bottom Solder\n      File : panel.GBS\n\n    Adding Layer      : Bottom Solder\n\n    Adding Layer      : Bottom Layer\n\n    Adding Layer      : Multi-Layer\n\n\nUsed DCodes :\n    D43\n    D74\n    D85\n    D99\n    D100\n    D101\n    D102\n    D103\n    D104\n    D105\n    D106\n    D107\n    D108\n    D109\n    D110\n    D111\n    D112\n    D113\n    D114\n    D115\n*************************************************************\n\n*************************************************************\nGenerating : Bottom Paste\n      File : panel.GBP\n\n    Adding Layer      : Bottom Paste\n\n    Adding Layer      : Bottom Layer\n\n    Adding Layer      : Multi-Layer\n\n\nUsed DCodes :\n    D13\n    D24\n    D43\n    D61\n    D62\n    D63\n    D64\n    D65\n    D66\n*************************************************************\n\n*************************************************************\nGenerating : Bottom Overlay\n      File : panel.GBO\n\n    Adding Layer      : Bottom Overlay\n\n\nUsed DCodes :\n    D43\n    D67\n    D69\n    D116\n*************************************************************\n\n*************************************************************\nGenerating : Keep-Out Layer\n      File : panel.GKO\n\n    Adding Layer      : Keep-Out Layer\n\n\nUsed DCodes :\n    D38\n    D45\n*************************************************************\n\n*************************************************************\nGenerating : Mechanical 1\n      File : panel.GM1\n\n    Adding Layer      : Mechanical 1\n\n\nUsed DCodes :\n*************************************************************\n\n*************************************************************\nGenerating : Mechanical 3\n      File : panel.GM3\n\n    Adding Layer      : Mechanical 3\n\n\nUsed DCodes :\n    D40\n    D117\n*************************************************************\n\n*************************************************************\nGenerating : Mechanical 2\n      File : panel.GM2\n\n    Adding Layer      : Mechanical 2\n\n\nUsed DCodes :\n    D68\n*************************************************************\n\n*************************************************************\nGenerating : Mechanical 13\n      File : panel.GM13\n\n    Adding Layer      : Mechanical 13\n\n\nUsed DCodes :\n    D118\n*************************************************************\n\n*************************************************************\nGenerating : Mechanical 15\n      File : panel.GM15\n\n    Adding Layer      : Mechanical 15\n\n\nUsed DCodes :\n    D118\n    D119\n*************************************************************\n\n*************************************************************\nGenerating : Dielectric 1\n      File : panel.1\n\n    Adding Layer      : Dielectric 1\n\n\nUsed DCodes :\n*************************************************************\n\n*************************************************************\nGenerating : Multi-Layer\n      File : panel.GML\n\n    Adding Layer      : Multi-Layer\n\n\nUsed DCodes :\n    D49\n    D50\n    D51\n    D52\n    D53\n    D54\n    D55\n    D56\n    D57\n    D58\n*************************************************************\n\n*************************************************************\nGenerating : Drill Drawing\n      File : panel.GD1\n\n    Adding Drill Pair : Top Layer-Bottom Layer\n\n    Adding Layer      : Drill Drawing\n\n\nUsed DCodes :\n    D120\n    D121\n    D122\n*************************************************************\n\n"
  },
  {
    "path": "hardware/panel.RUL",
    "content": "DRC Rules Export File for PCB: C:\\Users\\TSTERN\\Google Drive\\projects\\Stepper_feedback\\hardware\\NZS_A4954_R2.0\\panel.PcbDoc\nRuleKind=ShortCircuit|RuleName=ShortCircuit|Scope=Board|Allowed=0\nRuleKind=Clearance|RuleName=Clearance|Scope=Board|Minimum=10.00\nRuleKind=Width|RuleName=Width|Scope=Board|Minimum=10.00\nRuleKind=SolderMaskExpansion|RuleName=SolderMaskExpansion|Scope=Board|Minimum=4.00\n"
  },
  {
    "path": "hardware/panel.apr",
    "content": "D10   RECTANGULAR        31.496      35.433       0.000 FLASH     270.000\nD12   RECTANGULAR        39.370      70.866       0.000 FLASH     270.000\nD13   RECTANGULAR        31.496      33.465       0.000 FLASH      90.000\nD14   RECTANGULAR        15.748      68.898       0.000 FLASH     270.000\nD15   RECTANGULAR        47.244      94.488       0.000 FLASH     270.000\nD16   RECTANGULAR        47.244     122.047       0.000 FLASH     270.000\nD17   RECTANGULAR        47.244      70.866       0.000 FLASH       0.000\nD19   RECTANGULAR        31.496      31.496       0.000 FLASH      90.000\nD21   RECTANGULAR        27.559      51.181       0.000 FLASH      90.000\nD23   RECTANGULAR        23.622      35.433       0.000 FLASH     270.000\nD24   RECTANGULAR        35.433      29.528       0.000 FLASH       0.000\nD26   RECTANGULAR       202.756     202.756       0.000 FLASH     135.000\nD32   RECTANGULAR        66.929      39.370       0.000 FLASH     270.000\nD33   RECTANGULAR       118.110     118.110       0.000 FLASH     180.000\nD34   ROUNDED            17.716      55.118       0.000 FLASH     270.000\nD35   RECTANGULAR        17.716      55.118       0.000 FLASH     270.000\nD36   RECTANGULAR        27.559      37.402       0.000 FLASH      90.000\nD37   RECTANGULAR       125.000      45.000       0.000 FLASH       0.000\nD38   ROUNDED             6.000       6.000       0.000  LINE       0.000\nD39   ROUNDED            30.000      30.000       0.000  LINE       0.000\nD40   ROUNDED            20.000      20.000       0.000  LINE       0.000\nD41   ROUNDED            40.000      40.000       0.000  LINE       0.000\nD42   ROUNDED            16.000      16.000       0.000  LINE       0.000\nD43   ROUNDED             8.000       8.000       0.000  LINE       0.000\nD44   ROUNDED            25.000      25.000       0.000  LINE       0.000\nD45   ROUNDED            10.000      10.000       0.000  LINE       0.000\nD46   ROUNDED            50.000      50.000       0.000  LINE       0.000\nD47   ROUNDED            15.000      15.000       0.000  LINE       0.000\nD48   ROUNDED            60.000      60.000       0.000  LINE       0.000\nD49   ROUNDED            10.000      10.000       0.000 FLASH       0.000\nD50   ROUNDED            47.244      94.488       0.000 FLASH       0.000\nD51   ROUNDED            35.433      61.024       0.000 FLASH     270.000\nD52   ROUNDED            49.213      37.402       0.000 FLASH     270.000\nD53   ROUNDED            70.000      70.000       0.000 FLASH       0.000\nD54   RECTANGULAR        70.000      70.000       0.000 FLASH       0.000\nD55   ROUNDED            40.000      40.000       0.000 FLASH       0.000\nD56   RECTANGULAR        40.000      40.000       0.000 FLASH       0.000\nD57   RECTANGULAR        70.000      70.000       0.000 FLASH      90.000\nD58   ROUNDED            78.740      78.740       0.000 FLASH       0.000\nD59   ROUNDED            24.000      24.000       0.000 FLASH       0.000\nD60   ROUNDED            19.685      19.685       0.000 FLASH       0.000\nD61   RECTANGULAR        31.496      33.465       0.000 FLASH     180.000\nD62   RECTANGULAR        35.433      29.528       0.000 FLASH      90.000\nD64   RECTANGULAR        23.622      62.992       0.000 FLASH       0.000\nD65   RECTANGULAR        17.716      55.118       0.000 FLASH       0.000\nD66   ROUNDED            17.716      55.118       0.000 FLASH       0.000\nD67   ROUNDED             9.842       9.842       0.000  LINE       0.000\nD68   ROUNDED             5.000       5.000       0.000  LINE       0.000\nD69   ROUNDED             7.874       7.874       0.000  LINE       0.000\nD70   ROUNDED            14.000      14.000       0.000  LINE       0.000\nD71   RECTANGULAR        39.496      43.433       0.000 FLASH     270.000\nD73   RECTANGULAR        47.370      78.866       0.000 FLASH     270.000\nD74   RECTANGULAR        39.496      41.465       0.000 FLASH      90.000\nD75   RECTANGULAR        23.748      76.898       0.000 FLASH     270.000\nD76   RECTANGULAR        55.244     102.488       0.000 FLASH     270.000\nD77   RECTANGULAR        55.244     130.047       0.000 FLASH     270.000\nD78   RECTANGULAR        55.244      78.866       0.000 FLASH       0.000\nD80   RECTANGULAR        39.496      39.496       0.000 FLASH      90.000\nD82   RECTANGULAR        35.559      59.181       0.000 FLASH      90.000\nD84   RECTANGULAR        31.622      43.433       0.000 FLASH     270.000\nD85   RECTANGULAR        43.433      37.528       0.000 FLASH       0.000\nD87   RECTANGULAR       210.756     210.756       0.000 FLASH     135.000\nD93   RECTANGULAR        74.929      47.370       0.000 FLASH     270.000\nD94   RECTANGULAR       126.110     126.110       0.000 FLASH     180.000\nD95   ROUNDED            25.716      63.118       0.000 FLASH     270.000\nD96   RECTANGULAR        25.716      63.118       0.000 FLASH     270.000\nD97   RECTANGULAR        35.559      45.402       0.000 FLASH      90.000\nD98   RECTANGULAR       133.000      53.000       0.000 FLASH       0.000\nD99   ROUNDED            18.000      18.000       0.000 FLASH       0.000\nD100  ROUNDED            55.244     102.488       0.000 FLASH       0.000\nD101  ROUNDED            43.433      69.024       0.000 FLASH     270.000\nD102  ROUNDED            57.213      45.402       0.000 FLASH     270.000\nD103  ROUNDED            78.000      78.000       0.000 FLASH       0.000\nD104  RECTANGULAR        78.000      78.000       0.000 FLASH       0.000\nD105  ROUNDED            48.000      48.000       0.000 FLASH       0.000\nD106  RECTANGULAR        48.000      48.000       0.000 FLASH       0.000\nD107  RECTANGULAR        78.000      78.000       0.000 FLASH      90.000\nD108  ROUNDED            86.740      86.740       0.000 FLASH       0.000\nD109  RECTANGULAR       130.000     250.000       0.000 FLASH       0.000\nD110  RECTANGULAR        39.496      41.465       0.000 FLASH     180.000\nD111  RECTANGULAR        43.433      37.528       0.000 FLASH      90.000\nD113  RECTANGULAR        31.622      70.992       0.000 FLASH       0.000\nD114  RECTANGULAR        25.716      63.118       0.000 FLASH       0.000\nD115  ROUNDED            25.716      63.118       0.000 FLASH       0.000\nD116  ROUNDED            23.622      23.622       0.000  LINE       0.000\nD117  ROUNDED            47.244      47.244       0.000  LINE       0.000\nD118  ROUNDED             3.937       3.937       0.000  LINE       0.000\nD119  ROUNDED             1.968       1.968       0.000  LINE       0.000\nD120  ROUNDED             2.000       2.000       0.000  LINE       0.000\nD121  ROUNDED             2.667       2.667       0.000  LINE       0.000\nD122  ROUNDED             1.333       1.333       0.000  LINE       0.000\n"
  }
]